Files
ccdi/docs/reports/implementation/2026-03-20-results-overview-employee-result-table-backend-implementation.md

51 lines
5.6 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-20-results-overview-employee-result-table-design.md`](/Users/wkc/Desktop/ccdi/ccdi/.worktrees/codex/results-overview-employee-result-table/docs/design/2026-03-20-results-overview-employee-result-table-design.md) 落地。
- 实现范围与设计保持一致:
- 新增结果总览员工结果表
- 命中结果写库后同事务重算员工结果表
- 结果总览 4 类查询切换为只读员工结果表
- 模型卡片 `warningCount` 保持为原始标签命中次数
## 本次改动
- 在 [`2026-03-20-create-project-overview-employee-result-table.sql`](/Users/wkc/Desktop/ccdi/ccdi/.worktrees/codex/results-overview-employee-result-table/sql/migration/2026-03-20-create-project-overview-employee-result-table.sql) 新增 `ccdi_project_overview_employee_result` 建表脚本,落地 `project_id + staff_id_card` 唯一键、风险统计字段、模型/规则快照字段和审计字段。
- 在 [`CcdiProjectOverviewEmployeeResult.java`](/Users/wkc/Desktop/ccdi/ccdi/.worktrees/codex/results-overview-employee-result-table/ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/entity/CcdiProjectOverviewEmployeeResult.java)、[`CcdiProjectOverviewEmployeeResultMapper.java`](/Users/wkc/Desktop/ccdi/ccdi/.worktrees/codex/results-overview-employee-result-table/ccdi-project/src/main/java/com/ruoyi/ccdi/project/mapper/CcdiProjectOverviewEmployeeResultMapper.java)、[`CcdiProjectOverviewEmployeeResultMapper.xml`](/Users/wkc/Desktop/ccdi/ccdi/.worktrees/codex/results-overview-employee-result-table/ccdi-project/src/main/resources/mapper/ccdi/project/CcdiProjectOverviewEmployeeResultMapper.xml) 补齐结果表实体、最小 CRUD 和“按项目查询员工归并命中明细”的内部查询。
- 新增 [`CcdiProjectOverviewEmployeeHitRowVO.java`](/Users/wkc/Desktop/ccdi/ccdi/.worktrees/codex/results-overview-employee-result-table/ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/CcdiProjectOverviewEmployeeHitRowVO.java)、[`CcdiProjectOverviewEmployeeRuleSummaryVO.java`](/Users/wkc/Desktop/ccdi/ccdi/.worktrees/codex/results-overview-employee-result-table/ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/CcdiProjectOverviewEmployeeRuleSummaryVO.java)、[`CcdiProjectOverviewEmployeeModelSummaryVO.java`](/Users/wkc/Desktop/ccdi/ccdi/.worktrees/codex/results-overview-employee-result-table/ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/CcdiProjectOverviewEmployeeModelSummaryVO.java) 与 [`CcdiProjectOverviewEmployeeResultBuilder.java`](/Users/wkc/Desktop/ccdi/ccdi/.worktrees/codex/results-overview-employee-result-table/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectOverviewEmployeeResultBuilder.java),把“员工本人 + 亲属归并到员工本人”的现有口径前移到写库后的重算阶段,并输出:
- `risk_point`
- `model_codes_csv`
- `model_names_json`
- `hit_rules_json`
- `model_hit_summary_json`
- 在 [`ICcdiProjectOverviewService.java`](/Users/wkc/Desktop/ccdi/ccdi/.worktrees/codex/results-overview-employee-result-table/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/ICcdiProjectOverviewService.java) 与 [`CcdiProjectOverviewServiceImpl.java`](/Users/wkc/Desktop/ccdi/ccdi/.worktrees/codex/results-overview-employee-result-table/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectOverviewServiceImpl.java) 新增 `refreshOverviewEmployeeResults`,按固定顺序执行:
- 校验项目存在
- 删除当前项目历史员工结果
- 查询全量员工归并命中明细
- 通过 builder 聚合为结果表实体
- 批量写入员工结果表
- 基于聚合结果同步项目高/中/低风险人数
- 在 [`CcdiBankTagServiceImpl.java`](/Users/wkc/Desktop/ccdi/ccdi/.worktrees/codex/results-overview-employee-result-table/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiBankTagServiceImpl.java) 把标签成功链路从“只刷新项目风险人数”切换为“重算员工结果表并同步风险人数”,使标签重算失败时整条任务失败并回滚。
- 在 [`CcdiProjectOverviewMapper.xml`](/Users/wkc/Desktop/ccdi/ccdi/.worktrees/codex/results-overview-employee-result-table/ccdi-project/src/main/resources/mapper/ccdi/project/CcdiProjectOverviewMapper.xml) 将以下 4 类结果总览查询切换为只读 `ccdi_project_overview_employee_result`
- 风险人员总览
- 中高风险 TOP10
- 风险模型卡片
- 风险模型命中人员分页
- 模型卡片改为基于 `model_hit_summary_json` 展开统计,`warningCount` 继续按原始标签命中次数累加。
- 模型人员分页改为基于 `model_codes_csv``ANY / ALL` 过滤,并通过 `model_hit_summary_json``hit_rules_json` 还原 `modelNames``hitTagList`,保留 `keyword``deptId``pageNum``pageSize` 能力。
## 处理说明
- 没有新增平行 Controller 或对外接口,继续复用现有 `CcdiProjectOverviewController + Service + Mapper` 入口。
- 没有引入异步刷新、缓存或补丁式兜底逻辑,按设计保持“按项目整块重算”的最短实现路径。
- 为兼容现有 MySQL 能力,结果表快照查询使用 `json_extract + JSON 数组下标展开`,没有引入 `json_table` 或窗口函数。
- `hit_rules_json` 在规则快照中补充 `modelCode`,以便模型人员分页在按模型筛选时仍能只返回当前筛选模型范围内的异常标签。
## 提交记录
- `ec006f2` 新增结果总览员工结果表结构
- `0a58ac3` 实现结果总览员工结果聚合构建
- `f539c4b` 接入结果总览员工结果同步重算
- `ef10616` 切换结果总览查询到员工结果表