制定日期: 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%(代码未动) |
问题: 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
| 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/info 缺 isSeedPriceUser 字段 |
⏳ 待验证 | 检查 ProfileController.getInfo 返回值 |
参考 US-10.1,需要在 3 处嵌入订阅入口:
| 位置 | 状态 | 需要做的事 |
|---|---|---|
| 关系页(未授权时) | ❌ 待实现 | relations/index.vue 顶部 Banner:🔒 开通超级会员... |
| 我的页面(免费用户/年费用户) | ✅ 已实现 | 免费用户双方案卡片 + 年费用户"升超级"按钮已存在 |
| AI 解读页(咨询结束后) | ❌ 待实现 | chart/index.vue 底部或右上角入口 |
文件:
client/pages/relations/index.vueclient/pages/chart/index.vue当前状态: UserService.upgradeVip() 的 super_annual → practitioner 路径已存在。但需要验证:
OrderService.handlePractitionerCommission() 中的 sumAnnualCommissionTo() 已扩展到包含 super_member 订单的佣金profile/index.vue L97)待验证项: 升级定价前端是否正确调用了 pricingApi.upgrade() 并传 productType: 'practitioner'
当前状态: OrderService.handleSuperMemberCommission() 已实现,使用 commission.super_member.direct_rate(3000)/upstream_rate(500) 费率。
待验证: 推广超级会员的佣金结算是否正确,佣金明细是否显示"超级会员直接推荐佣金"等备注。
当前状态: 管理后台是否存在超级会员定价+佣金配置卡片?
需检查: admin/src/views/settings/index.vue — 确认是否已有超级会员定价(pricing.super_member)和超级会员佣金(commission.super_member.*)的配置卡片。
v20260604.2 要求将所有"命盘"改为"能量盘"(含 3 处"数字能量能量盘"→"数字能量盘")。文档部分(README, style-guide, system-spec 等)已在需求变更中更新,但代码内仍包含大量"命盘"字样。
| 层 | 搜索关键词 | 文件量 | 优先级 |
|---|---|---|---|
| 后端 Java | "命盘" 在注释/异常消息/字段描述 | ~15-20处 | 高(用户可见) |
| 前端 Vue | "命盘" 在模板文本/变量名/注释 | ~30-40处 | 高(用户可见) |
| 前端 utils | calculator.js 注释 | ~5处 | 低(仅参考) |
| 测试文件 | "命盘" 在测试描述 | ~10处 | 低(内部) |
v20260604.2 彻底重设了关系能量分析流程:
旧: 添加关系人 → 双命盘对比(静态)→ AI 合盘解读(Workflow)
新: 添加关系人 → 选择多人 → 提问 → AI 对话(Chatflow)→ 分析记录留存
| 表 | 变更 | 说明 |
|---|---|---|
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 |
| 端点 | 方法 | 说明 |
|---|---|---|
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)可保留或标记废弃。
| 变更 | 说明 |
|---|---|
| Workflow → Chatflow | 关系分析从结构化输出改为自然语言对话 |
| 新增 Chatflow | inputs: 成员快照(JSON) + 用户问题; 输出: AI 回答 |
| sys_config 新增 | dify.chatflow.relation_app_id(Chatflow ID) |
| 页面 | 说明 | 状态 |
|---|---|---|
relations/index.vue |
关系首页:关系人列表 + 分析记录列表 + 新建分析入口 | ❌ 需重写 |
relations/analysis-chat.vue(新建) |
分析对话页:成员列表 + 对话区 + 输入框 | 🆕 新建 |
relations/number-analysis.vue |
八星号码分析(不受影响,保持原有设计) | ✅ 已存在 |
| 资产 | 用途 |
|---|---|
TriangleChart.vue |
对话中可嵌入展示每个成员的三角图(作为参考信息) |
ChatService / Dify Chatflow 集成 |
复用现有 AI 对话框架 |
CalculatorService |
成员能量盘数据由后端计算,前端直接渲染 |
Relation entity / repository |
关系人 CRUD 仍可用 |
优先级理由: 支付是资金核心,且为当前完全未覆盖模块(189行,🔴风险)。
测试内容:
createUnifiedOrder:参数组装、签名验证、Mock RestTemplate 响应方案: 取 N≥50 组生日,分别在前端(Node 环境运行 calculator.js)和后端(CalculatorService)计算,对比 24 位置结果。
| 位置 | 问题 |
|---|---|
CommissionServiceTest.testCommissionStatusFlow_pendingToSettled |
状态流转断链 |
CommissionServiceTest.testCommissionStatusFlow_settledToAvailable |
自动流转未实现 |
CalculatorServiceTest.testExternalPosition_Formulas_Documented |
外部位置公式待验证 |
CalculatorServiceTest.testExternalPosition_30PositionNaming |
30位置命名待验证 |
搭建 vitest + @vue/test-utils,先覆盖核心模块:
stores/user.js — Pinia store 测试TriangleChart.vue — 组件渲染测试生成日期: 2026-06-04
后端单元测试: N 运行, 0 失败
Playwright E2E: 3/3 通过
测试编译: ✅ 通过
新增测试: WxPayService, calculator.js 一致性
需追加 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+ 测试运行通过