实现结果总览风险接口并完成回写联调

This commit is contained in:
wkc
2026-03-19 15:23:52 +08:00
parent 8ff6570ba8
commit cb8e144564
23 changed files with 1172 additions and 0 deletions

View File

@@ -0,0 +1,31 @@
# 结果总览风险接口后端实施记录
## 本次改动
- 新增结果总览专用 Controller、Service、Mapper 与 VO
- 新增风险仪表盘、风险人员总览、中高风险人员 TOP10 三个后端接口
- 新增员工维度风险聚合 SQL按命中去重规则数划分高、中、低风险
- 在项目流水标签重算成功后刷新并回写项目高、中、低风险人数
- 同步补充结构测试、SQL 结构测试、服务层测试、控制器测试以及打标回写测试
- 联调阶段根据真实环境反馈,将代表性规则选择 SQL 从窗口函数改为 MySQL 5.7 兼容的 `not exists` 实现
- 联调阶段根据真实重算反馈,将风险人数汇总结果读取逻辑从 `Integer` 强转改为 `Number.intValue()`,兼容 MySQL 聚合返回 `BigDecimal`
## 未包含内容
- 未扩展风险模型区接口
- 未扩展风险明细区接口
- 未增加设计范围外的导出、降级或补丁逻辑
## 涉及模块
- `ccdi-project`
- `docs/tests/records`
- `docs/reports/implementation`
## 验证情况
- 计划内核心验证 11 个测试全部通过
- 受影响回归用例 8 个测试全部通过
- 真实后端联调已确认 3 个结果总览接口可访问,其中风险人员总览与 TOP10 可返回真实数据
- 真实重算 `projectId=43` 已确认任务成功并写回高风险人数
- 修复 MySQL 5.7 兼容问题与 `BigDecimal` 取值问题后,完整验证总计 21 个测试通过,详见 `docs/tests/records/2026-03-19-results-overview-risk-api-backend-verification.md`

View File

@@ -0,0 +1,54 @@
# 结果总览风险接口后端验证记录
## 验证范围
- 风险仪表盘接口
- 风险人员总览接口
- 中高风险人员 TOP10 接口
- 打标完成后项目风险人数回写
## 验证命令
```bash
mvn test -pl ccdi-project -Dtest=CcdiProjectOverviewServiceStructureTest,CcdiProjectOverviewMapperSqlTest,CcdiProjectOverviewServiceImplTest,CcdiProjectOverviewControllerTest,CcdiBankTagServiceRiskCountRefreshTest
```
## 验证结果
- 2026-03-19 14:54:00 执行计划内核心验证命令,`CcdiProjectOverviewServiceStructureTest``CcdiProjectOverviewMapperSqlTest``CcdiProjectOverviewServiceImplTest``CcdiProjectOverviewControllerTest``CcdiBankTagServiceRiskCountRefreshTest` 共 11 个测试全部通过
- 2026-03-19 14:55:24 补充执行受影响旧用例 `CcdiBankTagServiceImplTest`8 个测试全部通过
- 2026-03-19 15:02 在真实联调环境发现 `risk-people``top-risk-people` 接口报错,根因是数据库版本为 MySQL 5.7.44,不支持 `row_number() over (...)`
- 2026-03-19 15:03 新增 MySQL 5.7 兼容性回归测试,改为 `not exists` 方式选择代表性规则后,`CcdiProjectOverviewMapperSqlTest` 重新通过
- 2026-03-19 15:04 重新执行结果总览相关测试组10 个测试全部通过
- 2026-03-19 15:14 在真实重算 `projectId=43` 时发现回写链路报错,根因是风险人数汇总 map 中的聚合值被映射为 `BigDecimal`
- 2026-03-19 15:15 新增 `BigDecimal` 场景回归测试,服务层改为按 `Number.intValue()` 读取风险人数,相关测试重新通过
- 合并验证命令如下:
```bash
mvn test -pl ccdi-project -Dtest=CcdiProjectOverviewServiceStructureTest,CcdiProjectOverviewMapperSqlTest,CcdiProjectOverviewServiceImplTest,CcdiProjectOverviewControllerTest,CcdiBankTagServiceRiskCountRefreshTest,CcdiBankTagServiceImplTest
```
- 2026-03-19 15:16:54 在修复 `BigDecimal` 取值问题后重新执行完整验证,`CcdiProjectOverviewServiceStructureTest``CcdiProjectOverviewMapperSqlTest``CcdiProjectOverviewServiceImplTest``CcdiProjectOverviewControllerTest``CcdiBankTagServiceRiskCountRefreshTest``CcdiBankTagServiceImplTest` 共 21 个测试全部通过
- 合并验证结果21 个测试全部通过0 failure0 error
## 真实接口验证
- 登录接口:`POST /login/test`,返回 `200`,成功拿到 token
- 仪表盘接口:`GET /ccdi/project/overview/dashboard?projectId=42`,返回 `200`
- 风险人员总览接口:`GET /ccdi/project/overview/risk-people?projectId=42`,返回 `200`,当前返回 1 条员工风险数据
- 中高风险 TOP10 接口:`GET /ccdi/project/overview/top-risk-people?projectId=42`,返回 `200`,当前返回 1 条中风险员工数据
- 2026-03-19 15:15:40 触发 `POST /ccdi/project/tags/rebuild``projectId=43` 的真实手动重算,任务 `id=22` 最终 `SUCCESS`
- 重算后 `ccdi_project.project_id=43` 更新为:`high_risk_count=2``medium_risk_count=0``low_risk_count=0`
- 重算后接口验证:
- `GET /ccdi/project/overview/risk-people?projectId=43` 返回 `200`,共 2 条高风险员工数据
- `GET /ccdi/project/overview/top-risk-people?projectId=43` 返回 `200`,共 2 条高风险 TOP 数据
- `GET /ccdi/project/overview/dashboard?projectId=43` 返回 `200`,高风险人数更新为 `2`
- 说明:`projectId=43``target_count` 当前仍为 `0`,因此仪表盘中的“无风险人员”计算结果为 `-2`;这反映的是项目基础人数未维护,与本次风险人数回写链路无关
## 结论
- 结果总览后端接口、员工风险聚合 SQL、打标后风险人数回写链路已按实施计划完成
- 已额外修复 MySQL 5.7 环境下的窗口函数兼容问题
- 已额外修复真实重算场景下的 `BigDecimal` 风险人数取值问题
- 只读查询接口与风险人数回写链路均已通过真实后端联调验证
- 当前剩余问题是部分项目的 `target_count` 基础数据为 0会导致仪表盘“无风险人员”出现负数