From 8e0274df8801d906633be88870f70920b015b6bf Mon Sep 17 00:00:00 2001 From: wkc <978997012@qq.com> Date: Wed, 25 Mar 2026 15:34:13 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85=E4=B8=93=E9=A1=B9=E6=A0=B8?= =?UTF-8?q?=E6=9F=A5=E5=B1=95=E5=BC=80=E5=8C=BA=E6=94=B9=E7=89=88=E5=AE=9E?= =?UTF-8?q?=E6=96=BD=E8=AE=A1=E5=88=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...-detail-redesign-backend-implementation.md | 135 ++++++++++ ...detail-redesign-frontend-implementation.md | 235 ++++++++++++++++++ ...t-liability-detail-redesign-plan-record.md | 25 ++ 3 files changed, 395 insertions(+) create mode 100644 docs/plans/backend/2026-03-25-special-check-family-asset-liability-detail-redesign-backend-implementation.md create mode 100644 docs/plans/frontend/2026-03-25-special-check-family-asset-liability-detail-redesign-frontend-implementation.md create mode 100644 docs/reports/implementation/2026-03-25-special-check-family-asset-liability-detail-redesign-plan-record.md diff --git a/docs/plans/backend/2026-03-25-special-check-family-asset-liability-detail-redesign-backend-implementation.md b/docs/plans/backend/2026-03-25-special-check-family-asset-liability-detail-redesign-backend-implementation.md new file mode 100644 index 00000000..e24b264d --- /dev/null +++ b/docs/plans/backend/2026-03-25-special-check-family-asset-liability-detail-redesign-backend-implementation.md @@ -0,0 +1,135 @@ +# Special Check Family Asset Liability Detail Redesign 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:** 在不改动专项核查详情接口契约的前提下,确认现有后端返回仍能完整支撑展开区改版,并补足回归验证与后端记录。 + +**Architecture:** 本次设计明确“不新增后端字段、不调整控制器、服务和 Mapper 口径”。后端实施只围绕现有 `summary + incomeDetail + assetDetail + debtDetail` 结构做回归锁定:通过增强服务层和 SQL 结构测试,确认前端改版所需的总额、风险等级和原始条目字段已完整存在;若测试通过,则不修改生产代码。 + +**Tech Stack:** Java 21, Spring Boot 3, MyBatis XML, Maven, JUnit 5 + +--- + +## File Map + +- Modify: `ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectSpecialCheckServiceImplTest.java` + - 锁定详情 `summary` 与前端改版所需字段的一致性 +- Modify: `ccdi-project/src/test/java/com/ruoyi/ccdi/project/mapper/CcdiProjectSpecialCheckMapperDetailSqlTest.java` + - 锁定明细 SQL 继续返回前端聚合所需原始字段 +- Create: `docs/reports/implementation/2026-03-25-special-check-family-asset-liability-detail-redesign-backend-record.md` + - 记录本次后端为零生产代码改动的边界 +- Create: `docs/tests/records/2026-03-25-special-check-family-asset-liability-detail-redesign-backend-verification.md` + - 记录后端回归验证结果 + +### Task 1: 锁定后端详情契约回归 + +**Files:** +- Modify: `ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectSpecialCheckServiceImplTest.java` +- Modify: `ccdi-project/src/test/java/com/ruoyi/ccdi/project/mapper/CcdiProjectSpecialCheckMapperDetailSqlTest.java` + +- [ ] **Step 1: Write the failing test** + +在现有测试基础上补充以下断言: + +- `summary` 中的 `totalIncome / totalDebt / totalAsset / riskLevelCode / riskLevelName` 可直接复用到前端改版 +- SQL 继续返回 `asset_main_type / asset_sub_type / current_value` +- SQL 继续返回 `debt_main_type / debt_sub_type / principal_balance` +- 不引入新的后端聚合字段,不依赖额外 VO + +- [ ] **Step 2: Run test to verify it fails** + +Run: + +```bash +mvn test -pl ccdi-project -Dtest=CcdiProjectSpecialCheckServiceImplTest,CcdiProjectSpecialCheckMapperDetailSqlTest +``` + +Expected: + +- `FAIL` +- 原因是新增回归断言尚未补齐 + +- [ ] **Step 3: Write minimal implementation** + +只修改测试,不动生产代码: + +- 在服务层测试中补充 `summary` 字段复用断言 +- 在 Mapper SQL 测试中补充类型字段与金额字段断言 +- 明确当前接口足以支撑前端按类型聚合与风险结论展示 + +- [ ] **Step 4: Run test to verify it passes** + +Run: + +```bash +mvn test -pl ccdi-project -Dtest=CcdiProjectSpecialCheckServiceImplTest,CcdiProjectSpecialCheckMapperDetailSqlTest +``` + +Expected: + +- `PASS` + +- [ ] **Step 5: Commit** + +```bash +git add ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectSpecialCheckServiceImplTest.java ccdi-project/src/test/java/com/ruoyi/ccdi/project/mapper/CcdiProjectSpecialCheckMapperDetailSqlTest.java +git commit -m "补充专项核查展开区后端回归测试" +``` + +### Task 2: 完成后端验证与记录 + +**Files:** +- Create: `docs/reports/implementation/2026-03-25-special-check-family-asset-liability-detail-redesign-backend-record.md` +- Create: `docs/tests/records/2026-03-25-special-check-family-asset-liability-detail-redesign-backend-verification.md` + +- [ ] **Step 1: Write the failing test** + +这里不新增代码断言,先整理验证目标: + +- 后端生产代码零变更 +- 详情契约继续满足前端改版输入要求 +- 聚焦专项核查详情相关测试,不扩大到无关模块 + +- [ ] **Step 2: Run test to verify it fails** + +Run: + +```bash +mvn test -pl ccdi-project -Dtest=CcdiProjectSpecialCheckServiceImplTest,CcdiProjectSpecialCheckMapperDetailSqlTest,CcdiProjectSpecialCheckControllerTest +``` + +Expected: + +- 在测试与文档未补齐前,至少一项为 `FAIL` 或文档缺失 + +- [ ] **Step 3: Write minimal implementation** + +补齐两份文档: + +- 后端实施记录写清: + - 本次不修改控制器、服务、Mapper、VO + - 仅增强回归测试,确认接口可继续支撑前端改版 +- 后端验证记录写清: + - 运行命令 + - 通过结果 + - “零生产代码改动”的核对结论 + +- [ ] **Step 4: Run test to verify it passes** + +Run: + +```bash +mvn test -pl ccdi-project -Dtest=CcdiProjectSpecialCheckServiceImplTest,CcdiProjectSpecialCheckMapperDetailSqlTest,CcdiProjectSpecialCheckControllerTest +``` + +Expected: + +- `PASS` +- 工作区内无 `ccdi-project/src/main` 生产代码改动 + +- [ ] **Step 5: Commit** + +```bash +git add docs/reports/implementation/2026-03-25-special-check-family-asset-liability-detail-redesign-backend-record.md docs/tests/records/2026-03-25-special-check-family-asset-liability-detail-redesign-backend-verification.md +git commit -m "补充专项核查展开区后端验证记录" +``` diff --git a/docs/plans/frontend/2026-03-25-special-check-family-asset-liability-detail-redesign-frontend-implementation.md b/docs/plans/frontend/2026-03-25-special-check-family-asset-liability-detail-redesign-frontend-implementation.md new file mode 100644 index 00000000..34c398ac --- /dev/null +++ b/docs/plans/frontend/2026-03-25-special-check-family-asset-liability-detail-redesign-frontend-implementation.md @@ -0,0 +1,235 @@ +# Special Check Family Asset Liability Detail Redesign 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:** 将专项核查“员工家庭资产负债专项核查”展开区改造成 5 段纵向汇总卡片,标题直接展示汇总数字,卡片内部只展示简洁来源项。 + +**Architecture:** 保持 `FamilyAssetLiabilitySection.vue` 的列表层、展开状态、详情缓存和按需请求逻辑不变,只重构 `FamilyAssetLiabilityDetail.vue`。前端基于现有 `incomeDetail / assetDetail / debtDetail / summary` 就地计算关键指标,并将资产与负债明细按现有类型字段聚合为来源项展示,不新增后端字段或额外交互容器。 + +**Tech Stack:** Vue 2, Element UI, SCSS, Node.js 静态单测 + +--- + +## File Map + +- Modify: `ruoyi-ui/src/views/ccdiProject/components/detail/FamilyAssetLiabilityDetail.vue` + - 专项核查展开区主组件,负责 5 段纵向卡片、类型聚合、指标计算和风险结果展示 +- Modify: `ruoyi-ui/tests/unit/special-check-detail-layout.test.js` + - 锁定详情区结构、模块顺序、标题汇总值和“去表格化”约束 +- Create: `ruoyi-ui/tests/unit/special-check-detail-summary-groups.test.js` + - 锁定资产/负债聚合来源项、关键指标和风险结果文案映射 +- Modify: `ruoyi-ui/tests/unit/special-check-visual-alignment.test.js` + - 锁定详情区仍沿用专项核查现有标题层级,并新增纵向汇总卡片样式约束 +- Create: `docs/reports/implementation/2026-03-25-special-check-family-asset-liability-detail-redesign-frontend-record.md` + - 记录前端实施内容与边界 +- Create: `docs/tests/records/2026-03-25-special-check-family-asset-liability-detail-redesign-frontend-verification.md` + - 记录前端验证命令与结果 + +### Task 1: 重写展开区结构断言 + +**Files:** +- Modify: `ruoyi-ui/tests/unit/special-check-detail-layout.test.js` +- Create: `ruoyi-ui/tests/unit/special-check-detail-summary-groups.test.js` +- Modify: `ruoyi-ui/tests/unit/special-check-visual-alignment.test.js` + +- [ ] **Step 1: Write the failing test** + +调整现有静态断言并新增分组断言,锁定以下内容: + +- 详情区顺序固定为 `总收入 -> 总负债 -> 总资产 -> 关键指标 -> 详查结果` +- 每个模块标题都带汇总数字或计数 +- 资产与负债不再出现 `el-table` +- 资产与负债都保留“类型名 + 金额 + 占比”来源项语义 +- 关键指标固定为 `资产负债率 / 资产/收入比 / 负债/收入比` +- 详查结果按 `NORMAL / RISK / HIGH / MISSING_INFO` 切换文案和样式 + +- [ ] **Step 2: Run test to verify it fails** + +Run: + +```bash +cd ruoyi-ui +node tests/unit/special-check-detail-layout.test.js +node tests/unit/special-check-detail-summary-groups.test.js +node tests/unit/special-check-visual-alignment.test.js +``` + +Expected: + +- `FAIL` +- 原因是旧组件仍为“收入/负债/资产三列 + 表格明细” + +- [ ] **Step 3: Write minimal implementation** + +先只修改测试文件,不动生产代码,确保断言与最新设计一致: + +- 删除旧的“三列卡片”“资产明细/负债明细表格”断言 +- 新增 5 段纵向结构断言 +- 新增来源项聚合与风险结果态断言 + +- [ ] **Step 4: Run test to verify it passes** + +Run: + +```bash +cd ruoyi-ui +node tests/unit/special-check-detail-layout.test.js +node tests/unit/special-check-detail-summary-groups.test.js +node tests/unit/special-check-visual-alignment.test.js +``` + +Expected: + +- `PASS` + +- [ ] **Step 5: Commit** + +```bash +git add ruoyi-ui/tests/unit/special-check-detail-layout.test.js ruoyi-ui/tests/unit/special-check-detail-summary-groups.test.js ruoyi-ui/tests/unit/special-check-visual-alignment.test.js +git commit -m "更新专项核查展开区改版前端测试" +``` + +### Task 2: 重构展开详情组件 + +**Files:** +- Modify: `ruoyi-ui/src/views/ccdiProject/components/detail/FamilyAssetLiabilityDetail.vue` +- Modify: `ruoyi-ui/tests/unit/special-check-detail-layout.test.js` +- Modify: `ruoyi-ui/tests/unit/special-check-detail-summary-groups.test.js` + +- [ ] **Step 1: Write the failing test** + +在现有断言基础上补足以下失败场景: + +- 组件包含汇总标题值格式化逻辑 +- 组件包含资产/负债按类型聚合的方法或计算属性 +- 组件包含净资产、资产负债率、资产/收入比、负债/收入比计算 +- 组件不再包含旧的 `detail-grid` 三列样式和 `detail-table` 表格样式 + +- [ ] **Step 2: Run test to verify it fails** + +Run: + +```bash +cd ruoyi-ui +node tests/unit/special-check-detail-layout.test.js +node tests/unit/special-check-detail-summary-groups.test.js +``` + +Expected: + +- `FAIL` + +- [ ] **Step 3: Write minimal implementation** + +在 `FamilyAssetLiabilityDetail.vue` 中完成以下改造: + +- 将模板重构为 5 个纵向汇总模块: + - 总收入 + - 总负债 + - 总资产 + - 关键指标 + - 详查结果 +- 标题区统一为“标题 + 汇总值” +- 收入模块固定展示本人收入、配偶收入 +- 资产模块基于 `assetDetail.items` 按现有类型字段聚合后全部展示 +- 负债模块基于 `debtDetail.items` 按现有类型字段聚合后全部展示 +- 指标模块前端计算: + - 净资产 + - 资产负债率 + - 资产/收入比 + - 负债/收入比 +- 详查结果模块按 `summary.riskLevelCode` 映射展示样式和文案 +- 删除旧的表格结构、三列网格结构与表头依赖 +- 保留 `loading`、空明细保护和既有金额/日期工具函数风格 + +- [ ] **Step 4: Run test to verify it passes** + +Run: + +```bash +cd ruoyi-ui +node tests/unit/special-check-detail-layout.test.js +node tests/unit/special-check-detail-summary-groups.test.js +node tests/unit/special-check-visual-alignment.test.js +node tests/unit/special-check-detail-expand.test.js +``` + +Expected: + +- `PASS` +- `special-check-detail-expand.test.js` 继续通过,证明展开入口和缓存逻辑未被破坏 + +- [ ] **Step 5: Commit** + +```bash +git add ruoyi-ui/src/views/ccdiProject/components/detail/FamilyAssetLiabilityDetail.vue ruoyi-ui/tests/unit/special-check-detail-layout.test.js ruoyi-ui/tests/unit/special-check-detail-summary-groups.test.js ruoyi-ui/tests/unit/special-check-visual-alignment.test.js +git commit -m "重构专项核查展开区前端展示" +``` + +### Task 3: 完成前端验证与实施记录 + +**Files:** +- Create: `docs/reports/implementation/2026-03-25-special-check-family-asset-liability-detail-redesign-frontend-record.md` +- Create: `docs/tests/records/2026-03-25-special-check-family-asset-liability-detail-redesign-frontend-verification.md` + +- [ ] **Step 1: Write the failing test** + +这里不新增代码断言,先整理需要落文档的验证范围: + +- 聚焦展开区组件,不涉及列表列顺序和接口契约 +- 静态单测通过 +- 前端生产构建可完成 + +- [ ] **Step 2: Run test to verify it fails** + +Run: + +```bash +cd ruoyi-ui +node tests/unit/special-check-detail-layout.test.js +node tests/unit/special-check-detail-summary-groups.test.js +node tests/unit/special-check-visual-alignment.test.js +npm run build:prod +``` + +Expected: + +- 在代码与文档未完全落地前,至少一项为 `FAIL` 或文档缺失 + +- [ ] **Step 3: Write minimal implementation** + +补齐两份文档: + +- 前端实施记录写清: + - 只改 `FamilyAssetLiabilityDetail.vue` + - 旧表格明细改为汇总来源项 + - 关键指标与风险结论的前端计算方式 +- 前端验证记录写清: + - 运行命令 + - 实际结果 + - 已知告警是否与本次改动无关 + +- [ ] **Step 4: Run test to verify it passes** + +Run: + +```bash +cd ruoyi-ui +node tests/unit/special-check-detail-layout.test.js +node tests/unit/special-check-detail-summary-groups.test.js +node tests/unit/special-check-visual-alignment.test.js +node tests/unit/special-check-detail-expand.test.js +npm run build:prod +``` + +Expected: + +- 静态单测全部 `PASS` +- 生产构建完成 + +- [ ] **Step 5: Commit** + +```bash +git add docs/reports/implementation/2026-03-25-special-check-family-asset-liability-detail-redesign-frontend-record.md docs/tests/records/2026-03-25-special-check-family-asset-liability-detail-redesign-frontend-verification.md +git commit -m "补充专项核查展开区前端验证记录" +``` diff --git a/docs/reports/implementation/2026-03-25-special-check-family-asset-liability-detail-redesign-plan-record.md b/docs/reports/implementation/2026-03-25-special-check-family-asset-liability-detail-redesign-plan-record.md new file mode 100644 index 00000000..98a5c501 --- /dev/null +++ b/docs/reports/implementation/2026-03-25-special-check-family-asset-liability-detail-redesign-plan-record.md @@ -0,0 +1,25 @@ +# 2026-03-25 专项核查员工家庭资产负债展开区改版实施计划记录 + +## 本次新增计划文件 + +- `docs/plans/frontend/2026-03-25-special-check-family-asset-liability-detail-redesign-frontend-implementation.md` +- `docs/plans/backend/2026-03-25-special-check-family-asset-liability-detail-redesign-backend-implementation.md` + +## 计划拆分说明 + +- 前端计划聚焦展开区组件重构、静态单测演进、构建验证与前端实施记录 +- 后端计划聚焦现有专项核查详情接口的回归锁定,不新增生产代码改动 +- 两份计划都严格围绕已确认设计文档展开,不扩展列表层、接口层或额外交互 + +## 关键边界 + +- 前端只改 `FamilyAssetLiabilityDetail.vue` +- 列表层、查看详情入口、接口路径和缓存逻辑保持不变 +- 后端不新增字段、不改控制器/服务/Mapper,只补回归测试与记录 +- 资产与负债来源项由前端基于现有明细按类型聚合后全部展示 + +## 评审说明 + +- 按 `writing-plans` 规范本应进入 plan review loop +- 由于仓库 `AGENTS.md` 明确要求“不开启 subagent”,本次改用本地人工自检替代子代理评审 +- 自检结论:两份计划文件路径正确、任务粒度可执行、前后端边界清晰、未引入需求外方案