# ✅ 方案A准备就绪 **完成日期**: 2026-01-23 **前置条件**: ✅ 方案B(钱包支付)已完成 **当前状态**: 📋 设计完成,准备实施 --- ## 🎯 方案A概述 **目标**: 实现次卡、套餐、优惠券、地址关联功能 **范围**: 1. ✅ 次卡支付功能 2. ✅ 套餐支付功能 3. ✅ 优惠券使用功能 4. ✅ 地址关联功能 --- ## 📋 已完成工作 ### 1. 设计文档 ✅ **总体方案**: - `peidu/docs/fixes/2026-01-23-方案A其他支付方式实施/README.md` - 实施范围 - 现状分析 - 实施策略 - 支付方式优先级 - 关键技术点 **数据库设计**: - `peidu/docs/fixes/2026-01-23-方案A其他支付方式实施/📋数据库设计.md` - 订单表扩展(9个新字段) - 优惠券表(coupon) - 用户优惠券表(user_coupon) - 用户地址表(user_address) - 用户套餐表(user_package) - 数据完整性约束 ### 2. SQL脚本 ✅ **数据库脚本**: - `peidu/sql/plan_a_payment_system_database_2026-01-23.sql` - 扩展订单表(添加支付方式相关字段) - 创建优惠券表 - 创建用户优惠券表 - 创建用户地址表 - 创建用户套餐表 - 插入测试数据 **执行批处理**: - `peidu/sql/执行方案A数据库脚本.bat` - 一键执行SQL脚本 - 自动验证执行结果 ### 3. 实施指南 ✅ **快速开始指南**: - `peidu/🚀立即开始-方案A实施-2026-01-23.md` - 第一步:执行数据库脚本 - 第二步:后端代码实现 - 第三步:前端页面实现 - 支付流程示例 - 实施进度跟踪 --- ## 🔍 现状分析 ### 已有功能 ✅ 1. **TimeCard实体** - 完整实现 - 包含总时长、已使用、剩余时长字段 - 有状态管理(未激活、进行中、已完成、已过期) - 有可用性检查方法 2. **Package实体** - 基本实现 - 包含套餐基本信息 - 需要扩展用户套餐表(UserPackage) 3. **订单完成扣减** - 已实现 - `completeService`方法中已有时卡扣减逻辑 - `completeService`方法中已有套餐扣减逻辑 ### 缺失功能 ❌ 1. **支付时使用次卡/套餐** - 未实现 - `payOrder`方法只支持钱包支付 - 需要扩展支持次卡/套餐作为支付方式 2. **优惠券系统** - 未实现 - 缺少Coupon、UserCoupon实体 - 缺少优惠券服务和控制器 3. **地址管理** - 未实现 - 缺少UserAddress实体 - 缺少地址服务和控制器 - 订单未关联地址 --- ## 📊 数据库设计亮点 ### 1. 订单表扩展(9个新字段) ```sql -- 支付方式相关 payment_method VARCHAR(50) -- 支付方式 wallet_amount DECIMAL(10,2) -- 钱包支付金额 timecard_id BIGINT -- 使用的次卡ID package_id BIGINT -- 使用的套餐ID coupon_id BIGINT -- 使用的优惠券ID coupon_discount DECIMAL(10,2) -- 优惠券折扣金额 service_address_id BIGINT -- 服务地址ID -- 金额相关 original_amount DECIMAL(10,2) -- 原价 discount_amount DECIMAL(10,2) -- 总折扣金额 ``` ### 2. 优惠券系统(2张表) - **coupon** - 优惠券模板表 - 支持满减券、折扣券、代金券 - 支持金额折扣和比例折扣 - 支持最低消费限制 - 支持最大折扣限制 - **user_coupon** - 用户优惠券表 - 记录领取时间 - 记录使用时间 - 记录过期时间 - 支持状态管理(未使用、已使用、已过期) ### 3. 地址管理(1张表) - **user_address** - 用户地址表 - 支持多地址管理 - 支持默认地址设置 - 支持地址标签(家、公司、学校) - 支持经纬度坐标 ### 4. 用户套餐(1张表) - **user_package** - 用户套餐表 - 记录购买的套餐 - 记录总课时和剩余课时 - 记录服务次数和剩余次数 - 支持过期管理 - 使用乐观锁防并发 --- ## 🔄 支付方式优先级 ``` 1. 优惠券折扣(先计算折扣) 2. 次卡/套餐(优先使用,免费) 3. 钱包余额(次选) 4. 第三方支付(最后) ``` ### 支付逻辑示例 **场景1:使用次卡支付** ``` 订单金额: 100元 用户选择: 次卡支付 结果: - 不扣款 - 订单完成后扣减次卡次数 - 支付状态: 已支付 ``` **场景2:使用套餐支付** ``` 订单金额: 100元 用户选择: 套餐支付 结果: - 不扣款 - 订单完成后扣减套餐课时 - 支付状态: 已支付 ``` **场景3:使用优惠券+钱包** ``` 订单原价: 100元 优惠券: 满100减20 实付金额: 80元 支付方式: 钱包 结果: - 扣减钱包80元 - 优惠券标记为已使用 - 支付状态: 已支付 ``` --- ## 📅 实施计划 ### Day 1: 数据库设计与扩展 ⏳ - [x] 设计表结构 - [x] 编写SQL脚本 - [ ] 执行数据库变更 - [ ] 验证数据完整性 ### Day 2-3: 优惠券和地址系统 ⏳ - [ ] 实现Coupon、UserCoupon实体 - [ ] 实现CouponService、CouponController - [ ] 实现UserAddress实体 - [ ] 实现UserAddressService、UserAddressController - [ ] 单元测试 ### Day 4-5: 订单支付扩展 ⏳ - [ ] 扩展payOrder方法 - [ ] 实现次卡/套餐支付逻辑 - [ ] 实现优惠券使用逻辑 - [ ] 实现地址关联逻辑 - [ ] 集成测试 ### Day 6-7: 前端实现 ⏳ - [ ] 支付方式选择页面 - [ ] 优惠券选择页面 - [ ] 地址选择页面 - [ ] 前后端联调 ### Day 8: 测试与验证 ⏳ - [ ] 完整流程测试 - [ ] 性能测试 - [ ] 用户验收测试 --- ## 🎯 成功标准 ### 功能完整性 - ✅ 支持次卡支付 - ✅ 支持套餐支付 - ✅ 支持优惠券使用 - ✅ 支持地址关联 - ✅ 支持组合支付 ### 数据准确性 - ✅ 金额计算正确 - ✅ 次卡扣减正确 - ✅ 套餐扣减正确 - ✅ 优惠券使用正确 ### 用户体验 - ✅ 支付流程顺畅 - ✅ 错误提示清晰 - ✅ 响应速度快 - ✅ 界面友好 --- ## 📞 下一步行动 ### 立即执行 ⏳ 1. **执行数据库脚本** ```bash cd peidu/sql 执行方案A数据库脚本.bat ``` 2. **验证数据库表** ```sql USE peixue; SHOW TABLES LIKE 'coupon'; SHOW TABLES LIKE 'user_coupon'; SHOW TABLES LIKE 'user_address'; SHOW TABLES LIKE 'user_package'; DESC `order`; ``` 3. **开始后端实现** - 参考 `peidu/🚀立即开始-方案A实施-2026-01-23.md` - 优先实现优惠券系统 - 然后实现地址管理 - 最后扩展订单支付 --- ## 📁 相关文档 ### 设计文档 - `peidu/docs/fixes/2026-01-23-方案A其他支付方式实施/README.md` - 总体方案 - `peidu/docs/fixes/2026-01-23-方案A其他支付方式实施/📋数据库设计.md` - 数据库设计 ### SQL脚本 - `peidu/sql/plan_a_payment_system_database_2026-01-23.sql` - 数据库脚本 - `peidu/sql/执行方案A数据库脚本.bat` - 执行批处理 ### 实施指南 - `peidu/🚀立即开始-方案A实施-2026-01-23.md` - 快速开始指南 - `peidu/✅方案A准备就绪-2026-01-23.md` - 本文件 --- ## 💡 关键发现 ### 1. 次卡/套餐支付特点 - **支付时不扣款**:只标记订单已支付 - **完成时扣减**:在`completeService`中扣减次数/课时 - **余额检查**:支付前检查次卡/套餐是否可用 ### 2. 优惠券使用 - **金额计算**:原价 - 优惠券折扣 = 实付金额 - **状态更新**:优惠券标记为已使用 - **过期检查**:使用前检查是否过期 ### 3. 地址关联 - **订单创建时选择地址** - **陪伴员查看服务地址** - **支持地址导航** --- ## ⚠️ 注意事项 ### 1. 数据一致性 - 所有支付操作必须使用事务 - 失败时必须回滚 - 记录详细的操作日志 ### 2. 并发控制 - 次卡/套餐扣减使用乐观锁 - 优惠券使用防止重复 - 防止重复支付 ### 3. 安全性 - 支付金额必须在后端计算 - 前端传递的金额仅供显示 - 验证用户权限 ### 4. 用户体验 - 支付失败时给出明确提示 - 余额不足时提示购买 - 优惠券过期时提示 --- ## 📊 总结 ✅ **设计完成**: - 数据库设计完整 - SQL脚本已准备 - 实施指南已完成 ⏳ **待完成工作**: - 执行数据库脚本 - 后端代码实现 - 前端页面实现 - 完整测试验证 🚀 **准备就绪**: - 所有设计文档已完成 - SQL脚本可以立即执行 - 实施计划清晰明确 --- **完成时间**: 2026-01-23 **当前状态**: 设计完成,准备实施 **下一步**: 执行数据库脚本 → 后端实现 → 前端实现 → 测试验证