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

7.4 KiB
Raw Blame History

风险明细员工负面征信设计文档

日期: 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/ 前端实施计划