# 开发方案(v4.0:依据 PRD v1.24) > 本文整合截至 CHG-025 的全部决策:**数值走表、文档走 MD 文件流、状态字段可查询化**。 > 一期 W≈1~2 人日(仅 1 列);二期立项评估;三期立项评估+口径锁定。 ## 0. 文档信息 | 字段 | 内容 | |---|---| | 版本 | v4.0 | | 状态 | 评审中 | | 作者 | AI(pmassist/tgassist 流程产出) | | 创建日期 | 2026-07-23 | | 依据 | outputs/prd.md v1.24 | ### 变更记录 | 版本 | 日期 | 变更编号 | 变更说明 | |---|---|---|---| | v4.0 | 2026-07-23 | — | 基于 PRD v1.24 全量重生成(取代 v3.x:融入 CHG-014 MD 文件流、CHG-018 zt_file.url、CHG-019 砍 zt_task_extend、CHG-020 zt_meeting.url、CHG-021~025 zt_story 7 url 列+code_review_status+测试 4 文档字段) | --- ## 1. 架构总览 ```mermaid graph LR subgraph AI框架 A1[pmassist: PRD/纪要/用例] --> M[MD 文件] A2[tgassist: 审查报告/工作日志] --> M A3[demand-assessor: 指标数值] --> N[/zt-story-expand 已有/] A4[tgassist: 任务拆分] --> T[/zt-task/aiBatchAdd 新增/] end M -->|/common/uploadBind| F[zt_file + url] F --> S[zt_story 7 url 列 + code_review_status
zt_meeting.url 自动刷新] F --> P[详情页在线渲染 MD] F --> C[FR-014 齐备核查·三期] ``` - **数值类**:zt_story_expand(已有+一期加 1 列);任务工时入 zt_task.estimate(任务级指数豁免) - **文档类**:一律 MD → zt_file(FileTypes 6 新类)→ url 直取 + 在线渲染 - **状态类**:code_review_status 随审查报告上传写入(SOP 卡点可系统强制) --- ## 2. 一期(极瘦版,W≈1~2 人日) ### 2.1 唯一 DDL(codes/zentao/sql/`20260724_alter_zt_story_expand_add_ai_rate.sql`,含说明头+回滚+可重入) ```sql SET @c := (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='zt_story_expand' AND COLUMN_NAME='ai_participation_rate'); SET @s := IF(@c=0, 'ALTER TABLE `zt_story_expand` ADD COLUMN `ai_participation_rate` VARCHAR(16) DEFAULT NULL COMMENT ''AI参与率(只存不算,口径待定)'' AFTER `ai_efficiency_coefficient`', 'SELECT 1'); PREPARE st FROM @s; EXECUTE st; DEALLOCATE PREPARE st; -- 回滚:ALTER TABLE zt_story_expand DROP COLUMN ai_participation_rate; ``` ### 2.2 实体与测试 - `ZtStoryExpand.java` 加 `private String aiParticipationRate;`(紧随 aiEfficiencyCoefficient);saveOrUpdate 自动携带,XML 不动;无新 Service/Controller - 回归测试 1 场景:saveOrUpdate 实体带 aiParticipationRate → 透传到 insert/update(JUnit5+Mockito) ### 2.3 步骤(1 人 1~2 天) D1 DDL+评审+本地执行+实体加字段 → D2 回归测试+dev_log+送审 ### 2.4 检查单 - [ ] 仅此 1 项 DDL;无计算逻辑;无 Controller 泄漏;说明头+回滚+可重入齐全;现有编译/测试不红 --- ## 3. 二期:文件流 + 接口 + 页面 + 挂钩(详细规格) ### 3.1 DDL 清单(3 个文件,均含说明头+可重入) ```sql -- ① zt_file 加访问链接 ALTER TABLE zt_file ADD COLUMN url VARCHAR(512) DEFAULT NULL COMMENT '附件访问链接' AFTER pathname; -- ② zt_meeting 加纪要链接(多份存最新) ALTER TABLE zt_meeting ADD COLUMN url VARCHAR(512) DEFAULT NULL COMMENT '会议纪要MD访问链接(最新一份)'; -- ③ zt_story 加 8 列 ALTER TABLE zt_story ADD COLUMN prd_url VARCHAR(512) DEFAULT NULL, ADD COLUMN code_review_url VARCHAR(512) DEFAULT NULL, ADD COLUMN work_log_url VARCHAR(512) DEFAULT NULL, ADD COLUMN test_case_url VARCHAR(512) DEFAULT NULL, ADD COLUMN test_report_download_url VARCHAR(512) DEFAULT NULL, ADD COLUMN test_report_submit_url VARCHAR(512) DEFAULT NULL, ADD COLUMN test_other_url VARCHAR(512) DEFAULT NULL, ADD COLUMN code_review_status VARCHAR(16) DEFAULT NULL COMMENT '审查状态 pass/reject'; ``` ### 3.2 FileTypes 扩展 6 类 + uploadBind `enums/FileTypes.java` 新增:`aiCodeReview`、`aiWorkLog`、`testCase`、`testReport`、`testReportSubmit`、`testOther`。 新增 `POST /common/uploadBind`(上传+绑定一步完成;现状 /common/upload 不写 objectType 需业务表单二次绑定,AI 纯上传无表单)。按 objectType 自动刷新主表字段: | objectType | 附件 | 自动写入 | |---|---|---| | story | PRD | zt_story.prd_url | | aiCodeReview | 审查报告 | code_review_url;**code_review_status**(报文参数或 MD 头部「结果」解析) | | aiWorkLog | 工作日志 | work_log_url | | testCase | 测试用例(下载) | test_case_url | | testReport | 报告模版(下载) | test_report_download_url | | testReportSubmit | 报告(模版填完提交) | test_report_submit_url | | testOther | 其他测试文档 | test_other_url | | meeting | 会议纪要 | zt_meeting.url(刷新为最新一份) | **MD 附件字段**:zt_file(objectType/objectID/title/pathname/url/extension/addedBy 操作人/addedDate 操作时间/extra);extra 约定:审查报告 {"round":N}、工作日志 {"logType":"8类之一"}、测试报告 {"reviewRound":N};审查报告 MD 头部约定「严重:N/错误:N」(三期取数)。 ### 3.3 MD 在线渲染 引入 markdown-it,封装 MdPreview 组件:.md 附件点击→按 url(空则 pathname 拼接)拉取→页面内渲染;其他格式维持下载;上传组件放开 .md 类型。 ### 3.4 接口(2 新增 + 2 小改 + 前置) 1. `POST /common/uploadBind`:见 3.2 2. `POST /zt-task/aiBatchAdd`: ```json {"storyId": 8319, "tasks": [ {"name": "建表与实体生成", "type": "devel", "assignedTo": "zhangsan", "aiEvaluationTime": "6", "planStartDate": "2026-07-27", "deadline": "2026-07-29"}, {"name": "接口联调测试", "type": "test", "assignedTo": "lisi", "aiEvaluationTime": "2"} ]} ``` 事务:storyId 不存在或 type 非 devel/test → 整批拒绝;同 storyId+name+type 重复 → 跳过记 skipped;建 zt_task(status=wait、create_user=`ai`、estimate=aiEvaluationTime)。响应含 taskIds:`{"code":0,"data":{"created":2,"taskIds":[12001,12002],"skipped":[]}}` 3. `ZtStoryUserServiceImpl.java:562` 附近补写 `activateddate`(1 行) 4. 鉴权**必决**(多人环境):签名/内部 token,不得裸连 5. 前置:`zt_user` 建 `ai` 账户 ### 3.5 页面改动(web_zentao) **用户需求详情**:右侧 tabs 加「需求讨论会议」——列出 zt_meeting.storyIds 含本需求的会议(主题/类型/时间/参与人/创建人),点击跳详情;查询用 FIND_IN_SET(防 12 误中 112);关系多对多。 **会议纪要页**:add/editDialog 渲染 uploads(objectType=meeting);多份 MD 按时间排列,显示操作人(addedBy)/操作时间(addedDate)/会议人(users);.md 点击 MdPreview;查看直取 zt_meeting.url(最新一份)。 **研发需求详情**(对应补充⑧,②~⑥展示位): | 区块/按钮 | 内容 | 数据 | |---|---|---| | ~~需求 ID 展示~~ | 已按用户验收反馈移除(页面顶部已有 ID+标题,冗余) | — | | 「AI 指标」区块 | 12 字段只读(含 aiParticipationRate) | zt_story_expand | | 测试用例 | 查看+下载(不上传覆盖) | zt_file(testCase)+zt_case | | 测试报告模版 | 查看+下载 | zt_file(testReport) | | 「提交测试报告」 | 上传+在线查看(**code_review_status≠pass 禁用**——SOP 卡点系统强制) | zt_file(testReportSubmit) | | 其他测试文档 | 上传+查看 | zt_file(testOther) | | 「代码审查报告」 | 上传 MD 多份(按轮次)+在线查看+**状态展示(code_review_status)** | zt_file(aiCodeReview)+zt_story | | 「工作日志」 | 上传 MD+在线查看 | zt_file(aiWorkLog) | ### 3.6 框架挂钩(upload_md.py,模式照 submit_assessment.py) ```bash python upload_md.py --story-id 8319 --type aiWorkLog --file outputs/work_log.md ``` | 触发点 | --type | |---|---| | pmassist 定稿 PRD | story | | 会议纪要产出 | meeting(objectId=meetingId) | | 代码审查每轮结束 | aiCodeReview(文件名含轮次,头部带「结果/严重/错误」) | | 各节点工作日志 | aiWorkLog | | 用例/报告模版产出 | testCase / testReport | | 测试报告提交 | testReportSubmit | | 其他测试文档 | testOther | | demand-assessor 评估完 | 维持 submit_assessment.py(数值通道已通) | 原则:产生即传、不补传;人工按钮为备选通道。 --- ## 4. 三期:绩效消费(要点,承接 v2.2 详细版) - **FR-014 判定源**:zt_case + zt_file(testReportSubmit / aiCodeReview / aiWorkLog);《AI 文档更新记录》=zt_file(aiWorkLog) 中 doc_update 类内容 - **代码质量取数**:审查报告 MD 头部「严重:N/错误:N」解析(三期前确认约定;否则人工读数) - 其余不变:三层架构(指标/规则 zt_perf_config/落库 zt_month_score)、zt_doc_check 快照、13 项自动指标取数表、6 接口 4 页面、人工评分入口、对拍验收(取 1~2 个已考核月份与线下 Excel 对拍) - 立项前锁定:口径待确认 5 项(PRD 7.3) --- ## 5. 里程碑与风险 | 里程碑 | 内容 | 时间 | |---|---|---| | M0 定稿 | PRD Final + 验收标准 | 待确认 | | M1 一期 | 1 列 DDL+实体+回归(1~2 天) | 定稿后启动 | | M2 二期 | 3 项 DDL+uploadBind+aiBatchAdd+MD 渲染+页面+挂钩+ai 账户+鉴权 | 立项评估 | | M3 三期 | 绩效(承接第 4 章) | 立项评估 | | M4 验收 | 对照 PRD+SRC-002 | — | | 风险 | 等级 | 应对 | |---|---|---| | DDL 手工执行(zt_story 8 列为核心表,需低峰+备份) | 中 | 说明头+可重入+评审 | | 接口鉴权未决(多人必决) | 中 | 二期立项前定签名/token | | MD 头部计数约定不被遵守 | 中 | 模板+上传校验提示;降级人工读数 | | 测试欠账(安全门) | 中 | 新代码强制单测 | | 挂钩漏接(多技能) | 低 | upload_md.py 单脚本+清单核对 | --- ## 6. FR 对照 一期=FR-004 部分;二期=FR-001/002/003/004/005 部分/006/008/010/011;三期=FR-012/013/014;复用=FR-009;豁免=FR-007 指数部分(CHG-019)。