6.3 KiB
6.3 KiB
🚀 方案A:其他支付方式实施方案
实施日期: 2026-01-23
前置条件: ✅ 方案B(钱包支付)已完成
实施目标: 实现次卡、套餐、优惠券、地址关联功能
📋 实施范围
1. 次卡支付功能
- 订单支付时支持次卡
- 订单完成后自动扣减次数
- 次卡余额不足提醒
2. 套餐支付功能
- 订单支付时支持套餐课时
- 订单完成后自动扣减课时
- 套餐余额不足提醒
3. 优惠券使用功能
- 订单支付时支持优惠券
- 自动计算优惠金额
- 优惠券使用记录
4. 地址关联功能
- 订单关联服务地址
- 陪伴员查看服务地址
- 地址管理功能
🔍 现状分析
已有功能 ✅
-
TimeCard实体 - 已完整实现
- 包含总时长、已使用、剩余时长字段
- 有状态管理(未激活、进行中、已完成、已过期)
- 有可用性检查方法
-
Package实体 - 已基本实现
- 包含套餐基本信息
- 需要扩展用户套餐表(UserPackage)
-
订单完成扣减 - 已实现
completeService方法中已有时卡扣减逻辑completeService方法中已有套餐扣减逻辑
缺失功能 ❌
-
支付时使用次卡/套餐 - 未实现
payOrder方法只支持钱包支付- 需要扩展支持次卡/套餐作为支付方式
-
优惠券系统 - 未实现
- 缺少Coupon、UserCoupon实体
- 缺少优惠券服务和控制器
-
地址管理 - 未实现
- 缺少UserAddress实体
- 缺少地址服务和控制器
- 订单未关联地址
🎯 实施策略
阶段1:数据库设计与扩展(1天)
-
扩展order表
- 添加支付方式相关字段
- 添加优惠券相关字段
- 添加地址关联字段
-
创建优惠券表
- coupon - 优惠券模板表
- user_coupon - 用户优惠券表
-
创建地址表
- user_address - 用户地址表
-
扩展次卡/套餐表
- 确保字段完整
阶段2:后端实现(2-3天)
-
优惠券系统
- Coupon、UserCoupon实体
- CouponService、UserCouponService
- CouponController
-
地址管理
- UserAddress实体
- UserAddressService
- UserAddressController
-
订单支付扩展
- 扩展payOrder方法支持次卡/套餐/优惠券
- 实现支付方式优先级逻辑
- 实现金额计算逻辑
阶段3:前端实现(2-3天)
- 支付方式选择页面
- 优惠券选择页面
- 地址选择页面
- 订单详情展示优化
阶段4:测试与验证(1-2天)
- 单元测试
- 集成测试
- 端到端测试
📊 支付方式优先级
1. 优惠券折扣(先计算折扣)
2. 次卡/套餐(优先使用,免费)
3. 钱包余额(次选)
4. 第三方支付(最后)
支付逻辑示例
场景1:使用次卡支付
订单金额: 100元
用户选择: 次卡支付
结果:
- 不扣款
- 订单完成后扣减次卡次数
- 支付状态: 已支付
场景2:使用套餐支付
订单金额: 100元
用户选择: 套餐支付
结果:
- 不扣款
- 订单完成后扣减套餐课时
- 支付状态: 已支付
场景3:使用优惠券+钱包
订单原价: 100元
优惠券: 满100减20
实付金额: 80元
支付方式: 钱包
结果:
- 扣减钱包80元
- 优惠券标记为已使用
- 支付状态: 已支付
🔑 关键技术点
1. 次卡/套餐支付特点
- 支付时不扣款:只标记订单已支付
- 完成时扣减:在
completeService中扣减次数/课时 - 余额检查:支付前检查次卡/套餐是否可用
2. 优惠券使用
- 金额计算:原价 - 优惠券折扣 = 实付金额
- 状态更新:优惠券标记为已使用
- 过期检查:使用前检查是否过期
3. 地址关联
- 订单创建时选择地址
- 陪伴员查看服务地址
- 支持地址导航
📁 文档结构
docs/fixes/2026-01-23-方案A其他支付方式实施/
├── README.md # 总体方案(本文件)
├── 📋数据库设计.md # 数据库表结构设计
├── 🔧1-次卡支付功能实施.md # 次卡支付详细实施
├── 🔧2-套餐支付功能实施.md # 套餐支付详细实施
├── 🔧3-优惠券使用功能实施.md # 优惠券使用详细实施
├── 🔧4-地址关联功能实施.md # 地址关联详细实施
├── 🧪测试指南.md # 测试用例和测试方法
└── ✅实施完成报告.md # 实施完成后的总结报告
📅 实施计划
Day 1: 数据库设计与扩展
- 设计表结构
- 编写SQL脚本
- 执行数据库变更
- 验证数据完整性
Day 2-3: 优惠券和地址系统
- 实现Coupon、UserCoupon实体
- 实现CouponService、CouponController
- 实现UserAddress实体
- 实现UserAddressService、UserAddressController
- 单元测试
Day 4-5: 订单支付扩展
- 扩展payOrder方法
- 实现次卡/套餐支付逻辑
- 实现优惠券使用逻辑
- 实现地址关联逻辑
- 集成测试
Day 6-7: 前端实现
- 支付方式选择页面
- 优惠券选择页面
- 地址选择页面
- 前后端联调
Day 8: 测试与验证
- 完整流程测试
- 性能测试
- 用户验收测试
🎯 成功标准
功能完整性
- ✅ 支持次卡支付
- ✅ 支持套餐支付
- ✅ 支持优惠券使用
- ✅ 支持地址关联
- ✅ 支持组合支付
数据准确性
- ✅ 金额计算正确
- ✅ 次卡扣减正确
- ✅ 套餐扣减正确
- ✅ 优惠券使用正确
用户体验
- ✅ 支付流程顺畅
- ✅ 错误提示清晰
- ✅ 响应速度快
- ✅ 界面友好
⚠️ 注意事项
1. 数据一致性
- 所有支付操作必须使用事务
- 失败时必须回滚
- 记录详细的操作日志
2. 并发控制
- 次卡/套餐扣减使用乐观锁
- 优惠券使用防止重复
- 防止重复支付
3. 安全性
- 支付金额必须在后端计算
- 前端传递的金额仅供显示
- 验证用户权限
4. 用户体验
- 支付失败时给出明确提示
- 余额不足时提示购买
- 优惠券过期时提示
下一步: 查看 📋数据库设计.md 了解详细的数据库设计方案