10 KiB
OARMS 命名规范审查 — 发现记录
前置发现
全局性问题
1. 前端 API 参数命名:snake_case vs camelCase
严重程度: P0 — 前后端无法对接
前端 API 文件中参数名使用 snake_case(如 screen_name、page_num、config_status),而后端 Entity/Query 属性使用 camelCase(如 screenName、pageNum、configStatus)。
Jackson 默认序列化/反序列化使用 camelCase,前端发 snake_case 参数后端收不到。
影响文件:
gz-oarms-web/src/api/BS-大屏基础库域/BS-1-大屏基础信息管理.jsgz-oarms-web/src/api/AM-广告监控域/AM-1-广告画面录屏设置管理.jsgz-oarms-web/src/api/CW-内容预警域/CW-3-监测线索生成.js- 全部 10 个 API 文件
2. 前后端 API 路径不一致
严重程度: P1 — 路径不匹配导致 404
| 前端路径 | 后端路径 | 差异 |
|---|---|---|
/api/screens/query |
/api/screen/query |
单复数 |
/api/recording-configs/query |
/api/recording-config/query |
单复数 |
/api/cw/evidence-records/query |
/api/evidence-record/query |
域前缀 + 单复数 |
/api/cw/monitoring-clues/query |
/api/monitoring-clue/query |
域前缀 + 单复数 |
Phase 1:后端 DB→Entity→DTO 全链路审查(✅ 完成)
P1-1:DDL CREATE TABLE 表名小写(全部 13 个 DDL 文件,17 张表)
严重程度: P3 — DM8 规范要求大写,但 DM8 实际大小写不敏感,不影响功能
所有 CREATE TABLE 语句中表名使用小写,而同文件内 COMMENT ON / CREATE INDEX 已大写。
| DDL 文件 | 需修改的表名 |
|---|---|
| V1.0.0__BS_screen_ddl.sql | bs_screen → BS_SCREEN,bs_screen_history → BS_SCREEN_HISTORY |
| V2.0.0__LB_law_ddl.sql | lb_law_clause → LB_LAW_CLAUSE |
| V3.0.0__AM_recording_config_ddl.sql | am_recording_config → AM_RECORDING_CONFIG |
| V4.0.0__AM_recording_task_ddl.sql | am_recording_task → AM_RECORDING_TASK,am_alert_notification → AM_ALERT_NOTIFICATION |
| V5.0.0__AM_monitor_record_ddl.sql | am_monitor_record → AM_MONITOR_RECORD |
| V6.0.0__MR_monitoring_rule_ddl.sql | mr_monitoring_rule → MR_MONITORING_RULE,mr_rule_law_clause_rel → MR_RULE_LAW_CLAUSE_REL,mr_rule_operation_history → MR_RULE_OPERATION_HISTORY |
| V7.0.0__CW_evidence_ddl.sql | cw_evidence_record → CW_EVIDENCE_RECORD,cw_evidence_status_history → CW_EVIDENCE_STATUS_HISTORY |
| V8.0.0__CW_evidence_rule_relation_ddl.sql | cw_evidence_rule_relation → CW_EVIDENCE_RULE_RELATION |
| V9.0.0__CW_monitoring_clue_ddl.sql | cw_monitoring_clue → CW_MONITORING_CLUE,cw_clue_generation_log → CW_CLUE_GENERATION_LOG |
| V10.0.0__CW_clue_transfer_ddl.sql | cw_clue_transfer_record → CW_CLUE_TRANSFER_RECORD,cw_transfer_operation_log → CW_TRANSFER_OPERATION_LOG |
P1-2:多余 @TableField 注解(2 个 Entity,6 处)
严重程度: P3 — 不影响功能,冗余代码
属性名与列名完全相同时,MyBatis-Plus 自动映射,@TableField 注解多余。
| Entity 文件 | 字段 | @TableField 值 | 原因 |
|---|---|---|---|
| ScreenEntity | address |
"address" |
完全相同 |
| ScreenEntity | district |
"district" |
完全相同 |
| ScreenEntity | advertiser |
"advertiser" |
完全相同 |
| ScreenEntity | longitude |
"longitude" |
完全相同 |
| ScreenEntity | latitude |
"latitude" |
完全相同 |
| RuleOperationHistoryEntity | operator |
"operator" |
完全相同 |
P1-3:命名一致性审查通过项
| 检查项 | 结果 | 详情 |
|---|---|---|
| DDL @TableField 映射 | ✅ 全部匹配 | 17 张表,约 150 个字段全部正确 |
| Entity → DTO 属性名 | ✅ 全部匹配 | VO/Query/Req 与 Entity 属性名一致 |
| DDL COMMENT/INDEX 大写 | ✅ 全部大写 | 所有 COMMENT ON 和 CREATE INDEX 标识符大写 |
| SuperEntity 公共字段 | ✅ 无重复声明 | 所有继承 SuperEntity 的 Entity 均未重复声明 |
| @JsonFormat 使用常量 | ✅ 全部使用 DateUtil | 无硬编码格式字符串 |
Phase 2:后端 Controller API 路径审查(✅ 完成)
P2-1:基础路径单复数不一致
严重程度: P2 — 风格不一致,影响可维护性
| Controller | 当前路径 | 问题 | 建议 |
|---|---|---|---|
| MonitoringRuleController | /api/monitoring-rules |
唯一使用复数 | → /api/monitoring-rule |
| 其余 9 个 Controller | /api/screen 等 |
单数 | 保持一致 |
P2-2:低优先级风格问题
| Controller | 问题 | 建议 |
|---|---|---|
| ScreenController | district/list 两段路径 |
→ districts |
| MonitoringClueController | clue-preview 与基础路径语义重复 |
→ preview |
| ClueTransferController | targets/districts 两层嵌套 |
→ target-districts |
| ClueTransferController | clues/{clueId}/disposal-feedback 路径变量 |
→ disposal-feedback?clueId= |
| ClueTransferController | pending-clues/query 子资源前缀 |
→ pending-query |
| EvidenceRuleRelationController | query-by-evidence 复合路径 |
→ list-by-evidence |
P2-3:审查通过项
- 全部 10 个 Controller 路径使用 kebab-case,无驼峰/下划线混入
- 核心 CRUD 路径(query/detail/save/update/remove)高度一致
Phase 3:前端 API 文件审查(✅ 完成)
P3-1:API 路径全部不匹配(严重)
严重程度: P0 — 前后端路径不一致,所有接口 404
根因: 前端使用 RESTful 风格(复数 + 路径参数 + PUT/DELETE),后端使用扁平 POST 风格(单数 + 查询参数/RequestBody)
| 问题模式 | 涉及模块 | 示例 |
|---|---|---|
| 资源名单复数 | 全部 10 个 | /api/screens vs /api/screen |
| HTTP 方法不匹配 | 全部 | PUT/DELETE vs POST |
| 路径参数 vs 查询参数 | 全部 GET/PUT/DELETE | /api/screens/${id} vs /api/screen/detail?id= |
CW 域多了 /cw/ 前缀 |
CW-1/2/3 | /api/cw/evidence-records vs /api/evidence-record |
| 前端用路径嵌套 | CW-4 | /api/clue-transfer/transfer-records/query vs /api/clue-transfer/query |
统计: ~58/64 个端点路径不匹配
P3-2:JSDoc 参数名全部 snake_case(严重)
严重程度: P0 — 前端发 snake_case 参数,后端收 camelCase,字段无法映射
全部 10 个 API 文件的 JSDoc @param 注释和实际参数使用 snake_case,而后端 Entity/Query/Req 属性为 camelCase。
高频不匹配字段(全局):
| 前端 snake_case | 后端 camelCase | 出现次数 |
|---|---|---|
page_num |
pageNum |
10 文件 |
page_size |
pageSize |
10 文件 |
screen_name |
screenName |
6 文件 |
start_time / end_time |
startTime / endTime |
5 文件 |
evidence_id |
evidenceId |
4 文件 |
clue_id |
clueId |
3 文件 |
P3-3:JS 函数参数名 snake_case(15 处)
严重程度: P1 — 不影响运行,但不符合 JS camelCase 规范
| 文件 | snake_case 参数 | 应改为 |
|---|---|---|
| CW-1 | evidence_id(×4)、monitor_record_id(×2) |
evidenceId、monitorRecordId |
| CW-2 | evidence_id(×3) |
evidenceId |
| CW-3 | evidence_id(×1)、clue_id(×2) |
evidenceId、clueId |
| CW-4 | clue_id(×2)、transfer_record_id(×2)、district_code、department_id |
camelCase |
P3-4:前端调用不存在的后端接口(6 个)
| 前端函数 | URL | 模块 |
|---|---|---|
queryRuleOperationHistory |
/api/monitoring-rules/${id}/histories |
MR-1 |
getEvidenceStatusHistory |
/api/evidence-records/${id}/status-history |
CW-1 |
getMonitorRecordEvidenceContext |
/api/monitor-records/${id}/evidence-context |
CW-1 |
getMonitorVideoPlayUrl |
/api/monitor-records/${id}/video/play |
CW-1 |
updateEvidenceRecordStatus |
/api/cw/evidence-records/${id}/status |
CW-2 |
getClueGenerationLogs |
/api/cw/monitoring-clues/${id}/generation-logs |
CW-3 |
Phase 4:前端页面组件审查(跳过)
前端页面组件的命名问题本质与 Phase 3 的 API 文件一致(表单字段绑定来源于 API 参数)。API 层修复后页面同步调整即可。
Phase 5:汇总修复建议
修复策略决策
核心问题:前后端 API 路径和参数命名存在系统性不一致。
必须选择一个方向统一:
- 方案 A(推荐):前端适配后端 — 修改前端 API 文件的路径和参数名为后端实际值
- 方案 B:后端适配前端 — 修改后端 Controller 路径和参数接收方式
推荐方案 A 的理由:
- 后端 85 个问题已全部修复并端到端测试通过,不宜大改
- 前端 API 文件仅 10 个,修改范围可控
- 后端的扁平 POST 风格已在项目中统一,改后端需动 11 个 Controller
修复清单(方案 A)
1. 修复前端 API 路径(10 个文件,~58 处)
每个 API 文件需:
- 资源名改为单数(
screens→screen,recording-configs→recording-config) - 移除
/cw/前缀(CW-1/2/3 的文件) - GET 详情改为查询参数(
/${id}→?id=) - PUT/DELETE 改为 POST
- 路径参数改为 RequestBody
2. 修复 JSDoc 参数名为 camelCase(10 个文件,~90 处)
每个 @param 中的 snake_case 字段名改为 camelCase:
page_num→pageNumscreen_name→screenNameevidence_id→evidenceId- 等等
3. 修复 JS 函数参数名(CW-1/2/3/4 的文件,15 处)
evidence_id→evidenceIdclue_id→clueIdtransfer_record_id→transferRecordIddistrict_code→districtCodedepartment_id→departmentId
4. 修复后端 Controller 单复数不一致(1 处)
- MonitoringRuleController:
/api/monitoring-rules→/api/monitoring-rule
5. DDL CREATE TABLE 表名大写(13 个文件,17 张表)
纯规范修复,DM8 大小写不敏感,不影响功能。
6. 清理多余 @TableField 注解(2 个 Entity,6 处)
纯代码整洁,不影响功能。
不修复项
| 项目 | 原因 |
|---|---|
| 前端调用不存在的 6 个接口 | 属于功能缺失(需评估是否需要实现),非命名问题 |
| ClueTransferController 多层嵌套路径 | 功能正常,低优先级风格问题 |
| 前端页面组件命名 | API 层修复后页面自然跟随 |