# 🚀 方案A:其他支付方式实施方案 **实施日期**: 2026-01-23 **前置条件**: ✅ 方案B(钱包支付)已完成 **实施目标**: 实现次卡、套餐、优惠券、地址关联功能 --- ## 📋 实施范围 ### 1. 次卡支付功能 - 订单支付时支持次卡 - 订单完成后自动扣减次数 - 次卡余额不足提醒 ### 2. 套餐支付功能 - 订单支付时支持套餐课时 - 订单完成后自动扣减课时 - 套餐余额不足提醒 ### 3. 优惠券使用功能 - 订单支付时支持优惠券 - 自动计算优惠金额 - 优惠券使用记录 ### 4. 地址关联功能 - 订单关联服务地址 - 陪伴员查看服务地址 - 地址管理功能 --- ## 🔍 现状分析 ### 已有功能 ✅ 1. **TimeCard实体** - 已完整实现 - 包含总时长、已使用、剩余时长字段 - 有状态管理(未激活、进行中、已完成、已过期) - 有可用性检查方法 2. **Package实体** - 已基本实现 - 包含套餐基本信息 - 需要扩展用户套餐表(UserPackage) 3. **订单完成扣减** - 已实现 - `completeService`方法中已有时卡扣减逻辑 - `completeService`方法中已有套餐扣减逻辑 ### 缺失功能 ❌ 1. **支付时使用次卡/套餐** - 未实现 - `payOrder`方法只支持钱包支付 - 需要扩展支持次卡/套餐作为支付方式 2. **优惠券系统** - 未实现 - 缺少Coupon、UserCoupon实体 - 缺少优惠券服务和控制器 3. **地址管理** - 未实现 - 缺少UserAddress实体 - 缺少地址服务和控制器 - 订单未关联地址 --- ## 🎯 实施策略 ### 阶段1:数据库设计与扩展(1天) 1. **扩展order表** - 添加支付方式相关字段 - 添加优惠券相关字段 - 添加地址关联字段 2. **创建优惠券表** - coupon - 优惠券模板表 - user_coupon - 用户优惠券表 3. **创建地址表** - user_address - 用户地址表 4. **扩展次卡/套餐表** - 确保字段完整 ### 阶段2:后端实现(2-3天) 1. **优惠券系统** - Coupon、UserCoupon实体 - CouponService、UserCouponService - CouponController 2. **地址管理** - UserAddress实体 - UserAddressService - UserAddressController 3. **订单支付扩展** - 扩展payOrder方法支持次卡/套餐/优惠券 - 实现支付方式优先级逻辑 - 实现金额计算逻辑 ### 阶段3:前端实现(2-3天) 1. **支付方式选择页面** 2. **优惠券选择页面** 3. **地址选择页面** 4. **订单详情展示优化** ### 阶段4:测试与验证(1-2天) 1. 单元测试 2. 集成测试 3. 端到端测试 --- ## 📊 支付方式优先级 ``` 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` 了解详细的数据库设计方案