补充结果总览风险人员区块收口实施计划

This commit is contained in:
wkc
2026-03-20 09:25:17 +08:00
parent ecd7ab9d47
commit faaf04abf4
2 changed files with 386 additions and 0 deletions

View File

@@ -0,0 +1,179 @@
# 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 "补充风险人员总览收口后端实施记录"
```

View File

@@ -0,0 +1,207 @@
# Results Overview Risk People Merge Frontend 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:** 继续沿用 `PreliminaryCheck.vue` 作为结果总览入口,不新增页面组件层级、不做前端字段拼装。前端只消费 `dashboard + riskPeople` 两类真实接口,删除页面对 `topRiskPeople` 的依赖,并将风险等级标签和命中模型数并入风险人员总览单表。
**Tech Stack:** Vue 2, Element UI, Node.js
---
### Task 1: 先锁定前端接口依赖收口预期
**Files:**
- Modify: `ruoyi-ui/tests/unit/project-overview-api.test.js`
- Modify: `ruoyi-ui/tests/unit/preliminary-check-api-integration.test.js`
- [ ] **Step 1: Write the failing test**
更新 API 与页面集成断言:
- `project-overview-api.test.js` 保留 `getOverviewDashboard``getOverviewRiskPeople` 断言,并移除 `getOverviewTopRiskPeople``/top-risk-people` 依赖
- `preliminary-check-api-integration.test.js` 改为断言 `PreliminaryCheck.vue` 只引用 `getOverviewDashboard``getOverviewRiskPeople``Promise.all`
- [ ] **Step 2: Run test to verify it fails**
Run:
```bash
cd ruoyi-ui
node tests/unit/project-overview-api.test.js
node tests/unit/preliminary-check-api-integration.test.js
```
Expected:
- `FAIL`
- 原因是当前 API 文件和入口页面仍保留 TOP10 请求
- [ ] **Step 3: Commit the test expectation update**
```bash
git add ruoyi-ui/tests/unit/project-overview-api.test.js ruoyi-ui/tests/unit/preliminary-check-api-integration.test.js
git commit -m "锁定结果总览页面接口收口预期"
```
### Task 2: 移除页面对 TOP10 接口的依赖
**Files:**
- Modify: `ruoyi-ui/src/api/ccdi/projectOverview.js`
- Modify: `ruoyi-ui/src/views/ccdiProject/components/detail/PreliminaryCheck.vue`
- Modify: `ruoyi-ui/src/views/ccdiProject/components/detail/preliminaryCheck.mock.js`
- [ ] **Step 1: Update the API module**
删除 `getOverviewTopRiskPeople` 导出,仅保留:
- `getOverviewDashboard`
- `getOverviewRiskPeople`
不要改动两个保留接口的 URL 和调用方式。
- [ ] **Step 2: Update page data loading**
`PreliminaryCheck.vue` 中:
- 删除 `getOverviewTopRiskPeople` 的 import
-`Promise.all` 从 3 个请求收口为 2 个请求
- 移除 `topRiskPeopleData` 相关变量
- `hasOverviewData` 仅依据 `dashboardData.stats``riskPeopleData.overviewList`
- [ ] **Step 3: Update mock and state data**
`preliminaryCheck.mock.js` 中:
-`overviewList` 示例数据补齐 `riskLevel``riskLevelType``modelCount`
- 删除页面展示层对 `topRiskList` 的依赖
- 保持空态、加载态结构可直接复用
- [ ] **Step 4: Run focused frontend tests**
Run:
```bash
cd ruoyi-ui
node tests/unit/project-overview-api.test.js
node tests/unit/preliminary-check-api-integration.test.js
node tests/unit/preliminary-check-states.test.js
```
Expected:
- `PASS`
- [ ] **Step 5: Commit**
```bash
git add ruoyi-ui/src/api/ccdi/projectOverview.js ruoyi-ui/src/views/ccdiProject/components/detail/PreliminaryCheck.vue ruoyi-ui/src/views/ccdiProject/components/detail/preliminaryCheck.mock.js ruoyi-ui/tests/unit/project-overview-api.test.js ruoyi-ui/tests/unit/preliminary-check-api-integration.test.js
git commit -m "移除结果总览页面TOP10接口依赖"
```
### Task 3: 将人员区块收口为单表并补充新增列
**Files:**
- Modify: `ruoyi-ui/src/views/ccdiProject/components/detail/RiskPeopleSection.vue`
- Modify: `ruoyi-ui/tests/unit/preliminary-check-summary-and-people.test.js`
- Modify: `ruoyi-ui/tests/unit/preliminary-check-risk-people-binding.test.js`
- [ ] **Step 1: Write/update the failing test**
调整静态断言:
- `preliminary-check-summary-and-people.test.js` 去掉对 `中高风险人员TOP10` 的文案断言,增加对 `风险等级``命中模型数` 的断言
- `preliminary-check-risk-people-binding.test.js` 去掉 `sectionData.topRiskList` 依赖,改为断言 `overviewList` 同时绑定 `riskCount``riskPoint``riskLevelType``modelCount`
- [ ] **Step 2: Run test to verify it fails**
Run:
```bash
cd ruoyi-ui
node tests/unit/preliminary-check-summary-and-people.test.js
node tests/unit/preliminary-check-risk-people-binding.test.js
```
Expected:
- `FAIL`
- 原因是当前组件仍包含第二个 TOP10 区块
- [ ] **Step 3: Implement the single-table UI**
`RiskPeopleSection.vue` 中:
- 删除第二个 `block`
- 在风险人员总览表格中新增 `风险等级` 列,沿用 `el-tag` + `scope.row.riskLevelType`
- 新增 `命中模型数` 列,直接绑定 `modelCount`
- 保留 `疑似违规数``核心异常点``查看详情` 回退逻辑
- 适度调整列宽与块间距,但不要重做整体视觉风格
- [ ] **Step 4: Run focused UI tests**
Run:
```bash
cd ruoyi-ui
node tests/unit/preliminary-check-summary-and-people.test.js
node tests/unit/preliminary-check-risk-people-binding.test.js
node tests/unit/preliminary-check-layout.test.js
```
Expected:
- `PASS`
- [ ] **Step 5: Commit**
```bash
git add ruoyi-ui/src/views/ccdiProject/components/detail/RiskPeopleSection.vue ruoyi-ui/tests/unit/preliminary-check-summary-and-people.test.js ruoyi-ui/tests/unit/preliminary-check-risk-people-binding.test.js
git commit -m "收口结果总览风险人员展示区块"
```
### Task 4: 做结果总览前端回归并补文档
**Files:**
- Create: `docs/reports/implementation/2026-03-20-results-overview-risk-people-merge-frontend-implementation.md`
- Create: `docs/tests/records/2026-03-20-results-overview-risk-people-merge-frontend-verification.md`
- Verify: `docs/design/2026-03-20-results-overview-risk-people-merge-design.md`
- [ ] **Step 1: Run final regression checks**
Run:
```bash
cd ruoyi-ui
node tests/unit/project-overview-api.test.js
node tests/unit/preliminary-check-api-integration.test.js
node tests/unit/preliminary-check-summary-and-people.test.js
node tests/unit/preliminary-check-risk-people-binding.test.js
node tests/unit/preliminary-check-states.test.js
node tests/unit/preliminary-check-layout.test.js
```
Expected:
- `PASS`
- 页面已不再依赖 TOP10 接口和 TOP10 区块
- [ ] **Step 2: Write implementation record**
记录本次前端改动内容:
- 页面移除 TOP10 区块
- 风险人员总览新增风险等级与命中模型数
- 页面请求从三路接口收口为两路接口
- [ ] **Step 3: Write verification record**
记录命令、执行时间、结果与结论,说明未启动额外前端长期进程;如临时启动调试服务,验证结束后需主动停止。
- [ ] **Step 4: Commit**
```bash
git add docs/reports/implementation/2026-03-20-results-overview-risk-people-merge-frontend-implementation.md docs/tests/records/2026-03-20-results-overview-risk-people-merge-frontend-verification.md
git commit -m "补充风险人员总览收口前端实施记录"
```