Files
ccdi/docs/reports/implementation/2026-07-09-project-risk-exclusion-implementation.md

5.0 KiB
Raw Blame History

项目结果总览排除可疑实施记录

基本信息

  • 实施日期2026-07-09
  • 功能范围:项目详情 > 结果总览 > 项目分析异常明细中的单条可疑预警排除
  • 需求口径:支持流水明细级预警和人员对象级预警排除;本期不做恢复入口;排除后刷新当前详情、风险人员列表、模型统计、涉疑交易明细;浏览器刷新后仍按排除记录过滤。

修改内容

后端

  • 新增排除记录表 ccdi_project_risk_exclusion 的增量 SQL。
  • 新增排除记录实体、DTO、Mapper 与 XML。
  • CcdiProjectOverviewController 新增 POST /ccdi/project/overview/risk-exclusions
  • 在结果总览服务中新增排除逻辑:
    • 校验项目可操作状态。
    • 校验排除目标必须存在于当前项目命中结果。
    • STATEMENTOBJECT 维度写入排除记录。
    • 写入后刷新项目员工结果汇总。
  • 在结果总览、风险人员、模型统计、人员详情、涉疑交易明细等 SQL 中统一过滤排除记录。
  • 修复对象型排除校验 SQL 中子查询 JOIN ON 引用外层字段导致的 MySQL 语法错误。

前端

  • 新增 excludeOverviewRisk API。
  • 在项目分析异常明细中为流水标签和异常对象摘要增加小号 排除可疑 按钮。
  • 使用 Element UI 弹窗录入排除原因并确认。
  • 排除成功后刷新:
    • 当前项目分析详情弹窗。
    • 风险人员列表。
    • 风险模型卡片和命中人员。
    • 涉疑交易明细,并清空流水详情缓存后重拉。
  • 外部人员详情弹窗同步支持相同排除能力。
  • 对象型确认文案改为优先显示规则摘要,避免把人员名当作规则名展示。
  • 修复排除成功后的用户体验:
    • 父级结果总览改为静默刷新,不再触发整页 loading也不重置已打开的项目分析弹窗。
    • 刷新结果回写到当前项目分析人员,弹窗侧栏异常标签与总览统计保持一致。
    • 项目分析详情未加载完成前不再回退展示 mock 异常明细,避免打开 查看详情 时闪过旧数据。

验证情况

编译与构建

  • mvn -pl ccdi-project -am compile -DskipTests:通过。
  • mvn -pl ruoyi-admin -am package -DskipTests:通过。
  • npm run build:prod:通过。

前端按本机实际可用环境执行:

  • .nvmrc 指向 Node 14.21.3
  • 本机 Node 14 环境缺少完整 npm按项目约定切换到已验证可用的 Node 22.22.3
  • PowerShell 中 C:\Users\20696\AppData\Local\nvm-nodejs\npm.cmd 链接不可用,本次构建改用已验证的 C:\Users\20696\AppData\Roaming\nvm\v22.22.3 下 Node/npm 执行。
  • 构建存在既有体积告警;未跟踪的 ruoyi-ui/public/0uS5znL.docx 被打入构建并触发体积提示,非本次功能改动产生。

接口验证

  • 后端真实 Java 服务启动在 http://127.0.0.1:62318/swagger-ui.html 返回 200。
  • 通过 POST /login/test 获取测试 token。
  • 对项目 42、人员 330101198802020033、对象型规则 ANNUAL_TURNOVER 调用排除接口:
    • 排除前对象规则包含 ANNUAL_TURNOVER,CUMULATIVE_INCOME
    • POST /ccdi/project/overview/risk-exclusions 返回 code=200
    • 排除后人员详情对象规则仅剩 CUMULATIVE_INCOME

浏览器验证

  • 使用真实前端开发服务 http://127.0.0.1:8088,代理真实后端 http://127.0.0.1:62318
  • 进入项目 42 的结果总览。
  • 点击风险人员的 查看详情,进入项目分析弹窗。
  • 在异常对象摘要点击 排除可疑 并确认。
  • 页面立即刷新:
    • 当前 URL 保持在 /ccdiProject/detail/42?tab=overview,未回到项目列表或结果总览首页。
    • 项目分析弹窗保持打开,未被父页面刷新关闭。
    • 风险人员疑似违规数从 5 变为 4
    • 模型统计从 大额交易 4 次 变为 大额交易 3 次
    • 风险人员列表风险等级从 高风险 变为 中风险
    • 命中人员异常标签去掉已排除对象规则。
    • 项目分析弹窗侧栏与异常对象摘要同步去掉 年流水交易额超限
  • 刷新浏览器后仍保持过滤结果,说明排除记录持久化生效。
  • 打开 查看详情 的首帧只显示空/加载态,不再闪过 mock 或上一次人员的异常明细。
  • 浏览器 Network 面板中本轮验收 22 个 XHR/fetch 请求均为 200未出现后端接口异常。

数据清理

  • 验证后删除本轮写入的 ANNUAL_TURNOVERCUMULATIVE_INCOME 对象型排除记录。
  • 通过真实后端 POST /ccdi/project/tags/rebuild 重算项目 42 标签与结果汇总。
  • 清理后确认本轮对象型排除记录剩余 0,项目 42 汇总恢复为 模型二测试员工 / rule_count=5 / model_count=2 / hit_count=5

影响范围

  • 新增排除表为独立业务表,不修改原始流水、员工、模型命中明细。
  • 查询层通过 NOT EXISTS 统一过滤已排除预警。
  • 本期不提供恢复入口;需要恢复时需后续单独设计恢复接口和入口。