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

180 lines
6.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Results Overview Risk People Merge 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:** 扩展结果总览风险人员总览接口返回风险等级和命中模型数字段,为页面移除独立 TOP10 区块提供单一后端数据源。
**Architecture:** 复用 `ccdi-project` 现有员工风险聚合 SQL 与风险等级映射逻辑,不新增接口、不新增统计口径、不删除独立 TOP10 接口。仅扩展风险人员总览 VO、服务映射与相关测试使 `GET /ccdi/project/overview/risk-people` 直接返回 `riskLevel``riskLevelType``modelCount`
**Tech Stack:** Java 21, Spring Boot 3, MyBatis XML, Maven, JUnit 5, Mockito
---
### Task 1: 锁定风险人员总览新增字段的测试预期
**Files:**
- Modify: `ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectOverviewServiceImplTest.java`
- Modify: `ccdi-project/src/test/java/com/ruoyi/ccdi/project/controller/CcdiProjectOverviewControllerTest.java`
- [ ] **Step 1: Write the failing test**
调整 `CcdiProjectOverviewServiceImplTest`,在 `shouldMapRiskPeopleOverviewRows` 中增加对 `riskLevel``riskLevelType``modelCount` 的断言;必要时在 `CcdiProjectOverviewControllerTest` 中补充风险人员总览响应结构断言,锁定返回 JSON 中包含这三个字段。
- [ ] **Step 2: Run test to verify it fails**
Run:
```bash
mvn test -pl ccdi-project -Dtest=CcdiProjectOverviewServiceImplTest,CcdiProjectOverviewControllerTest
```
Expected:
- `FAIL`
- 原因是当前风险人员总览项尚未暴露 `riskLevel``riskLevelType``modelCount`
- [ ] **Step 3: Write minimal implementation**
保持现有测试数据构造方式不变,只补最小断言:`HIGH -> 高风险 / danger``MEDIUM -> 中风险 / warning``LOW -> 低风险 / info`,以及 `modelCount` 直接透传。
- [ ] **Step 4: Run test to verify it passes after implementation**
Run:
```bash
mvn test -pl ccdi-project -Dtest=CcdiProjectOverviewServiceImplTest,CcdiProjectOverviewControllerTest
```
Expected:
- `PASS`
- [ ] **Step 5: Commit**
```bash
git add ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectOverviewServiceImplTest.java ccdi-project/src/test/java/com/ruoyi/ccdi/project/controller/CcdiProjectOverviewControllerTest.java
git commit -m "补充风险人员总览接口字段测试"
```
### Task 2: 扩展风险人员总览 VO 与服务映射
**Files:**
- Modify: `ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/CcdiProjectRiskPeopleOverviewItemVO.java`
- Modify: `ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectOverviewServiceImpl.java`
- Verify: `ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/CcdiProjectEmployeeRiskAggregateVO.java`
- [ ] **Step 1: Implement the VO fields**
`CcdiProjectRiskPeopleOverviewItemVO` 中新增:
- `private String riskLevel;`
- `private String riskLevelType;`
- `private Integer modelCount;`
保持原有字段和 Lombok `@Data` 不变,不新增多余兼容字段。
- [ ] **Step 2: Implement service mapping**
`buildRiskPeopleItem` 中补充:
- `riskLevel``aggregate.getRiskLevelCode()` 经现有映射逻辑转换
- `riskLevelType` 由现有 `resolveRiskLevelType` 生成
- `modelCount` 直接读取 `aggregate.getModelCount()`
不要更改:
- `riskCount` 继续读取 `hitCount`
- `riskPoint` 继续读取聚合结果
- 风险人员总览排序逻辑
- `getTopRiskPeople` 行为
- [ ] **Step 3: Run focused backend tests**
Run:
```bash
mvn test -pl ccdi-project -Dtest=CcdiProjectOverviewServiceImplTest
```
Expected:
- `PASS`
- [ ] **Step 4: Review for boundary compliance**
人工检查以下边界:
- 未新增新接口
- 未删除 `getTopRiskPeople`
- 未修改风险等级分级口径
- 未修改 `CcdiProjectOverviewMapper.xml` 排序和聚合 SQL
- [ ] **Step 5: Commit**
```bash
git add ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/CcdiProjectRiskPeopleOverviewItemVO.java ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectOverviewServiceImpl.java
git commit -m "扩展风险人员总览接口返回字段"
```
### Task 3: 回归验证 SQL 和接口边界未被破坏
**Files:**
- Verify: `ccdi-project/src/test/java/com/ruoyi/ccdi/project/mapper/CcdiProjectOverviewMapperSqlTest.java`
- Verify: `ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/CcdiProjectOverviewServiceStructureTest.java`
- Verify: `ccdi-project/src/main/resources/mapper/ccdi/project/CcdiProjectOverviewMapper.xml`
- [ ] **Step 1: Run SQL and structure regression tests**
Run:
```bash
mvn test -pl ccdi-project -Dtest=CcdiProjectOverviewMapperSqlTest,CcdiProjectOverviewServiceStructureTest
```
Expected:
- `PASS`
- 证明员工聚合 SQL、Mapper 结构与服务接口边界仍然稳定
- [ ] **Step 2: Perform manual API contract review**
检查风险人员总览接口对应的 Controller、Service、VO确认本轮只增加返回字段不引入新路径、不更改请求参数。
- [ ] **Step 3: Commit**
```bash
git add ccdi-project/src/test/java/com/ruoyi/ccdi/project/mapper/CcdiProjectOverviewMapperSqlTest.java ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/CcdiProjectOverviewServiceStructureTest.java ccdi-project/src/main/resources/mapper/ccdi/project/CcdiProjectOverviewMapper.xml
git commit -m "回归校验结果总览后端接口边界"
```
### Task 4: 补充后端实施与验证文档
**Files:**
- Create: `docs/reports/implementation/2026-03-20-results-overview-risk-people-merge-backend-implementation.md`
- Create: `docs/tests/records/2026-03-20-results-overview-risk-people-merge-backend-verification.md`
- Verify: `docs/design/2026-03-20-results-overview-risk-people-merge-design.md`
- [ ] **Step 1: Write implementation record**
记录本次后端改动内容:
- 扩展风险人员总览接口字段
- 复用现有风险等级映射
- 明确未删除后端 TOP10 接口
- [ ] **Step 2: Write verification record**
记录执行过的命令、日期、结果和验证结论,至少包含:
```bash
mvn test -pl ccdi-project -Dtest=CcdiProjectOverviewServiceImplTest,CcdiProjectOverviewControllerTest
mvn test -pl ccdi-project -Dtest=CcdiProjectOverviewMapperSqlTest,CcdiProjectOverviewServiceStructureTest
```
- [ ] **Step 3: Commit**
```bash
git add docs/reports/implementation/2026-03-20-results-overview-risk-people-merge-backend-implementation.md docs/tests/records/2026-03-20-results-overview-risk-people-merge-backend-verification.md
git commit -m "补充风险人员总览收口后端实施记录"
```