日期: 2026-06-04 目的: 在开始 Phase 1+2 实施前,明确现有代码与设计文档的差异,并提供决策依据
| 阶段 | 设计文档 | 实际状态 | 差异 |
|---|---|---|---|
| Phase 0 (骨架) | 角色模型 + TabBar + 服务商入驻 | ✅ 已实现 (本次提交 8 个 commits) | 无 |
| Phase 1 (商品系统) | 3 实体 + 3 Controller + 5 小程序页 + 3 Web 页 | ❌ 未实现 | 实体不存在 |
| Phase 2 (会员+积分) | 2 实体 + 1 实体扩展 + 2 Controller + 3 小程序页 + 1 Web 页 | 🟡 部分实现 (代码层) | 与设计不一致 + DB 表未建 |
| 项目 | 内容 |
|---|---|
| 新实体 | Product, ProductOrder, SysConfig |
| 新Controller | ProductController, ProductOrderController, ProductVendorController, SysConfigController |
| 新API端点 | 商品CRUD/审核/上下架/订单/支付/系统配置 |
| 新小程序页 | 5 页 (商品详情, 订单列表, 订单详情, 服务商中心, 商城页迭代) |
| 新Web页 | 3 页 (商品管理, 订单管理, 系统配置) |
pages/shop/index.vue 仅为占位 (Phase 0 实现)pages/discover/index.vue 仅为占位 (Phase 0 实现)结论: Phase 1 完全未开始,需要从零实现。
| 项目 | 内容 |
|---|---|
| 新实体 | FamilyMembership, MemberSelection |
| 实体扩展 | PointsLog 新增 type=member_deduct |
| 新Controller | MembershipController, MemberSelectionController |
| 新API端点 | 会员信息/购买/续费/等值商品选择/积分抵扣 |
| 新小程序页 | 3 页 (会员中心, 购买/续费, 等值商品选择) |
| 新Web页 | 1 页 (会员管理) |
| 会员等级 | 3 等级: free / standard / premium |
| 会员年费 | standard = 1314元/年, premium = SysConfig 配置 |
| 核心业务 | 1314 等值商品选择 + 积分抵扣会员费 |
| 文件 | 内容 | 状态 |
|---|---|---|
entity/FamilyMembership.java |
familyId, levelCode, startDate, endDate, paymentMethod, paymentStatus, orderNo, transactionId, amount, autoRenew, createdAt, updatedAt | ✅ 存在 |
entity/MembershipLevel.java |
levelCode, levelName, levelDesc, priceMonthly, priceYearly, features(JSON), maxChildren, maxTasksPerDay, aiReviewEnabled, prioritySupport, teacherConsultation | ✅ 存在 |
entity/PaymentOrder.java |
orderNo, familyId, levelCode, paymentType, amount, status, payMethod, transactionId, paidAt | ✅ 存在 |
controller/MembershipController.java |
6 端点: /levels, /my, /current, /orders, /notify, /can-use | ✅ 存在 |
service/MembershipService.java |
6 方法 (含占位实现) | ✅ 存在 |
service/api/MembershipServiceInterface.java |
接口定义 | ✅ 存在 |
service/DatabaseSyncService.java |
注册了 membership_levels/family_memberships 表 | ✅ 存在 |
| 问题 | 严重度 | 详情 |
|---|---|---|
| DB 表未建 | 🔴 严重 | family_memberships, membership_levels, payment_orders 在 DatabaseInitializer.java 无 DDL; 在 schema.sql 也无 DDL。代码无法运行。 |
| 会员等级 4 vs 3 | 🟠 中 | 现有 FREE/BASIC/PROFESSIONAL/ENTERPRISE (4 等级) 与设计 free/standard/premium (3 等级) 不一致。 |
| 计价模式不同 | 🟠 中 | 现有: 月费 + 年费 (monthly + yearly) 设计: 仅年费 (1314元/年) |
| 字段不同 | 🟡 低 | 现有: features(JSON), maxChildren, maxTasksPerDay, aiReviewEnabled, prioritySupport, teacherConsultation 设计: 仅 startDate/endDate/autoRenew/paymentMethod/pointsDeducted/pointsAmount/status |
| 1314 等值商品选择 | 🔴 缺失 | MemberSelection 实体不存在, MemberSelectionController 不存在 |
| 积分抵扣会员费 | 🔴 缺失 | PointsLog.type=member_deduct 扩展未实现, deductForMembership 方法未实现 |
createOrder 残缺 |
🔴 严重 | orderMapper.insert 被注释掉, 订单无法写入 |
processPaymentCallback 残缺 |
🔴 严重 | 返回 true 但未执行任何实际操作 |
familyId 占位 |
🟠 中 | 多处硬编码 Long familyId = 1L, 未从 JWT 提取 |
| Free 等级处理 | 🟡 低 | 现有代码有 FREE 等级; 设计 free 是"未付费的默认状态", 不需要独立的 MembershipLevel 记录 |
| SysConfig 不存在 | 🔴 缺失 | points_exchange_rate, points_deduct_cap, member_fee_standard, member_fee_premium, member_eligible_budget, renewal_discount_rate, member_discount_standard, member_discount_premium 等配置均无实现 |
grep 整个 cfc-frontend (排除 node_modules) 找不到 membership 相关引用grep 整个 cfc-web (排除 node_modules) 找不到 membership 相关引用结论: 现有 Phase 2 代码是孤岛 — 没有任何消费者。修改它不会影响其他业务。
| 维度 | 评估 |
|---|---|
| 改动量 | 🟢 较小 — 复用现有实体/Controller/Service 框架 |
| 设计一致性 | 🟠 偏离 — 与设计文档 3 等级不一致 |
| 业务契合 | 🟠 4 等级更细, 适合阶梯定价, 但与"1314元年费"哲学不符 |
| 向后兼容 | 🟢 DB 数据兼容 (现有数据保留) |
| 代码修改 | 补全 createOrder 实际逻辑, 补全 processPaymentCallback, 修正 familyId 提取, 补 DB DDL, 添加 MemberSelection, 添加积分抵扣 |
| 风险 | 🟢 低 (无消费者, 修改安全) |
| 维度 | 评估 |
|---|---|
| 改动量 | 🟠 中等 — 需要修改 entity 字段, 重写 MembershipService 业务逻辑, 调整 levelCode 值 |
| 设计一致性 | 🟢 完全对齐设计文档 |
| 业务契合 | 🟢 "体验-标准-高级"3 等级匹配 1314 会员费定位 |
| 向后兼容 | 🟠 DB 需要数据迁移 (FREE/BASIC/PROFESSIONAL/ENTERPRISE → free/standard/premium) |
| 代码修改 | 删除 features/maxChildren 等冗余字段, 重写 MembershipService, 重建 DB DDL + 种子数据, 写 MemberSelection 完整实现 |
| 风险 | 🟡 中 (无消费者, 但需要数据迁移脚本) |
保留现有 4 等级 (FREE/BASIC/PROFESSIONAL/ENTERPRISE),但不重写,仅在 Phase 2 计划中:
| 维度 | 评估 |
|---|---|
| 改动量 | 🟢 最小 |
| 设计一致性 | 🟠 仍偏离 — 4 等级但只用 3 个 |
| 业务契合 | 🟠 OK — 业务效果与设计等价 |
| 风险 | 🟢 最低 |
推荐 选项 A: 沿用现有 4 等级
理由:
关键补全任务 (Phase 2 计划):
DatabaseInitializer 增加 3 张表 DDL + 种子数据 (FREE/BASIC/PROFESSIONAL/ENTERPRISE 各 1 条)MembershipService.createOrder 实际写库 (注入 OrderMapper)MembershipService.processPaymentCallback 实际开通/续费会员MembershipController 所有 familyId 改用 @RequestHeader("X-User-Id") + User 查询MemberSelection 实体 + Mapper + Service + ControllerPointsLog.type 扩展 (member_deduct 枚举值)PointsService.deductForMembership 新方法SysConfig 实体 (Phase 1 计划实现, Phase 2 复用)Phase 0 (✅ 已完成) 角色模型 + TabBar + 服务商入驻
↓
Phase 1 (🆕 需新建) 商品系统
- Product / ProductOrder / SysConfig
- 服务商发布商品 + 管理员审核
- 商城页可浏览可购买
↓
Phase 2 (🟡 部分实现) 会员+积分
- 补 DB DDL + 补 Membership 业务逻辑
- 新增 MemberSelection (1314等值商品选择)
- 新增积分抵扣会员费
- 前端 3 页 + Web 1 页
严格依赖: Phase 2 依赖 Phase 1 的 Product (等值商品选择需要 Product 列表)
后端新建 (~10 个文件):
entity/Product.java, entity/ProductOrder.java, entity/SysConfig.javamapper/ProductMapper.java, mapper/ProductOrderMapper.java, mapper/SysConfigMapper.javaservice/ProductService.java, service/ProductOrderService.java, service/SysConfigService.javadto/ProductDTO.java, dto/ProductOrderDTO.java, dto/SysConfigDTO.javacontroller/product/ProductController.java, controller/product/ProductOrderController.java, controller/product/ProductVendorController.java, controller/config/SysConfigController.java后端修改 (~2 个文件):
config/DatabaseInitializer.java (新增 3 张表 DDL + 种子)entity/User.java (无变更, 但需在 DatabaseInitializer 增加商品 seeder)前端新建 (~5 个文件):
pages/discover/product-detail.vue (商品详情,可复用商城/发现)pages/shop/order-list.vue (订单列表)pages/shop/order-detail.vue (订单详情)pages/vendor/products.vue (服务商商品管理)pages/vendor/orders.vue (服务商订单管理)前端修改 (~3 个文件):
pages/shop/index.vue (从占位 → 商品列表)pages/discover/index.vue (从占位 → 活动+课程列表)pages/vendor/center.vue (添加商品管理/订单管理入口)utils/api.js (新增 product APIs)Web 新建 (~3 个文件):
src/views/admin/ProductManage.vue (商品管理)src/views/admin/OrderManage.vue (订单管理)src/views/admin/SysConfig.vue (系统配置)Web 修改 (~3 个文件):
src/api/product.js (新建)src/router/index.js (新增路由)src/views/Layout.vue (新增菜单)(略 — 取决于用户选项 A/B/C 决策)