|
|
@@ -170,6 +170,80 @@ rmdir /S /Q "outputs\rudong\windscada\_pre_rebuild_20260911"
|
|
|
|
|
|
期望: `状态 degraded offline 模块 5/7 ok`, 并列出 DOWN 的项。
|
|
|
|
|
|
+## 5b. 清掉产物 / 再重算(完整操作, 2026-09-12 实测)
|
|
|
+
|
|
|
+### 清掉产物(人工检查空状态用)
|
|
|
+
|
|
|
+```bat
|
|
|
+:: ① 清掉 (整体挪走, 不是删除 —— 一条命令能还原)
|
|
|
+.venv\Scripts\python.exe scripts\products_state.py --off --archive-old
|
|
|
+:: 暂存区里已有上一代产物时**必须加 --archive-old**: 否则会被拦住(见下), 因为挪走的落点是
|
|
|
+:: _products_off\<场>\<目录>, 那里已有同名目录时 shutil.move 会嵌套成 windscada\windscada\,
|
|
|
+:: 之后 --on 就把两代混在一起还原。加了它 = 自动把上一代存档到 _products_off_prev_<时间戳>\
|
|
|
+:: (随包基线 _baseline_kept\ 留在原地, rebuild_from_raw --verify 还要用)。
|
|
|
+
|
|
|
+:: ② 重启服务 (产物没了必须重启, CMS 等是启动时加载数据)
|
|
|
+.venv\Scripts\python.exe guanlan.py stop
|
|
|
+.venv\Scripts\python.exe guanlan.py serve
|
|
|
+
|
|
|
+:: ③ 看空状态: / 门户仍 200 (门户在 release\, 不是产物); /cms/ 变 503;
|
|
|
+:: /detail/api/fleet 回 err=no_products; 维护页「数据层」各项 条数=0 / 存在=False
|
|
|
+
|
|
|
+:: ④ 还原
|
|
|
+.venv\Scripts\python.exe scripts\products_state.py --on
|
|
|
+.venv\Scripts\python.exe guanlan.py stop ; .venv\Scripts\python.exe guanlan.py serve
|
|
|
+```
|
|
|
+
|
|
|
+**不想用开关也行**(整目录搬走, 最直观):
|
|
|
+
|
|
|
+```bat
|
|
|
+Move-Item outputs\rudong F:\temp\products_off_20260912 :: 清
|
|
|
+.venv\Scripts\python.exe guanlan.py stop ; .venv\Scripts\python.exe guanlan.py serve
|
|
|
+Move-Item F:\temp\products_off_20260912 outputs\rudong :: 还原
|
|
|
+```
|
|
|
+
|
|
|
+> 清的是 `outputs\<场>\`(产物仓), **不动** `data\raw\`(现场数据)、`release\`(门户外壳与交付件)、
|
|
|
+> `logs\`/`run\`(运行期)。所以清完门户首页照旧打开 —— 那是静态交付页, 本来就不读产物。
|
|
|
+
|
|
|
+### 清完再重算(从零)
|
|
|
+
|
|
|
+```bat
|
|
|
+:: ① 放数据 (现场包 → 约定目录; 同尺寸自动跳过)
|
|
|
+.venv\Scripts\python.exe scripts\place_raw_data.py --src F:\temp\如东风场数据 --scope full
|
|
|
+
|
|
|
+:: ② 台账 + SCADA 侧 10 个构建器 (后者约 15 分钟)
|
|
|
+.venv\Scripts\python.exe scripts\rebuild_from_raw.py
|
|
|
+.venv\Scripts\python.exe scripts\rebuild_from_raw.py --scada
|
|
|
+
|
|
|
+:: ③ 月度派生件 (能从 raw 重算的那批; --verify 先看与随包件逐值是否一致)
|
|
|
+.venv\Scripts\python.exe scripts\windscada_monthly_build.py --verify
|
|
|
+.venv\Scripts\python.exe scripts\windscada_monthly_build.py
|
|
|
+
|
|
|
+:: ④ 本体层 (技术资料须已放好)
|
|
|
+.venv\Scripts\python.exe -m src.ontology.kb_ingest
|
|
|
+.venv\Scripts\python.exe -m src.ontology.populate
|
|
|
+.venv\Scripts\python.exe -m src.ontology.chain_ingest :: 需 windscada 服务在跑
|
|
|
+.venv\Scripts\python.exe -m src.ontology.trend_ingest
|
|
|
+.venv\Scripts\python.exe -c "from src.ontology import retrieval as R; R.build(use_vec=False)"
|
|
|
+.venv\Scripts\python.exe -c "from src.ontology.maintenance import refresh_params as f; print(f())"
|
|
|
+.venv\Scripts\python.exe -m src.ontology.audit :: 期望 0 问题
|
|
|
+
|
|
|
+:: ⑤ "包内没有生成端"的那批: 从随包件补齐(只补缺件, 不动上面重算出来的), 并写来源台账
|
|
|
+.venv\Scripts\python.exe scripts\products_restore_missing.py --dry-run
|
|
|
+.venv\Scripts\python.exe scripts\products_restore_missing.py
|
|
|
+
|
|
|
+:: ⑥ 重启 + 核验
|
|
|
+.venv\Scripts\python.exe guanlan.py stop ; .venv\Scripts\python.exe guanlan.py serve
|
|
|
+.venv\Scripts\python.exe -m src.ontology.maintenance :: 数据层/机理层的条数与末次更新
|
|
|
+```
|
|
|
+
|
|
|
+**只想要"能打开页面"的最小集**: ② 的 `rebuild_from_raw.py` + ③ + ⑤ 三步即可
|
|
|
+(⑤ 把没有生成端的件补上, 页面就有数); ① 只在换了现场包时需要。
|
|
|
+
|
|
|
+**验收锚点**: `outputs\rudong\windscada\alarms.parquet` 39211 行 ·
|
|
|
+`temp_monthly.parquet` 19494 行(与随包件逐值一致) · 本体 `objects.json` 9701 对象 / audit 0 问题 ·
|
|
|
+`_provenance.json` 记着每件是 raw 重算还是随包补齐。
|
|
|
+
|
|
|
## 6. 怎么看"数据真的进去了"
|
|
|
|
|
|
**命令行(不开浏览器)**:
|