Files
ccdi/docs/plans/backend/2026-03-20-results-overview-risk-model-linkage-backend-implementation.md

9.9 KiB
Raw Blame History

Results Overview Risk Model Linkage Backend Implementation Plan

For agentic workers: REQUIRED: Use superpowers:subagent-driven-development (if subagents available) or superpowers:executing-plans to implement this plan. Steps use checkbox (- [ ]) syntax for tracking.

Goal: 为结果总览模型区新增真实后端接口,支持模型卡片统计、人员分页查询,以及多卡片下“任意触发 / 同时触发”两种筛选方式。

Architecture: 继续沿用 CcdiProjectOverviewController + Service + Mapper 的结果总览链路,复用现有“员工本人 + 亲属归并到员工名下”的基础聚合 SQL不新建平行模块或补丁式接口。模型卡片统计与人员列表查询都建立在同一套员工归并口径上保证模型区与风险人员区统计一致。

Tech Stack: Java 21, Spring Boot 3, MyBatis XML, Maven, JUnit 5


Task 1: 定义接口、DTO 与 VO 结构

Files:

  • Modify: ccdi-project/src/main/java/com/ruoyi/ccdi/project/controller/CcdiProjectOverviewController.java

  • Modify: ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/ICcdiProjectOverviewService.java

  • Create: ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/dto/CcdiProjectRiskModelPeopleQueryDTO.java

  • Create: ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/CcdiProjectRiskModelCardVO.java

  • Create: ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/CcdiProjectRiskModelCardsVO.java

  • Create: ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/CcdiProjectRiskModelPeopleItemVO.java

  • Create: ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/CcdiProjectRiskModelPeopleVO.java

  • Create: ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/CcdiProjectRiskHitTagVO.java

  • Test: ccdi-project/src/test/java/com/ruoyi/ccdi/project/controller/CcdiProjectOverviewControllerContractTest.java

  • Step 1: Write the failing test

为控制器契约补静态/反射测试,锁定以下方法和路径:

  • GET /ccdi/project/overview/risk-models/cards
  • GET /ccdi/project/overview/risk-models/people

并锁定 DTO 字段:

  • projectId

  • modelCodes

  • matchMode

  • keyword

  • deptId

  • pageNum

  • pageSize

  • Step 2: Run test to verify it fails

Run:

mvn test -pl ccdi-project -Dtest=CcdiProjectOverviewControllerContractTest

Expected:

  • FAIL

  • 原因是接口与类型尚未创建

  • Step 3: Write minimal implementation

补齐控制器、服务接口、DTO 与 VO。

DTO 关键约束:

  • modelCodes 为多值条件
  • matchMode 只允许 ANYALL
  • modelCodes 为空时忽略 matchMode

VO 关键字段:

  • 卡片:modelCodemodelNamewarningCountpeopleCount

  • 列表:staffNamestaffCodeidNodepartmentmodelNameshitTagListactionLabel

  • 标签:ruleCoderuleNameriskLevel

  • Step 4: Run test to verify it passes

Run:

mvn test -pl ccdi-project -Dtest=CcdiProjectOverviewControllerContractTest

Expected:

  • PASS

  • Step 5: Commit

git add ccdi-project/src/main/java/com/ruoyi/ccdi/project/controller/CcdiProjectOverviewController.java ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/ICcdiProjectOverviewService.java ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/dto/CcdiProjectRiskModelPeopleQueryDTO.java ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/CcdiProjectRiskModelCardVO.java ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/CcdiProjectRiskModelCardsVO.java ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/CcdiProjectRiskModelPeopleItemVO.java ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/CcdiProjectRiskModelPeopleVO.java ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/CcdiProjectRiskHitTagVO.java ccdi-project/src/test/java/com/ruoyi/ccdi/project/controller/CcdiProjectOverviewControllerContractTest.java
git commit -m "定义结果总览模型区接口结构"

Task 2: 扩展模型卡片统计 SQL

Files:

  • Modify: ccdi-project/src/main/java/com/ruoyi/ccdi/project/mapper/CcdiProjectOverviewMapper.java

  • Modify: ccdi-project/src/main/resources/mapper/ccdi/project/CcdiProjectOverviewMapper.xml

  • Test: ccdi-project/src/test/java/com/ruoyi/ccdi/project/mapper/CcdiProjectOverviewMapperRiskModelCardsTest.java

  • Step 1: Write the failing test

为模型卡片统计新增 mapper 测试,锁定以下口径:

  • warningCount = 当前项目、当前模型的命中结果数

  • peopleCount = 当前模型归并后的员工人数

  • 排序按 warningCount desc, model_code asc

  • Step 2: Run test to verify it fails

Run:

mvn test -pl ccdi-project -Dtest=CcdiProjectOverviewMapperRiskModelCardsTest

Expected:

  • FAIL

  • Step 3: Write minimal implementation

CcdiProjectOverviewMapper.xml 中:

  • 复用 resolvedEmployeeRiskBaseSql
  • 新增模型卡片查询
  • 预警次数直接以标签命中记录计数
  • 涉及人数按 staff_id_card 去重

不要新增新表、不要引入额外统计口径。

  • Step 4: Run test to verify it passes

Run:

mvn test -pl ccdi-project -Dtest=CcdiProjectOverviewMapperRiskModelCardsTest

Expected:

  • PASS

  • Step 5: Commit

git add ccdi-project/src/main/java/com/ruoyi/ccdi/project/mapper/CcdiProjectOverviewMapper.java ccdi-project/src/main/resources/mapper/ccdi/project/CcdiProjectOverviewMapper.xml ccdi-project/src/test/java/com/ruoyi/ccdi/project/mapper/CcdiProjectOverviewMapperRiskModelCardsTest.java
git commit -m "补充结果总览模型卡片统计查询"

Task 3: 实现人员分页查询与匹配模式

Files:

  • Modify: ccdi-project/src/main/java/com/ruoyi/ccdi/project/mapper/CcdiProjectOverviewMapper.java

  • Modify: ccdi-project/src/main/resources/mapper/ccdi/project/CcdiProjectOverviewMapper.xml

  • Test: ccdi-project/src/test/java/com/ruoyi/ccdi/project/mapper/CcdiProjectOverviewMapperRiskModelPeopleTest.java

  • Step 1: Write the failing test

新增列表查询测试,覆盖:

  • 不选模型时返回全部模型命中人员

  • 多模型 ANY 时按并集返回

  • 多模型 ALL 时按交集返回

  • keyword 同时匹配姓名与工号

  • deptId 精确筛选

  • hitTagListmodelNames 只返回当前筛选上下文内的数据

  • Step 2: Run test to verify it fails

Run:

mvn test -pl ccdi-project -Dtest=CcdiProjectOverviewMapperRiskModelPeopleTest

Expected:

  • FAIL

  • Step 3: Write minimal implementation

列表查询要求:

  • 补齐员工工号字段映射;如果员工表实际字段不是 staff_code,按真实字段落地

  • ANY:命中任一所选模型即可

  • ALL:员工命中的所选模型去重数必须等于所选模型数

  • modelNames 只拼接当前所选模型范围内的模型名称

  • hitTagList 只返回当前所选模型范围内的标签

  • 标签排序按风险等级、规则编码稳定输出

  • Step 4: Run test to verify it passes

Run:

mvn test -pl ccdi-project -Dtest=CcdiProjectOverviewMapperRiskModelPeopleTest

Expected:

  • PASS

  • Step 5: Commit

git add ccdi-project/src/main/java/com/ruoyi/ccdi/project/mapper/CcdiProjectOverviewMapper.java ccdi-project/src/main/resources/mapper/ccdi/project/CcdiProjectOverviewMapper.xml ccdi-project/src/test/java/com/ruoyi/ccdi/project/mapper/CcdiProjectOverviewMapperRiskModelPeopleTest.java
git commit -m "补充结果总览模型区人员分页查询"

Task 4: 完成服务组装与控制器返回

Files:

  • Modify: ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectOverviewServiceImpl.java

  • Test: ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectOverviewServiceImplTest.java

  • Step 1: Write the failing test

在服务测试中补充:

  • 项目不存在时抛出统一异常

  • 卡片接口返回 cardList

  • 人员接口返回 rows + total

  • 空列表返回空数组,不返回 null

  • actionLabel 固定为“查看详情”

  • Step 2: Run test to verify it fails

Run:

mvn test -pl ccdi-project -Dtest=CcdiProjectOverviewServiceImplTest

Expected:

  • FAIL

  • Step 3: Write minimal implementation

在服务层:

  • 统一做项目存在性校验

  • 卡片接口直接封装 cardList

  • 人员接口封装 rowstotal

  • matchMode 默认值为 ANY

  • Step 4: Run test to verify it passes

Run:

mvn test -pl ccdi-project -Dtest=CcdiProjectOverviewServiceImplTest

Expected:

  • PASS

  • Step 5: Commit

git add ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectOverviewServiceImpl.java ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectOverviewServiceImplTest.java
git commit -m "完成结果总览模型区服务组装"

Task 5: 后端回归验证与实施记录

Files:

  • Modify: docs/plans/backend/2026-03-20-results-overview-risk-model-linkage-backend-implementation.md

  • Create: docs/tests/records/2026-03-20-results-overview-risk-model-linkage-backend-verification.md

  • Create: docs/reports/implementation/2026-03-20-results-overview-risk-model-linkage-backend-implementation.md

  • Step 1: Run backend verification

Run:

mvn test -pl ccdi-project -Dtest=CcdiProjectOverview*

Expected:

  • PASS

  • Step 2: Write verification and implementation records

记录:

  • 模型卡片接口

  • 人员分页接口

  • ANY / ALL 两种匹配方式

  • 验证命令与结论

  • Step 3: Commit

git add docs/plans/backend/2026-03-20-results-overview-risk-model-linkage-backend-implementation.md docs/tests/records/2026-03-20-results-overview-risk-model-linkage-backend-verification.md docs/reports/implementation/2026-03-20-results-overview-risk-model-linkage-backend-implementation.md
git commit -m "补充结果总览模型区后端实施记录"