Files
ccdi/docs/superpowers/specs/2026-03-28-risk-detail-employee-credit-negative-design.md

287 lines
7.4 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.
# 风险明细员工负面征信设计文档
**日期**: 2026-03-28
**模块**: 项目详情 - 结果总览 - 风险明细
**作者**: Codex
**状态**: 已确认
## 1. 背景
当前项目详情页的 `结果总览 -> 风险明细` 中,已经具备:
- 上方 `涉疑交易明细` 真实列表
- 下方 `异常账户人员信息` 占位区块
同时,系统内已经存在独立的征信维护能力:
- 负面信息表:`ccdi_credit_negative_info`
- 维护页面:`/ccdi/creditInfo`
但风险明细区域还没有把“项目内员工”的负面征信信息展示出来。当前需求是在 `涉疑交易明细` 下方新增一个员工负面征信区块,用于展示当前项目结果总览口径内员工的负面征信信息。
## 2. 目标
- 在风险明细卡片内新增 `员工负面征信信息` 区块
- 展示当前项目结果总览口径内员工的负面征信信息
- 只展示负面征信信息,不混入负债明细
- 保持最短路径实现,不跳转、不展开、不引入额外摘要卡片
## 3. 范围
### 3.1 包含范围
- 结果总览 `风险明细` 区域新增员工负面征信列表
- 结果总览专用后端分页查询接口
- 项目员工范围与负面征信表的聚合查询 SQL
- 前端列表展示、分页与空态
### 3.2 不包含范围
- 不改造现有征信维护页面
- 不接入负债明细
- 不做行内展开、详情弹窗、跳转项目分析
- 不新增项目外员工查询逻辑
- 不增加原型外统计卡片、筛选器或导出能力
## 4. 已确认口径
### 4.1 区块位置
- 新区块放在 `涉疑交易明细` 下方
- 保持在同一个 `风险明细` 卡片内
- 不放到 `项目分析` 弹窗或其他页签中
### 4.2 员工范围
- 员工集合沿用结果总览当前口径
-`ccdi_project_overview_employee_result` 中当前项目员工为准
- 不扩大到项目配置中的全部目标员工
- 不收窄为仅涉疑交易涉及员工
### 4.3 展示形态
- 直接表格展示
- 一行一个员工
- 不做展开
- 负面信息全部字段直接放在列表中
### 4.4 数据范围
- 只展示 `ccdi_credit_negative_info` 负面信息
- 不展示 `ccdi_debts_info` 负债明细
- 只保留当前项目员工中“存在负面征信记录”的员工
- 没有负面征信记录的员工不展示空行
## 5. 方案对比
### 方案 A风险明细内新增独立负面征信表格区块
-`RiskDetailSection.vue` 中新增第二个真实业务表格
- 后端新增项目维度专用查询接口
- 前端直接展示负面信息全部字段
优点:
- 与需求位置完全一致
- 阅读路径最短
- 语义清晰,不污染全局征信维护页面
缺点:
- 需要新增一条结果总览专用查询链路
### 方案 B主表摘要 + 展开查看负面信息
- 主表先展示员工摘要
- 点击后再展开负面明细
优点:
- 页面更轻
缺点:
- 与“所有字段直接放列表里”的确认结果不一致
- 增加额外交互层级
### 方案 C接入项目分析弹窗中的征信摘要页签
- 不在风险明细新增区块
- 改为真实化 `项目分析 -> 征信摘要`
优点:
- 与人员分析语义更统一
缺点:
- 不符合“放在涉疑交易明细下面”的位置要求
- 用户路径变长
## 6. 最终方案
采用 **方案 A在风险明细内新增独立员工负面征信表格区块**
选择原因:
- 完全符合用户确认的位置与交互要求
- 最短路径满足业务目标
- 只需要补一条项目维度查询接口,不需要推翻现有征信维护链路
## 7. 前端设计
## 7.1 页面位置
页面位置固定在:
- `ruoyi-ui/src/views/ccdiProject/components/detail/RiskDetailSection.vue`
结构顺序调整为:
1. `涉疑交易明细`
2. `员工负面征信信息`
3. `异常账户人员信息`
## 7.2 区块标题
- 区块标题:`员工负面征信信息`
- 区块副标题:`展示当前项目员工的负面征信信息`
## 7.3 表格字段
列表字段固定为:
1. `员工姓名`
2. `身份证号`
3. `最近征信查询日期`
4. `民事案件笔数`
5. `民事案件金额`
6. `强制执行笔数`
7. `强制执行金额`
8. `行政处罚笔数`
9. `行政处罚金额`
以上字段全部来源于 `ccdi_credit_negative_info` 的现有业务字段,不新增派生字段。
## 7.4 展示规则
- 一行一个员工
- 金额列右对齐
- 日期列固定宽度
- 身份证号支持表格常规溢出处理
- 不提供展开、详情按钮、导出按钮
## 7.5 空态与分页
- 仅当列表为空时显示空态
- 空态文案:`当前项目暂无员工负面征信信息`
- 支持分页
- 分页交互与上方涉疑交易列表独立
## 8. 后端设计
## 8.1 接口设计
在结果总览控制器下新增专用接口:
### 1. 查询员工负面征信信息
- 路径:`GET /ccdi/project/overview/employee-credit-negative`
- 入参:
- `projectId`
- `pageNum`
- `pageSize`
- 出参:
- `rows`
- `total`
本次不新增导出接口。
## 8.2 查询口径
查询分两层组织:
### 第一层:项目员工范围
员工范围直接取自结果总览员工结果表:
- 表:`ccdi_project_overview_employee_result`
- 条件:`project_id = 当前项目`
该层只负责限定当前项目员工集合。
### 第二层:负面征信命中
将项目员工集合与 `ccdi_credit_negative_info` 做关联:
- 关联键:`staff_id_card = person_id`
- 只保留匹配到负面征信记录的员工
展示字段取值规则:
- `员工姓名`:优先取 `ccdi_credit_negative_info.person_name`
- 若负面征信姓名为空,可回退 `ccdi_project_overview_employee_result.staff_name`
- 其余负面字段直接取 `ccdi_credit_negative_info` 对应列
## 8.3 排序规则
固定排序:
1. `query_date` 倒序
2. `person_id` 升序
不增加前端自定义排序条件。
## 8.4 职责边界
- 不复用 `/ccdi/creditInfo/list`
- 不把项目口径硬塞进征信维护模块的现有接口
- 结果总览接口只负责“项目内员工负面征信展示”
- 征信维护接口继续负责“全局征信对象维护”
## 9. 数据流
整体链路如下:
`RiskDetailSection.vue -> projectOverview API -> CcdiProjectOverviewController -> CcdiProjectOverviewService -> CcdiProjectOverviewMapper -> ccdi_project_overview_employee_result + ccdi_credit_negative_info`
职责说明:
- 前端只负责区块展示与分页
- Controller 负责暴露结果总览专用接口
- Service 负责项目存在性校验、分页组装
- Mapper 负责项目员工范围与负面征信表聚合查询
## 10. 测试设计
### 10.1 前端测试
- 风险明细中新增 `员工负面征信信息` 区块
- 列表字段顺序与设计一致
- 空列表时展示指定空态文案
- 分页与上方涉疑交易列表互不干扰
### 10.2 后端测试
- 项目内员工存在负面征信记录时可正常查询
- 项目内员工无负面征信记录时不返回空记录
- 项目外员工负面征信记录不会混入结果
- 查询结果不包含负债明细字段
- 排序按 `query_date desc, person_id asc`
## 11. 实施边界
本次只覆盖结果总览风险明细中的员工负面征信展示:
- 不改征信维护菜单与权限
- 不改征信上传与覆盖写入逻辑
- 不新增负面征信统计卡片
- 不新增项目分析页签真实化改造
## 12. 后续动作
待用户审阅本设计文档后,按仓库约定继续输出两份实施计划:
- `docs/plans/backend/` 后端实施计划
- `docs/plans/frontend/` 前端实施计划