新增结果总览员工结果表实施计划

This commit is contained in:
wkc
2026-03-20 17:14:12 +08:00
parent f2d1ad912f
commit 4c9ffb3fde
3 changed files with 598 additions and 0 deletions

View File

@@ -0,0 +1,345 @@
# Results Overview Employee Result Table Backend Implementation Plan
> **For agentic workers:** REQUIRED: Use superpowers:subagent-driven-development (if subagents available) or superpowers:executing-plans to implement this plan. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** 为结果总览页新增按“项目 + 员工”维度沉淀的员工结果表,并将风险仪表盘、风险人员总览、模型预警次数统计、命中模型涉及人员 4 类后端查询切换为只读该结果表。
**Architecture:**`ccdi-project` 内新增结果总览员工结果表及其维护 Mapper保留当前“员工本人 + 亲属归并到员工本人”的归并口径,但把重连表归并从页面查询阶段前移到标签写库后的同事务重算阶段。页面查询继续沿用 `CcdiProjectOverviewController + Service + Mapper` 入口,不新增平行接口,只替换底层查询数据源。
**Tech Stack:** Java 21, Spring Boot 3, MyBatis XML, MyBatis-Plus, Maven, MySQL, JUnit 5, Mockito
---
### Task 1: 新增结果总览员工结果表与基础映射
**Files:**
- Create: `sql/migration/2026-03-20-create-project-overview-employee-result-table.sql`
- Create: `ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/entity/CcdiProjectOverviewEmployeeResult.java`
- Create: `ccdi-project/src/main/java/com/ruoyi/ccdi/project/mapper/CcdiProjectOverviewEmployeeResultMapper.java`
- Create: `ccdi-project/src/main/resources/mapper/ccdi/project/CcdiProjectOverviewEmployeeResultMapper.xml`
- Test: `ccdi-project/src/test/java/com/ruoyi/ccdi/project/domain/entity/CcdiProjectOverviewEmployeeResultEntityTest.java`
- Test: `ccdi-project/src/test/java/com/ruoyi/ccdi/project/mapper/CcdiProjectOverviewEmployeeResultMapperXmlTest.java`
- [ ] **Step 1: Write the failing tests**
新增实体与 XML 静态测试,锁定以下内容:
- 结果表名为 `ccdi_project_overview_employee_result`
- 唯一键包含 `project_id``staff_id_card`
- 字段包含:
- `rule_count`
- `model_count`
- `hit_count`
- `risk_level_code`
- `model_codes_csv`
- `model_names_json`
- `hit_rules_json`
- `model_hit_summary_json`
- Mapper XML 至少声明:
- `deleteByProjectId`
- `insertBatch`
- `selectByProjectId`
- [ ] **Step 2: Run test to verify it fails**
Run:
```bash
mvn test -pl ccdi-project -Dtest=CcdiProjectOverviewEmployeeResultEntityTest,CcdiProjectOverviewEmployeeResultMapperXmlTest
```
Expected:
- `FAIL`
- 原因是结果表实体、Mapper 与 SQL 脚本尚未创建
- [ ] **Step 3: Write minimal implementation**
创建结果表结构与基础映射,要求:
- 表粒度固定为 `project_id + staff_id_card`
- JSON 字段使用可承载结构化快照的类型
- 审计字段与项目现有表风格保持一致
- Mapper XML 只提供本轮需要的最小 CRUD
- 按项目删除
- 批量插入
- 按项目查询
SQL 脚本如需执行,使用:
```bash
bin/mysql_utf8_exec.sh sql/migration/2026-03-20-create-project-overview-employee-result-table.sql
```
- [ ] **Step 4: Run test to verify it passes**
Run:
```bash
mvn test -pl ccdi-project -Dtest=CcdiProjectOverviewEmployeeResultEntityTest,CcdiProjectOverviewEmployeeResultMapperXmlTest
```
Expected:
- `PASS`
- [ ] **Step 5: Commit**
```bash
git add sql/migration/2026-03-20-create-project-overview-employee-result-table.sql ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/entity/CcdiProjectOverviewEmployeeResult.java ccdi-project/src/main/java/com/ruoyi/ccdi/project/mapper/CcdiProjectOverviewEmployeeResultMapper.java ccdi-project/src/main/resources/mapper/ccdi/project/CcdiProjectOverviewEmployeeResultMapper.xml ccdi-project/src/test/java/com/ruoyi/ccdi/project/domain/entity/CcdiProjectOverviewEmployeeResultEntityTest.java ccdi-project/src/test/java/com/ruoyi/ccdi/project/mapper/CcdiProjectOverviewEmployeeResultMapperXmlTest.java
git commit -m "新增结果总览员工结果表结构"
```
### Task 2: 实现员工归并明细查询与结果表聚合构建
**Files:**
- Create: `ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/CcdiProjectOverviewEmployeeHitRowVO.java`
- Create: `ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/CcdiProjectOverviewEmployeeRuleSummaryVO.java`
- Create: `ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/CcdiProjectOverviewEmployeeModelSummaryVO.java`
- Create: `ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectOverviewEmployeeResultBuilder.java`
- Modify: `ccdi-project/src/main/resources/mapper/ccdi/project/CcdiProjectOverviewEmployeeResultMapper.xml`
- Modify: `ccdi-project/src/main/java/com/ruoyi/ccdi/project/mapper/CcdiProjectOverviewEmployeeResultMapper.java`
- Test: `ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectOverviewEmployeeResultBuilderTest.java`
- [ ] **Step 1: Write the failing test**
为结果构建器新增单测,锁定以下聚合口径:
- 同一员工多条命中按 `staff_id_card` 合并为一条结果
- 亲属命中已归并到员工本人后再参与聚合
- `ruleCount``rule_code` 去重
- `modelCount``model_code` 去重
- `hitCount` 为原始命中次数累计
- `riskLevelCode` 沿用当前分级:
- `>= 5``HIGH`
- `2-4``MEDIUM`
- 其余为 `LOW`
- `model_hit_summary_json` 中每个模型的 `warningCount` 为原始标签命中次数
- [ ] **Step 2: Run test to verify it fails**
Run:
```bash
mvn test -pl ccdi-project -Dtest=CcdiProjectOverviewEmployeeResultBuilderTest
```
Expected:
- `FAIL`
- 原因是构建器与原始命中明细类型尚未实现
- [ ] **Step 3: Write minimal implementation**
实现以下内容:
- 在结果表 Mapper 中新增“按项目查询员工归并命中明细”的内部查询
- 该查询可以复用当前归并口径,但只供重算链路使用,不供页面查询直接调用
-`CcdiProjectOverviewEmployeeResultBuilder` 中完成 Java 聚合,输出可批量入表的实体列表
- 生成:
- `risk_point`
- `model_codes_csv`
- `model_names_json`
- `hit_rules_json`
- `model_hit_summary_json`
不要在这一阶段改造 Controller 或页面查询 SQL。
- [ ] **Step 4: Run test to verify it passes**
Run:
```bash
mvn test -pl ccdi-project -Dtest=CcdiProjectOverviewEmployeeResultBuilderTest
```
Expected:
- `PASS`
- [ ] **Step 5: Commit**
```bash
git add ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/CcdiProjectOverviewEmployeeHitRowVO.java ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/CcdiProjectOverviewEmployeeRuleSummaryVO.java ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/CcdiProjectOverviewEmployeeModelSummaryVO.java ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectOverviewEmployeeResultBuilder.java ccdi-project/src/main/java/com/ruoyi/ccdi/project/mapper/CcdiProjectOverviewEmployeeResultMapper.java ccdi-project/src/main/resources/mapper/ccdi/project/CcdiProjectOverviewEmployeeResultMapper.xml ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectOverviewEmployeeResultBuilderTest.java
git commit -m "实现结果总览员工结果聚合构建"
```
### Task 3: 接入标签写库后的同事务重算链路
**Files:**
- Modify: `ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/ICcdiProjectOverviewService.java`
- Modify: `ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectOverviewServiceImpl.java`
- Modify: `ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiBankTagServiceImpl.java`
- Modify: `ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/CcdiProjectOverviewServiceStructureTest.java`
- Modify: `ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectOverviewServiceImplTest.java`
- Modify: `ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiBankTagServiceRiskCountRefreshTest.java`
- [ ] **Step 1: Write the failing tests**
调整服务结构与事务链路测试,锁定以下行为:
- `ICcdiProjectOverviewService` 暴露“重算结果总览员工结果”的服务方法
- 标签重算成功后,先写标签结果,再重算员工结果表,再同步项目风险人数
- 如果员工结果表重算失败,标签任务整体失败并回滚
- [ ] **Step 2: Run test to verify it fails**
Run:
```bash
mvn test -pl ccdi-project -Dtest=CcdiProjectOverviewServiceStructureTest,CcdiProjectOverviewServiceImplTest,CcdiBankTagServiceRiskCountRefreshTest
```
Expected:
- `FAIL`
- 原因是当前只刷新项目风险人数,尚未维护结果总览员工结果表
- [ ] **Step 3: Write minimal implementation**
实现以下最小改动:
-`CcdiProjectOverviewServiceImpl` 中新增按项目重算员工结果表的方法
- 方法内部顺序固定为:
- 校验项目存在
- 删除当前项目历史结果
- 查询项目全量员工归并命中明细
- 通过构建器聚合
- 批量写入结果表
- 基于结果表同步项目高/中/低风险人数
-`CcdiBankTagServiceImpl` 中把成功链路切换为调用新方法
不要在这一步修改结果总览 Controller 对外接口。
- [ ] **Step 4: Run test to verify it passes**
Run:
```bash
mvn test -pl ccdi-project -Dtest=CcdiProjectOverviewServiceStructureTest,CcdiProjectOverviewServiceImplTest,CcdiBankTagServiceRiskCountRefreshTest
```
Expected:
- `PASS`
- [ ] **Step 5: Commit**
```bash
git add ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/ICcdiProjectOverviewService.java ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectOverviewServiceImpl.java ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiBankTagServiceImpl.java ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/CcdiProjectOverviewServiceStructureTest.java ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectOverviewServiceImplTest.java ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiBankTagServiceRiskCountRefreshTest.java
git commit -m "接入结果总览员工结果同步重算"
```
### Task 4: 将结果总览 4 类查询切换为只读结果表
**Files:**
- Modify: `ccdi-project/src/main/java/com/ruoyi/ccdi/project/mapper/CcdiProjectOverviewMapper.java`
- Modify: `ccdi-project/src/main/resources/mapper/ccdi/project/CcdiProjectOverviewMapper.xml`
- Modify: `ccdi-project/src/test/java/com/ruoyi/ccdi/project/mapper/CcdiProjectOverviewMapperSqlTest.java`
- Modify: `ccdi-project/src/test/java/com/ruoyi/ccdi/project/mapper/CcdiProjectOverviewMapperRiskModelCardsTest.java`
- Modify: `ccdi-project/src/test/java/com/ruoyi/ccdi/project/mapper/CcdiProjectOverviewMapperRiskModelPeopleTest.java`
- Modify: `ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectOverviewServiceImplTest.java`
- [ ] **Step 1: Write the failing tests**
补充或调整 Mapper/Service 测试,锁定以下要求:
- 风险仪表盘查询不再依赖 `resolvedEmployeeRiskBaseSql`
- 风险人员总览从结果表返回 `riskLevel``modelCount``riskPoint`
- 模型卡片 `warningCount` 取自结果表中的模型汇总快照
- 模型人员列表继续支持:
- `ANY`
- `ALL`
- `keyword`
- `deptId`
- `pageNum`
- `pageSize`
- 4 类页面查询都改为读 `ccdi_project_overview_employee_result`
- [ ] **Step 2: Run test to verify it fails**
Run:
```bash
mvn test -pl ccdi-project -Dtest=CcdiProjectOverviewMapperSqlTest,CcdiProjectOverviewMapperRiskModelCardsTest,CcdiProjectOverviewMapperRiskModelPeopleTest,CcdiProjectOverviewServiceImplTest
```
Expected:
- `FAIL`
- 原因是当前结果总览查询仍直接读取重连表聚合 SQL
- [ ] **Step 3: Write minimal implementation**
`CcdiProjectOverviewMapper.xml` 中:
- 风险仪表盘按结果表风险等级统计
- 风险人员总览改为单表排序查询
- 模型卡片基于 `model_hit_summary_json` 或等价结构展开聚合
- 模型人员分页基于结果表完成 `ANY / ALL / keyword / deptId` 过滤,并从快照字段组装 `modelNames``hitTagList`
`CcdiProjectOverviewServiceImpl` 中只做最小适配,不新增新接口,不改前端响应结构。
不要改动:
- 风险明细相关逻辑
- 已移出页面范围之外的 TOP10 逻辑
- [ ] **Step 4: Run test to verify it passes**
Run:
```bash
mvn test -pl ccdi-project -Dtest=CcdiProjectOverviewMapperSqlTest,CcdiProjectOverviewMapperRiskModelCardsTest,CcdiProjectOverviewMapperRiskModelPeopleTest,CcdiProjectOverviewServiceImplTest
```
Expected:
- `PASS`
- [ ] **Step 5: Commit**
```bash
git add ccdi-project/src/main/java/com/ruoyi/ccdi/project/mapper/CcdiProjectOverviewMapper.java ccdi-project/src/main/resources/mapper/ccdi/project/CcdiProjectOverviewMapper.xml ccdi-project/src/test/java/com/ruoyi/ccdi/project/mapper/CcdiProjectOverviewMapperSqlTest.java ccdi-project/src/test/java/com/ruoyi/ccdi/project/mapper/CcdiProjectOverviewMapperRiskModelCardsTest.java ccdi-project/src/test/java/com/ruoyi/ccdi/project/mapper/CcdiProjectOverviewMapperRiskModelPeopleTest.java ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectOverviewServiceImplTest.java
git commit -m "切换结果总览查询到员工结果表"
```
### Task 5: 补充后端实施与验证文档
**Files:**
- Create: `docs/reports/implementation/2026-03-20-results-overview-employee-result-table-backend-implementation.md`
- Create: `docs/tests/records/2026-03-20-results-overview-employee-result-table-backend-verification.md`
- Verify: `docs/design/2026-03-20-results-overview-employee-result-table-design.md`
- [ ] **Step 1: Write implementation record**
记录以下内容:
- 新增结果总览员工结果表
- 命中结果写库后同事务重算
- 结果总览 4 类查询改为只读结果表
- 保持模型卡片 `warningCount` 为原始标签命中次数
- [ ] **Step 2: Write verification record**
记录执行过的命令、日期、结果和结论,至少包含:
```bash
mvn test -pl ccdi-project -Dtest=CcdiProjectOverviewEmployeeResultEntityTest,CcdiProjectOverviewEmployeeResultMapperXmlTest
mvn test -pl ccdi-project -Dtest=CcdiProjectOverviewEmployeeResultBuilderTest
mvn test -pl ccdi-project -Dtest=CcdiProjectOverviewServiceStructureTest,CcdiProjectOverviewServiceImplTest,CcdiBankTagServiceRiskCountRefreshTest
mvn test -pl ccdi-project -Dtest=CcdiProjectOverviewMapperSqlTest,CcdiProjectOverviewMapperRiskModelCardsTest,CcdiProjectOverviewMapperRiskModelPeopleTest,CcdiProjectOverviewServiceImplTest
```
如执行 SQL 脚本,记录:
```bash
bin/mysql_utf8_exec.sh sql/migration/2026-03-20-create-project-overview-employee-result-table.sql
```
- [ ] **Step 3: Commit**
```bash
git add docs/reports/implementation/2026-03-20-results-overview-employee-result-table-backend-implementation.md docs/tests/records/2026-03-20-results-overview-employee-result-table-backend-verification.md
git commit -m "补充结果总览员工结果表后端实施记录"
```

View File

@@ -0,0 +1,223 @@
# Results Overview Employee Result Table Frontend Implementation Plan
> **For agentic workers:** REQUIRED: Use superpowers:subagent-driven-development (if subagents available) or superpowers:executing-plans to implement this plan. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** 在后端切换到结果总览员工结果表出数后,保持结果总览页现有交互、文案和接口消费方式不变,并补充前端回归保护,确保风险仪表盘、风险人员总览、模型区展示持续稳定。
**Architecture:** 前端不新增路由、不新增页面、不调整结果总览现有组件拆分。保持 `PreliminaryCheck.vue``RiskPeopleSection.vue``RiskModelSection.vue` 继续消费当前接口返回结构,前端工作的重点放在 API/组件契约回归测试与最小必要的归一化兼容,而不是重做 UI 交互。
**Tech Stack:** Vue 2, Element UI, Axios (`@/utils/request`), Node.js
---
### Task 1: 锁定结果总览前端 API 契约不变
**Files:**
- Modify: `ruoyi-ui/tests/unit/project-overview-api.test.js`
- Modify: `ruoyi-ui/tests/unit/preliminary-check-api-integration.test.js`
- Verify: `ruoyi-ui/src/api/ccdi/projectOverview.js`
- [ ] **Step 1: Write the failing test**
补充 API 静态断言,锁定以下约束:
- 仍使用现有接口路径:
- `/ccdi/project/overview/dashboard`
- `/ccdi/project/overview/risk-people`
- `/ccdi/project/overview/risk-models/cards`
- `/ccdi/project/overview/risk-models/people`
- 结果总览前端不感知后端底层是否改为结果表
- 模型人员接口仍透传:
- `projectId`
- `modelCodes`
- `matchMode`
- `keyword`
- `deptId`
- `pageNum`
- `pageSize`
- [ ] **Step 2: Run test to verify it fails**
Run:
```bash
cd ruoyi-ui
node tests/unit/project-overview-api.test.js
node tests/unit/preliminary-check-api-integration.test.js
```
Expected:
- `FAIL`
- 原因是测试尚未锁定“后端数据源改造但前端 API 契约不变”的预期
- [ ] **Step 3: Write minimal implementation**
如现有 API 封装已经满足约束,则只补测试,不修改源码。
如果测试暴露出接口参数或路径未被稳定消费,再做最小调整,要求:
- 不新增新 API 方法
- 不改变接口名称
- 不改变组件调用方式
- [ ] **Step 4: Run test to verify it passes**
Run:
```bash
cd ruoyi-ui
node tests/unit/project-overview-api.test.js
node tests/unit/preliminary-check-api-integration.test.js
```
Expected:
- `PASS`
- [ ] **Step 5: Commit**
```bash
git add ruoyi-ui/tests/unit/project-overview-api.test.js ruoyi-ui/tests/unit/preliminary-check-api-integration.test.js ruoyi-ui/src/api/ccdi/projectOverview.js
git commit -m "锁定结果总览前端接口契约"
```
### Task 2: 锁定结果总览页面展示契约与回归边界
**Files:**
- Modify: `ruoyi-ui/tests/unit/preliminary-check-summary-and-people.test.js`
- Modify: `ruoyi-ui/tests/unit/preliminary-check-model-and-detail.test.js`
- Modify: `ruoyi-ui/tests/unit/preliminary-check-risk-people-binding.test.js`
- Modify: `ruoyi-ui/tests/unit/preliminary-check-model-linkage-flow.test.js`
- Verify: `ruoyi-ui/src/views/ccdiProject/components/detail/PreliminaryCheck.vue`
- Verify: `ruoyi-ui/src/views/ccdiProject/components/detail/RiskPeopleSection.vue`
- Verify: `ruoyi-ui/src/views/ccdiProject/components/detail/RiskModelSection.vue`
- [ ] **Step 1: Write the failing test**
补充组件回归断言,锁定以下边界:
- 风险仪表盘仍展示:
- 总人数
- 高风险
- 中风险
- 低风险
- 无风险人员
- 风险人员总览仍展示:
- 姓名
- 身份证号
- 所属部门
- 风险等级
- 命中模型数
- 核心异常点
- 模型区仍支持:
- 模型卡片统计
- `ANY / ALL`
- 关键字筛选
- 部门筛选
- 异常标签展示
- 页面不重新引入已移除的 TOP10 区块
- [ ] **Step 2: Run test to verify it fails**
Run:
```bash
cd ruoyi-ui
node tests/unit/preliminary-check-summary-and-people.test.js
node tests/unit/preliminary-check-model-and-detail.test.js
node tests/unit/preliminary-check-risk-people-binding.test.js
node tests/unit/preliminary-check-model-linkage-flow.test.js
```
Expected:
- `FAIL`
- 原因是测试尚未完整覆盖“后端改为结果表出数后前端展示不变”的场景
- [ ] **Step 3: Write minimal implementation**
优先只改测试。
如果测试发现组件对空数组、字段顺序或字段缺省值存在脆弱依赖,再在以下文件中做最小兼容处理:
- `PreliminaryCheck.vue`
- `RiskPeopleSection.vue`
- `RiskModelSection.vue`
兼容处理原则:
- 只做空值归一化
- 只做字段缺省保护
- 不改变现有交互、布局、文案和样式
- [ ] **Step 4: Run test to verify it passes**
Run:
```bash
cd ruoyi-ui
node tests/unit/preliminary-check-summary-and-people.test.js
node tests/unit/preliminary-check-model-and-detail.test.js
node tests/unit/preliminary-check-risk-people-binding.test.js
node tests/unit/preliminary-check-model-linkage-flow.test.js
```
Expected:
- `PASS`
- [ ] **Step 5: Commit**
```bash
git add ruoyi-ui/tests/unit/preliminary-check-summary-and-people.test.js ruoyi-ui/tests/unit/preliminary-check-model-and-detail.test.js ruoyi-ui/tests/unit/preliminary-check-risk-people-binding.test.js ruoyi-ui/tests/unit/preliminary-check-model-linkage-flow.test.js ruoyi-ui/src/views/ccdiProject/components/detail/PreliminaryCheck.vue ruoyi-ui/src/views/ccdiProject/components/detail/RiskPeopleSection.vue ruoyi-ui/src/views/ccdiProject/components/detail/RiskModelSection.vue
git commit -m "补充结果总览前端展示回归保护"
```
### Task 3: 执行结果总览前端专项回归验证
**Files:**
- Create: `docs/reports/implementation/2026-03-20-results-overview-employee-result-table-frontend-implementation.md`
- Create: `docs/tests/records/2026-03-20-results-overview-employee-result-table-frontend-verification.md`
- Verify: `docs/design/2026-03-20-results-overview-employee-result-table-design.md`
- [ ] **Step 1: Run focused frontend regression tests**
Run:
```bash
cd ruoyi-ui
node tests/unit/project-overview-api.test.js
node tests/unit/preliminary-check-api-integration.test.js
node tests/unit/preliminary-check-summary-and-people.test.js
node tests/unit/preliminary-check-model-and-detail.test.js
node tests/unit/preliminary-check-risk-people-binding.test.js
node tests/unit/preliminary-check-model-linkage-flow.test.js
```
Expected:
- `PASS`
- 证明结果总览页前端契约与交互边界在后端数据源改造后保持稳定
- [ ] **Step 2: Write implementation and verification records**
实施记录需说明:
- 前端未新增页面和交互
- 前端重点是锁定 API 与展示契约
- 若有源码调整,仅为最小兼容处理
验证记录需写明:
- 执行日期
- 执行命令
- 每条命令结果
- 最终结论
- [ ] **Step 3: Commit**
```bash
git add docs/reports/implementation/2026-03-20-results-overview-employee-result-table-frontend-implementation.md docs/tests/records/2026-03-20-results-overview-employee-result-table-frontend-verification.md
git commit -m "补充结果总览员工结果表前端验证记录"
```

View File

@@ -0,0 +1,30 @@
# 结果总览员工结果表实施计划记录
## 变更概述
- 基于已确认的设计文档,新增后端实施计划 1 份。
- 基于已确认的设计文档,新增前端实施计划 1 份。
- 本次计划围绕“按项目 + 员工沉淀结果快照,再由页面查询从结果表出数”展开。
- 计划明确命中结果写库成功后,在同一事务内按项目整块重算结果总览员工结果表。
## 新增文件
- `docs/plans/backend/2026-03-20-results-overview-employee-result-table-backend-implementation.md`
- `docs/plans/frontend/2026-03-20-results-overview-employee-result-table-frontend-implementation.md`
## 计划结论
- 后端计划聚焦:
- 新增结果总览员工结果表
- 实现员工归并结果构建
- 接入标签写库后的同步重算
- 将结果总览 4 类查询切换为只读结果表
- 前端计划聚焦:
- 锁定现有 API 契约不变
- 锁定结果总览页面展示和交互不变
- 通过回归测试保护后端数据源迁移后的页面稳定性
## 说明
- 本次按仓库规范,将实施计划分别落到 `docs/plans/backend/``docs/plans/frontend/`
- 本轮尚未进入代码实现阶段,本文件仅记录计划沉淀结果。