peixue-dev/Archive/peidu-temp-files/docs/✅方案A准备就绪-2026-01-23.md

8.4 KiB
Raw Blame History

方案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个新字段

-- 支付方式相关
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: 数据库设计与扩展

  • 设计表结构
  • 编写SQL脚本
  • 执行数据库变更
  • 验证数据完整性

Day 2-3: 优惠券和地址系统

  • 实现Coupon、UserCoupon实体
  • 实现CouponService、CouponController
  • 实现UserAddress实体
  • 实现UserAddressService、UserAddressController
  • 单元测试

Day 4-5: 订单支付扩展

  • 扩展payOrder方法
  • 实现次卡/套餐支付逻辑
  • 实现优惠券使用逻辑
  • 实现地址关联逻辑
  • 集成测试

Day 6-7: 前端实现

  • 支付方式选择页面
  • 优惠券选择页面
  • 地址选择页面
  • 前后端联调

Day 8: 测试与验证

  • 完整流程测试
  • 性能测试
  • 用户验收测试

🎯 成功标准

功能完整性

  • 支持次卡支付
  • 支持套餐支付
  • 支持优惠券使用
  • 支持地址关联
  • 支持组合支付

数据准确性

  • 金额计算正确
  • 次卡扣减正确
  • 套餐扣减正确
  • 优惠券使用正确

用户体验

  • 支付流程顺畅
  • 错误提示清晰
  • 响应速度快
  • 界面友好

📞 下一步行动

立即执行

  1. 执行数据库脚本

    cd peidu/sql
    执行方案A数据库脚本.bat
    
  2. 验证数据库表

    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
当前状态: 设计完成,准备实施
下一步: 执行数据库脚本 → 后端实现 → 前端实现 → 测试验证