From f4a72a61109a47c1c46d404bcbc2b8dbce2103b2 Mon Sep 17 00:00:00 2001 From: wkc <978997012@qq.com> Date: Tue, 31 Mar 2026 16:18:20 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85=E5=BC=82=E5=B8=B8=E8=B4=A6?= =?UTF-8?q?=E6=88=B7=E6=A8=A1=E5=9E=8B=E5=AE=9E=E6=96=BD=E8=AE=A1=E5=88=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...nt-bank-tag-backend-implementation-plan.md | 494 ++++++++++++++++++ ...t-bank-tag-frontend-implementation-plan.md | 167 ++++++ ...1-abnormal-account-bank-tag-plan-record.md | 22 + 3 files changed, 683 insertions(+) create mode 100644 docs/plans/backend/2026-03-31-abnormal-account-bank-tag-backend-implementation-plan.md create mode 100644 docs/plans/frontend/2026-03-31-abnormal-account-bank-tag-frontend-implementation-plan.md create mode 100644 docs/reports/implementation/2026-03-31-abnormal-account-bank-tag-plan-record.md diff --git a/docs/plans/backend/2026-03-31-abnormal-account-bank-tag-backend-implementation-plan.md b/docs/plans/backend/2026-03-31-abnormal-account-bank-tag-backend-implementation-plan.md new file mode 100644 index 00000000..a30246ed --- /dev/null +++ b/docs/plans/backend/2026-03-31-abnormal-account-bank-tag-backend-implementation-plan.md @@ -0,0 +1,494 @@ +# 异常账户模型接入银行流水打标后端 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. +> +> 仓库约束:当前仓库明确禁止开启 subagent,执行时统一使用 `superpowers:executing-plans`。 + +**Goal:** 在后端正式接入异常账户模型,新增 `ccdi_account_info`、两条对象型打标规则、最小可命中测试数据,并通过 Java 测试和 MySQL MCP SQL 校验确认命中口径正确。 + +**Architecture:** 复用现有 `CcdiBankTagServiceImpl -> CcdiBankTagAnalysisMapper.xml -> ccdi_bank_statement_tag_result` 主链路,不新增并行模块。两条规则统一作为 `OBJECT` 规则落到员工身份证号维度,`reason_detail` 保留账户级异常快照;测试层同时保留 Java 自动化测试与 MySQL MCP 真实 SQL 验证。 + +**Tech Stack:** Java 21, Spring Boot 3, MyBatis XML, MyBatis Plus, MySQL, JUnit 5, Mockito, MySQL MCP + +--- + +## File Map + +**Create:** + +- `sql/migration/2026-03-31-create-ccdi-account-info-and-abnormal-account-rules.sql` + - 建表 `ccdi_account_info`,补模型与规则元数据 +- `sql/migration/2026-03-31-add-abnormal-account-rule-test-data.sql` + - 插入最小命中与反样本测试数据 +- `ccdi-project/src/test/java/com/ruoyi/ccdi/project/sql/CcdiAbnormalAccountRuleSqlMetadataTest.java` + - 校验模型、规则编码、结果类型与业务口径文本 +- `docs/reports/implementation/2026-03-31-abnormal-account-bank-tag-backend-implementation.md` + - 记录后端实施与验证结果 + +**Modify:** + +- `ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiBankTagServiceImpl.java` + - 新增两个对象型规则分发分支 +- `ccdi-project/src/main/java/com/ruoyi/ccdi/project/mapper/CcdiBankTagAnalysisMapper.java` + - 新增两个 Mapper 方法签名 +- `ccdi-project/src/main/resources/mapper/ccdi/project/CcdiBankTagAnalysisMapper.xml` + - 新增两条对象型真实 SQL +- `ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiBankTagServiceImplTest.java` + - 覆盖新规则分发与结果入库 +- `ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectOverviewEmployeeResultBuilderTest.java` + - 校验新增规则能进入员工风险聚合快照 +- `ccdi-project/src/test/java/com/ruoyi/ccdi/project/sql/CcdiBankTagRuleSqlMetadataTest.java` + - 补模型/规则元数据断言 + +**No Change Expected:** + +- `ruoyi-ui/` + - 本轮前端不新增接口和页面改动 +- `lsfx-mock-server/` + - 本轮不扩展 Mock 样本 + +## Task 1: 锁定模型、规则与落库契约 + +**Files:** + +- Create: `ccdi-project/src/test/java/com/ruoyi/ccdi/project/sql/CcdiAbnormalAccountRuleSqlMetadataTest.java` +- Modify: `ccdi-project/src/test/java/com/ruoyi/ccdi/project/sql/CcdiBankTagRuleSqlMetadataTest.java` +- Modify: `ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiBankTagServiceImplTest.java` + +- [ ] **Step 1: 先写 SQL 元数据测试** + +新增 `CcdiAbnormalAccountRuleSqlMetadataTest`,至少覆盖: + +```java +assertTrue(sql.contains("ABNORMAL_ACCOUNT")); +assertTrue(sql.contains("SUDDEN_ACCOUNT_CLOSURE")); +assertTrue(sql.contains("DORMANT_ACCOUNT_LARGE_ACTIVATION")); +assertTrue(sql.contains("'OBJECT'")); +``` + +- [ ] **Step 2: 再写 Service 分发失败测试** + +在 `CcdiBankTagServiceImplTest` 中新增两个断言,约束新规则走对象型 Mapper: + +```java +verify(analysisMapper).selectSuddenAccountClosureObjects(40L); +verify(analysisMapper).selectDormantAccountLargeActivationObjects(40L); +``` + +- [ ] **Step 3: 运行定向测试,确认失败点正确** + +Run: + +```bash +mvn -pl ccdi-project -Dtest=CcdiAbnormalAccountRuleSqlMetadataTest,CcdiBankTagServiceImplTest test +``` + +Expected: + +- FAIL,提示缺少规则元数据脚本内容或缺少 Mapper / Service 分发 + +- [ ] **Step 4: 最小化补充规则元数据和方法签名** + +按以下顺序补代码: + +1. 新增规则元数据脚本文件骨架 +2. 在 `CcdiBankTagAnalysisMapper.java` 增加两个方法: + +```java +List selectSuddenAccountClosureObjects(@Param("projectId") Long projectId); +List selectDormantAccountLargeActivationObjects(@Param("projectId") Long projectId); +``` + +3. 在 `CcdiBankTagServiceImpl.java` 中新增两个 `case` + +- [ ] **Step 5: 重新运行定向测试** + +Run: + +```bash +mvn -pl ccdi-project -Dtest=CcdiAbnormalAccountRuleSqlMetadataTest,CcdiBankTagServiceImplTest test +``` + +Expected: + +- PASS 或仅剩 SQL 实现相关失败 + +- [ ] **Step 6: 提交本任务** + +```bash +git add ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiBankTagServiceImpl.java \ + ccdi-project/src/main/java/com/ruoyi/ccdi/project/mapper/CcdiBankTagAnalysisMapper.java \ + ccdi-project/src/test/java/com/ruoyi/ccdi/project/sql/CcdiAbnormalAccountRuleSqlMetadataTest.java \ + ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiBankTagServiceImplTest.java \ + sql/migration/2026-03-31-create-ccdi-account-info-and-abnormal-account-rules.sql +git commit -m "补充异常账户模型规则骨架" +``` + +## Task 2: 落地 `ccdi_account_info` 建表与规则元数据脚本 + +**Files:** + +- Create: `sql/migration/2026-03-31-create-ccdi-account-info-and-abnormal-account-rules.sql` +- Modify: `ccdi-project/src/test/java/com/ruoyi/ccdi/project/sql/CcdiAbnormalAccountRuleSqlMetadataTest.java` +- Modify: `ccdi-project/src/test/java/com/ruoyi/ccdi/project/sql/CcdiBankTagRuleSqlMetadataTest.java` + +- [ ] **Step 1: 先补脚本结构测试** + +为建表 SQL 增加断言,至少包含: + +```java +assertTrue(sql.contains("create table if not exists `ccdi_account_info`")); +assertTrue(sql.contains("`account_no`")); +assertTrue(sql.contains("`owner_type`")); +assertTrue(sql.contains("`effective_date`")); +assertTrue(sql.contains("`invalid_date`")); +``` + +- [ ] **Step 2: 运行测试确认失败** + +Run: + +```bash +mvn -pl ccdi-project -Dtest=CcdiAbnormalAccountRuleSqlMetadataTest,CcdiBankTagRuleSqlMetadataTest test +``` + +Expected: + +- FAIL,提示脚本字段或规则元数据缺失 + +- [ ] **Step 3: 写最小建表与元数据脚本** + +在 `2026-03-31-create-ccdi-account-info-and-abnormal-account-rules.sql` 中按以下顺序补内容: + +1. `CREATE TABLE IF NOT EXISTS ccdi_account_info` +2. 插入模型 `ABNORMAL_ACCOUNT` +3. 插入两条规则元数据 +4. 业务口径文本与设计文档保持一致 + +- [ ] **Step 4: 重新运行元数据测试** + +Run: + +```bash +mvn -pl ccdi-project -Dtest=CcdiAbnormalAccountRuleSqlMetadataTest,CcdiBankTagRuleSqlMetadataTest test +``` + +Expected: + +- PASS + +- [ ] **Step 5: 提交本任务** + +```bash +git add sql/migration/2026-03-31-create-ccdi-account-info-and-abnormal-account-rules.sql \ + ccdi-project/src/test/java/com/ruoyi/ccdi/project/sql/CcdiAbnormalAccountRuleSqlMetadataTest.java \ + ccdi-project/src/test/java/com/ruoyi/ccdi/project/sql/CcdiBankTagRuleSqlMetadataTest.java +git commit -m "补充异常账户模型建表和规则元数据" +``` + +## Task 3: 先写两条规则 SQL 的失败测试 + +**Files:** + +- Modify: `ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiBankTagServiceImplTest.java` +- Modify: `ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectOverviewEmployeeResultBuilderTest.java` +- Modify: `ccdi-project/src/main/resources/mapper/ccdi/project/CcdiBankTagAnalysisMapper.xml` + +- [ ] **Step 1: 写对象型结果断言** + +在 `CcdiBankTagServiceImplTest` 中新增两个测试,断言对象型结果内容: + +```java +verify(resultMapper).insertBatch(argThat(results -> results.stream().anyMatch(item -> + "ABNORMAL_ACCOUNT".equals(item.getModelCode()) + && "SUDDEN_ACCOUNT_CLOSURE".equals(item.getRuleCode()) + && "OBJECT".equals(item.getResultType()) + && "STAFF_ID_CARD".equals(item.getObjectType()) +))); +``` + +- [ ] **Step 2: 写聚合层断言** + +在 `CcdiProjectOverviewEmployeeResultBuilderTest` 中补断言,确保新增规则能进入 `hitRulesJson`: + +```java +assertTrue(result.getHitRulesJson().contains("SUDDEN_ACCOUNT_CLOSURE")); +assertTrue(result.getHitRulesJson().contains("DORMANT_ACCOUNT_LARGE_ACTIVATION")); +``` + +- [ ] **Step 3: 运行测试确认失败** + +Run: + +```bash +mvn -pl ccdi-project -Dtest=CcdiBankTagServiceImplTest,CcdiProjectOverviewEmployeeResultBuilderTest test +``` + +Expected: + +- FAIL,提示 SQL 尚未返回结果或规则未写入正确字段 + +- [ ] **Step 4: 暂不修实现,先保存失败断言** + +保持测试失败状态,进入下一任务补最小 SQL 实现。 + +## Task 4: 实现 `SUDDEN_ACCOUNT_CLOSURE` 最小闭环 + +**Files:** + +- Modify: `ccdi-project/src/main/resources/mapper/ccdi/project/CcdiBankTagAnalysisMapper.xml` +- Modify: `ccdi-project/src/main/java/com/ruoyi/ccdi/project/mapper/CcdiBankTagAnalysisMapper.java` +- Modify: `ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiBankTagServiceImpl.java` + +- [ ] **Step 1: 在 XML 中新增查询骨架** + +新增 `selectSuddenAccountClosureObjects`,结果列固定为: + +```sql +select + 'STAFF_ID_CARD' as objectType, + staff.id_card as objectKey, + concat(...) as reasonDetail +``` + +- [ ] **Step 2: 按设计补完整过滤条件** + +SQL 需要覆盖: + +- `owner_type = 'EMPLOYEE'` +- `status = 2` +- `invalid_date is not null` +- 统计窗口 `[invalid_date - 30天, invalid_date)` +- 按员工身份证号 + 账号聚合 + +- [ ] **Step 3: 运行定向测试** + +Run: + +```bash +mvn -pl ccdi-project -Dtest=CcdiBankTagServiceImplTest test +``` + +Expected: + +- 至少 `SUDDEN_ACCOUNT_CLOSURE` 相关断言 PASS + +- [ ] **Step 4: 提交本任务** + +```bash +git add ccdi-project/src/main/resources/mapper/ccdi/project/CcdiBankTagAnalysisMapper.xml \ + ccdi-project/src/main/java/com/ruoyi/ccdi/project/mapper/CcdiBankTagAnalysisMapper.java \ + ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiBankTagServiceImpl.java +git commit -m "实现突然销户打标规则" +``` + +## Task 5: 实现 `DORMANT_ACCOUNT_LARGE_ACTIVATION` 最小闭环 + +**Files:** + +- Modify: `ccdi-project/src/main/resources/mapper/ccdi/project/CcdiBankTagAnalysisMapper.xml` +- Modify: `ccdi-project/src/main/java/com/ruoyi/ccdi/project/mapper/CcdiBankTagAnalysisMapper.java` +- Modify: `ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiBankTagServiceImpl.java` + +- [ ] **Step 1: 在 XML 中新增查询骨架** + +新增 `selectDormantAccountLargeActivationObjects`,结果列同样返回: + +```sql +'STAFF_ID_CARD' as objectType, +staff.id_card as objectKey, +concat(...) as reasonDetail +``` + +- [ ] **Step 2: 补完整命中条件** + +SQL 需要覆盖: + +- `owner_type = 'EMPLOYEE'` +- `status = 1` +- `effective_date is not null` +- `first_tx_date >= effective_date + 6个月` +- `total_amount >= 500000 or max_single_amount >= 100000` + +- [ ] **Step 3: 运行定向测试** + +Run: + +```bash +mvn -pl ccdi-project -Dtest=CcdiBankTagServiceImplTest,CcdiProjectOverviewEmployeeResultBuilderTest test +``` + +Expected: + +- PASS + +- [ ] **Step 4: 提交本任务** + +```bash +git add ccdi-project/src/main/resources/mapper/ccdi/project/CcdiBankTagAnalysisMapper.xml \ + ccdi-project/src/main/java/com/ruoyi/ccdi/project/mapper/CcdiBankTagAnalysisMapper.java \ + ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiBankTagServiceImpl.java \ + ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectOverviewEmployeeResultBuilderTest.java +git commit -m "实现休眠账户大额启用打标规则" +``` + +## Task 6: 补最小测试数据 SQL + +**Files:** + +- Create: `sql/migration/2026-03-31-add-abnormal-account-rule-test-data.sql` +- Modify: `docs/reports/implementation/2026-03-31-abnormal-account-bank-tag-backend-implementation.md` + +- [ ] **Step 1: 先写测试数据注释骨架** + +在 SQL 文件中先划分 4 组样本块: + +- 员工 A:命中 `SUDDEN_ACCOUNT_CLOSURE` +- 员工 B:命中 `DORMANT_ACCOUNT_LARGE_ACTIVATION` +- 员工 C:休眠不足 6 个月,不命中 +- 员工 D:销户前 30 天无流水,不命中 + +- [ ] **Step 2: 写最小测试数据** + +按顺序补数据: + +1. 员工基础数据 +2. 项目内流水数据 +3. `ccdi_account_info` 账户数据 +4. 必要的清理 SQL + +- [ ] **Step 3: 记录导入命令** + +在实施记录中先预填导入方式: + +```bash +bin/mysql_utf8_exec.sh sql/migration/2026-03-31-create-ccdi-account-info-and-abnormal-account-rules.sql +bin/mysql_utf8_exec.sh sql/migration/2026-03-31-add-abnormal-account-rule-test-data.sql +``` + +- [ ] **Step 4: 提交本任务** + +```bash +git add sql/migration/2026-03-31-add-abnormal-account-rule-test-data.sql \ + docs/reports/implementation/2026-03-31-abnormal-account-bank-tag-backend-implementation.md +git commit -m "补充异常账户规则测试数据" +``` + +## Task 7: 用 MySQL MCP 执行真实 SQL 校验口径 + +**Files:** + +- Modify: `docs/reports/implementation/2026-03-31-abnormal-account-bank-tag-backend-implementation.md` + +- [ ] **Step 1: 导入建表和测试数据脚本** + +Run: + +```bash +bin/mysql_utf8_exec.sh sql/migration/2026-03-31-create-ccdi-account-info-and-abnormal-account-rules.sql +bin/mysql_utf8_exec.sh sql/migration/2026-03-31-add-abnormal-account-rule-test-data.sql +``` + +Expected: + +- PASS,脚本执行成功且无乱码 + +- [ ] **Step 2: 使用 MySQL MCP 执行 `SUDDEN_ACCOUNT_CLOSURE` 对应 SQL** + +要求: + +- 直接执行 Mapper 中的真实查询等价 SQL +- 校验仅返回员工 A +- 校验 `reasonDetail` 中包含销户日期、最后交易日、累计金额和单笔最大金额 + +- [ ] **Step 3: 使用 MySQL MCP 执行 `DORMANT_ACCOUNT_LARGE_ACTIVATION` 对应 SQL** + +要求: + +- 直接执行 Mapper 中的真实查询等价 SQL +- 校验仅返回员工 B +- 校验员工 C 未命中 +- 校验 `reasonDetail` 中包含开户日期、首次交易日期、累计金额或单笔最大金额快照 + +- [ ] **Step 4: 将 SQL 验证结果写入实施记录** + +记录: + +- 实际执行 SQL 摘要 +- 命中对象 +- 未命中对象 +- 与业务口径的对照结论 + +- [ ] **Step 5: 提交本任务** + +```bash +git add docs/reports/implementation/2026-03-31-abnormal-account-bank-tag-backend-implementation.md +git commit -m "补充异常账户规则SQL校验记录" +``` + +## Task 8: 跑完整后端验证并收尾 + +**Files:** + +- Modify: `docs/reports/implementation/2026-03-31-abnormal-account-bank-tag-backend-implementation.md` + +- [ ] **Step 1: 运行后端定向测试** + +Run: + +```bash +mvn -pl ccdi-project -Dtest=CcdiAbnormalAccountRuleSqlMetadataTest,CcdiBankTagRuleSqlMetadataTest,CcdiBankTagServiceImplTest,CcdiProjectOverviewEmployeeResultBuilderTest test +``` + +Expected: + +- PASS + +- [ ] **Step 2: 如需联调打标主链路,启动后端并验证后主动关闭** + +Run: + +```bash +mvn -pl ruoyi-admin -am package -DskipTests +cd ruoyi-admin/target && java -jar ruoyi-admin.jar +``` + +验证完成后关闭进程。 + +- [ ] **Step 3: 完善实施记录** + +记录: + +- 最终改动文件 +- 测试结果 +- MySQL MCP 校验结论 +- 若启动过进程,明确已关闭 + +- [ ] **Step 4: 最终提交** + +```bash +git add ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiBankTagServiceImpl.java \ + ccdi-project/src/main/java/com/ruoyi/ccdi/project/mapper/CcdiBankTagAnalysisMapper.java \ + ccdi-project/src/main/resources/mapper/ccdi/project/CcdiBankTagAnalysisMapper.xml \ + ccdi-project/src/test/java/com/ruoyi/ccdi/project/sql/CcdiAbnormalAccountRuleSqlMetadataTest.java \ + ccdi-project/src/test/java/com/ruoyi/ccdi/project/sql/CcdiBankTagRuleSqlMetadataTest.java \ + ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiBankTagServiceImplTest.java \ + ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectOverviewEmployeeResultBuilderTest.java \ + sql/migration/2026-03-31-create-ccdi-account-info-and-abnormal-account-rules.sql \ + sql/migration/2026-03-31-add-abnormal-account-rule-test-data.sql \ + docs/reports/implementation/2026-03-31-abnormal-account-bank-tag-backend-implementation.md +git commit -m "完成异常账户模型后端接入" +``` + +## Final Verification + +- [ ] 运行: + +```bash +mvn -pl ccdi-project -Dtest=CcdiAbnormalAccountRuleSqlMetadataTest,CcdiBankTagRuleSqlMetadataTest,CcdiBankTagServiceImplTest,CcdiProjectOverviewEmployeeResultBuilderTest test +``` + +- [ ] 使用 MySQL MCP 执行两条规则真实 SQL,确认正样本命中、反样本不命中 +- [ ] 确认结果写入 `ccdi_bank_statement_tag_result` +- [ ] 确认新增编码全为大写 +- [ ] 如启动过后端进程,验证结束后主动关闭 diff --git a/docs/plans/frontend/2026-03-31-abnormal-account-bank-tag-frontend-implementation-plan.md b/docs/plans/frontend/2026-03-31-abnormal-account-bank-tag-frontend-implementation-plan.md new file mode 100644 index 00000000..346da583 --- /dev/null +++ b/docs/plans/frontend/2026-03-31-abnormal-account-bank-tag-frontend-implementation-plan.md @@ -0,0 +1,167 @@ +# 异常账户模型接入银行流水打标前端 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. +> +> 仓库约束:当前仓库明确禁止开启 subagent,执行时统一使用 `superpowers:executing-plans`。 + +**Goal:** 基于后端新增异常账户模型完成前端影响面核查,确认本轮无需新增页面、接口或交互改动,并把验证结论沉淀为前端实施计划与实施记录。 + +**Architecture:** 前端保持零代码改动策略,继续消费现有项目结果总览对象聚合结果,不提前扩展“异常账户人员信息”占位区块。本计划聚焦影响面核查、联调验证和文档沉淀,确保执行时不会误把需求扩展成前端功能改造。 + +**Tech Stack:** Vue 2, Element UI, RuoYi 前端, 项目详情风险总览现有页面 + +--- + +## File Map + +**Create:** + +- `docs/reports/implementation/2026-03-31-abnormal-account-bank-tag-frontend-implementation.md` + - 记录前端零改动结论、联调范围和验证结果 + +**Modify:** + +- `docs/plans/frontend/2026-03-31-abnormal-account-bank-tag-frontend-implementation-plan.md` + - 当前实施计划文档本身 + +**No Change Expected:** + +- `ruoyi-ui/src/views/ccdiProject/components/detail/RiskModelSection.vue` + - 现有风险模型列表继续展示后端返回的模型与规则 +- `ruoyi-ui/src/views/ccdiProject/components/detail/ProjectAnalysisSidebar.vue` + - 继续展示后端聚合后的核心异常标签 +- `ruoyi-ui/src/views/ccdiProject/components/detail/RiskDetailSection.vue` + - 本轮不开发异常账户独立详情链路 +- `ruoyi-ui/src/api/ccdi/` + - 本轮不新增 API 封装 + +## Task 1: 先锁定“前端不改代码”的回归边界 + +**Files:** + +- Create: `docs/reports/implementation/2026-03-31-abnormal-account-bank-tag-frontend-implementation.md` + +- [ ] **Step 1: 记录现有页面承接点** + +在实施记录中先写明本轮只核查以下页面承接能力: + +1. 风险模型列表是否直接消费后端返回的模型/规则 +2. 结果总览员工聚合是否直接消费后端对象型结果 +3. 风险详情中的“异常账户人员信息”是否仍为占位区域 + +- [ ] **Step 2: 用代码检索确认前端当前承接方式** + +Run: + +```bash +rg -n "异常账户人员信息|异常标签|风险模型|hitRules|modelCode" ruoyi-ui/src/views/ccdiProject -S +``` + +Expected: + +- 能定位风险模型、总览和风险详情组件 +- 没有现成的异常账户独立查询 API + +- [ ] **Step 3: 把零改动边界写入实施记录** + +记录结论: + +- 前端当前通过既有后端聚合接口承接模型和规则展示 +- 本轮不需要新增字段、按钮、弹窗或路由 + +- [ ] **Step 4: 提交本任务** + +```bash +git add docs/reports/implementation/2026-03-31-abnormal-account-bank-tag-frontend-implementation.md +git commit -m "补充异常账户模型前端影响分析" +``` + +## Task 2: 联调确认现有页面可承接新增模型 + +**Files:** + +- Modify: `docs/reports/implementation/2026-03-31-abnormal-account-bank-tag-frontend-implementation.md` + +- [ ] **Step 1: 如需本地验证,启动前端** + +Run: + +```bash +cd ruoyi-ui +npm run dev +``` + +Expected: + +- 前端正常启动 + +- [ ] **Step 2: 联调核查 3 个页面点** + +至少验证以下内容: + +1. 风险模型区域可展示新增模型 `异常账户` +2. 员工结果总览可看到由后端聚合出的新增命中规则 +3. 风险详情“异常账户人员信息”区域仍保持原状,不因本轮后端接入报错 + +- [ ] **Step 3: 记录联调结论** + +在实施记录中写明: + +- 是否需要前端改代码 +- 若无需改动,说明原因是现有页面直接消费后端聚合结果 +- 若启动了 `npm run dev`,验证结束后已关闭进程 + +- [ ] **Step 4: 提交本任务** + +```bash +git add docs/reports/implementation/2026-03-31-abnormal-account-bank-tag-frontend-implementation.md +git commit -m "补充异常账户模型前端联调结论" +``` + +## Task 3: 做前端构建回归并收尾 + +**Files:** + +- Modify: `docs/reports/implementation/2026-03-31-abnormal-account-bank-tag-frontend-implementation.md` + +- [ ] **Step 1: 运行前端构建回归** + +Run: + +```bash +cd ruoyi-ui +npm run build:prod +``` + +Expected: + +- PASS + +- [ ] **Step 2: 完善实施记录** + +记录: + +- 本轮前端零代码改动 +- 构建结果 +- 联调承接点 +- 若启动过 `npm run dev`,已主动关闭进程 + +- [ ] **Step 3: 最终提交** + +```bash +git add docs/reports/implementation/2026-03-31-abnormal-account-bank-tag-frontend-implementation.md +git commit -m "完成异常账户模型前端实施记录" +``` + +## Final Verification + +- [ ] 运行: + +```bash +cd ruoyi-ui +npm run build:prod +``` + +- [ ] 确认本轮前端无源码改动需求 +- [ ] 确认风险模型、结果总览、风险详情三处承接点已核查 +- [ ] 如启动过 `npm run dev`,验证结束后主动关闭前端进程 diff --git a/docs/reports/implementation/2026-03-31-abnormal-account-bank-tag-plan-record.md b/docs/reports/implementation/2026-03-31-abnormal-account-bank-tag-plan-record.md new file mode 100644 index 00000000..69655a4e --- /dev/null +++ b/docs/reports/implementation/2026-03-31-abnormal-account-bank-tag-plan-record.md @@ -0,0 +1,22 @@ +# 异常账户模型接入银行流水打标计划记录 + +**日期**: 2026-03-31 +**类型**: 计划记录 +**范围**: 银行流水打标 - 异常账户模型 + +## 1. 本次变更内容 + +基于设计文档 [2026-03-31-abnormal-account-bank-tag-design.md](/Users/wkc/Desktop/ccdi/ccdi/docs/design/2026-03-31-abnormal-account-bank-tag-design.md),新增两份实施计划文档: + +- [2026-03-31-abnormal-account-bank-tag-backend-implementation-plan.md](/Users/wkc/Desktop/ccdi/ccdi/docs/plans/backend/2026-03-31-abnormal-account-bank-tag-backend-implementation-plan.md) +- [2026-03-31-abnormal-account-bank-tag-frontend-implementation-plan.md](/Users/wkc/Desktop/ccdi/ccdi/docs/plans/frontend/2026-03-31-abnormal-account-bank-tag-frontend-implementation-plan.md) + +## 2. 计划结论 + +- 后端按最小闭环接入现有对象型打标主链路 +- 前端本轮默认零代码改动,仅做承接能力核查与实施记录 +- 测试阶段除 Java 自动化测试外,必须使用 MySQL MCP 执行真实 SQL 校验规则口径 + +## 3. 后续动作 + +待用户确认计划文档后,按后端计划和前端计划分别执行实施与验证。