| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- # -*- 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()
|