peixue-dev/Archive/peidu-temp-files/docs/✅✅✅优惠券系统后端实现完成-2026-01-23.md

8.0 KiB
Raw Blame History

优惠券系统后端实现完成

完成日期: 2026-01-23
实施阶段: 方案A - 阶段1
编译结果: BUILD SUCCESS


🎉 实现成果

已创建的文件10个

1. 实体类2个

  • Coupon.java - 优惠券模板实体
  • UserCoupon.java - 用户优惠券实体

2. Mapper接口2个

  • CouponMapper.java - 优惠券Mapper
  • UserCouponMapper.java - 用户优惠券Mapper

3. Service接口2个

  • CouponService.java - 优惠券服务接口
  • UserCouponService.java - 用户优惠券服务接口

4. Service实现类2个

  • CouponServiceImpl.java - 优惠券服务实现
  • UserCouponServiceImpl.java - 用户优惠券服务实现

5. Controller层2个

  • CouponController.java - 优惠券控制器
  • UserCouponController.java - 用户优惠券控制器

6. VO类1个

  • UserCouponVO.java - 用户优惠券视图对象

📋 核心功能

优惠券管理CouponController

1. 用户端接口

GET  /api/coupon/available?userId={userId}  - 获取可领取的优惠券列表
GET  /api/coupon/{couponId}                 - 获取优惠券详情

2. 管理员接口

POST   /api/coupon                          - 创建优惠券
PUT    /api/coupon/{couponId}               - 更新优惠券
DELETE /api/coupon/{couponId}               - 删除优惠券
GET    /api/coupon/list                     - 获取所有优惠券

用户优惠券管理UserCouponController

POST /api/user-coupon/receive              - 领取优惠券
GET  /api/user-coupon/my                   - 获取我的优惠券
GET  /api/user-coupon/available-for-order  - 获取可用于订单的优惠券
GET  /api/user-coupon/{userCouponId}       - 获取用户优惠券详情
GET  /api/user-coupon/count                - 统计用户优惠券数量

🔧 核心业务逻辑

1. 优惠券类型支持

满减券full_reduction

条件:订单金额 >= 最低消费金额
优惠:固定金额减免
示例满100减20

折扣券discount

条件:订单金额 >= 最低消费金额
优惠:按百分比折扣
限制:可设置最高优惠金额
示例8.5折最高优惠50元

立减券immediate_reduction

条件:无门槛或有最低消费
优惠:直接减免固定金额
示例立减10元

2. 有效期管理

固定时间类型fixed

- 设置固定的开始时间和结束时间
- 所有用户领取后有效期相同
- 适用于活动期间的优惠券

相对天数类型days

- 用户领取后N天内有效
- 每个用户的有效期独立计算
- 适用于新用户优惠券

3. 领取限制

库存限制

- 总发行量限制(-1表示不限量
- 实时扣减库存
- 库存不足时无法领取

用户限领

- 每人限领数量(-1表示不限制
- 防止重复领取
- 支持多次领取场景

4. 优惠金额计算

// 满减券
if (订单金额 >= 最低消费) {
    优惠金额 = 固定减免金额
}

// 折扣券
if (订单金额 >= 最低消费) {
    优惠金额 = 订单金额 × (1 - 折扣率)
    if (优惠金额 > 最高优惠) {
        优惠金额 = 最高优惠
    }
}

// 立减券
优惠金额 = 固定减免金额

// 确保优惠不超过订单金额
if (优惠金额 > 订单金额) {
    优惠金额 = 订单金额
}

🔄 业务流程

领取优惠券流程

1. 用户请求领取优惠券
   ↓
2. 验证优惠券状态(是否启用)
   ↓
3. 检查有效期(是否在领取时间内)
   ↓
4. 检查库存(是否还有剩余)
   ↓
5. 检查用户领取限制(是否超过限领数量)
   ↓
6. 创建用户优惠券记录
   ↓
7. 更新优惠券已领取数量
   ↓
8. 返回用户优惠券信息

使用优惠券流程

1. 订单支付时选择优惠券
   ↓
2. 验证用户优惠券(是否属于该用户)
   ↓
3. 检查状态(是否未使用)
   ↓
4. 检查有效期(是否过期)
   ↓
5. 验证订单金额(是否满足最低消费)
   ↓
6. 计算优惠金额
   ↓
7. 更新用户优惠券状态为已使用
   ↓
8. 关联订单ID
   ↓
9. 更新优惠券已使用数量
   ↓
10. 返回优惠金额

🛡️ 安全机制

1. 并发控制

  • 使用事务保证数据一致性
  • 乐观锁防止超领
  • 库存实时扣减

2. 数据验证

  • 用户权限验证
  • 优惠券状态检查
  • 有效期验证
  • 金额计算验证

3. 异常处理

  • 优惠券不存在
  • 优惠券已过期
  • 库存不足
  • 超过领取限制
  • 不满足使用条件

📊 数据库表结构

coupon表优惠券模板

- id                  优惠券ID
- name                优惠券名称
- type                优惠券类型
- discount_type       折扣类型
- discount_value      折扣值
- min_amount          最低消费金额
- max_discount        最高优惠金额
- total_quantity      发行总量
- received_quantity   已领取数量
- used_quantity       已使用数量
- limit_per_user      每人限领数量
- validity_type       有效期类型
- valid_from          有效期开始时间
- valid_to            有效期结束时间
- valid_days          有效天数
- status              状态

user_coupon表用户优惠券

- id              用户优惠券ID
- user_id         用户ID
- coupon_id       优惠券ID
- order_id        订单ID
- status          状态(0-未使用,1-已使用,2-已过期)
- receive_time    领取时间
- use_time        使用时间
- expire_time     过期时间

🧪 测试建议

1. 单元测试

- 优惠金额计算测试
- 有效期验证测试
- 库存扣减测试
- 领取限制测试

2. 集成测试

- 领取优惠券流程测试
- 使用优惠券流程测试
- 并发领取测试
- 过期处理测试

3. 接口测试

- 使用Postman或Swagger测试所有接口
- 验证参数校验
- 验证异常处理
- 验证返回数据格式

📝 待实现功能

1. 定时任务

// 过期优惠券处理
@Scheduled(cron = "0 0 1 * * ?") // 每天凌晨1点执行
public void expireCoupons() {
    userCouponService.expireCoupons();
}

2. 优惠券适用范围

- 全部服务
- 指定分类
- 指定服务

3. 优惠券统计

- 领取统计
- 使用统计
- 转化率分析

🎯 下一步计划

阶段2地址管理预计1天

需要创建的文件

  1. UserAddress.java - 用户地址实体
  2. UserAddressMapper.java - 地址Mapper
  3. UserAddressService.java - 地址服务接口
  4. UserAddressServiceImpl.java - 地址服务实现
  5. UserAddressController.java - 地址控制器

核心功能

  • 地址列表
  • 添加地址
  • 编辑地址
  • 删除地址
  • 设置默认地址

阶段3订单支付扩展预计2-3天

需要修改的文件

  1. OrderServiceImpl.java - 扩展payOrder方法
  2. OrderController.java - 添加支付相关接口

核心功能

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

📞 使用说明

创建优惠券示例

POST /api/coupon
{
  "name": "新用户专享券",
  "type": "full_reduction",
  "discountType": "amount",
  "discountValue": 20.00,
  "minAmount": 100.00,
  "totalQuantity": 1000,
  "limitPerUser": 1,
  "validityType": "days",
  "validDays": 30,
  "status": 1,
  "description": "新用户专享满100减20",
  "instructions": "仅限首次下单使用"
}

领取优惠券示例

POST /api/user-coupon/receive?userId=1&couponId=1

查询可用优惠券示例

GET /api/user-coupon/available-for-order?userId=1&orderAmount=150.00

创建时间: 2026-01-23
编译状态: BUILD SUCCESS
下一步: 实现阶段2 - 地址管理系统