# 商城优惠券与红包系统设计文档 v1.1

## 1. 系统概述
本系统旨在为消费者提供多种形式的优惠激励，包括店铺优惠券、商品专属券、平台通用券以及现金红包。
核心流程包含：优惠配置(后台) -> 用户领取(前台) -> 下单核销(结算) -> 状态流转。

## 2. 优惠券分类 (Coupon Types)

### 2.1 优惠形式 (`coupon_type`)
1.  **满减券 (Full Reduction)**: `coupon_type=1`, `discount_type=1`. 例如：满 100 减 10。
2.  **折扣券 (Discount)**: `coupon_type=2`, `discount_type=2`. 例如：满 100 打 9 折。
3.  **红包 (Red Packet)**: `coupon_type=1` (或3), `discount_type=1`, `min_order_amount=0`.

### 2.2 适用范围 (Derived from Data)
1.  **店铺券**: `merchant_id` 不为空, `applicable_products` 为空。
2.  **商品券**: `merchant_id` 不为空, `applicable_products` 包含特定商品ID。
3.  **平台券**: `merchant_id` 为空。

## 3. 数据库设计 (Database Schema)

### 3.1 优惠券模板表 (`ml_coupon_templates`)
定义优惠券的规则。
- `id`: UUID (Primary Key)
- `merchant_id`: 商户ID (空则为平台券)
- `name`: 优惠券名称
- `coupon_type`: INTEGER (1:满减, 2:折扣, 3:免运费)
- `discount_type`: INTEGER (1:固定金额, 2:百分比)
- `discount_value`: DECIMAL (减免金额 或 折扣率如0.9)
- `min_order_amount`: DECIMAL (最低消费门槛, 0为无门槛)
- `total_quantity`: INTEGER (发行总量)
- `per_user_limit`: INTEGER (每人限领)
- `applicable_products`: JSONB (适用商品列表)
- `start_time` / `end_time`: 领取有效期
- `status`: INTEGER (1:正常)

### 3.2 用户优惠券表 (`ml_user_coupons`)
记录用户领取的优惠券实例。
- `id`: UUID
- `user_id`: 用户ID
- `template_id`: 关联模板
- `coupon_code`: 唯一码
- `status`: 1-未使用, 2-已使用, 3-已过期
- `received_at`: 领取时间
- `expire_at`: 过期时间
- `order_id`: 关联订单ID

## 4. 业务流程与开发指南

### 4.1 数据展示适配
前端 `getUserCoupons` 方法获取数据后，需根据 `coupon_type` 和 `discount_type` 做展示处理：
- 若 `discount_type == 1`: 展示 `¥{discount_value}`。
- 若 `discount_type == 2`: 展示 `{discount_value * 10}折` (若存0.9) 或根据实际存储值适配。

### 4.2 SQL 初始化
已提供修正后的 `doc_mall/consumer/sql/06_setup_coupons.sql`，适配真实表结构字段。请重新执行以生成测试数据。
