补充结果总览风险人员区块收口设计文档

This commit is contained in:
wkc
2026-03-20 09:22:35 +08:00
parent 99f96e101e
commit ecd7ab9d47

View File

@@ -0,0 +1,319 @@
# 结果总览风险人员区块收口设计文档
**模块**: 初核项目详情 - 结果总览
**日期**: 2026-03-20
## 一、背景
当前结果总览页面的人员相关信息拆分为两个区块:
- 风险人员总览
- 中高风险人员TOP10
现状问题是:
1. 风险等级、命中模型数只在 `中高风险人员TOP10` 中展示。
2. 风险人员总览与 TOP10 在页面上存在信息拆散,用户需要跨区块比对。
3. 本轮需求要求移除独立的 TOP10 区块,并把关键风险字段收拢到风险人员总览中。
## 二、目标
本次设计目标如下:
1. 移除结果总览页面中的 `中高风险人员TOP10` 区块。
2. 保留 `风险人员总览` 作为唯一人员榜单区块。
3. 在风险人员总览现有列基础上新增:
- `风险等级`
- `命中模型数`
4. 保持当前风险人员总览的排序逻辑不变。
## 三、范围
### 3.1 本次范围
- 调整结果总览页面人员区块结构
- 扩展风险人员总览接口返回字段
- 移除结果总览页面对 TOP10 接口的依赖
- 更新前端静态断言测试
- 补充本次设计文档、后续前后端实施计划与实施记录
### 3.2 不在本次范围
- 不调整风险仪表盘区块
- 不调整风险模型区和风险明细区
- 不修改风险等级计算规则
- 不修改风险人员总览当前排序口径
- 不在本轮删除后端独立 TOP10 接口
## 四、现状分析
### 4.1 页面现状
当前 `RiskPeopleSection.vue` 中包含两个 block
1. `风险人员总览`
2. `中高风险人员TOP10`
风险人员总览当前展示字段为:
- 姓名
- 身份证号
- 所属部门
- 疑似违规数
- 核心异常点
- 操作
TOP10 当前展示字段为:
- 姓名
- 身份证号
- 所属部门
- 风险等级
- 命中模型数
- 操作
### 4.2 后端现状
后端员工聚合结果 `CcdiProjectEmployeeRiskAggregateVO` 已经包含以下字段:
- `modelCount`
- `riskLevelCode`
- `riskLevelName`
- `riskLevelSort`
这说明本轮需求不需要新增新的统计口径,后端已有聚合结果足以支撑风险人员总览增加两列展示。
## 五、方案对比
### 5.1 方案 A扩展风险人员总览接口并移除页面 TOP10 依赖
做法:
- 风险人员总览接口直接补充返回 `riskLevel``riskLevelType``modelCount`
- 前端页面只保留一个风险人员总览表格
- 前端不再请求 TOP10 接口
优点:
- 最短路径实现
- 字段来源单一,口径一致
- 不需要前端做补丁式字段拼装
- 与本轮“移除 TOP10 页面区块”的需求完全一致
缺点:
- 风险人员总览表格横向字段增加,需要适度调整列宽
### 5.2 方案 B前端继续请求 TOP10再回填到风险人员总览
做法:
- 风险人员总览接口不变
- 前端同时请求风险人员总览和 TOP10
- 前端根据人员信息把风险等级和命中模型数拼回总览表格
问题:
- 字段来源分裂
- 口径容易漂移
- 属于补丁式方案,不符合本次最短路径和单一口径要求
### 5.3 方案 C只隐藏 TOP10 区块,不补真实字段
做法:
- 页面隐藏 TOP10
- 风险人员总览接口和表格不扩展
问题:
- 无法满足“新增风险等级和命中模型数”的需求
- 需求不完整
### 5.4 结论
采用方案 A。
## 六、目标页面结构
人员区块调整后,结果总览页面仍保留四大区块:
1. 风险仪表盘
2. 风险人员总览
3. 风险模型
4. 风险明细
其中人员区块收口为单表结构,风险人员总览列顺序为:
1. 序号
2. 姓名
3. 身份证号
4. 所属部门
5. 疑似违规数
6. 风险等级
7. 命中模型数
8. 核心异常点
9. 操作
说明:
- `风险等级` 使用标签展示,继续直接绑定后端返回的 `riskLevelType`
- `命中模型数` 直接展示后端返回的 `modelCount`
- `核心异常点` 继续完整展示,不做压缩式改造
## 七、后端设计
### 7.1 接口边界
继续沿用现有接口:
- `GET /ccdi/project/overview/risk-people`
入参不变:
- `projectId`
### 7.2 返回结构调整
风险人员总览返回项新增以下字段:
- `riskLevel`
- `riskLevelType`
- `modelCount`
调整后示例:
```json
{
"overviewList": [
{
"name": "李四",
"idNo": "330000000000000001",
"department": "信息二部",
"riskCount": 5,
"riskLevel": "中风险",
"riskLevelType": "warning",
"modelCount": 4,
"riskPoint": "大额单笔收入、疑似兼职",
"actionLabel": "查看详情"
}
]
}
```
### 7.3 聚合与映射
后端不新增新的聚合 SQL 口径,直接复用现有员工风险聚合结果:
- `hitCount` 继续作为 `riskCount`
- `riskLevelCode` 用于映射 `riskLevel``riskLevelType`
- `modelCount` 直接透传到风险人员总览项
服务层新增映射规则:
- `HIGH -> 高风险 / danger`
- `MEDIUM -> 中风险 / warning`
- `LOW -> 低风险 / info`
### 7.4 排序口径
风险人员总览继续沿用当前查询顺序:
- `risk_level_sort asc`
- `model_count desc`
- `rule_count desc`
- `staff_id_card asc`
本次不改成新的重点排序规则。
## 八、前端设计
### 8.1 页面结构调整
`RiskPeopleSection.vue` 中:
- 保留风险人员总览 block
- 删除中高风险人员TOP10 block
- 在风险人员总览表格中新增两列:
- 风险等级
- 命中模型数
### 8.2 数据装配调整
`PreliminaryCheck.vue` 中页面加载时:
- 保留 `dashboard` 请求
- 保留 `riskPeople` 请求
- 移除 `topRiskPeople` 请求
`createOverviewLoadedData` 中:
- 保留 `overviewList` 注入
- 移除 `topRiskList` 对页面展示的依赖
### 8.3 Mock 与状态数据
`preliminaryCheck.mock.js` 中:
- `overviewList` 示例数据补充 `riskLevel``riskLevelType``modelCount`
- 页面状态数据不再依赖 `topRiskList`
## 九、异常与空态处理
- `projectId` 为空时,继续展示现有空态
- 接口异常时,继续沿用当前结果总览页面的空态回退
- 风险人员总览无数据时,展示单表空态,不再出现第二个 TOP10 区块
- 风险等级标签由后端直接提供,不在前端新增业务推导逻辑
## 十、验证设计
### 10.1 后端验证
需要验证:
1. 风险人员总览接口返回新增字段:
- `riskLevel`
- `riskLevelType`
- `modelCount`
2. 风险等级口径保持原逻辑不变
3. 疑似违规数仍然来自 `hitCount`
4. 风险人员总览排序不变
### 10.2 前端验证
需要验证:
1. 结果总览页面不再请求 TOP10 接口
2. 人员区块只渲染一个表格
3. 风险人员总览出现新增两列:
- 风险等级
- 命中模型数
4. 加载态、空态、正常态均可正常展示
### 10.3 测试资产更新
前端静态断言测试需要同步调整:
- 移除对 `中高风险人员TOP10` 文案的依赖
- 增加对 `风险等级``命中模型数` 的断言
## 十一、文档沉淀
本次设计确认后,后续需补齐以下文档:
1. 后端实施计划:`docs/plans/backend/`
2. 前端实施计划:`docs/plans/frontend/`
3. 实施记录:`docs/reports/implementation/`
4. 验证记录:`docs/tests/records/`
## 十二、结论
本次改动采用“单表收口”的最短路径方案:
1. 页面移除独立的 `中高风险人员TOP10`
2. `风险人员总览` 补充 `风险等级``命中模型数`
3. 后端扩展现有风险人员总览接口返回字段
4. 前端移除对 TOP10 接口的页面依赖
5. 排序、风险等级计算和其他区块保持不变
该方案满足需求、口径单一、改动边界清晰,且不会把本轮调整扩散到结果总览其他功能块。