2026-05-22 17:33:39 +08:00
|
|
|
|
# OARMS 问题修复计划
|
2026-05-18 13:42:29 +08:00
|
|
|
|
|
|
|
|
|
|
## 目标
|
2026-05-22 17:33:39 +08:00
|
|
|
|
|
|
|
|
|
|
修复 findings.md 中记录的 85 个检查问题(P0×17, P1×15, P2×29, P3×24),修复后执行端到端测试。
|
|
|
|
|
|
|
|
|
|
|
|
## 修复原则
|
|
|
|
|
|
|
|
|
|
|
|
- **按优先级串行修复**:P0 → P1 → P2 → P3
|
|
|
|
|
|
- **跨模块共性问题批量处理**:同一模式一次修完所有模块
|
|
|
|
|
|
- 每个批次修复后编译验证
|
|
|
|
|
|
- 全部修复后启动应用执行端到端测试
|
2026-05-18 13:42:29 +08:00
|
|
|
|
|
2026-05-18 15:30:53 +08:00
|
|
|
|
## 当前阶段
|
|
|
|
|
|
|
2026-05-22 17:33:39 +08:00
|
|
|
|
**状态**: 修复计划已制定,待执行
|
|
|
|
|
|
**当前批次**: —
|
|
|
|
|
|
|
|
|
|
|
|
## 修复批次(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:编译验证
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
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:端到端测试
|
|
|
|
|
|
|
|
|
|
|
|
1. 启动应用
|
|
|
|
|
|
2. 按模块逐个测试核心接口(query/save/update/remove)
|
|
|
|
|
|
3. 重点验证:@RequestBody JSON body 接收、save 返回 ID、repeal 状态值
|
|
|
|
|
|
4. 记录测试结果到 progress.md
|
|
|
|
|
|
|
|
|
|
|
|
## 修复决策
|
|
|
|
|
|
|
|
|
|
|
|
- **P3 IScreenService 返回 RestResult 耦合问题**:暂不修改,改动太大且不影响功能
|
|
|
|
|
|
- **CW-4 部门/人员模拟数据**:保留 TODO,不对接真实组织架构
|
|
|
|
|
|
- **CW-1 download/play 占位路径**:保留 TODO,不对接文件存储
|