dev-plan-v20260604.md 12 KB

开发计划 v20260604

制定日期: 2026-06-04 制定依据: docs/requirements-changelog.md (v20260604.1 + v20260604.2) + docs/test-coverage-report.md + 当前代码审计 当前代码状态: ⚠️ 测试编译失败(7处) + EPIC 10 后端大部分就绪 + 关系分析需重构


状态摘要

维度 状态
后端编译 ✅ 通过
测试编译 ❌ 7处失败(ChatService/OrderService 签名变更导致)
测试运行 ⏳ 修复后需验证
v20260604.1 (EPIC 10 超级会员) 完成度 ~60%(后端支付/佣金/升级就绪,前端支付模板就绪,订阅入口待补充)
v20260604.2 (重命名+关系分析重设计) 完成度 ~0%(代码未动)

PHASE 0:阻塞项修复(P0,1天)

0.1 修复测试编译失败

问题: 7处测试编译失败,原因:

文件 位置 失败原因
ControllerIntegrationTest.java L295 ChatService.sendMessage 签名变更 — 新增 String 参数(chartRecordId/sessionId)
ControllerIntegrationTest.java L333 OrderService.createOrder 签名变更 — 参数从 5→6 个(新增 isSeedPrice 等)
ChatServiceTest.java L53, L76, L90, L108, L130 同 sendMessage 签名变更

修复策略: 为每个调用点补齐缺少的参数(null 占位或合理的默认值),确保编译通过后运行全量测试验证。

涉及文件:

  • num-server/src/test/java/.../controller/ControllerIntegrationTest.java(2处)
  • num-server/src/test/java/.../service/ChatServiceTest.java(5处)

验收标准: mvn test 编译通过,运行 Tests run: N, Failures: 0

0.2 验证已知 Bug 修复

Bug 状态 验证方式
upgradeVip 不认 "super_member" productType ✅ 已修复(0.1中添加别名) 重启后端,annual→super_member 支付,检查 user.vipType = 'super_annual'
chart-compare 页面未注册 pages.json ✅ 已修复(0.2中注册) 导航到 relations/chart-compare → 正常打开
number-analysis 页面未注册 pages.json ✅ 已修复(0.2中注册) 导航到 relations/number-analysis → 正常打开
POST /api/profile/infoisSeedPriceUser 字段 ⏳ 待验证 检查 ProfileController.getInfo 返回值

PHASE 1:EPIC 10 超级会员收尾(P1,1-2天)

1.1 超级会员订阅入口 × 3

参考 US-10.1,需要在 3 处嵌入订阅入口:

位置 状态 需要做的事
关系页(未授权时) ❌ 待实现 relations/index.vue 顶部 Banner:🔒 开通超级会员...
我的页面(免费用户/年费用户) ✅ 已实现 免费用户双方案卡片 + 年费用户"升超级"按钮已存在
AI 解读页(咨询结束后) ❌ 待实现 chart/index.vue 底部或右上角入口

文件:

  • client/pages/relations/index.vue
  • client/pages/chart/index.vue

1.2 超级会员升级→能量师补差价

当前状态: UserService.upgradeVip()super_annual → practitioner 路径已存在。但需要验证:

  • 佣金补差逻辑:OrderService.handlePractitionerCommission() 中的 sumAnnualCommissionTo() 已扩展到包含 super_member 订单的佣金
  • 前端入口:超级会员卡片上的"升级能量师"按钮已存在(profile/index.vue L97)

待验证项: 升级定价前端是否正确调用了 pricingApi.upgrade() 并传 productType: 'practitioner'

1.3 超级会员佣金

当前状态: OrderService.handleSuperMemberCommission() 已实现,使用 commission.super_member.direct_rate(3000)/upstream_rate(500) 费率。

待验证: 推广超级会员的佣金结算是否正确,佣金明细是否显示"超级会员直接推荐佣金"等备注。

1.4 管理后台配置卡片

当前状态: 管理后台是否存在超级会员定价+佣金配置卡片?

需检查: admin/src/views/settings/index.vue — 确认是否已有超级会员定价(pricing.super_member)和超级会员佣金(commission.super_member.*)的配置卡片。


PHASE 2:全代码库"命盘→能量盘"重命名(P1,1天)

2.1 范围

v20260604.2 要求将所有"命盘"改为"能量盘"(含 3 处"数字能量能量盘"→"数字能量盘")。文档部分(README, style-guide, system-spec 等)已在需求变更中更新,但代码内仍包含大量"命盘"字样

2.2 搜索范围

搜索关键词 文件量 优先级
后端 Java "命盘" 在注释/异常消息/字段描述 ~15-20处 高(用户可见)
前端 Vue "命盘" 在模板文本/变量名/注释 ~30-40处 高(用户可见)
前端 utils calculator.js 注释 ~5处 低(仅参考)
测试文件 "命盘" 在测试描述 ~10处 低(内部)

2.3 注意

  • 变量名、数据库字段名、API 路径 — 不改(避免破坏性变更)
  • 用户可见文案 — 全改(Toast提示、页面标题、功能描述)
  • 注释/文档字符串 — 全改(保持一致性)
  • 3处特例:"数字能量能量盘"→"数字能量盘"

PHASE 3:关系能量分析重设计(P1-P2,3-4天)

3.1 背景

v20260604.2 彻底重设了关系能量分析流程:

旧: 添加关系人 → 双命盘对比(静态)→ AI 合盘解读(Workflow)
新: 添加关系人 → 选择多人 → 提问 → AI 对话(Chatflow)→ 分析记录留存

3.2 数据库变更

变更 说明
relations 移除 compatibility_score, ai_analysis_cache, last_analyzed_at 旧字段废弃
relation_analysis_records 新增 分析会话,含成员快照(JSON)

relation_analysis_records 表结构(参考 US-10.6):

字段 类型 说明
id Long PK
userId Long 创建者
title String 分析主题(自动生成 or 用户填写)
member_snapshot Text (JSON) 参与成员快照(用户本人+选取的关系人,含姓名/生日/性别/关系类型)
chat_session_id String Dify Chatflow 会话 ID
status String active / archived
create_time LocalDateTime
update_time LocalDateTime

3.3 后端 API

端点 方法 说明
POST /api/relation/analysis/start 新建分析会话 选关系人→创建会话→返回 session_id
POST /api/relation/analysis/list 历史记录
POST /api/relation/analysis/detail 单条详情
POST /api/relation/analysis/delete 删除记录
POST /api/relation/analysis/chatSend 发送消息 调用 Dify Chatflow
POST /api/relation/analysis/chatHistory 聊天历史

注意: 旧 API(/api/relation/compare, relation/compare/interpret)可保留或标记废弃。

3.4 Dify 变更

变更 说明
Workflow → Chatflow 关系分析从结构化输出改为自然语言对话
新增 Chatflow inputs: 成员快照(JSON) + 用户问题; 输出: AI 回答
sys_config 新增 dify.chatflow.relation_app_id(Chatflow ID)

3.5 前端页面

页面 说明 状态
relations/index.vue 关系首页:关系人列表 + 分析记录列表 + 新建分析入口 ❌ 需重写
relations/analysis-chat.vue(新建) 分析对话页:成员列表 + 对话区 + 输入框 🆕 新建
relations/number-analysis.vue 八星号码分析(不受影响,保持原有设计) ✅ 已存在

3.6 现有资产复用

资产 用途
TriangleChart.vue 对话中可嵌入展示每个成员的三角图(作为参考信息)
ChatService / Dify Chatflow 集成 复用现有 AI 对话框架
CalculatorService 成员能量盘数据由后端计算,前端直接渲染
Relation entity / repository 关系人 CRUD 仍可用

PHASE 4:测试质量改进(P2,2天)

4.1 WxPayService 单元测试(P0 推荐)

优先级理由: 支付是资金核心,且为当前完全未覆盖模块(189行,🔴风险)。

测试内容:

  • createUnifiedOrder:参数组装、签名验证、Mock RestTemplate 响应
  • 异常路径:微信返回错误、网络超时
  • Mock 模式验证

4.2 calculator.js 一致性验证

方案: 取 N≥50 组生日,分别在前端(Node 环境运行 calculator.js)和后端(CalculatorService)计算,对比 24 位置结果。

4.3 修复 @Disabled 测试

位置 问题
CommissionServiceTest.testCommissionStatusFlow_pendingToSettled 状态流转断链
CommissionServiceTest.testCommissionStatusFlow_settledToAvailable 自动流转未实现
CalculatorServiceTest.testExternalPosition_Formulas_Documented 外部位置公式待验证
CalculatorServiceTest.testExternalPosition_30PositionNaming 30位置命名待验证

4.4 前端测试框架搭建(基建)

搭建 vitest + @vue/test-utils,先覆盖核心模块:

  1. stores/user.js — Pinia store 测试
  2. TriangleChart.vue — 组件渲染测试

PHASE 5:文档与收尾(P3,1天)

5.1 更新测试报告

生成日期: 2026-06-04
后端单元测试: N 运行, 0 失败
Playwright E2E: 3/3 通过
测试编译: ✅ 通过
新增测试: WxPayService, calculator.js 一致性

5.2 更新需求变更日志

需追加 v20260604.3 版本(如果本次开发引入新的需求变更)。


执行顺序与依赖图

PHASE 0 (1天)
 ┌─────────────────────────────┐
 │ 0.1 修复测试编译             │ ← 无依赖
 │ 0.2 验证已知 Bug             │ ← 重启后端后验证
 └──────────┬──────────────────┘
            │
            ▼
PHASE 1 (1-2天)      PHASE 2 (1天)
 ┌──────────────┐   ┌────────────────┐
 │ 1.1 订阅入口   │   │ 命盘→能量盘重命名│ ← 无依赖,可并行
 │ 1.2 升级验证   │   └────────────────┘
 │ 1.3 佣金验证   │
 │ 1.4 管理后台   │
 └──────┬───────┘
        │
        ▼
PHASE 3 (3-4天)     ← 依赖 PHASE 2(命名一致性)
 ┌─────────────────────────────┐
 │ 3.2 DB: relation_analysis   │
 │ 3.3 后端 API (6个)          │
 │ 3.4 Dify Chatflow 迁移      │
 │ 3.5 前端页面重写/新建        │
 └─────────────────────────────┘

PHASE 4 (2天)        ← 可与 PHASE 1-3 并行
 ┌─────────────────────────────┐
 │ 4.1 WxPayService 测试       │
 │ 4.2 calculator.js 一致性    │
 │ 4.3 修复 @Disabled 测试     │
 │ 4.4 前端测试框架             │
 └─────────────────────────────┘

PHASE 5 (1天)
 ┌─────────────────────────────┐
 │ 5.1 更新测试报告             │
 │ 5.2 更新变更日志             │
 └─────────────────────────────┘

预估总工期

Phase 估算 并行
PHASE 0 1天
PHASE 1 1-2天 与 Phase 2 并行
PHASE 2 1天 与 Phase 1 并行
PHASE 3 3-4天
PHASE 4 2天 与 Phase 1-3 并行
PHASE 5 1天 最后收尾
合计 5-8天 含并行(1人全栈)

验收检查清单

  • mvn test 编译通过,183+ 测试运行通过
  • 超级会员可购买 ¥1,314/年并开通,vipType='super_annual'
  • C端年费→超级会员补差价升级(前后端完整链路)
  • 超级会员→能量师补差价升级含佣金补差
  • 3处超级会员订阅入口全部就绪
  • 所有用户可见"命盘"→"能量盘"(3处特例处理)
  • 关系分析:选择多人→提问→AI对话→分析记录完整链路
  • 关系分析记录可查看历史
  • WxPayService 单元测试通过
  • calculator.js 与后端计算结果一致(50+组生日验证)
  • 前端单元测试框架搭建完成
  • 测试报告更新并反映最新状态