Files
auto-solution/scripts/spec_srs_builder.py
2026-05-07 15:40:57 +08:00

216 lines
13 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# -*- coding: utf-8 -*-
"""
【已废弃】曾用 python-docx 清空正文再写入,会破坏与 xxx 模板一致的版式与目录域。
请改用python build_spec_documents.py基于 OOXML 仅改 w:t保留块级结构
本文件保留仅为历史参考,不再被 build_spec_documents 引用。
"""
from docx import Document
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.oxml.ns import qn
from docx.oxml import OxmlElement
def _set_cell_shade(cell, fill="D9D9D9"):
"""表头灰底(可选)"""
tc = cell._tc
tcPr = tc.get_or_add_tcPr()
shd = OxmlElement("w:shd")
shd.set(qn("w:fill"), fill)
tcPr.append(shd)
def _add_table(doc, headers, rows):
t = doc.add_table(rows=1 + len(rows), cols=len(headers))
t.style = "Table Grid"
for j, h in enumerate(headers):
t.rows[0].cells[j].text = h
_set_cell_shade(t.rows[0].cells[j])
for i, row in enumerate(rows):
for j, val in enumerate(row):
t.rows[i + 1].cells[j].text = str(val)
doc.add_paragraph("")
def clear_body(doc):
body = doc._body._body
for child in list(body):
if "sectPr" in child.tag:
continue
body.remove(child)
def build_srs_document(doc):
"""向已清空正文的 Document 中写入软件需求(方案自动化生成)。"""
t = doc.add_paragraph("方案自动化生成系统")
t.alignment = WD_ALIGN_PARAGRAPH.CENTER
try:
t.runs[0].font.size = t.runs[0].font.size
except Exception:
pass
doc.add_paragraph("软件需求说明").alignment = WD_ALIGN_PARAGRAPH.CENTER
doc.add_paragraph("")
doc.add_heading("1 方案自动化生成系统软件需求", level=1)
doc.add_heading("1.1 方案自动化生成系统CSCI能力需求", level=2)
intro = (
"方案自动化生成系统(软件版本 3.9.1Maven 工程名 auto-solution由管理端服务子系统、"
"核心框架子模块、通用基础子模块、系统管理子模块、行为树业务子模块、仿真场景子模块、"
"规则与火力业务子模块、算法脚本子模块、定时任务子模块、代码生成子模块等共同组成;"
"其中业务数据访问基于 MyBatis服务入口为 Spring Boot 应用,默认 HTTP 服务端口 1777以 application.yml 为准)。\n"
"系统能力分为两类A 类为「建模器modeler 目录)已调用的 HTTP 接口」所支撑的功能;"
"B 类为「管理端/扩展或运维向接口,当前在建模器中未作为页面功能接入」所支撑的能力,仍由同一后端提供。"
"本需求说明中凡涉及具体 URL 的,均与 com.solution.web.controller 及 modeler 下实际请求一致。"
)
doc.add_paragraph(intro)
doc.add_paragraph("系统逻辑范围示意如下(与软设中体系结构一致):")
doc.add_paragraph("图1 方案自动化生成系统软件组成及能力范围A/B 类划分)", style="Caption")
cap = (
"1行为树与节点建模提供行为树、节点实例、节点连接、节点参数、节点模板、模板参数定义等维护与查询"
"支撑建模器行为树设计页;对应 A 类接口 /api/system/behaviortree、/api/system/treenodeinstance 等。\n"
"2仿真场景与平台通信提供仿真场景Afsim 场景)维护、场景下行为树列表、平台间通信关系、"
"场景下带组件的平台信息查询;对应 A 类接口 /api/system/scene、/api/system/firerule/platforms 等。\n"
"3规则与火力提供火力类规则主数据及规则配置含图谱、四块图、字典与参数元数据"
"对应 A 类 /api/system/rule 及 /api/system/rule/config 等。\n"
"4算法脚本提供算法登记、运行外部 Python 进程(具体解释器路径以系统实现为准);"
"对应 A 类 /api/algo/algorithm。\n"
"5身份与系统管理提供登录、会话、菜单路由与完整后台用户/角色/部门/岗位/字典/通知/参数/监控等;"
"其中登录与 /getInfo 为 modeling 所依赖,其余管理项多为 B 类。"
)
doc.add_paragraph(cap)
doc.add_paragraph("方案自动化生成系统软件 CSCI 能力如表1 归纳。")
doc.add_paragraph("表1 方案自动化生成系统软件CSCI 能力表", style="Caption")
_add_table(
doc,
["子系统/模块(中文名)", "主要能力", "A/B 类", "说明"],
[
["管理端服务子系统", "统一发布 REST 接口、Swagger 文档、全局异常与权限控制", "A/B", "依赖核心框架、聚合各子模块"],
["核心框架子模块", "Spring Security、JWT、Redis、MyBatis、数据源、切面日志等", "B", "为全部接口提供横切能力"],
["系统管理子模块", "组织与用户、角色菜单、日志与在线用户等", "A登录/会话)+B", "建模器主要使用登录、取用户信息"],
["行为树业务子模块", "行为树、节点、连接、参数、命令字典等", "A", "与 designer 等页面深度对接"],
["仿真场景子模块", "场景 CRUD、场景-树、场景-通信关系", "A", "与 communication 场景页对接"],
["规则与火力业务子模块", "Drools/规则配置、火力规则、平台/组件元数据", "A+B", "A 为规则与配置B 为规则执行/武器等未接建模器接口"],
["算法脚本子模块", "算法配置、脚本路径、执行 Python", "A", "algorithm 管理页"],
["定时任务子模块", "Quartz 任务、任务日志", "B", "接口位于 /monitor/job、/monitor/jobLog"],
["代码生成子模块", "库表元数据、Velocity 代码生成", "B", "接口 /tool/gen"],
],
)
# 1.1.1
doc.add_heading("1.1.1 身份、会话与基础访问(方自-需求-0101", level=3)
doc.add_paragraph("功能描述")
doc.add_paragraph(
"为建模器提供用户登录、会话与权限所需的基础能力POST /login 提交账密;"
"GET /getInfo 在携带令牌时返回用户、角色、权限等POST /logout 登出(与 Spring Security 实现一致)。"
)
doc.add_paragraph("执行逻辑")
doc.add_paragraph("1功能输入\n用户名/密码、令牌(请求头中携带)。")
doc.add_paragraph("2功能输出\n令牌、用户基本信息、角色权限集合、路由/菜单类数据由后端服务返回。")
doc.add_paragraph("3主要步骤\n用户在前端输入凭证→后端认证→建立会话/签发令牌→后续 /api 与 /getInfo 携带令牌访问。")
_add_table(doc, ["序号", "数据项", "类型", "约束"], [["1", "用户登录表单", "JSON", "A 类"]])
# 1.1.2
doc.add_heading("1.1.2 行为树与节点全量数据访问(方自-需求-0102", level=3)
doc.add_paragraph("功能描述")
doc.add_paragraph(
"按树标识分页或条件查询行为树;按平台查询树;查询下属平台列表;新增、更新、删除、复制行为树;"
"查询节点实例、节点连接、节点参数、节点模板、模板参数定义。对应 GET/POST/PUT/DELETE 与 /api/system/behaviortree、"
"/api/system/treenodeinstance、/api/system/nodeconnection、/api/system/nodeparameter、/api/system/nodetemplate、"
"/api/system/templateparameterdef 等路径(以 Controller 映射为准,建模器以 designer/api 调用)。"
)
doc.add_paragraph("数据需求:行为树主键、平台标识、树名称、根实例信息、边表顺序、参数字段等,均来自各业务表,字段名与实体类/Mapper 一致;建模器以分页参数 pageNum、pageSize 拉取列表与明细。")
_add_table(doc, ["序号", "关键数据", "类型", "说明"], [
["1", "树主键 id", "Long", "A"],
["2", "树 platformId", "Number", "与场景、平台选择联动"],
])
# 1.1.3
doc.add_heading("1.1.3 仿真场景与平台通信关系(方自-需求-0103", level=3)
doc.add_paragraph("功能描述")
doc.add_paragraph(
"提供场景列表与详情、保存场景配置、查询某场景下全部行为树、某场景下平台通信关系、"
"为指定场景 id 拉取带组件的平台信息GET /api/system/firerule/platforms/{scenarioId}"
"并支持在保存场景时写入通信图 JSON 等(以 SceneService、Scene 实体与前端字段为准)。"
)
doc.add_paragraph(
"重要说明:当前 modeler 中“删除”操作实现为 DELETE 调用 /api/system/behaviortree/{id},与按场景删场景语义在字面上可能不一致,"
"本需求以当前代码与软设注记为准,由实施时统一修正或保留。"
)
_add_table(doc, ["序号", "路径", "HTTP 方法", "A/B"], [
["1", "/api/system/scene/list", "GET", "A"],
["2", "/api/system/scene/{id}", "GET", "A"],
["3", "/api/system/scene/saveSceneConfig", "POST", "A"],
["4", "/api/system/scene/getAllTree/{id}", "GET", "A"],
["5", "/api/system/scene/getAllRelation/{id}", "GET", "A"],
])
# 1.1.4
doc.add_heading("1.1.4 规则、火力与规则配置(方自-需求-0104", level=3)
doc.add_paragraph("功能描述")
doc.add_paragraph(
"规则聚合(规则配置)能力:分页列表、按 ruleCode 查询、知识图谱、四块图、字典、参数元数据、增删改规则聚合等。"
"对应 **当前已启用** 的后端路径为 /api/system/rule/config 及其子路径(见 RuleController 未注释部分)。"
)
doc.add_paragraph(
"重要说明火力规则「主表」CRUD 映射(如 GET /api/system/rule/list、POST/PUT /api/system/rule、DELETE /api/system/rule/{ids}"
"在 RuleController 源码中处于块注释内,**当前版本未作为有效接口发布**。建模器 rule/api 若仍请求上述路径,需以取消注释后的代码或分支为准;"
"本需求对「规则配置」类接口按已启用代码描述。"
)
doc.add_paragraph(
"B 类POST /api/system/firerule/start、GET /api/system/firerule/weapon、GET /api/system/firerule/comm、POST /api/system/firerule/rule、"
"以及平台列表等由 FireRuleController 提供;其中建模器已调用部分 platforms 路径,其余为扩展。"
)
# 1.1.5
doc.add_heading("1.1.5 算法与扩展运维(方自-需求-0105", level=3)
doc.add_paragraph("功能描述")
doc.add_paragraph(
"A 类:/api/algo/algorithm 的列表、导出、单条、增删改及 /run 运行脚本。"
"B 类:系统内用户/角色/菜单/部门/岗位/字典/参数/通知、在线、登录/操作日志、服务与缓存监控、"
"定时任务与任务日志、代码生成、文件上传/下载、开发用 Test 接口、验证码等。"
)
doc.add_heading("1.2 非功能需求(与实现一致)", level=2)
doc.add_paragraph("安全性")
doc.add_paragraph(
"采用 Spring Security 与 JWT 过滤器;敏感操作可结合 @PreAuthorize 与权限字;"
"密码错误次数与锁定时长由 application.yml 中 user.password 控制;"
"XSS/重复提交等可依赖 common 与 framework 中已有过滤器/切面(以实际启用类为准)。"
)
doc.add_paragraph("性能与可扩展性")
doc.add_paragraph(
"服务使用内嵌 Tomcat线程与连接数可在 application.yml 的 server.tomcat 中调优;"
"数据库连接池为 Druid详细见 application-druid.yml 与 druid 监控;"
"业务列表接口使用 PageHelper 分页,前端传 pageNum、pageSize。"
)
doc.add_paragraph("可维护性与运行环境")
doc.add_paragraph(
"运行需 JDK 8+(工程编译配置以根 pom 为准、MySQL 与 Redis 可连;"
"建模器为 Vite+Vue 独立工程,与后端分开发布;开发态通过代理对接后端 1777 端口。",
)
doc.add_paragraph("日志与审计")
doc.add_paragraph(
"可启用操作日志、登录日志等(对应 /monitor/operlog、/monitor/logininfor为 B 类能力;"
"与若依系实现一致。",
)
doc.add_heading("2 合格性规定", level=1)
doc.add_paragraph(
"以本系统源代码与可运行环境为准A 类需求以建模器联调能完整走通对应接口为合格;"
"B 类需求以 Swagger/接口测试可访问、服务启动无错误、与数据库和 Redis 配置一致为合格;"
"安全上须满足本系统所采用的 Spring Security、JWT 与配置项的约束。"
)
doc.add_heading("3 需求追溯", level=1)
doc.add_paragraph(
"本版本不展开《正向/逆向需求追溯表》细化填写;在工程上会采用需求标识(方自-需求-xxxx与软设中设计标识一一在文字中对应说明。"
)
doc.add_page_break()