# Phase 1 剩余任务 — 2天技术任务分解 **文档版本:** v1.0 **生成日期:** 2026-07-22 **基于:** 统一执行计划 + 5个真正未完成项 **目标:** 将 Phase 1 剩余工作分解为 2 天可完成的技术任务 --- ## 任务分解原则 - 每个任务 ≤ 2 天(16 小时) - 明确输入/输出/验收标准 - 独立可并行(标注依赖) - 包含测试验证步骤 --- ## 任务清单(按优先级排序) ### P0 任务(2个) #### T1-1: 辈分重构 - Phase 1 基础设施(2天) **目标:** 完成 GenerationLevel 枚举、实体变更、数据库列添加 **输入:** - 现有 `FamilyMember.java` 实体 - `DatabaseInitializer.java` 迁移框架 **输出:** - `GenerationLevel.java` 枚举(7级) - 修改 `FamilyMember.java`(删除 relationshipType/roleOverride,新增 generation/isSpouse) - `AddFamilyMemberDTO.java`(新建) - DatabaseInitializer 迁移 1 & 2(添加列 + 旧数据填充) **验收标准:** - [ ] `mvn clean compile` 零错误 - [ ] 数据库 `family_members` 表存在 `generation`、`is_spouse` 列 - [ ] 旧数据 generation 按规则映射(spouse→0, parent→1, child→-1, sibling→0) - [ ] GenerationLevel 枚举包含 7 个级别,可通过单元测试 **依赖:** 无 **分配:** 后端开发 1 人 --- #### T1-2: 富维度子维度拆分 - EnergyService 重构(2天) **目标:** 重构 `calcChildWealth` / `calcParentWealth`,拆分为子维度,集成身克富杠杆 **输入:** - `EnergyService.java` v2.1(已有核心算法) - `MemberEnergyDTO.java` **输出:** - `MemberEnergyDTO` 新增 8 个子维度字段 + 2 个身克富字段 - `EnergyService.calcChildWealth()` 拆分为 3 个子方法(education/social/points) - `EnergyService.calcParentWealth()` 拆分为 3 个子方法(income/achievement/network) - `EnergyService.applyBodyWealthRestraint()` 新方法(身克富杠杆) - 在 `calcParentEnergy` / `calcChildEnergy` 末尾调用身克富检测 **验收标准:** - [ ] 单元测试覆盖所有子维度计算逻辑(≥ 80%) - [ ] 身克富三种状态(normal/overdraw/penalty)可触发 - [ ] 集成测试验证能量概览 API 返回子维度数据 - [ ] 无编译错误,无 LSP 警告 **依赖:** T1-1(可并行,不阻塞) **分配:** 后端开发 1 人 --- ### P1 任务(5个) #### T1-3: 辈分重构 - Phase 2 后端逻辑重写(2天) **目标:** 重写 FamilyMemberService 核心方法,删除关系类型管理 **输入:** - T1-1 完成的实体和 DTO - 现有 `FamilyMemberService.java` **输出:** - 重写 `computeEffectiveRole()`(基于 generation) - 重写 `computeRelativeLabel()`(纯 generation diff 计算) - 重写 `addMember()`(使用 relativeMemberId + generationLevel + peerType) - 修改 `listMembers()` 和 `toFamilyMemberVO()`(移除 relationshipType 相关字段) - 删除管理端关系类型管理方法 - 修改 `FamilyMembersController` 请求/响应 DTO **验收标准:** - [ ] 单元测试覆盖 `computeRelativeLabel()` 所有辈分组合(≥ 90%) - [ ] API 测试:添加配偶(peer+spouse)成功,generation=0, is_spouse=1 - [ ] API 测试:添加子侄辈(child)成功,generation=-1 - [ ] 旧代码引用搜索:`grep -r "relationshipType" cfc-backend/src/main/java` 返回空 **依赖:** T1-1 **分配:** 后端开发 1 人 --- #### T1-4: 辈分重构 - Phase 3 清理 + 管理端(2天) **目标:** 删除废弃列和表,同步 schema.sql,更新 cfc-web 管理端 **输入:** - T1-3 完成的后端逻辑 - `cfc-backend/src/main/resources/schema.sql` **输出:** - DatabaseInitializer 迁移 3:删除 `relationship_type`、`role_override` 列 - DatabaseInitializer 迁移 4:删除 `relationship_types` 表 - 同步 `schema.sql` 表结构 - 删除 `RelationshipType.java`、`RelationshipTypeMapper.java`、`RelationshipTypeService.java`(如存在) - 删除 cfc-web 管理端关系类型管理页面和路由 - 更新 cfc-web 成员添加页面(替换为辈分选择器) **验收标准:** - [ ] `grep -r "relationship_type" cfc-backend/src/main/java` 返回空 - [ ] `grep -r "RelationshipType" cfc-backend/src/main/java` 返回空 - [ ] schema.sql 中 `family_members` 表无 relationship_type/role_override 列 - [ ] cfc-web 路由无 `/admin/relationship-type` 路径 - [ ] 管理端成员添加页面显示辈分选择器(GenerationPicker) **依赖:** T1-3 **分配:** 后端开发 1 人 + Web前端 1 人 --- #### T1-5: 辈分重构 - Phase 4 小程序前端(2天) **目标:** 新建 GenerationPicker 组件,更新成员添加页面 **输入:** - T1-4 完成的后端 API - 现有 `RelationshipPicker.vue`(如有) **输出:** - `generationLevel.js` 常量文件(7级辈分 + 同辈类型) - `GenerationPicker.vue` 组件(单选辈分 + 同辈配偶选项) - 修改成员添加页面(`pages/family/member-add.vue` 或类似) - 删除 `RelationshipPicker.vue`(如存在) - 更新 `utils/api.js` 调用参数(relationshipType → generationLevel + peerType) **验收标准:** - [ ] GenerationPicker 组件可正常选择辈分和配偶类型 - [ ] 添加成员 API 调用成功(relativeMemberId + generationLevel + peerType) - [ ] 成员列表显示 generation 字段(调试模式) - [ ] 小程序编译无警告,LSP 诊断零错误 **依赖:** T1-4(API 变更) **分配:** 小程序前端 1 人 --- #### T1-6: 富维度拆分 - 前端页面重写(2天) **目标:** 重写 `pages/wealth/index.vue`,角色感知的富展示 **输入:** - T1-2 完成的 `GET /api/energy/wealth-detail` API - 现有 `pages/wealth/index.vue` **输出:** - 新页面布局:PageBanner → 身克富状态条 → 三子维度卡片 → 增值服务入口 → 底部菜单 - `WealthSubScores.vue` 组件(成人版/孩子版) - `BodyWealthAlert.vue` 组件(三种状态:normal/overdraw/penalty) - `utils/api.js` 新增 `getWealthDetail()` 方法 - 删除原页面"行动数据"区块(任务数/购买数/活动数/课程数) **验收标准:** - [ ] 家长端显示 3 个子维度(金钱收入/社会成就/资源网络) - [ ] 孩子端显示 3 个子维度(学业成绩/社交筹码/积分效率) - [ ] 身克富预警在条件触发时显示(身<40 且 富>60) - [ ] 页面加载时间 ≤ 1.5s(模拟数据) - [ ] 小程序编译零错误 **依赖:** T1-2(API 就绪) **分配:** 小程序前端 1 人 --- #### T1-7: DAN测评题目录入优化(2天) **目标:** 优化认知测评题目录入流程 **输入:** - 现有 `DanAssessmentController.java` - 设计文档 `assessment-market-plan.md` **输出:** - 确认具体优化点(批量导入?富文本编辑器?题目预览?) - 实现对应功能(根据设计文档) - 更新前端题目录入页面 **验收标准:** - [ ] 题目录入效率提升 ≥ 30%(对比旧流程) - [ ] 支持批量导入(如需要) - [ ] 题目预览功能正常 - [ ] 后端 API 响应时间 ≤ 500ms **依赖:** 无 **分配:** 后端 1 人 + 前端 1 人 --- #### T1-8: 维度页面缺口修复 Phase 2(2天) **目标:** 补全五维页面的缺失功能(珍珠图/圈子系统 Phase 1) **输入:** - `plans/2026-07-12-dimension-pages-gap-fix.md` - 五维 TabBar 页面(已完成) **输出:** - **P1-1 身页:** `HealthCheckinCard.vue` 组件 + 插入到 `pages/body/index.vue` - **P1-2 智页:** 阅读时长展示卡片 + API 对接(确认或新增 `POST /api/article/reading-stats`) - **P1-3 心页:** 天盘相性卡片 + API 对接(`POST /api/tianpan/compatibility`) **验收标准:** - [ ] 身页健康打卡卡片显示今日状态 + 连续天数 - [ ] 智页显示"本月阅读 X 小时" - [ ] 心页显示家庭天盘相性评分 - [ ] 三个卡片均可点击跳转详情页 - [ ] 无登录态不显示(或显示占位符) **依赖:** 五维 TabBar 完成(已完成) **分配:** 小程序前端 1-2 人 --- #### T1-9: CFC原生电商扩展 - 数据库迁移(2天) **目标:** 创建 shop_ 前缀表,完成 DatabaseInitializer 迁移 **输入:** - `specs/2026-06-24-cfc-ecommerce-extension-design.md` - `DatabaseInitializer.java` **输出:** - 确认 shop_ 表完整 DDL(至少:shop_products, shop_orders, shop_categories) - DatabaseInitializer 新增建表迁移 - 同步 `schema.sql` - 创建对应 Entity 类(ShopProduct.java, ShopOrder.java 等) **验收标准:** - [ ] `SHOW TABLES LIKE 'shop_%'` 返回预期表数量(≥ 3) - [ ] schema.sql 包含 shop_ 表定义 - [ ] Entity 类字段与 DDL 完全一致 - [ ] `mvn clean compile` 零错误 **依赖:** 无 **分配:** 后端开发 1 人 --- #### T1-10: CFC原生电商扩展 - Service + Controller(2天) **目标:** 实现电商 CRUD 逻辑,适配 ProductController **输入:** - T1-9 完成的 Entity 和 Mapper - 现有 `ProductController.java`(161行) **输出:** - `ShopProductMapper.java` + `ShopProductService.java` + `ShopProductController.java` - 或扩展现有 `ProductController` 支持 shop_ 表 - 实现商品列表/详情/下单/订单查询基础 API - 更新 `utils/api.js` 新增电商相关方法 **验收标准:** - [ ] 商品列表 API 返回正确数据(mock 数据可查询) - [ ] 商品详情 API 可查询单个商品 - [ ] 下单 API 创建订单成功(订单状态 pending) - [ ] 前端小程序商城页面可浏览商品 **依赖:** T1-9 **分配:** 后端开发 1 人 + 小程序前端 1 人 --- ### 技术债务任务(3个) #### T5-1: 确定性缺口修复(2天) **目标:** 修复系统确定性缺口(具体内容见 `plans/2026-07-10-determinism-gap-fix-plan.md`) **输入:** - 确定性缺口计划文档 - 现有代码中随机数/时间戳依赖 **输出:** - 识别所有 `Math.random()`、`new Date()`、`UUID.randomUUID()` 等非确定性调用 - 替换为可 seed 的伪随机生成器或固定时间戳(测试环境) - 添加 `DeterministicTest` 基类,确保测试可重复 **验收标准:** - [ ] 所有单元测试运行两次结果一致 - [ ] 集成测试无 flaky 失败(连续运行 5 次 100% 通过) - [ ] 代码审查:无新增非确定性代码 **依赖:** 无 **分配:** 后端开发 1 人 --- #### T5-2: Web端E2E测试修复(2天) **目标:** 修复 14 个 E2E 测试失败用例 **输入:** - `plans/2026-06-20-cfc-web-e2e-test-fix.md` - Web 端 E2E 测试报告 **输出:** - 逐项修复失败测试(选择器过时、异步等待、数据依赖) - 更新测试数据 fixture - 增加测试稳定性(retry 机制、等待策略) **验收标准:** - [ ] E2E 测试通过率从当前提升至 ≥ 90% - [ ] 连续运行 3 次无 flaky 失败 - [ ] 测试执行时间 ≤ 10 分钟 **依赖:** 无 **分配:** Web前端 1 人 --- #### T5-3: 综合差异修复(2天) **目标:** 系统性扫描和修复代码与设计差异 **输入:** - 所有 specs/ 设计文档 - 现有代码库 **输出:** - 使用 `ast-grep` 扫描设计规范违反(如可选链、CSS Grid、GetMapping 等) - 批量修复 AI slop 模式 - 更新文档与代码同步 **验收标准:** - [ ] 扫描报告:0 个严重违反项 - [ ] 所有页面符合设计 Token 体系 - [ ] 代码审查:无设计文档已定义但未实现的功能 **依赖:** 无 **分配:** 全栈开发 1 人 --- ## 任务分配汇总(Sprint 1) | 开发者 | 任务数 | 总工作量 | 并行任务 | |--------|--------|----------|----------| | Dev A(BE) | T1-1, T1-3, T1-4, T1-9 | 4 个 | 3 个并行(T1-1/T1-3/T1-9) | | Dev B(FE-mini) | T1-5, T1-6, T1-8, T1-10 | 4 个 | 3 个并行(T1-5/T1-6/T1-8) | | Dev C(BE) | T1-2, T1-7 | 2 个 | 1 个并行(T1-2) | | Dev D(Web) | T1-4 (Web部分), T5-2 | 2 个 | 1 个并行(T5-2) | | Dev E(BE) | T5-1, T5-3 | 2 个 | 1 个并行(T5-1) | **总工作量:** 13 个任务 × 2 天 = 26 人天 **并行度:** 4-5 人同时工作 **预计完成时间:** 2 周(考虑 50% 并行效率) --- ## 关键路径 ``` T1-1 (2d) → T1-3 (2d) → T1-4 (2d) → T1-5 (2d) ↓ T1-2 (2d) → T1-6 (2d) ↓ T1-7 (2d) ↓ T1-8 (2d) ↓ T1-9 (2d) → T1-10 (2d) ``` **关键路径长度:** 10 天(不含技术债务) --- ## 风险与缓解 | 风险 | 影响 | 缓解 | |------|------|------| | T1-1 数据库迁移失败 | 阻塞 T1-3/T1-4 | 预生产环境先演练,备份数据 | | T1-2 身克富算法争议 | 阻塞 T1-6 | 产品经理确认算法细节,提供 mock 数据 | | T1-9 shop_ 表设计与 danshop 冲突 | 阻塞 T1-10 | 与 danshop 团队确认表结构兼容性 | | T1-7 DAN 优化范围不明确 | 阻塞任务 | 启动前召开需求澄清会(≤ 1 小时) | --- ## 验证清单 ### 每日验证 - [ ] 代码提交前运行 `mvn clean compile`(后端)或 `npm run build`(前端) - [ ] 单元测试通过率 100% - [ ] LSP 诊断零错误 ### Sprint 结束验证 - [ ] 所有任务标记为 completed - [ ] 集成测试通过率 ≥ 95% - [ ] 无阻塞性 Bug(Blocker/Critical) - [ ] 文档更新(PLAN 文件 + PROJECT-OVERVIEW.md) --- **文档结束**