# 优惠券拆分为满减券和折扣券 - 改动清单

## ✅ 已完成的改动

### 1. 数据库层面
- ✅ 实体类 `LifeDiscountCoupon` 添加 `couponType` 和 `discountRate` 字段
- ✅ DTO类 `LifeDiscountCouponDto` 添加 `couponType` 和 `discountRate` 字段
- ✅ VO类 `LifeDiscountCouponVo` 添加 `couponType` 和 `discountRate` 字段
- ✅ VO类 `LifeDiscountCouponFriendRuleVo` 添加 `couponType` 和 `discountRate` 字段

### 2. 业务逻辑层面
- ✅ **创建优惠券验证** (`LifeDiscountCouponServiceImpl.addDiscountCoupon`)
  - 满减券：验证 `nominalValue` 和 `minimumSpendingAmount`
  - 折扣券：验证 `discountRate` 和 `minimumSpendingAmount`
  
- ✅ **使用优惠券计算** (`LifeUserOrderService`)
  - 满减券：直接使用 `nominalValue` 作为减免金额
  - 折扣券：根据订单金额和折扣率计算优惠金额

- ✅ **优惠券规则构建** (`LifeDiscountCouponServiceImpl.buildDiscountCouponRule`)
  - 满减券：显示面值和最低消费
  - 折扣券：显示折扣率和最低消费

- ✅ **好评赠券通知** (`LifeDiscountCouponStoreFriendServiceImpl.issueCouponForGoodRating`)
  - 通知消息中包含优惠券类型和详情（满减金额或折扣率）

### 3. 数据查询层面
- ✅ **好友赠券SQL查询** (`LifeDiscountCouponStoreFriendMapper`)
  - `getReceivedSendFriendCouponList` (好友赠我-优惠券)：添加 `coupon_type` 和 `discount_rate`
  - `getReceivedSendFriendCouponListwzhy` (我赠好友-优惠券)：添加 `coupon_type` 和 `discount_rate`
  
- ✅ **好友赠券规则查询** (`LifeDiscountCouponFriendRuleDetailMapper`)
  - `getRuleList`：添加 `coupon_type` 和 `discount_rate`

## 📋 需要执行的SQL

```sql
-- 添加优惠券类型字段
ALTER TABLE `life_discount_coupon` 
ADD COLUMN `coupon_type` INT DEFAULT NULL COMMENT '优惠券类型：1-满减券，2-折扣券' AFTER `valid_date`;

-- 添加折扣率字段
ALTER TABLE `life_discount_coupon` 
ADD COLUMN `discount_rate` DECIMAL(10,2) DEFAULT NULL COMMENT '折扣率（0-100，用于折扣券，例如80表示8折）' AFTER `coupon_type`;
```

## ⚠️ 前端需要适配的地方

### 1. 创建优惠券页面
- 需要添加优惠券类型选择（满减券/折扣券）
- 根据类型显示不同的输入框：
  - 满减券：显示"面值"输入框
  - 折扣券：显示"折扣率"输入框（0-100）

### 2. 优惠券列表/详情显示
- 根据 `couponType` 判断显示方式：
  - `couponType = 1`（满减券）：显示 `nominalValue` 元
  - `couponType = 2`（折扣券）：显示 `discountRate` 折
- 兼容旧数据：`couponType` 为 `null` 时，按满减券处理

### 3. 好友赠券列表显示
- 需要根据 `couponType` 显示不同的优惠信息
- 文件位置：
  - `group_merchant/src/pages/voucherRecord/index.vue` (第81行)
  - `group_merchant/src/pages/couponManagement/couponsDetail.vue` (第13-20行)
  - `group_merchant/src/components/IssueCoupons/IssueCoupons.vue` (第14-19行)

### 4. 优惠券预览页面
- 需要根据类型显示不同的预览效果
- 文件位置：
  - `group_merchant/src/pages/couponDetails/index.vue`
  - `group_merchant/src/pages/couponManagement/couponsDetail.vue`

## 🔍 不需要改动的部分

### 1. 优惠券核销
- 核销逻辑主要针对代金券（`life_coupon`）和团购券，不涉及优惠券（`life_discount_coupon`）的核销
- 文件：`CouponManageServiceImpl.verifyCoupon`、`CouponManageServiceImpl.verifyOrder`

### 2. 好友赠券发放逻辑
- 发放流程对满减券和折扣券一致，无需修改
- 文件：`LifeDiscountCouponStoreFriendServiceImpl.setFriendCoupon`、`issueFriendCoupon`

### 3. 好评赠券发放逻辑
- 发放流程对满减券和折扣券一致，无需修改
- 文件：`LifeDiscountCouponStoreFriendServiceImpl.issueCouponForGoodRating`

### 4. 优惠券统计
- 统计逻辑不涉及优惠券类型区分，无需修改
- 文件：`StoreOperationalStatisticsServiceImpl.getCouponData`

## 📝 注意事项

1. **兼容性**：对于旧数据，`couponType` 为 `null` 时，代码按满减券处理
2. **数据迁移**：如需将旧数据统一为满减券，可执行：
   ```sql
   UPDATE `life_discount_coupon` SET `coupon_type` = 1 WHERE `coupon_type` IS NULL;
   ```
3. **前端适配**：前端需要根据 `couponType` 字段判断显示方式，这是必须的改动
4. **验证逻辑**：创建优惠券时必须选择类型并填写对应字段，已添加验证

## 🎯 总结

**后端改动已完成**，主要包括：
- ✅ 实体类、DTO、VO 字段添加
- ✅ 创建优惠券验证逻辑
- ✅ 使用优惠券计算逻辑
- ✅ 优惠券规则显示逻辑
- ✅ 好评赠券通知优化
- ✅ SQL查询字段添加

**前端需要适配**：
- ⚠️ 创建优惠券页面：添加类型选择和对应输入框
- ⚠️ 优惠券显示页面：根据类型显示不同内容
- ⚠️ 好友赠券列表：根据类型显示不同信息
