generated from youfool-project/youfool-prj-springboot3-template
4.8 KiB
4.8 KiB
OARMS 问题修复计划
目标
修复 findings.md 中记录的 85 个检查问题(P0×17, P1×15, P2×29, P3×24),修复后执行端到端测试。
修复原则
- 按优先级串行修复:P0 → P1 → P2 → P3
- 跨模块共性问题批量处理:同一模式一次修完所有模块
- 每个批次修复后编译验证
- 全部修复后启动应用执行端到端测试
当前阶段
状态: 修复计划已制定,待执行 当前批次: —
修复批次(6 批)
批次 1:P0 — POST 接口添加 @RequestBody(17 处,10 个 Controller)
所有模块的 POST 接口对象参数添加 @RequestBody。简单参数(String id, Integer status)改为 @RequestBody Map<String, Object>。
| 文件 | 修改方法 |
|---|---|
| ScreenController | queryList, save, update, remove, toggleStatus, importData |
| LawClauseController | queryList, save, update, remove, repeal |
| MonitoringRuleController | queryList, save, update, remove, toggleStatus, exportData |
| RecordingConfigController | queryList, save, update, remove, toggleStatus |
| RecordingTaskController | queryList |
| MonitorRecordController | queryList, judgeMonitor |
| EvidenceRecordController | queryList, save |
| EvidenceRuleRelationController | relateRules |
| MonitoringClueController | queryList, generateClue |
| ClueTransferController | queryList, submitTransfer, queryPendingClues, updateTransferStatus, urgeTransfer, withdrawTransfer |
对应 Service 接口和 ServiceImpl 的 remove/toggleStatus 等方法签名也需同步调整。
批次 2:P1 — save 返回 ID + 业务逻辑修复(15 处)
2a. save() 返回新建实体 ID(7 个模块)
修改 Service 接口返回值从 RestResult<?> → RestResult<String>,ServiceImpl 中返回 entity.getId()。
| 模块 | 方法 |
|---|---|
| BS-1 | ScreenServiceImpl.save() |
| LB-1 | LawClauseServiceImpl.save() |
| MR-1 | MonitoringRuleServiceImpl.save() |
| AM-1 | RecordingConfigServiceImpl.save() |
| CW-1 | EvidenceRecordServiceImpl.save() |
| CW-3 | MonitoringClueServiceImpl.generateClue() |
| CW-4 | ClueTransferServiceImpl.submitTransfer() |
2b. 独立业务逻辑修复
| 模块 | 问题 | 修复 |
|---|---|---|
| LB-1 | repeal() 设 effectiveStatus=0 | 改为 2 |
| CW-3 | statusSummary() 仅统计 1-2 | 补充 3(处理中)、4(已办结) |
批次 3:P2 — 跨模块通用修复(29 处)
3a. Entity 添加 @DS("master")(全部 10 模块,~17 个 Entity)
所有 Entity 类添加 import com.baomidou.dynamic.datasource.annotation.DS; 和 @DS("master")。
3b. BeanUtils null 覆盖修复(5 个模块)
update 方法中,对 req 的 null 字段不覆盖 entity 已有值。改用逐字段 set 或加 null 判断。
| 模块 | 位置 |
|---|---|
| BS-1 | ScreenServiceImpl.update() |
| LB-1 | LawClauseServiceImpl.update() |
| MR-1 | MonitoringRuleServiceImpl.update() |
| AM-1 | RecordingConfigServiceImpl.update() |
| CW-4 | ClueTransferServiceImpl queryList(VO 转换) |
3c. 操作人硬编码修复(4 个模块)
从 UserBaseServiceImpl.getCurrentUser() 获取当前用户,登录失败时降级为 "系统管理员"。
| 模块 | 位置 |
|---|---|
| MR-1 | saveOperationHistory() |
| CW-2 | relateRules() — associatedBy |
| CW-3 | generateClue() — generatedBy, saveGenerationLog() |
| CW-4 | submitTransfer() — transferPerson, saveOperationLog() |
3d. 其他 P2 修复
| 模块 | 问题 | 修复 |
|---|---|---|
| BS-1 | VO Date 类型不一致 | ScreenDetailVO 改为 LocalDateTime |
| AM-3 | autoCreateEvidence 异常被吞 | 去掉 try-catch,让异常传播 |
| CW-3 | N+1 查询性能 | 批量查询替代循环 selectById |
批次 4:P3 — 代码规范修复(24 处)
4a. Controller 添加 log.info(10 个 Controller)
所有接口方法入口添加 log.info("[OK] 操作描述: key={}", value)。
4b. AssertUtils.isNotNull 清理(5+ 处)
移除 AssertUtils.isNotNull(entity, "msg") 中的 String 参数,改为纯 AssertUtils.isNotNull(entity)。
4c. 手动拼 JSON 改为工具类(MR-1, CW-3)
使用 Jackson ObjectMapper 替代 StringBuilder 拼接。
批次 5:编译验证
JAVA_HOME="/d/Program Files/Java/jdk-21.0.11+10" \
/d/apache-maven-3.9.15/bin/mvn compile -Pcompany-nexus -Dcheckstyle.skip=true
批次 6:端到端测试
- 启动应用
- 按模块逐个测试核心接口(query/save/update/remove)
- 重点验证:@RequestBody JSON body 接收、save 返回 ID、repeal 状态值
- 记录测试结果到 progress.md
修复决策
- P3 IScreenService 返回 RestResult 耦合问题:暂不修改,改动太大且不影响功能
- CW-4 部门/人员模拟数据:保留 TODO,不对接真实组织架构
- CW-1 download/play 占位路径:保留 TODO,不对接文件存储