# 结果总览风险接口后端验证记录

## 验证范围

- 风险仪表盘接口
- 风险人员总览接口
- 中高风险人员 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 failure，0 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，会导致仪表盘“无风险人员”出现负数
