epic10-dev-plan.md 16 KB

EPIC 10 开发计划:超级会员 + 关系能量分析 + 八星号码

基于 v20260604.1 需求变更 | 当前代码状态评估日期:2026-06-04


状态摘要

总工作量 后端原子任务 前端原子任务 预估工期
26 项 14 12 5-7 天(1人全栈)

现有资产(无需重复开发)

资产 说明
EightStarService 八星类型枚举 + 星对定义已完整实现,可直接复用
CalculatorService 已含 calculateMissingNumbers() + calculateTalentNumbers(),可直接用于关系合盘
DifyService 基础 invokeWorkflow() 已实现,新增关系/号码分析只需加新方法
OrderService createOrder() + paySuccess() + handleAnnualCommission() 基础框架完整
UserService.upgradeVip() VIP 升级框架已实现,可扩展 super_annual 类型
Quota 框架 UserService 中已存在配额读写逻辑
CommerceService 接口 + Stub 已实现,Phase 2+ 才需接入 lilishop
三角图组件 TriangleChart.vue 可直接用于双命盘对比展示

Phase 1:基础设施 — 超级会员 DB + 配置(后端)

P1.1 Entity:User.vipType 增加 super_annual

文件: num-server/.../entity/User.java

  • vipType 注释增加枚举值 "super_annual"
  • 实际字段类型不变(String),纯文档变更

P1.2 ConfigService:新增 3 个种子配置项

文件: num-server/.../service/ConfigService.java

  • 在两个 getAllSeeds() 方法(init 和 reset)各加 3 项:
Key Value Type 说明
pricing.super_member 131400 price 超级会员年费(分)¥1,314
commission.super_member.direct_rate 3000 percent 超级会员直推佣金(千分比)30%
commission.super_member.upstream_rate 500 percent 超级会员上级佣金(千分比)5%

P1.3 Entity:新建 Relation 实体

文件: num-server/.../entity/Relation.java

字段 类型 说明
id Long (PK, auto)
userId Long 所属用户 ID(FK → user)
relationType String 关系类型:spouse/亲子/colleague/friend/superior
relationTypeLabel String 关系类型中文显示名
name String 关系人姓名(用户填写)
birthDate LocalDate 关系人生日
birthDateText String 生日原文(YYYY-MM-DD)
gender Integer 关系人性别 0/1/2
tags String (JSON) 自定义标签
note String 备注
createTime LocalDateTime
updateTime LocalDateTime

P1.4 Repository:新建 RelationRepository

文件: num-server/.../repository/RelationRepository.java

  • findByUserIdOrderByCreateTimeDesc(Long userId)
  • findByIdAndUserId(Long id, Long userId)

P1.5 Entity:新建 NumberAnalysis 实体

文件: num-server/.../entity/NumberAnalysis.java

字段 类型 说明
id Long (PK, auto)
userId Long 所属用户 ID(FK → user)
phoneNumber String 被分析的手机号
starCombinations Text (JSON) 八星组合分析结果
summary Text 综合解读文字
createTime LocalDateTime

P1.6 Repository:新建 NumberAnalysisRepository

文件: num-server/.../repository/NumberAnalysisRepository.java

  • findByUserIdOrderByCreateTimeDesc(Long userId)
  • findByPhoneNumberAndUserId(String phone, Long userId, Pageable page)
  • findTopByPhoneNumberAndUserIdOrderByCreateTimeDesc(String phone, Long userId) — 查重

Phase 2:超级会员业务逻辑(后端)

P2.1 OrderService:支持 productType = "super_member"

文件: num-server/.../service/OrderService.java

变更:

  1. inferProductType() — 增加 superMemberFee 价格判断
  2. paySuccess() — 增加 "super_member".equals(productType) 分支
    • 调用 userService.upgradeVip(buyerId, 365, "super_annual")
    • 调用 handleSuperMemberCommission(order, buyer, inviter)(同 handleAnnualCommission 逻辑,使用 super_member 费率)
  3. 新建 handleSuperMemberCommission() — 复制 handleAnnualCommission 模式,读取 commission.super_member.direct_rate / upstream_rate
  4. sumAnnualCommissionTo() — 扩展为同时统计 annual + super_annual 佣金

P2.2 UserService:upgradeVip 支持 super_annual

文件: num-server/.../service/UserService.java

  • 确认 upgradeVip() 可将 vipType 设为 "super_annual"
  • 配额(quota)逻辑:超级会员自动获得全部功能配额(如 chart/chat/share/academic 不设限)

P2.3 权限校验中间件

文件: 无新建,在现有 Controller 方法上加注解或手动校验

  • Relation/NemberAnalysis 接口:@AuthRequired(vip = {"super_annual", "practitioner"})
  • 让超级会员和能量师均可访问关系分析功能

Phase 3:关系分析与八星号码接口(后端)

P3.1 RelationController

文件: num-server/.../controller/RelationController.java

端点 方法 说明
/api/relation/create POST 添加关系人
/api/relation/list POST 关系人列表
/api/relation/update POST 编辑关系人
/api/relation/delete POST 删除关系人
/api/relation/compare POST 双命盘对比合盘(调用 CalculatorService 计算双方 24 位置)
/api/relation/compare/interpret POST 发起 AI 合盘解读(调用 DifyService.invokeRelationWorkflow)

P3.2 NumberAnalysisController

文件: num-server/.../controller/NumberAnalysisController.java

端点 方法 说明
/api/number-analysis/analyze POST 分析手机号(调用 CalculatorService 解析号码 → EightStarService 匹配星对 → Dify AI 生成解读)
/api/number-analysis/list POST 历史分析记录
/api/number-analysis/detail POST 单条记录详情

P3.3 DifyService:新增 2 个 Workflow 方法

文件: num-server/.../service/DifyService.java

  1. invokeRelationWorkflow(Map<String, Object> inputs, String userId)

    • POST /v1/workflows/run
    • inputs 包含:user1 的 24 位置数据 + user2 的 24 位置数据 + 关系类型
    • 返回合盘解读 JSON
  2. invokeNumberAnalysisWorkflow(Map<String, Object> inputs, String userId)

    • POST /v1/workflows/run
    • inputs 包含:手机号 + 分解后的八星组合列表
    • 返回号码能量解读 JSON

P3.4 管理后台:超级会员佣金配置卡片

文件: client/pages/admin/index.vue

  • 在现有系统配置卡片列表中增加「超级会员佣金配置」卡片
  • 包含 3 个配置项:super_member 定价、直推佣金率、上级佣金率

Phase 4:前端 — TabBar 改造 + 关系页面

P4.1 TabBar 改造(US-10.5)

文件: client/pages.json

原 3 项: | 记录 → 分析 | 我的 → 我的 | 首页 → 首页 |

新 4 项: | 首页 | 关系 | 分析 | 我的 | |------|------|------|------| | pages/index/index | pages/relations/index | pages/analysis/index | pages/profile/index |

记→分析:原有「记录」页签改名为「分析」,路径不变或迁移到 pages/analysis/index 分析页内容:合并历史咨询记录入口 + AI 解读入口 + 号码分析入口(超级会员可见)

注意:

  • 条件编译处理微信小程序 tabBar 限制(最多 5 项,没问题)
  • 关系页签未授权时显示锁图标 + 引导订阅(需确保编译后非超级会员可见入口但可引导升级)
  • 需要在 stores/user.js 中暴露 hasSuperMember 或 isVip 计算属性

P4.2 分析页改造

文件: client/pages/analysis/index.vue(新建或改造自 records/index.vue)

布局:

┌─────────────────────────┐
│   分析 (Analysis Hub)    │
├─────────────────────────┤
│  📋 咨询记录             │ ← 原有 records 列表
│                          │
│  ── 超级会员专属 ──      │ ← 非超级会员显示锁图标
│  🔗 关系能量分析          │ → relations/index
│  📱 八星号码分析          │ → number-analysis/index
└─────────────────────────┘

P4.3 关系页面 → relations/index.vue

文件: client/pages/relations/index.vue

布局:

┌─────────────────────────┐
│  关系能量分析             │
├─────────────────────────┤
│  ┌─── 添加关系人 ──┐    │ → add-relation.vue
│  │ 选择类型+输入生日 │    │
│  └─────────────────┘    │
│                          │
│  我的关系人               │
│  ┌── spouse ──┐         │ → chart-compare.vue
│  │ 张三 1990-01-15 │    │
│  └─────────────┘         │
│  ┌── col1eague ─┐        │
│  │ 李四 1988-06-20 │    │
│  └─────────────┘         │
└─────────────────────────┘

P4.4 添加关系人 → relations/add-relation.vue

文件: client/pages/relations/add-relation.vue

表单字段:

  • 关系类型:下拉选择(夫妻/亲子/同事/朋友/上下级)
  • 姓名(选填,仅用于显示)
  • 生日:日期选择器(同首页风格)
  • 性别:单选
  • 备注(选填)

P4.5 双命盘对比 → relations/chart-compare.vue

文件: client/pages/relations/chart-compare.vue

布局:

┌─────────────────────────┐
│   ← 关系能量对比         │
├─────────────────────────┤
│  用户命盘     vs  关系人命盘│
│  ┌──────┐      ┌──────┐ │
│  │三角图│      │三角图│ │
│  └──────┘      └──────┘ │
│                          │
│  合盘分析(差异/相似)    │
│  ┌─ 数字能量互补 ──┐    │
│  │ 某星在某位置匹配... │    │
│  ├─ AI 合盘解读 ──┤    │
│  │ 点击 → Dify 生成... │    │
│  └─────────────────┘    │
└─────────────────────────┘

P4.6 八星号码分析 → relations/number-analysis.vue

文件: client/pages/relations/number-analysis.vue

布局:

┌─────────────────────────┐
│  八星号码能量分析         │
├─────────────────────────┤
│  [输入手机号] [分析按钮] │
│                          │
│  分析结果                 │
│  号码: 138xxxx1234       │
│  天医: 13 (一级+)        │
│  延年: 34 (三级-)        │
│  绝命: 12 (二级)          │
│  ...                     │
│                          │
│  [AI 深度解读]           │
└─────────────────────────┘

P4.7 超级会员订阅入口 × 3

1. 关系页(未授权时) — relations/index.vue

  • 页面顶部大 Banner:🔒 开通超级会员,解锁关系能量分析 ¥1,314/年

2. 我的页面 — pages/profile/index.vue

  • 增加「超级会员」卡片(类似现有订阅卡片样式)

3. AI 解读页 — pages/chart/index.vue(咨询结束后右上角或底部)

  • 小入口:「关系能量分析(超级会员)」

Phase 5:Dify Workflow 配置(平台配置)

P5.1 Dify Workflow:关系合盘解读

配置项:

  • 在 Dify 平台创建新 Workflow
  • inputs:user1_name, user2_name, relation_type, user1_positions (JSON), user2_positions (JSON)
  • 提示词:要求输出双方命盘的数字能量互补、冲突、关系建议
  • knowledge:引用数字能量学知识库(现有)
  • sys_config key:dify.workflow.relation_app_id(新增配置项)

P5.2 Dify Workflow:八星号码解读

配置项:

  • 在 Dify 平台创建新 Workflow
  • inputs:phone_number, star_combinations (JSON)
  • 提示词:要求输出号码总体能量、各星对含义、是否适合使用
  • sys_config key:dify.workflow.number_analysis_app_id(新增配置项)

P5.3 ConfigService 添加 2 个 Dify App ID 配置

文件: num-server/.../service/ConfigService.java

  • dify.workflow.relation_app_id — string,默认 ""
  • dify.workflow.number_analysis_app_id — string,默认 ""

依赖与并行度

Phase 1 (基础设施)    Phase 2 (业务逻辑)     Phase 3 (接口)        Phase 4 (前端)
──────────────────  ──────────────────  ──────────────────  ──────────────────
P1.1 User.vipType                                                      
     │                                                                 
P1.2 ConfigService 3项                                                 
     │                                                                 
P1.3 Relation Entity → P2.1 OrderService → P3.1 RelationController → P4.3~P4.5 关系页面
P1.4 RelationRepo      │                                               
     │                  │                                              
P1.5 NumberAnalysis → P2.2 UserService → P3.2 NumberAnalysisCtl → P4.6 号码页面
P1.6 NumberAnalysisRepo  │            │                                
     │                   │            │                                
P2.3 权限校验┘───────────┘            │                                
                                      │                                
P3.3 DifyService 2个方法──────────────┘    → 依赖 Dify 平台创建
                                           → 依赖 Frontend 页面展示
P3.4 管理后台卡片 ────────────────────────── P4.x 前端可并行
P4.1 TabBar + P4.2 分析页 ───── 可独立并行
P4.7 订阅入口 × 3 ──────────── 依赖 Phase 2 支付能力,可并行于 P2.1 后

推荐执行顺序(基于依赖)

Week 1:
  Mon-Tue:  P1.1+P1.2+P1.3+P1.4+P1.5+P1.6  (基础设施, 可全并行)
  Tue-Wed:  P2.1+P2.2+P2.3                 (后端业务逻辑)
  Wed-Thu:  P3.1+P3.2+P3.3                  (后端API, 可全并行)
  Thu:      P4.1+P4.2                       (TabBar+分析页, 可并行)
  
Week 2:
  Fri:      P4.3+P4.4+P4.5+P4.6             (前端页面, 可全并行)
  Fri-Sat:  P3.4+P4.7+P5.1+P5.2+P5.3       (管理后台+Dify配置, 可并行)
  Sat-Sun:  联调 + Bugfix + 验收

验收检查清单

  • 超级会员可购买 ¥1,314/年并开通
  • C端年费→超级会员可补差价升级
  • 超级会员→能量师可补差价升级+佣金补差
  • 超级会员推荐年费获30%佣金+5%上级佣金
  • TabBar 显示 首页·关系·分析·我的
  • 关系页超级会员专属,未授权显示引导
  • 添加关系人表单可用
  • 双命盘对比图渲染正确
  • AI 合盘解读可用
  • 手机号号码能量分析可用(本地八星匹配+AI解读)
  • 管理后台可配置超级会员价格和佣金
  • Dify 2个新Workflow可正确调用