# -*- coding: utf-8 -*- """ 按 2026-09-14 最新代码核对结论,刷新「Release产互联/待确认」交付文档: 1. 重新生成 系统集成、运营改善 两个模块的 需求/蓝图/详设/手册(内容修订,升 V0.5)。 2. 新生成 九宫格智慧运营看板《详细设计说明书》《用户操作手册》(初版 V0.1,补齐四大文档)。 3. 用仓库 9/14 版《Ai-DOP第三方对接业务数据详表-业务页.docx》覆盖待确认目录旧版。 旧版文件移入 待确认/_backup_V0.4_20260904/ 备份。 """ from __future__ import annotations import shutil import sys from pathlib import Path HERE = Path(__file__).resolve().parent sys.path.insert(0, str(HERE)) from _gen_s9_diag_impr_int_delivery import write_brd, write_bbp, set_cell_text # noqa: E402 from _gen_delivery_sys_docs import write_module_dds, write_module_um # noqa: E402 from _gen_s9_modules_data import MODULES # noqa: E402 STAGING = HERE / "_tmp_docx_out" / "v05_release_candidate" TARGET = Path(r"C:\Users\skygu\OneDrive\Projects\AIDOP\项目\项目管理\产互联项目管理\交付文档\Release产互联\待确认") BACKUP = TARGET / "_backup_V0.4_20260904" REPO_DETAIL_DOCX = HERE / "plan" / "系统集成" / "Ai-DOP第三方对接业务数据详表-业务页.docx" TODAY = "2026-09-14" # (生成键, 文档类别, 生成文件名, 交付文件名, 版本记录变更说明) JOBS = [ ("系统集成", "brd", "系统集成业务需求描述.docx", "系统集成业务需求描述-V0.5.docx", "按最新代码核对:补充第三方标准 API 推数入站(方式丙);日志查询菜单名称对齐系统"), ("系统集成", "bbp", "系统集成模块蓝图设计方案.docx", "系统集成模块蓝图设计方案-V0.5.docx", "按最新代码核对:修正日志查询路由;补充方式丙推数入站接入方式"), ("系统集成", "dds", "系统集成模块详细设计说明书.docx", "系统集成模块详细设计说明书-V0.5.docx", "按最新代码核对:接口设计补充方式丙推数入站;模块检查逻辑同步"), ("系统集成", "um", "系统集成-用户操作手册.docx", "系统集成-用户操作手册-V0.5.docx", "按最新代码核对:补充方式丙推数入站运维提示"), ("运营改善", "brd", "运营改善业务需求描述.docx", "运营改善业务需求描述-V0.5.docx", "按最新代码核对:补充改善计划台账入口"), ("运营改善", "bbp", "运营改善模块蓝图设计方案.docx", "运营改善模块蓝图设计方案-V0.5.docx", "按最新代码核对:补充改善计划台账入口"), ("运营改善", "dds", "运营改善模块详细设计说明书.docx", "运营改善模块详细设计说明书-V0.5.docx", "按最新代码核对:补充改善计划台账入口"), ("运营改善", "um", "运营改善-用户操作手册.docx", "运营改善-用户操作手册-V0.5.docx", "按最新代码核对:补充改善计划台账入口"), ] # 九宫格新文档(初版 V0.1) NEW_JOBS = [ ("S9", "dds", "九宫格智慧运营看板模块详细设计说明书.docx", "九宫格智慧运营看板模块详细设计说明书-V0.1.docx"), ("S9", "um", "九宫格智慧运营看板-用户操作手册.docx", "九宫格智慧运营看板-用户操作手册-V0.1.docx"), ] def find_cover_table(doc): for t in doc.tables: if t.rows and t.rows[0].cells[0].text.strip() == "文档编号": return t return None def find_version_table(doc): for t in doc.tables: hdr = [c.text.strip() for c in t.rows[0].cells] if hdr[:4] == ["日期", "版本", "修订人", "变更说明"]: return t return None def set_cover(doc, version: str, date: str): t = find_cover_table(doc) assert t is not None, "未找到封面信息表" for row in t.rows: key = row.cells[0].text.strip() if key == "版本": set_cell_text(row.cells[1], version, center=True) elif key == "编制日期": set_cell_text(row.cells[1], date, center=True) def bump_version(doc, note: str): set_cover(doc, "V0.5", TODAY) t = find_version_table(doc) assert t is not None, "未找到版本记录表" row = t.add_row() for c, val in enumerate((TODAY, "V0.5", "智造易项目组", note)): set_cell_text(row.cells[c], val, center=True) def reset_version_new_doc(doc): set_cover(doc, "V0.1", TODAY) t = find_version_table(doc) assert t is not None, "未找到版本记录表" # 生成器写入的 V0.1~V0.4 历史行对本新文档不成立,整体替换为单一初版行 for row in list(t.rows)[1:]: t._tbl.remove(row._tr) row = t.add_row() for c, val in enumerate((TODAY, "V0.1", "智造易项目组", "初版建立(按最新代码补齐九宫格模块四大文档)")): set_cell_text(row.cells[c], val, center=True) def generate(kind: str, key: str, staging_name: str) -> Path: mod = MODULES[key] out = STAGING / staging_name if kind == "brd": write_brd(mod, out) elif kind == "bbp": write_bbp(mod, out) elif kind == "dds": write_module_dds(key, mod, dest=out) elif kind == "um": write_module_um(key, mod, dest=out) else: raise ValueError(kind) return out def main(): from docx import Document STAGING.mkdir(parents=True, exist_ok=True) BACKUP.mkdir(parents=True, exist_ok=True) installed = [] for key, kind, staging_name, final_name, note in JOBS: src = generate(kind, key, staging_name) doc = Document(str(src)) bump_version(doc, note) doc.save(str(src)) old = TARGET / final_name.replace("-V0.5.docx", "-V0.4.docx") if old.exists(): shutil.move(str(old), str(BACKUP / old.name)) shutil.copy2(str(src), str(TARGET / final_name)) installed.append(final_name) print("V0.5", final_name) for key, kind, staging_name, final_name in NEW_JOBS: src = generate(kind, key, staging_name) doc = Document(str(src)) reset_version_new_doc(doc) doc.save(str(src)) shutil.copy2(str(src), str(TARGET / final_name)) installed.append(final_name) print("V0.1", final_name) # 第三方对接业务数据详表:用仓库 9/14 版覆盖(含方式丙 entityCode 勾稽) detail_target = TARGET / REPO_DETAIL_DOCX.name if detail_target.exists(): shutil.move(str(detail_target), str(BACKUP / detail_target.name)) shutil.copy2(str(REPO_DETAIL_DOCX), str(detail_target)) installed.append(REPO_DETAIL_DOCX.name + "(同步仓库 2026-09-14 版)") print("SYNC", REPO_DETAIL_DOCX.name) print("DONE", len(installed), "files") if __name__ == "__main__": main()