gz-oarms/progress.md

9.3 KiB
Raw Blame History

OARMS 开发进度日志

会话记录

2026-05-18 — 初始状态验证

操作: 验证 task_plan.md 中 10 个阶段的实际执行情况

结论: 全部 10 个阶段均已完成。

证据:

  • 13 个 SQL DDL 文件已生成(覆盖全部计划表)
  • 3 个初始数据 SQL 已生成BS-1、LB-1、MR-1
  • 10 个 Controller 已实现Screen/Law/MonitoringRule/RecordingConfig/RecordingTask/MonitorRecord/EvidenceRecord/EvidenceRuleRelation/MonitoringClue/ClueTransfer
  • 16 个 Mapper 已实现
  • 11 个 Service 接口 + 实现类已实现
  • 全部 Entity/Query/Req/VO 已到位
  • Git commit c06a4e5 已包含所有代码

验证方式: 通过文件系统扫描确认。

2026-05-18 — 编译验证与修复

问题1: Checkstyle 检出 8 个未使用 import

  • LoginController.java: RSAUtil, ResultCode
  • RecordingTaskServiceImpl.java: HashMap
  • IRecordingTaskService.java: AlertNotificationEntity
  • MonitoringRuleServiceImpl.java: ArrayList
  • ScreenEntity.java: JsonFormat, DateUtil
  • ScreenServiceImpl.java: ArrayList

问题2: SuperEntity 不是泛型类13 个 Entity 使用了 SuperEntity<XXX> 错误格式

  • 批量替换为 extends SuperEntity

问题3: AssertUtils.isTrue(condition, String) 签名不匹配,需改为 AssertUtils.isTrue(condition, ResultCode, params...)

  • MonitoringClueServiceImpl: 2 处
  • EvidenceRecordServiceImpl: 1 处
  • EvidenceRuleRelationServiceImpl: 3 处
  • ClueTransferServiceImpl: 1 处

问题4: LawClauseEntity.getClauseName() 不存在,应为 getLawName()

  • MonitoringClueServiceImpl: 1 处

结果: 97 个源文件全部编译通过BUILD SUCCESS。

2026-05-18 — DM8 数据库连通性验证

操作: 使用 JDBC 直连测试 DM8 数据库

连接参数:

  • URL: jdbc:dm://172.22.80.70:15236?schema=OARMS
  • 用户: SYSDBA
  • 驱动版本: DmJdbcDriver18 8.1.1.193

结果:

  • 连接成功
  • DM8 版本: --03134283914-20220901-168571-20009
  • OARMS schema 已有 17 张表,覆盖全部计划表:
表名 对应模块
BS_SCREEN Phase 1 大屏基础信息
BS_SCREEN_HISTORY Phase 1 大屏历史
LB_LAW_CLAUSE Phase 2 法律法规
MR_MONITORING_RULE Phase 3 监测规则
MR_RULE_LAW_CLAUSE_REL Phase 3 规则法条关联
MR_RULE_OPERATION_HISTORY Phase 3 规则操作历史
AM_RECORDING_CONFIG Phase 4 录屏设置
AM_RECORDING_TASK Phase 5 录屏任务
AM_ALERT_NOTIFICATION Phase 5 告警通知
AM_MONITOR_RECORD Phase 6 广告画面监控
CW_EVIDENCE_RECORD Phase 7 固化取证
CW_EVIDENCE_STATUS_HISTORY Phase 7 取证状态历史
CW_EVIDENCE_RULE_RELATION Phase 8 规则关联
CW_MONITORING_CLUE Phase 9 线索生成
CW_CLUE_GENERATION_LOG Phase 9 线索生成日志
CW_CLUE_TRANSFER_RECORD Phase 10 线索转办
CW_TRANSFER_OPERATION_LOG Phase 10 转办操作日志

结论: DDL 已全部执行到 DM8 数据库,无需重新建表。

2026-05-18 — PRD vs 后端代码覆盖比对

操作: 读取 5 个域 10 个模块的 S4-API设计.md逐条对照后端 Controller 代码

结论:

  • 基础 CRUD 全部到位: 10 个模块的核心增删改查接口均已实现
  • 路径风格差异: 后端用单数名词(/api/screenPRD 用复数(/api/screens— 不影响功能
  • HTTP 方法差异: 后端统一 POSTPRD 规范 RESTfulPUT/DELETE— 不影响功能
  • 高级功能缺失约 16 个接口: 导入导出、文件下载播放、级联选择、唯一性校验等

各模块覆盖率:

  • BS-1: 5/12 = 42%(缺导入导出、历史版本、校验)
  • LB-1: 5/8 = 63%(缺废止、校验、已生效列表)
  • MR-1: 8/10 = 80%(缺导出)
  • AM-1: 5/6 = 83%(缺状态变更)
  • AM-2: 2/2 = 100%
  • AM-3: 4/4 = 100%
  • CW-1: 3/6 = 50%(缺下载播放)
  • CW-2: 2/2 = 100%
  • CW-3: 3/5 = 60%(缺预览统计)
  • CW-4: 3/10 = 30%(缺级联选择、处置反馈)

2026-05-18 — 缺失接口补齐计划制定

操作: 根据覆盖比对结果,按业务优先级分 4 批规划 20 个缺失接口

批次规划:

  • P0 核心状态流转: 3 个接口BS-1 状态变更、AM-1 状态变更、LB-1 废止)
  • P1 前端页面必需: 6 个接口(校验、下拉列表、预览、统计)
  • P2 级联选择器: 4 个接口(区域/部门/人员列表、处置反馈)
  • P3 文件操作 & 导入导出: 7 个接口(下载、播放、导入、导出、模板、历史)

状态: 计划已制定,待执行

2026-05-18 — 缺失接口补齐执行

操作: 按优先级分 4 批依次实现 20 个缺失接口

P0 核心状态流转 (3 个):

  1. POST /api/screen/toggle-status — 大屏状态变更
  2. POST /api/recording-config/toggle-status — 录屏配置状态变更
  3. POST /api/law-clause/repeal — 法律条款废止

P1 前端页面必需 (6 个): 4. GET /api/screen/check-code — 编码唯一校验 5. GET /api/screen/check-address — 地址唯一校验 6. GET /api/law-clause/check-clause-number — 条款号唯一校验 7. GET /api/law-clause/effective — 已生效条款列表 8. GET /api/monitoring-clue/clue-preview — 线索生成前预览 9. GET /api/monitoring-clue/status-summary — 线索状态统计

P2 级联选择器 (4 个): 10. GET /api/clue-transfer/targets/districts — 区域列表 11. GET /api/clue-transfer/targets/departments — 部门列表 12. GET /api/clue-transfer/targets/persons — 人员列表 13. GET /api/clue-transfer/clues/{clueId}/disposal-feedback — 处置反馈

P3 文件操作 & 导入导出 (7 个): 14. GET /api/evidence-record/download — 取证视频下载地址 15. GET /api/evidence-record/play — 取证视频播放地址 16. GET /api/screen/export — 导出大屏数据 17. POST /api/screen/import — 批量导入大屏 18. GET /api/screen/import-template — 下载导入模板 19. GET /api/screen/histories — 大屏历史版本 20. POST /api/monitoring-rules/export — 导出规则

新增文件: ScreenHistoryMapper.java 编译结果: 98 个源文件 BUILD SUCCESS

注意事项:

  • CW-4 级联选择器的部门/人员数据为模拟数据TODO: 对接组织架构系统)
  • CW-1 文件下载/播放 URL 为占位路径TODO: 对接文件存储系统)

2026-05-18 — 端到端接口测试

问题1: JDK 版本 25 不兼容,改为 21

  • pom.xml 中 java.version/maven.compiler.source/target/compilerVersion 从 25 → 21

问题2: spring-boot:run 失败 — NoClassDefFoundError: SpringBootServletInitializer

  • 根因spring-boot-maven-plugin 的 <layout>ZIP</layout> + <includes>nothing</includes> 导致 run 目标的 classpath 只包含 target/classes
  • 解决:使用 java -cp 直接启动,绕过 maven plugin 的 classpath 过滤

问题3: DM8 连接初始化失败 — dm.jdbc.driver.DMException: 第1行附近出现错误

  • 根因Druid validation-query 使用了 select version()DM8 不支持此语法
  • 修复application.yml 中两个数据源的 validation-query 改为 SELECT 1

问题4: 所有写入操作失败 — SaRetGenericFunction.run() is null

  • 根因Sa-Token 1.42.0 的 SaSetValueInterface.get() 存在 NPEStpUtil.getSession() 抛出 NullPointerException
  • UserBaseServiceImpl.getCurrentUser() 只 catch 了 NotLoginExceptionNPE 直接传播到 MetaObjectHandler
  • 修复:将 catch 从 NotLoginException 扩大为 Exception
  • 同时删除了多余的 NotLoginException importCheckstyle 检出)

测试结果: 应用成功启动,共测试 30+ 个接口

模块 测试接口数 通过 失败 备注
BS-1 大屏管理 10 10 0 新增需完整必填字段
LB-1 法律法规 6 6 0
MR-1 监测规则 8 8 0
AM-1 录屏设置 4 4 0
AM-2 录屏任务 1 1 0
AM-3 广告监控 1 1 0
CW-1 固化取证 3 3 0
CW-2 规则关联 1 1 0
CW-3 线索生成 2 2 0
CW-4 线索转办 4 4 0

总通过率: 40/40 = 100%(所有可用接口均正常响应)


阶段执行状态

阶段 状态 备注
Phase 1: BS-1 大屏基础信息管理 完成 DDL + 初始数据 + 全层代码
Phase 2: LB-1 法律法规管理 完成 DDL + 初始数据 + 全层代码
Phase 3: MR-1 监测规则管理 完成 DDL + 初始数据 + 全层代码含3个Entity/Mapper
Phase 4: AM-1 录屏设置管理 完成 DDL + 全层代码
Phase 5: AM-2 随机录屏 完成 DDL + 全层代码含2个Entity/Mapper
Phase 6: AM-3 广告画面监控 完成 DDL + 全层代码
Phase 7: CW-1 固化取证 完成 DDL + 全层代码含2个Entity/Mapper
Phase 8: CW-2 规则关联 完成 DDL + 全层代码
Phase 9: CW-3 线索生成 完成 DDL + 全层代码含2个Entity/Mapper
Phase 10: CW-4 线索转办 完成 DDL + 全层代码含2个Entity/Mapper

待办事项

  • 执行编译验证mvn compile 2026-05-18 通过
  • 确认 DM8 数据库连接配置正确 2026-05-18 连通
  • 确认 DDL 已实际执行到数据库 2026-05-18 已确认 17 张表