# 营销中心模块 (ruoyi-mall-promotion)

## 模块简介

`ruoyi-mall-promotion` 是商城系统的营销中心模块，提供多样化的营销活动功能，包括活动、拼团、秒杀、砍价等。

## 功能特性

### 1. 营销活动管理 ✅

- ✅ 活动CRUD操作
- ✅ 活动类型管理（普通活动、拼团、秒杀、砍价）
- ✅ 活动规则配置（JSON格式）
- ✅ 活动时间管理
- ✅ 活动状态管理（启用/禁用）
- ✅ 活动导出功能

### 2. 拼团功能 ✅

- ✅ 拼团活动创建
- ✅ 拼团活动查询（按SKU、可用列表）
- ✅ 拼团活动状态管理
- ⏳ 拼团订单管理（需在交易中心模块集成）
- ⏳ 拼团成团处理（需在交易中心模块集成）
- ⏳ 拼团过期处理（需定时任务支持）

### 3. 秒杀功能 ✅

- ✅ 秒杀活动创建
- ✅ 秒杀库存管理（扣减、恢复）
- ✅ 秒杀活动查询（按SKU、可用列表）
- ✅ 秒杀活动状态管理
- ✅ 秒杀活动状态自动更新（定时任务）

### 4. 砍价功能 ✅

- ✅ 砍价活动创建
- ✅ 砍价活动查询（按SKU、可用列表）
- ✅ 砍价活动状态管理
- ⏳ 砍价记录管理（需在交易中心模块集成）
- ⏳ 砍价助力记录（需在交易中心模块集成）
- ⏳ 砍价订单处理（需在交易中心模块集成）

## 数据库表

- `mall_promotion` - 营销活动表
- `mall_group_buy` - 拼团表
- `mall_group_buy_order` - 拼团订单表
- `mall_seckill` - 秒杀表
- `mall_bargain` - 砍价活动表
- `mall_bargain_record` - 砍价记录表
- `mall_bargain_help` - 砍价助力记录表

详细表结构请参考：`script/sql/ry_mall.sql`

## 模块结构

```
org.dromara.mall.promotion
├── controller
│   ├── admin          // 管理端API
│   └── app            // 用户端API
├── domain
│   ├── bo             // 业务对象
│   └── vo             // 视图对象
├── mapper             // MyBatis Mapper
├── service            // 业务逻辑层
│   └── impl
├── job                // 定时任务
│   └── MallPromotionJob.java
├── enums              // 枚举类
└── config             // 配置类
```

## 依赖模块

- `ruoyi-mall-product` - 商品中心模块
- `ruoyi-mall-coupon` - 优惠券中心模块
- `ruoyi-common-*` - 通用工具模块

## API接口

### 管理端接口

#### 营销活动管理 (`/mall/promotion`)

- `GET /mall/promotion/list` - 查询营销活动列表（分页）
- `GET /mall/promotion/{id}` - 获取营销活动详情
- `POST /mall/promotion` - 新增营销活动
- `PUT /mall/promotion` - 修改营销活动
- `DELETE /mall/promotion/{ids}` - 删除营销活动
- `POST /mall/promotion/export` - 导出营销活动列表
- `PUT /mall/promotion/changeStatus/{id}` - 启用/禁用营销活动

### 移动端接口

#### 营销活动 (`/app/mall/promotion`)

- `GET /app/mall/promotion/list` - 查询营销活动列表（可按类型筛选）
- `GET /app/mall/promotion/{id}` - 获取营销活动详情

#### 秒杀活动管理 (`/mall/seckill`)

- `GET /mall/seckill/list` - 查询秒杀活动列表（分页）
- `GET /mall/seckill/{id}` - 获取秒杀活动详情
- `POST /mall/seckill` - 新增秒杀活动
- `PUT /mall/seckill` - 修改秒杀活动
- `DELETE /mall/seckill/{ids}` - 删除秒杀活动
- `POST /mall/seckill/export` - 导出秒杀活动列表
- `PUT /mall/seckill/changeStatus/{id}` - 启用/禁用秒杀活动

#### 秒杀活动 (`/app/mall/seckill`)

- `GET /app/mall/seckill/list` - 查询可用秒杀活动列表
- `GET /app/mall/seckill/{id}` - 获取秒杀活动详情
- `GET /app/mall/seckill/sku/{skuId}` - 根据SKU ID查询秒杀活动

#### 拼团活动管理 (`/mall/groupbuy`)

- `GET /mall/groupbuy/list` - 查询拼团活动列表（分页）
- `GET /mall/groupbuy/{id}` - 获取拼团活动详情
- `POST /mall/groupbuy` - 新增拼团活动
- `PUT /mall/groupbuy` - 修改拼团活动
- `DELETE /mall/groupbuy/{ids}` - 删除拼团活动
- `POST /mall/groupbuy/export` - 导出拼团活动列表
- `PUT /mall/groupbuy/changeStatus/{id}` - 启用/禁用拼团活动

#### 拼团活动 (`/app/mall/groupbuy`)

- `GET /app/mall/groupbuy/list` - 查询可用拼团活动列表
- `GET /app/mall/groupbuy/{id}` - 获取拼团活动详情
- `GET /app/mall/groupbuy/sku/{skuId}` - 根据SKU ID查询拼团活动

#### 砍价活动管理 (`/mall/bargain`)

- `GET /mall/bargain/list` - 查询砍价活动列表（分页）
- `GET /mall/bargain/{id}` - 获取砍价活动详情
- `POST /mall/bargain` - 新增砍价活动
- `PUT /mall/bargain` - 修改砍价活动
- `DELETE /mall/bargain/{ids}` - 删除砍价活动
- `POST /mall/bargain/export` - 导出砍价活动列表
- `PUT /mall/bargain/changeStatus/{id}` - 启用/禁用砍价活动

#### 砍价活动 (`/app/mall/bargain`)

- `GET /app/mall/bargain/list` - 查询可用砍价活动列表
- `GET /app/mall/bargain/{id}` - 获取砍价活动详情
- `GET /app/mall/bargain/sku/{skuId}` - 根据SKU ID查询砍价活动

## 待实现功能

- [x] 营销活动管理功能 ✅
- [x] 拼团功能 ✅（基础功能已完成，订单相关功能需在交易中心模块集成）
- [x] 秒杀功能 ✅
- [x] 砍价功能 ✅（基础功能已完成，记录和订单相关功能需在交易中心模块集成）
- [ ] 活动统计功能
- [ ] 拼团订单管理和成团处理（需在交易中心模块集成）
- [ ] 砍价记录和助力记录管理（需在交易中心模块集成）

## 使用说明

### 秒杀库存管理

秒杀库存使用独立的库存字段 `seckill_stock`，与商品SKU库存分离。在创建秒杀订单时，需要：

1. 调用 `reduceStock` 方法扣减秒杀库存
2. 如果订单取消，调用 `restoreStock` 方法恢复秒杀库存
3. 秒杀库存扣减失败表示库存不足，订单创建失败

## 使用说明

### 秒杀库存管理

秒杀库存使用独立的库存字段 `seckill_stock`，与商品SKU库存分离。在创建秒杀订单时，需要：

1. 调用 `reduceStock` 方法扣减秒杀库存
2. 如果订单取消，调用 `restoreStock` 方法恢复秒杀库存
3. 秒杀库存扣减失败表示库存不足，订单创建失败

### 拼团活动管理

拼团活动配置包括：
- `groupPrice`: 拼团价格（分）
- `groupSize`: 成团人数（至少2人）
- `durationHours`: 拼团有效期（小时，默认24小时）

注意：拼团功能只实现了活动管理，实际的拼团订单创建、成团处理等逻辑需要在交易中心模块（ruoyi-mall-trade）中集成。

### 砍价活动管理

砍价活动配置包括：
- `originalPrice`: 原价（分）
- `bargainPrice`: 砍后价（分）
- `minPrice`: 最低价（分）
- `helpCount`: 需要助力人数（可选，默认0）
- `bargainStock`: 砍价库存
- `durationHours`: 砍价有效期（小时，默认24小时）

价格校验规则：
- 砍后价必须小于原价
- 砍后价不能小于最低价
- 最低价必须小于原价

注意：砍价功能只实现了活动管理，实际的砍价记录、助力记录、订单创建等逻辑需要在交易中心模块（ruoyi-mall-trade）中集成。
