diff --git a/apps/resm/migrations/0011_seed_briefing_monitors.py b/apps/resm/migrations/0011_seed_briefing_monitors.py new file mode 100644 index 0000000..ce17b1b --- /dev/null +++ b/apps/resm/migrations/0011_seed_briefing_monitors.py @@ -0,0 +1,87 @@ +"""种子数据:对接《全球材料前沿动态简报》三、前沿科技 检索清单,补充期刊 / 关键词监控。 + +简报已列但 0009 已收录的期刊(Ceramics International / CCR / CCC / Construction and +Building Materials)不重复添加;此处只补简报新增项: + +- 一级检索源(Nature/Science 系顶刊):Nature Materials、Nature Communications、 + Communications Materials、Science Advances、Nature Reviews Materials、Scientific Reports +- 二级检索源补充(建材 TOP):Engineering Structures、Materials Today +- 统一检索关键词(简报第三节):低碳水泥 / 储能建材 / 碳化机理 / 固废基胶凝 / 建材碳捕集 等 + (OpenAlex 语料为英文,故 value 用英文搜索词,name 标中文) + +期刊监控只按 ISSN 过滤、不带主题词,Nature Communications / Scientific Reports 等综合性 +大刊会拉入非建材论文;简报要求的"建材主题 + TOP5 筛选"需在下游按关键词二次筛选,本表不承担。 +全部复用每天 05:00 的 monitor_papers 周期任务(0009 已注册),无需新增调度。 +get_or_create 保证迁移可安全重跑。 +""" +from django.db import migrations +from apps.utils.snowflake import idWorker + +# 一级检索源:Nature/Science 系材料类顶刊(简报「前沿科技」一级) +JOURNALS_TIER1 = [ + ("1476-1122", "Nature Materials"), + ("2041-1723", "Nature Communications"), + ("2662-4443", "Communications Materials"), + ("2375-2548", "Science Advances"), + ("2058-8437", "Nature Reviews Materials"), + ("2045-2322", "Scientific Reports"), +] +NOTE_TIER1 = "前沿顶刊" + +# 二级检索源补充:建材 / 无机非金属国际 TOP(简报已列、0009 未收录的) +JOURNALS_TIER2 = [ + ("0141-0296", "Engineering Structures"), + ("1369-7021", "Materials Today"), +] +NOTE_TIER2 = "建材TOP顶刊" + +# 统一检索关键词(简报第三节,英文搜索词 + 中文名) +SEARCHES = [ + ("low carbon cement", "低碳水泥"), + ("energy storage building material", "储能建筑材料"), + ("concrete carbonation", "混凝土碳化机理"), + ("geopolymer", "工业固废基地聚物"), + ("supplementary cementitious material", "固废基胶凝材料"), + ("carbon capture cement", "建材碳捕集"), +] +NOTE_SEARCH = "低碳建材前沿" + + +def seed(apps, schema_editor): + PaperMonitor = apps.get_model("resm", "PaperMonitor") + for issn, name in JOURNALS_TIER1: + PaperMonitor.objects.get_or_create( + type="journal", value=issn, + defaults={"id": idWorker.get_id(), "name": name, "note": NOTE_TIER1, + "is_active": True, "days": 7}, + ) + for issn, name in JOURNALS_TIER2: + PaperMonitor.objects.get_or_create( + type="journal", value=issn, + defaults={"id": idWorker.get_id(), "name": name, "note": NOTE_TIER2, + "is_active": True, "days": 7}, + ) + for term, name in SEARCHES: + PaperMonitor.objects.get_or_create( + type="search", value=term, + defaults={"id": idWorker.get_id(), "name": name, "note": NOTE_SEARCH, + "is_active": True, "days": 7}, + ) + + +def unseed(apps, schema_editor): + PaperMonitor = apps.get_model("resm", "PaperMonitor") + journals = [i for i, _ in JOURNALS_TIER1] + [i for i, _ in JOURNALS_TIER2] + PaperMonitor.objects.filter(type="journal", value__in=journals).delete() + PaperMonitor.objects.filter(type="search", value__in=[t for t, _ in SEARCHES]).delete() + + +class Migration(migrations.Migration): + + dependencies = [ + ("resm", "0010_seed_ensure_fetch_running"), + ] + + operations = [ + migrations.RunPython(seed, unseed), + ] diff --git a/docs/全球材料前沿动态简报(1).docx b/docs/全球材料前沿动态简报(1).docx new file mode 100644 index 0000000..788f698 Binary files /dev/null and b/docs/全球材料前沿动态简报(1).docx differ