# 会员等级价格体系更新实施计划 > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development or superpowers:executing-plans to implement plan. Steps use checkbox (`- [ ]`) syntax. **Goal:** 将会员等级调整为:FREE(¥0)、FAMILY(¥1,314/年)、PREMIUM(高级家庭会员 ¥13,168/年 或 ¥1,314/月),所有价格可通过 sys_config 配置,在有价格/功能差异的页面添加缴费升级提醒。 **架构:** 后端更新 membership_levels 种子数据 + MembershipService 处理 PREMIUM 等级逻辑 → 前端 plans/upgrade/index 页面展示三个等级 → 商城等页面添加升级提示 **Tech Stack:** Spring Boot 2.7 + MyBatis-Plus / uni-app Vue 2 小程序 / MySQL 8.0 **参考:** `docs/superpowers/plans/2026-07-27-membership-fix-plan.md`(之前审计的修复计划) --- ## 文件结构 ### 后端 | 文件 | 操作 | 职责 | |------|------|------| | `cfc-backend/.../config/DatabaseInitializer.java` | 修改 | 更新 seed sys_config 价格 + membership_levels 种子数据 | | `cfc-backend/.../service/MembershipService.java` | 修改 | 新增 PREMIUM 等级处理 | | `cfc-backend/.../controller/MembershipController.java` | 修改 | /api/membership/plans 返回三个等级 | | `cfc-backend/src/main/resources/schema.sql` | 修改 | 同步 membership_levels 表注释 | ### 前端 | 文件 | 操作 | 职责 | |------|------|------| | `cfc-frontend/pages/membership/plans.vue` | 修改 | 展示 FREE/FAMILY/PREMIUM 三个方案,从后端加载价格 | | `cfc-frontend/pages/membership/upgrade.vue` | 修改 | 展示 FAMILY + PREMIUM 两个付费选项 | | `cfc-frontend/pages/membership/index.vue` | 修改 | 兼容 PREMIUM 等级显示 | | `cfc-frontend/utils/api.js` | 修改 | 确保所有 API 封装存在 | | `cfc-frontend/pages/shop/index/index.vue` | 修改 | 升级文案从"家庭会员"改为通用"付费会员" | | `cfc-frontend/pages/shop/checkout/checkout.vue` | 修改 | 同上 | | `cfc-frontend/pages/shop/cart/cart.vue` | 修改 | 同上 | | `cfc-frontend/pages/shop/payment/payment.vue` | 修改 | 升级提示引用后端价格 | --- ## Task 1: 更新数据库种子数据 + SysConfig ### 现状 `DatabaseInitializer` 中现有 sys_config 种子数据: ```java insertSysConfigSeed("member_fee_family", "36500", "家庭会员年费(分)"); // ← ¥365 insertSysConfigSeed("member_fee_premium", "3650", "高级会员年费(元)"); // ← 单价混乱 insertSysConfigSeed("member_discount_family", "9000", "家庭会员折扣(bps)"); // ← 9折 insertSysConfigSeed("member_discount_premium", "0.8", "高级会员折扣率"); // ← 格式不统一 insertSysConfigSeed("member_upgrade_threshold", "131400", "累计消费门槛(分)"); // ← ¥1,314 ``` ### 需要修改 1. 更新 sys_config 种子值以分(cents)为单位统一: - `member_fee_family` = `131400`(¥1,314 → 按分) - `member_fee_premium` = `1316800`(¥13,168 → 按分) - `member_discount_family` = `9000`(90% = 9折,bps) - `member_discount_premium` = `8000`(80% = 8折,bps) - `member_upgrade_threshold` = `131400`(¥1,314 消费门槛,不动) 2. 添加新 sys_config 键: - `member_fee_premium_monthly` = `131400`(高级会员月费 ¥1,314) - `member_fee_family_desc` = `"家庭会员"`(展示名称) - `member_fee_premium_desc` = `"高级家庭会员"`(展示名称) 3. `MembershipService.java` 中的 `createOrder()` 里 PREMIUM 读取 `member_fee_premium` / `member_fee_premium_monthly` - [ ] **Step 1: 修改 DatabaseInitializer sys_config 种子数据** 找到 `insertSysConfigSeed("member_fee_family", ...)` 相关代码,更新为: ```java insertSysConfigSeed("member_fee_family", "131400", "家庭会员年费(分)"); insertSysConfigSeed("member_fee_premium", "1316800", "高级家庭会员年费(分)"); insertSysConfigSeed("member_fee_premium_monthly", "131400", "高级家庭会员月费(分)"); insertSysConfigSeed("member_discount_family", "9000", "家庭会员商品折扣(bps)"); insertSysConfigSeed("member_discount_premium", "8000", "高级家庭会员商品折扣(bps)"); insertSysConfigSeed("member_upgrade_threshold", "131400", "自动升级家庭会员累计消费门槛(分)"); // 保留现有其他 seed 不变 ``` - [ ] **Step 2: 编译验证** ```bash cd cfc-backend && mvn clean compile -q ``` - [ ] **Step 3: 提交** ```bash git add cfc-backend/src/main/java/com/etotem/cfc/config/DatabaseInitializer.java git commit -m "chore: 更新会员价格 sys_config 种子数据 FAMILY ¥1,314/年, PREMIUM ¥13,168/年或¥1,314/月, 折扣统一bps格式" ``` --- ## Task 2: 扩展 MembershipService 支持 PREMIUM 等级 - [ ] **Step 1: 修改 `canUseFeature()` 添加 PREMIUM 权限** 在 `MembershipService.java` 的 `canUseFeature()` 方法中,在 FAMILY 判断之后添加 PREMIUM: ```java // PREMIUM 用户全部权益同 FAMILY if ("PREMIUM".equals(level)) { return "free_activities".equals(feature) || "free_courses".equals(feature) || "full_price_purchase".equals(feature) || "referral_commission".equals(feature) || "discount_purchase".equals(feature) || "member_activities".equals(feature) || "create_family".equals(feature) || "invite_family".equals(feature) || "purchase_commission".equals(feature); } ``` - [ ] **Step 2: 修改 `applyMemberDiscount()` 支持 PREMIUM 更高折扣** ```java public Integer applyMemberDiscount(Long userId, Integer originalPrice) { if (originalPrice == null || originalPrice <= 0) return 0; String level = getMemberLevel(userId); String discountStr = null; if ("PREMIUM".equals(level)) { discountStr = sysConfigService.getValue("member_discount_premium"); } else if ("FAMILY".equals(level)) { discountStr = sysConfigService.getValue("member_discount_family"); } if (discountStr != null) { int discountBps = Integer.parseInt(discountStr); return originalPrice * discountBps / 10000; } return originalPrice; } ``` - [ ] **Step 3: 修改 `createOrder()` 支持 PREMIUM 定价** 在 `createOrder()` 的 FAMILY/PROVIDER 判断后添加: ```java } else if ("PREMIUM".equals(levelCode)) { if ("monthly".equals(effectivePeriod)) { String feeStr = sysConfigService.getValue("member_fee_premium_monthly"); amount = feeStr != null ? Integer.parseInt(feeStr) : 131400; } else { String feeStr = sysConfigService.getValue("member_fee_premium"); amount = feeStr != null ? Integer.parseInt(feeStr) : 1316800; } } ``` - [ ] **Step 4: 编译验证** ```bash cd cfc-backend && mvn clean compile -q ``` - [ ] **Step 5: 提交** ```bash git add cfc-backend/src/main/java/com/etotem/cfc/service/MembershipService.java git commit -m "feat: MembershipService 支持 PREMIUM 等级 canUseFeature/applyMemberDiscount/createOrder 增加 PREMIUM 逻辑" ``` --- ## Task 3: 更新 MembershipController 计划列表端点 - [ ] **Step 1: 确认 `/api/membership/plans` 已返回所有等级** 当前代码(MembershipController.java 行 217-231)已调用 `getAllLevels()`,返回所有等级。`membership_levels` 表中有 FREE/FAMILY/PREMIUM(需确认后台种子数据已插入)。无需修改代码,但需确认 DB 有数据。 也可以通过 `/api/membership/levels` 端点验证,同样返回所有等级。 **如果需要额外返回价格说明文本**(如突出"推荐"标记),可扩展 `MembershipController.getPricingPlans()`: ```java plan.put("recommended", "FAMILY".equals(level.getLevelCode())); // 推荐标记 plan.put("levelDesc", level.getLevelDesc()); ``` - [ ] **Step 2: 提交(如需改动)** ```bash git add cfc-backend/.../controller/MembershipController.java git commit -m "feat: /api/membership/plans 增加推荐标记和等级描述" ``` --- ## Task 4: 更新小程序 plans.vue 展示三个等级 **现状:** `plans.vue` 硬编码 L0(注册会员¥0)、L1(❤️ 一生一世¥1,314/年)、L2(💎 久久一生¥1,314/月),价格和功能均为静态数据。 **改为:** 从后端 `/api/membership/plans` 加载三个等级,动态渲染。 - [ ] **Step 1: 修改 `