# 商城模块结构说明

## 模块拆分

根据 `MODULE_STRUCTURE_PLAN.md` 的要求，`ruoyi-mall` 模块已按照规划拆分为以下子模块：

### 1. ruoyi-mall-product (商品中心)

- **职责**: 商品(SPU)、SKU、分类、品牌、属性管理
- **包名**: `org.dromara.mall.product`
- **状态**: ✅ 核心功能已实现（商品管理✅、分类管理✅、品牌管理✅、属性管理✅）
- **数据库表**: `mall_product`, `mall_sku`, `mall_category`, `mall_brand`, `mall_attribute_template`, `mall_attribute`, `mall_attribute_value`, `mall_product_attribute`

### 2. ruoyi-mall-trade (交易中心)

- **职责**: 购物车、订单、售后管理
- **包名**: `org.dromara.mall.trade`
- **状态**: ✅ 核心功能已实现（购物车✅、订单✅、售后✅、评价✅）
- **数据库表**: `mall_cart`, `mall_order`, `mall_order_item`, `mall_after_sale`, `mall_order_evaluate`,
  `mall_order_coupon`

### 3. ruoyi-mall-coupon (优惠券中心)

- **职责**: 优惠券发放、核销、过期处理
- **包名**: `org.dromara.mall.coupon`
- **状态**: ✅ 核心功能已实现（优惠券管理✅、用户优惠券✅）
- **数据库表**: `mall_coupon`, `mall_coupon_user`

### 4. ruoyi-mall-promotion (营销中心)

- **职责**: 营销活动、拼团、秒杀、砍价
- **包名**: `org.dromara.mall.promotion`
- **状态**: ✅ 核心功能已实现（活动管理✅、秒杀✅、拼团✅、砍价✅）
- **数据库表**: `mall_promotion`, `mall_group_buy`, `mall_group_buy_order`, `mall_seckill`, `mall_bargain`,
  `mall_bargain_record`, `mall_bargain_help`

### 5. ruoyi-mall-statistics (统计中心)

- **职责**: 交易分析、会员分析、数据统计
- **包名**: `org.dromara.mall.statistics`
- **状态**: ✅ 交易统计功能已实现

## 已完成工作

### 1. 模块结构

- ✅ 创建了所有子模块的目录结构
- ✅ 创建了各子模块的 `pom.xml` 配置文件
- ✅ 配置了模块依赖关系

### 2. 自动配置

- ✅ 创建了各子模块的 `AutoConfiguration` 类
- ✅ 创建了 `spring.factories` 文件
- ✅ 配置了组件扫描

### 3. 数据库

- ✅ 扩展了 `script/sql/ry_mall.sql` 文件
- ✅ 添加了分类、品牌表
- ✅ 添加了优惠券相关表
- ✅ 添加了营销活动相关表（拼团、秒杀等）
- ✅ 添加了商品属性相关表（属性模板、属性、属性值、商品属性关联）

### 4. 文档

- ✅ 创建了各子模块的 README.md 文件
- ✅ 更新了主模块的 README.md 文件

## 代码迁移说明

### 当前状态

- 现有代码位于 `ruoyi-mall/src/main/java/org/dromara/mall/` 目录下
- 现有代码使用 `org.dromara.mall` 作为包名
- 现有代码包含：商品、SKU、购物车、订单等功能

### 迁移建议

由于代码迁移涉及大量文件的包名修改，建议采用渐进式迁移：

1. **保留现有代码**
    - 现有代码继续保留在 `ruoyi-mall/src` 目录
    - 保证现有功能正常运行

2. **新功能开发**
    - 新功能直接在新子模块中开发
    - 使用新的包名结构（如 `org.dromara.mall.product`）

3. **逐步迁移**
    - 商品相关代码 → `ruoyi-mall-product`
    - 交易相关代码 → `ruoyi-mall-trade`
    - 优惠券功能 → `ruoyi-mall-coupon`
    - 营销功能 → `ruoyi-mall-promotion`
    - 统计功能 → `ruoyi-mall-statistics`


## 模块依赖关系

```
ruoyi-mall (聚合模块)
├── ruoyi-mall-product (商品中心)
│   └── 依赖: ruoyi-common-*
├── ruoyi-mall-trade (交易中心)
│   ├── 依赖: ruoyi-mall-product
│   └── 依赖: ruoyi-pay
├── ruoyi-mall-coupon (优惠券中心)
│   └── 依赖: ruoyi-common-*
├── ruoyi-mall-promotion (营销中心)
│   ├── 依赖: ruoyi-mall-product
│   └── 依赖: ruoyi-mall-coupon
└── ruoyi-mall-statistics (统计中心)
    ├── 依赖: ruoyi-mall-product
    └── 依赖: ruoyi-mall-trade
```

## 下一步工作

1. **代码迁移** (可选)
    - 将现有代码迁移到对应的子模块
    - 修改包名以符合新的模块结构

2. **功能实现**
    - 实现各子模块的待实现功能
    - 参考各子模块的 README.md

3. **测试验证**
    - 验证各子模块的自动配置
    - 验证模块间的依赖关系

## 数据库表结构说明

### 1. ruoyi-mall-product (商品中心)

#### 商品表 (mall_product)

- **功能**: 存储商品(SPU)基本信息
- **关键字段**: `name`, `category_id`, `brand_id`, `status`, `sales_count`, `view_count`, `cover_url`, `images`,
  `description`, `detail`
- **索引**: `category_id`, `brand_id`, `status`
- **状态说明**:
    - 0: 上架
    - 1: 下架

#### SKU表 (mall_sku)

- **功能**: 存储商品SKU信息，包括价格、库存、规格等
- **关键字段**: `product_id`, `sku_code`, `price`, `stock`, `specs`, `status`
- **索引**: `product_id`, `sku_code`, `status`
- **状态说明**:
    - 0: 启用
    - 1: 禁用

#### 商品分类表 (mall_category)

- **功能**: 商品分类树形结构
- **关键字段**: `name`, `parent_id`, `level`, `sort`, `icon`, `status`
- **索引**: `parent_id`, `status`
- **状态说明**:
    - 0: 启用
    - 1: 禁用
- **级别说明**:
    - 1: 一级分类
    - 2: 二级分类
    - 3: 三级分类
- **说明**: 支持三级分类，通过 `parent_id` 构建树形结构，`parent_id=0` 表示顶级分类

#### 品牌表 (mall_brand)

- **功能**: 商品品牌信息
- **关键字段**: `name`, `logo`, `description`, `sort`, `status`
- **索引**: `status`
- **状态说明**:
    - 0: 启用
    - 1: 禁用

#### 属性模板表 (mall_attribute_template)

- **功能**: 属性模板定义，可绑定到分类
- **关键字段**: `name`, `category_id`, `sort`, `status`
- **索引**: `category_id`, `status`

#### 属性表 (mall_attribute)

- **功能**: 属性定义
- **关键字段**: `template_id`, `name`, `type`, `required`, `sort`, `status`
- **索引**: `template_id`, `status`
- **类型说明**:
    - 0: 文本
    - 1: 数字
    - 2: 日期
    - 3: 枚举

#### 属性值表 (mall_attribute_value)

- **功能**: 属性的值（用于枚举类型属性）
- **关键字段**: `attribute_id`, `value`, `sort`, `status`
- **索引**: `attribute_id`, `status`

#### 商品属性关联表 (mall_product_attribute)

- **功能**: 商品关联的属性值
- **关键字段**: `product_id`, `attribute_id`, `attribute_value_id`, `value`
- **索引**: `product_id`, `attribute_id`, `attribute_value_id`

### 2. ruoyi-mall-trade (交易中心)

#### 购物车表 (mall_cart)

- **功能**: 用户购物车信息
- **关键字段**: `user_id`, `sku_id`, `quantity`, `selected`
- **索引**: `user_id`, `uk_user_sku` (唯一索引)

#### 订单表 (mall_order)

- **功能**: 订单主表
- **关键字段**: `order_no`, `user_id`, `total_amount`, `pay_amount`, `pay_status`, `order_status`, `delivery_status`,
  `receiver_*`
- **索引**: `order_no` (唯一), `user_id`, `pay_order_no`, `order_status`, `pay_status`
- **状态说明**:
    - `pay_status`:
        - 0: 未支付
        - 1: 已支付
        - 2: 已退款
    - `order_status`:
        - 0: 待付款
        - 1: 待发货
        - 2: 待收货
        - 3: 已完成
        - 4: 已取消
    - `delivery_status`:
        - 0: 未发货
        - 1: 已发货
        - 2: 已收货

#### 订单明细表 (mall_order_item)

- **功能**: 订单商品明细
- **关键字段**: `order_id`, `product_id`, `sku_id`, `price`, `quantity`, `total_amount`
- **索引**: `order_id`, `order_no`, `product_id`, `sku_id`

#### 收货地址表 (mall_address)

- **功能**: 用户收货地址管理
- **关键字段**: `user_id`, `receiver_name`, `receiver_phone`, `province`, `city`, `district`, `address`, `is_default`
- **索引**: `user_id`, `is_default`
- **状态说明**:
    - `is_default`: 0-否，1-是

#### 售后申请表 (mall_after_sale)

- **功能**: 订单售后申请（退款、退货、换货）
- **关键字段**: `after_sale_no`, `order_id`, `type`, `status`, `refund_amount`
- **索引**: `after_sale_no` (唯一), `order_id`, `user_id`, `status`
- **状态说明**:
    - 0: 待审核
    - 1: 已同意
    - 2: 已拒绝
    - 3: 待退货
    - 4: 待收货
    - 5: 已完成
    - 6: 已取消
- **类型说明**:
    - 0: 退款
    - 1: 退货
    - 2: 换货

#### 订单评价表 (mall_order_evaluate)

- **功能**: 订单商品评价
- **关键字段**: `order_id`, `order_item_id`, `product_id`, `user_id`, `score`, `content`, `images`
- **索引**: `order_id`, `order_no`, `order_item_id`, `product_id`, `user_id`

#### 订单优惠券使用记录表 (mall_order_coupon)

- **功能**: 记录订单使用的优惠券信息
- **关键字段**: `order_id`, `coupon_id`, `coupon_user_id`, `discount_amount`
- **索引**: `order_id`, `order_no`, `coupon_id`, `coupon_user_id`

### 3. ruoyi-mall-coupon (优惠券中心)

#### 优惠券表 (mall_coupon)

- **功能**: 优惠券模板定义
- **关键字段**: `name`, `type`, `discount_amount`, `discount_rate`, `min_amount`, `valid_start_time`, `valid_end_time`
- **索引**: `status`, `valid_time`
- **类型说明**:
    - 0: 满减券
    - 1: 折扣券
    - 2: 现金券

#### 用户优惠券表 (mall_coupon_user)

- **功能**: 用户领取的优惠券
- **关键字段**: `user_id`, `coupon_id`, `status`, `used_time`, `order_id`
- **索引**: `user_id`, `coupon_id`, `status`
- **状态说明**:
    - 0: 未使用
    - 1: 已使用
    - 2: 已过期

### 4. ruoyi-mall-promotion (营销中心)

#### 营销活动表 (mall_promotion)

- **功能**: 营销活动主表
- **关键字段**: `name`, `type`, `start_time`, `end_time`, `rules` (JSON)
- **索引**: `type`, `status`, `time`
- **类型说明**:
    - 0: 普通活动
    - 1: 拼团活动
    - 2: 秒杀活动
    - 3: 砍价活动

#### 拼团表 (mall_group_buy)

- **功能**: 拼团活动配置
- **关键字段**: `promotion_id`, `sku_id`, `group_price`, `group_size`, `duration_hours`
- **索引**: `promotion_id`, `sku_id`

#### 拼团订单表 (mall_group_buy_order)

- **功能**: 拼团订单记录
- **关键字段**: `group_buy_id`, `group_no`, `order_id`, `user_id`, `status`, `expire_time`
- **索引**: `group_buy_id`, `group_no`, `order_id`, `status`
- **状态说明**:
    - 0: 拼团中
    - 1: 已成团
    - 2: 已失败

#### 秒杀表 (mall_seckill)

- **功能**: 秒杀活动配置
- **关键字段**: `promotion_id`, `sku_id`, `seckill_price`, `seckill_stock`, `start_time`, `end_time`
- **索引**: `promotion_id`, `sku_id`, `time`

#### 砍价活动表 (mall_bargain)

- **功能**: 砍价活动配置
- **关键字段**: `promotion_id`, `sku_id`, `bargain_price`, `original_price`, `min_price`, `help_count`
- **索引**: `promotion_id`, `sku_id`

#### 砍价记录表 (mall_bargain_record)

- **功能**: 用户发起的砍价记录
- **关键字段**: `bargain_id`, `bargain_no`, `user_id`, `current_price`, `status`, `expire_time`
- **索引**: `bargain_id`, `bargain_no`, `user_id`, `status`
- **状态说明**:
    - 0: 进行中
    - 1: 已成功
    - 2: 已失败
    - 3: 已下单

#### 砍价助力记录表 (mall_bargain_help)

- **功能**: 砍价助力记录
- **关键字段**: `bargain_record_id`, `bargain_no`, `user_id`, `help_price`
- **索引**: `bargain_record_id`, `bargain_no`, `user_id`

### 5. ruoyi-mall-statistics (统计中心)

统计模块主要基于现有业务表进行数据分析和统计，可根据需要创建统计汇总表。

- **主要数据源表**:
  - `mall_order`, `mall_order_item` - 订单和订单明细表（用于交易统计、商品销售统计）
  - `mall_product` - 商品表（用于商品浏览统计，基于`view_count`字段）
  - `mall_promotion`, `mall_group_buy`, `mall_seckill`, `mall_bargain` - 营销活动表（用于活动效果统计）
  - `mall_coupon`, `mall_coupon_user`, `mall_order_coupon` - 优惠券相关表（用于优惠券使用统计）
  - 用户表（通过`mall_order.user_id`关联，用于会员分析，需会员模块支持）

## 功能清单

### 1. ruoyi-mall-product (商品中心)

#### 已实现功能 ✅

##### 商品管理 (SPU)

- ✅ 商品CRUD操作
    - 商品列表查询（分页、条件筛选）
    - 商品详情查询
    - 商品新增/修改/删除
    - 商品上架/下架
- ✅ 商品浏览量和销量统计
    - 浏览量自动统计
    - 销量自动累计
- ✅ 商品详情管理
    - 商品描述和详情富文本支持
    - 商品图片管理（封面、轮播图）

##### SKU管理

- ✅ SKU CRUD操作
    - SKU列表查询（支持按商品ID查询）
    - SKU详情查询
    - SKU新增/修改/删除
- ✅ SKU库存管理
    - 库存数量管理
    - 库存扣减和恢复
- ✅ SKU规格属性管理
    - 规格属性JSON格式存储
    - 规格属性查询和展示

##### 商品分类管理 ✅

- ✅ 分类树形结构查询
    - 支持三级分类树形结构
    - 管理端和移动端分类树查询
- ✅ 分类CRUD操作
    - 分类列表查询（分页、条件筛选）
    - 分类详情查询
    - 分类新增/修改/删除
    - 分类导出功能
- ✅ 分类排序
    - 支持自定义排序字段
- ⏳ 分类图标管理
    - 字段已支持，需前端集成文件上传功能

##### 品牌管理 ✅

- ✅ 品牌CRUD操作
    - 品牌列表查询（分页、条件筛选）
    - 品牌详情查询
    - 品牌新增/修改/删除
    - 品牌导出功能
- ✅ 品牌描述管理
    - 品牌描述字段支持
- ✅ 品牌排序
    - 支持自定义排序字段
- ✅ 品牌状态管理
    - 启用/禁用状态控制
- ⏳ 品牌Logo上传
    - 字段已支持，需前端集成文件上传功能

##### 商品属性管理 ✅

- ✅ 属性模板管理
    - ✅ 属性模板CRUD操作
    - ✅ 属性模板绑定分类（可选）
    - ✅ 属性模板导出功能
- ✅ 属性管理
    - ✅ 属性CRUD操作
    - ✅ 属性类型管理（文本、数字、日期、枚举）
    - ✅ 属性绑定模板（可选）
    - ✅ 属性必填设置
    - ✅ 属性导出功能
- ✅ 属性值管理
    - ✅ 属性值CRUD操作
    - ✅ 属性值绑定属性
    - ✅ 属性值排序
    - ✅ 属性值导出功能
- ✅ 商品属性关联
    - ✅ 商品关联属性值
    - ✅ 批量保存商品属性
    - ✅ 根据商品ID查询属性
    - ✅ 支持枚举类型属性值选择
    - ✅ 支持文本/数字/日期类型自定义值

#### 待实现功能 ⏳

- [ ] 商品规格模板系统增强
    - ⏳ 规格模板独立管理（当前规格通过SKU的specs字段JSON存储）
    - ⏳ 规格模板与属性模板区分管理
    - ⏳ 规格值标准化管理
    - ⏳ 规格模板可视化配置
    - **说明**: 当前系统中，SKU规格通过`mall_sku.specs`字段以JSON格式存储。属性模板系统(`mall_attribute_template`)可用于管理商品属性，但规格模板作为独立的规格管理系统，可用于标准化管理商品SKU的规格组合（如颜色+尺寸等），支持规格模板定义、规格值管理和规格模板与商品关联等功能。
- [ ] 商品搜索功能
    - [ ] 全文搜索（集成Elasticsearch或类似方案）
        - 商品名称、描述全文搜索
        - 搜索关键词高亮
        - 搜索排序优化（按相关度、销量、价格等）
    - [ ] 商品筛选（按分类、品牌、价格等）
        - 多条件组合筛选
        - 属性值筛选
        - 价格区间筛选
        - 库存状态筛选
        - 筛选结果统计

### 2. ruoyi-mall-trade (交易中心)

#### 已实现功能 ✅

##### 购物车管理

- ✅ 购物车添加/删除
    - 添加商品到购物车
    - 删除购物车商品
    - 清空购物车
- ✅ 购物车数量修改
    - 修改购物车商品数量
- ✅ 购物车选中状态管理
    - 单个商品选中/取消选中
    - 批量选中/取消选中
- ✅ 购物车详情查询
    - 购物车列表查询
    - 购物车详情查询（包含商品和SKU完整信息）

##### 订单管理

- ✅ 订单创建
    - 从购物车创建订单
    - 直接购买创建订单
    - 订单明细自动生成
- ✅ 订单查询
    - 订单列表查询（分页、状态筛选）
    - 订单详情查询（包含订单明细）
- ✅ 订单取消
    - 用户主动取消订单
    - 订单取消后库存自动恢复
- ✅ 订单状态管理
    - 订单状态流转（待付款、待发货、待收货、已完成、已取消）
    - 支付状态管理
    - 发货状态管理
- ✅ 订单支付集成
    - 与支付中心（ruoyi-pay）集成
    - 支付回调处理
    - 支付成功后订单状态自动更新
    - 库存自动扣减

#### 待实现功能 ⏳

- [x] 售后管理 ✅
    - [x] 订单退款申请 ✅
    - [x] 退货申请 ✅
    - [x] 换货申请 ✅
    - [x] 售后审核 ✅
    - [x] 售后状态跟踪 ✅
    - [x] 退货物流跟踪 ✅
    - [x] 商家确认收货 ✅
    - [x] 完成售后处理 ✅
    - [x] 取消售后申请 ✅
- [x] 订单评价 ✅
    - [x] 订单评价提交 ✅
    - [x] 评价列表查询 ✅
    - [x] 评价回复（商家） ✅
    - [x] 评价审核 ✅
    - [ ] 评价图片上传（字段已支持，需前端上传功能）
- [x] 地址管理 ✅
    - [x] 收货地址管理（实体类、Mapper、Service、Controller已实现）✅
        - 收货地址CRUD操作
        - 用户地址列表查询
        - 默认地址查询
        - 地址导出功能（管理端）
    - [x] 默认地址设置 ✅
        - 设置默认地址接口
        - 自动取消其他默认地址
- [x] 订单优惠券使用 ✅
    - [x] 订单优惠券记录（实体类、Mapper、Service已实现）✅
    - [x] 优惠券金额计算（已实现CouponCalculator工具类和MallOrderCouponService.calculateAndUseCoupon方法）✅
        - 支持满减券、折扣券、现金券三种类型的金额计算
        - 已实现订单创建时的优惠券计算和使用流程
        - 已实现优惠金额统计方法（按订单ID、订单号、优惠券ID统计）

### 3. ruoyi-mall-coupon (优惠券中心)

#### 待实现功能 ⏳

- [x] 优惠券管理 ✅
    - [x] 优惠券CRUD操作 ✅
    - [x] 优惠券类型管理（满减、折扣、现金） ✅
    - [x] 优惠券发放规则配置 ✅
    - [x] 优惠券有效期管理 ✅
    - [x] 优惠券状态管理 ✅
- [x] 用户优惠券 ✅
    - [x] 用户领券 ✅
    - [x] 用户优惠券列表查询 ✅
    - [x] 优惠券使用（订单结算时） ✅
    - [x] 优惠券退还（订单取消时） ✅
    - [x] 优惠券过期处理（定时任务）✅
        - [x] **实现状态**: `MallCouponJob.processExpiredCoupons()`定时任务已实现，每天凌晨2点执行 ✅
- [x] 优惠券统计 ✅
    - [x] 发放统计（已实现统计接口）✅
    - [x] 使用统计（已实现统计接口）✅
    - [x] 使用率统计（已实现统计接口）✅
    - [ ] 核销金额统计（需集成订单优惠券使用记录表，当前返回0）

### 4. ruoyi-mall-promotion (营销中心)

#### 已实现功能 ✅

- [x] 营销活动管理 ✅
    - [x] 活动CRUD操作 ✅
    - [x] 活动类型管理 ✅
    - [x] 活动规则配置（JSON格式）✅
    - [x] 活动时间管理 ✅
    - [x] 活动状态管理 ✅
- [x] 秒杀功能 ✅
    - [x] 秒杀活动创建 ✅
    - [x] 秒杀库存管理（扣减、恢复）✅
    - [x] 秒杀活动查询 ✅
    - [x] 秒杀活动状态管理 ✅
    - [ ] 秒杀订单处理（需在交易中心集成）
    - [ ] 秒杀库存预扣（需在交易中心集成）
- [x] 拼团功能 ✅
    - [x] 拼团活动创建 ✅
    - [x] 拼团活动查询 ✅
    - [x] 拼团活动状态管理 ✅
    - [ ] 拼团订单创建（需在交易中心集成）
    - [ ] 拼团加入（需在交易中心集成）
    - [ ] 拼团成团处理（需在交易中心集成）
    - [ ] 拼团过期处理（定时任务）
- [x] 砍价功能 ✅
    - [x] 砍价活动创建 ✅
    - [x] 砍价活动查询 ✅
    - [x] 砍价活动状态管理 ✅
    - [ ] 砍价发起（需在交易中心集成）
    - [ ] 砍价助力（需在交易中心集成）
    - [ ] 砍价进度管理（需在交易中心集成）
    - [ ] 砍价订单处理（需在交易中心集成）
    - [ ] 砍价过期处理（定时任务）

#### 待实现功能 ⏳

- [ ] 订单集成（需在交易中心模块实现）
    - [x] 秒杀订单处理（核心逻辑已实现，待订单服务集成）✅
        - [x] **秒杀活动验证**（活动时间、库存、状态校验）✅
            - 验证秒杀活动是否存在且状态为启用（status=0）
            - 验证秒杀活动时间是否在有效期内（当前时间在start_time和end_time之间）
            - 验证秒杀库存是否充足（seckill_stock >= 购买数量）
            - 验证关联的营销活动（mall_promotion）是否启用
        - [x] **秒杀价格计算**（使用秒杀价而非原价）✅
            - 从`mall_seckill`表获取`seckill_price`（秒杀价，单位：分）
            - 订单明细价格使用秒杀价，而非SKU原价
            - 订单总金额基于秒杀价计算
            - **实现状态**: `SeckillOrderService.getSeckillPrice()`方法已实现
        - [x] **秒杀订单标记**（订单表记录活动类型和活动ID）✅
            - 订单表（`mall_order`）需包含字段：`promotion_type`（活动类型，2=秒杀）、`promotion_id`（营销活动ID）、`seckill_id`（秒杀ID）
            - SQL脚本已创建：`script/sql/mall_order_promotion_fields.sql`
            - 订单创建时记录活动信息，便于后续查询和统计
            - 订单明细表（`mall_order_item`）也建议记录活动价格信息
            - **实现状态**: SQL脚本已准备，待订单实体类和服务实现后集成
        - [x] **秒杀限购校验**（同一用户同一商品限购数量）✅
            - 查询用户已购买的秒杀订单数量（同一秒杀活动、同一SKU）
            - 校验是否超过限购数量（可从`mall_promotion.rules` JSON中读取限购规则，或默认每人限购1件）
            - 仅统计已支付的订单，待支付/已取消订单不计入限购
            - **实现状态**: `SeckillOrderService.validatePurchaseLimit()`方法已实现核心逻辑，但由于订单实体类尚未实现，限购查询部分待订单服务实现后完善
        - [ ] **秒杀订单超时处理**（未支付订单自动取消）⏳
            - 订单创建时记录创建时间，设置订单超时时间（如15分钟）
            - 定时任务扫描未支付的秒杀订单（订单状态=待支付，创建时间超过超时时间）
            - 自动取消订单并恢复预扣的秒杀库存
            - 发送订单超时取消通知给用户
            - **实现状态**: 待订单服务实现后添加定时任务
    - [x] 秒杀库存预扣 ✅
        - [x] **下单时预扣秒杀库存**（避免超卖）✅
            - 订单创建时调用`SeckillOrderService.preDeductSeckillStock(seckillId, quantity)`预扣秒杀库存
            - 使用数据库乐观锁（UPDATE ... WHERE seckill_stock >= quantity）确保并发安全
            - 预扣成功后，订单状态为"待支付"，库存已预扣但未最终确认
            - 如果预扣失败（库存不足），订单创建失败，返回库存不足提示
            - **实现状态**: `SeckillOrderService.preDeductSeckillStock()`方法已实现，调用`MallSeckillService.reduceStock()`
        - [x] **支付成功时确认库存扣减**✅
            - 支付回调处理时，订单状态更新为"已支付"
            - 预扣的秒杀库存此时正式扣减（预扣库存已在上一步完成，此处仅状态确认）
            - 如果订单已标记为秒杀订单，确认秒杀库存扣减成功
            - **实现状态**: 预扣逻辑已实现，支付确认需在订单服务的支付回调中调用
        - [x] **订单取消时恢复秒杀库存**✅
            - 用户主动取消订单或系统超时取消时，调用`SeckillOrderService.restoreSeckillStock(seckillId, quantity)`恢复秒杀库存
            - 仅恢复"待支付"状态的订单预扣库存
            - "已支付"订单取消需走退款流程，不恢复秒杀库存（秒杀商品通常不支持退款）
            - **实现状态**: `SeckillOrderService.restoreSeckillStock()`方法已实现，调用`MallSeckillService.restoreStock()`
        - [ ] **库存预扣超时释放机制**⏳
            - 订单创建时记录预扣时间，设置预扣超时时间（如15分钟，与订单超时时间一致）
            - 定时任务扫描预扣超时的订单（订单状态=待支付，创建时间超过超时时间）
            - 自动释放预扣库存并取消订单
            - 确保库存预扣和订单超时处理的一致性
            - **实现状态**: 待订单服务实现后添加定时任务
    - [ ] 拼团订单创建
        - 拼团活动验证（活动时间、库存、状态校验）
        - 创建拼团订单记录（`mall_group_buy_order`表）
        - 生成拼团编号（`group_no`）
        - 计算拼团过期时间（基于`duration_hours`）
        - 拼团价格计算（使用拼团价）
        - 拼团订单状态初始化（状态=0拼团中）
    - [ ] 拼团加入
        - 拼团编号验证（验证拼团是否存在且可加入）
        - 拼团状态校验（仅拼团中状态可加入）
        - 拼团人数校验（未达到成团人数）
        - 拼团过期校验（未超过过期时间）
        - 创建拼团订单记录（关联同一`group_no`）
        - 拼团人数自动累加
        - 自动检测成团条件（达到`group_size`人数）
    - [ ] 拼团成团处理
        - 成团条件判断（达到成团人数）
        - 更新拼团订单状态（状态=1已成团）
        - 记录成团时间（`success_time`）
        - 成团通知（通知所有参与用户）
        - 成团后订单状态流转（待发货等）
    - [ ] 砍价发起
        - 砍价活动验证（活动时间、库存、状态校验）
        - 创建砍价记录（`mall_bargain_record`表）
        - 生成砍价编号（`bargain_no`）
        - 初始化砍价价格（`current_price`=原价，`bargain_price`=0）
        - 计算砍价过期时间（基于`duration_hours`）
        - 砍价状态初始化（状态=0进行中）
        - 用户发起次数限制校验
    - [ ] 砍价助力
        - 砍价编号验证（验证砍价记录是否存在且有效）
        - 砍价状态校验（仅进行中状态可助力）
        - 砍价过期校验（未超过过期时间）
        - 助力用户校验（不能为自己助力、不能重复助力）
        - 计算助力金额（随机或固定算法，需达到最低价限制）
        - 创建助力记录（`mall_bargain_help`表）
        - 更新砍价进度（`current_price`、`bargain_price`、`help_count`）
        - 检测砍价完成条件（达到最低价或完成助力次数）
    - [ ] 砍价进度管理
        - 砍价进度查询（当前价格、已砍金额、助力人数、进度百分比）
        - 砍价列表查询（用户发起的砍价记录）
        - 砍价详情查询（包含助力记录列表）
        - 砍价状态更新（进行中、已成功、已失败、已下单）
        - 砍价完成检测（自动检测是否达到最低价）
    - [ ] 砍价订单处理
        - 砍价完成验证（状态=已成功）
        - 砍价价格使用（使用砍后价创建订单）
        - 订单标记（记录砍价记录ID）
        - 更新砍价状态（状态=3已下单）
        - 砍价订单超时处理（未支付订单释放砍价资格）
    - [x] 定时任务 ✅
        - [x] 秒杀活动状态更新任务 ✅
            - [x] 扫描即将开始的活动（`start_time` <= 当前时间 且 status=1禁用），自动启用（status=0）✅
            - [x] 扫描已结束的活动（`end_time` < 当前时间 且 status=0启用），自动禁用（status=1）✅
            - [x] 执行频率：每5分钟执行一次 ✅
            - [x] **实现状态**: `MallPromotionJob.updateSeckillStatus()`方法已实现
        - [ ] 拼团过期处理（定时任务）
            - 扫描过期拼团（`expire_time` < 当前时间 且 状态=拼团中）
            - 更新拼团状态（状态=2已失败）
            - 取消关联订单（取消所有关联的未支付订单）
            - 恢复库存（恢复拼团商品的库存）
            - 发送失败通知（通知所有参与用户）
            - 执行频率：建议每5-10分钟执行一次
            - **实现状态**: 待创建MallGroupBuyOrderMapper和相关Service方法后实现
        - [ ] 砍价过期处理（定时任务）
            - 扫描过期砍价（`expire_time` < 当前时间 且 状态=进行中）
            - 更新砍价状态（状态=2已失败）
            - 清理未使用的砍价记录
            - 发送失败通知（通知发起用户）
            - 执行频率：建议每10-30分钟执行一次
            - **实现状态**: 待创建MallBargainRecordMapper和相关Service方法后实现

### 5. ruoyi-mall-statistics (统计中心)

#### 已实现功能 ✅

- [x] 交易分析 ✅
    - [x] 订单统计（总订单数、总销售额） ✅
    - [x] 已支付订单统计（已支付订单数、已支付金额） ✅
    - [x] 退款金额统计 ✅
    - [x] 今日统计（今日订单数、今日销售额） ✅
    - [x] 商品销售排行（按销售金额排序） ✅
    - [x] 交易趋势分析（按日期分组统计） ✅

#### 待实现功能 ⏳

- [ ] 会员分析（需会员模块支持，当前系统可通过订单表`mall_order.user_id`实现基础统计）
    - [ ] 会员增长统计
        - 总会员数统计（基于用户表或订单表去重用户数）
        - 每日新增会员数统计（按注册时间或首次下单时间）
        - 会员增长趋势分析（按日期统计新增会员数）
        - 会员增长环比/同比增长分析
    - [ ] 会员消费统计
        - 会员总消费金额统计（按用户ID聚合订单金额）
        - 会员平均消费金额（总消费/会员数）
        - 会员消费排行（按消费金额排序）
        - 会员消费分布分析（消费区间分布）
        - 高价值会员识别（消费金额Top N会员）
    - [ ] 会员活跃度分析
        - 活跃会员数统计（有订单的会员数）
        - 会员活跃度等级划分（根据下单频率、消费金额等）
        - 会员留存率分析（新会员留存、老会员复购）
        - 会员流失分析（长期未下单会员识别）
- [ ] 商品分析（基于现有`mall_product`、`mall_order_item`表实现）
    - [ ] 商品销售统计（部分功能可通过交易统计的商品排行实现）
        - 商品销售金额统计（按商品ID聚合订单明细）
        - 商品销售数量统计（按商品ID聚合订单数量）
        - 商品销售趋势分析（按日期统计商品销售）
        - 商品销售排行（按销售金额、销售数量排序）
        - 商品分类销售统计（按商品分类聚合统计）
        - 商品品牌销售统计（按品牌聚合统计）
    - [ ] 商品浏览统计（商品表已有`view_count`字段，需商品模块支持浏览统计接口）
        - 商品浏览量统计（基于`mall_product.view_count`字段）
        - 商品浏览量排行（按浏览量排序）
        - 商品浏览趋势分析（需记录浏览日志表或通过商品表`view_count`字段）
        - 热门商品识别（浏览量Top N商品）
        - 商品浏览与销售关联分析
    - [ ] 商品转化率分析
        - 商品转化率计算（订单数/浏览量，或销量/浏览量）
        - 商品转化率排行（按转化率排序）
        - 高转化率商品识别
        - 低转化率商品分析（识别需优化商品）
        - 商品浏览到下单转化漏斗分析
- [ ] 营销分析（基于`mall_promotion`、`mall_coupon`、`mall_order`表实现）
    - [ ] 活动效果统计（需营销模块支持，基于`mall_promotion`和订单表关联）
        - 活动参与人数统计（参与活动的订单用户数）
        - 活动订单数统计（按活动ID聚合订单）
        - 活动销售额统计（活动订单的销售金额）
        - 活动转化率分析（活动订单数/活动参与人数）
        - 活动类型效果对比（拼团、秒杀、砍价等活动效果对比）
        - 活动ROI分析（活动投入成本 vs 活动带来的销售额）
        - 活动效果趋势分析（按日期统计活动效果）
    - [ ] 优惠券使用统计（基于`mall_coupon`、`mall_coupon_user`、`mall_order_coupon`表）
        - 优惠券发放统计（优惠券发放数量，基于`mall_coupon_user`表）
        - 优惠券使用统计（优惠券使用数量，`mall_coupon_user.status=1`）
        - 优惠券使用率统计（使用数/发放数）
        - 优惠券核销金额统计（基于`mall_order_coupon.discount_amount`）
        - 优惠券类型使用对比（满减、折扣、现金券使用情况）
        - 优惠券使用趋势分析（按日期统计优惠券使用）
        - 优惠券效果分析（优惠券带来的订单和销售额）
    - [ ] 营销ROI分析
        - 营销活动总投入统计（活动成本计算）
        - 营销活动总产出统计（活动带来的销售额）
        - 营销ROI计算（产出/投入）
        - 各营销渠道ROI对比（活动、优惠券等）
        - 营销效果评估（投入产出比分析）
- [ ] 数据报表
    - [ ] 数据报表导出
        - 交易统计报表导出（Excel格式）
        - 商品销售报表导出
        - 会员统计报表导出
        - 营销活动报表导出
        - 自定义报表配置和导出
    - [ ] 数据可视化接口
        - 图表数据接口（支持折线图、柱状图、饼图等）
        - 实时数据统计接口
        - 数据大屏数据接口
        - 数据导出格式支持（Excel、PDF、CSV等）

## API接口详细说明

### 1. ruoyi-mall-product (商品中心)

#### 管理端接口

##### 商品管理 (`/mall/product`)

- `GET /mall/product/list` - 查询商品列表（分页）
- `GET /mall/product/{id}` - 获取商品详情
- `POST /mall/product` - 新增商品
- `PUT /mall/product` - 修改商品
- `DELETE /mall/product/{ids}` - 删除商品

##### 商品分类管理 (`/mall/product/category`)

- `GET /mall/product/category/list` - 查询商品分类列表（分页）
- `GET /mall/product/category/tree` - 查询商品分类树形列表
- `GET /mall/product/category/{id}` - 获取商品分类详情
- `POST /mall/product/category` - 新增商品分类
- `PUT /mall/product/category` - 修改商品分类
- `DELETE /mall/product/category/{ids}` - 删除商品分类
- `POST /mall/product/category/export` - 导出商品分类列表

##### 品牌管理 (`/mall/product/brand`)

- `GET /mall/product/brand/list` - 查询品牌列表（分页）
- `GET /mall/product/brand/{id}` - 获取品牌详情
- `POST /mall/product/brand` - 新增品牌
- `PUT /mall/product/brand` - 修改品牌
- `DELETE /mall/product/brand/{ids}` - 删除品牌
- `POST /mall/product/brand/export` - 导出品牌列表

##### 属性模板管理 (`/mall/product/attribute/template`)

- `GET /mall/product/attribute/template/list` - 查询属性模板列表（分页）
- `GET /mall/product/attribute/template/{id}` - 获取属性模板详情
- `POST /mall/product/attribute/template` - 新增属性模板
- `PUT /mall/product/attribute/template` - 修改属性模板
- `DELETE /mall/product/attribute/template/{ids}` - 删除属性模板
- `POST /mall/product/attribute/template/export` - 导出属性模板列表

##### 属性管理 (`/mall/product/attribute`)

- `GET /mall/product/attribute/list` - 查询属性列表（分页）
- `GET /mall/product/attribute/{id}` - 获取属性详情
- `GET /mall/product/attribute/template/{templateId}` - 根据模板ID查询属性列表
- `POST /mall/product/attribute` - 新增属性
- `PUT /mall/product/attribute` - 修改属性
- `DELETE /mall/product/attribute/{ids}` - 删除属性
- `POST /mall/product/attribute/export` - 导出属性列表

##### 属性值管理 (`/mall/product/attribute/value`)

- `GET /mall/product/attribute/value/list` - 查询属性值列表（分页）
- `GET /mall/product/attribute/value/{id}` - 获取属性值详情
- `GET /mall/product/attribute/value/attribute/{attributeId}` - 根据属性ID查询属性值列表
- `POST /mall/product/attribute/value` - 新增属性值
- `PUT /mall/product/attribute/value` - 修改属性值
- `DELETE /mall/product/attribute/value/{ids}` - 删除属性值
- `POST /mall/product/attribute/value/export` - 导出属性值列表

##### 商品属性关联管理 (`/mall/product/attribute/product`)

- `GET /mall/product/attribute/product/{id}` - 获取商品属性关联详情
- `GET /mall/product/attribute/product/product/{productId}` - 根据商品ID查询商品属性关联列表
- `POST /mall/product/attribute/product` - 新增商品属性关联
- `POST /mall/product/attribute/product/batch` - 批量新增商品属性关联
- `POST /mall/product/attribute/product/product/{productId}` - 保存商品属性关联（先删除旧的，再插入新的）
- `PUT /mall/product/attribute/product` - 修改商品属性关联
- `DELETE /mall/product/attribute/product/{ids}` - 删除商品属性关联
- `DELETE /mall/product/attribute/product/product/{productId}` - 根据商品ID删除商品属性关联

#### 移动端接口

##### 商品分类 (`/app/mall/product/category`)

- `GET /app/mall/product/category/tree` - 查询商品分类树形列表（仅启用分类）

##### 品牌 (`/app/mall/product/brand`)

- `GET /app/mall/product/brand/list` - 查询品牌列表（仅启用品牌）

##### 商品 (`/app/mall/product`)

- `GET /app/mall/product/list` - 查询商品列表（仅上架商品）
- `GET /app/mall/product/{id}` - 获取商品详情（仅上架商品）

### 2. ruoyi-mall-trade (交易中心)

#### 管理端接口

##### 订单管理 (`/mall/order`)

- `GET /mall/order/list` - 查询订单列表（分页、条件筛选）
- `GET /mall/order/{id}` - 获取订单详情
- `PUT /mall/order` - 修改订单
- `DELETE /mall/order/{ids}` - 删除订单
- `PUT /mall/order/delivery/{id}` - 订单发货

##### 售后申请管理 (`/mall/order/after-sale`)

- `GET /mall/order/after-sale/list` - 查询售后申请列表（分页）
- `GET /mall/order/after-sale/{id}` - 获取售后申请详情
- `DELETE /mall/order/after-sale/{ids}` - 删除售后申请
- `POST /mall/order/after-sale/export` - 导出售后申请列表
- `PUT /mall/order/after-sale/audit/{id}` - 审核售后申请（同意/拒绝）
- `PUT /mall/order/after-sale/receive/{id}` - 确认收货（商家确认收到退货）
- `PUT /mall/order/after-sale/complete/{id}` - 完成售后

##### 订单评价管理 (`/mall/order/evaluate`)

- `GET /mall/order/evaluate/list` - 查询订单评价列表（分页）
- `GET /mall/order/evaluate/{id}` - 获取订单评价详情
- `DELETE /mall/order/evaluate/{ids}` - 删除订单评价
- `POST /mall/order/evaluate/export` - 导出订单评价列表
- `PUT /mall/order/evaluate/audit/{id}` - 审核评价（通过/驳回）
- `PUT /mall/order/evaluate/reply/{id}` - 回复评价

#### 移动端接口

##### 购物车 (`/app/mall/cart`)

- `GET /app/mall/cart/list` - 查询购物车列表
- `GET /app/mall/cart/detail/list` - 查询购物车详情列表（包含商品信息）
- `POST /app/mall/cart` - 添加购物车
- `PUT /app/mall/cart` - 修改购物车
- `DELETE /app/mall/cart/{ids}` - 删除购物车
- `DELETE /app/mall/cart/clear` - 清空购物车
- `PUT /app/mall/cart/selected/{id}` - 更新单个商品选中状态
- `PUT /app/mall/cart/selected/batch` - 批量更新选中状态

##### 订单 (`/app/mall/order`)

- `POST /app/mall/order/submit` - 提交订单并发起支付
- `GET /app/mall/order/list` - 查询订单列表
- `GET /app/mall/order/{id}` - 查询订单详情
- `PUT /app/mall/order/cancel/{id}` - 取消订单
- `POST /app/mall/order/pay/notify` - 支付回调（由支付中心调用）

##### 售后申请 (`/app/mall/order/after-sale`)

- `GET /app/mall/order/after-sale/list` - 查询售后申请列表
- `GET /app/mall/order/after-sale/order/{orderId}` - 根据订单ID查询售后申请列表
- `GET /app/mall/order/after-sale/{id}` - 获取售后申请详情
- `POST /app/mall/order/after-sale` - 新增售后申请（退款/退货/换货）
- `PUT /app/mall/order/after-sale/logistics/{id}` - 填写退货物流信息
- `PUT /app/mall/order/after-sale/cancel/{id}` - 取消售后申请

##### 订单评价 (`/app/mall/order/evaluate`)

- `GET /app/mall/order/evaluate/list` - 查询订单评价列表
- `GET /app/mall/order/evaluate/order/{orderId}` - 根据订单ID查询评价列表
- `GET /app/mall/order/evaluate/product/{productId}` - 根据商品ID查询评价列表（仅已审核）
- `GET /app/mall/order/evaluate/{id}` - 获取订单评价详情
- `POST /app/mall/order/evaluate` - 提交订单评价

##### 优惠券 (`/app/mall/coupon`)

- `GET /app/mall/coupon/available/list` - 查询可领取的优惠券列表
- `GET /app/mall/coupon/{id}` - 获取优惠券详情

##### 用户优惠券 (`/app/mall/coupon/user`)

- `GET /app/mall/coupon/user/list` - 查询用户优惠券列表
- `GET /app/mall/coupon/user/available/list` - 查询用户可用优惠券列表（未使用且未过期）
- `GET /app/mall/coupon/user/{id}` - 获取用户优惠券详情
- `POST /app/mall/coupon/user/receive/{couponId}` - 领取优惠券

### 3. ruoyi-mall-coupon (优惠券中心)

#### 管理端接口

##### 优惠券管理 (`/mall/coupon`)

- `GET /mall/coupon/list` - 查询优惠券列表（分页）
- `GET /mall/coupon/{id}` - 获取优惠券详情
- `POST /mall/coupon` - 新增优惠券
- `PUT /mall/coupon` - 修改优惠券
- `DELETE /mall/coupon/{ids}` - 删除优惠券
- `POST /mall/coupon/export` - 导出优惠券列表
- `PUT /mall/coupon/changeStatus/{id}` - 启用/禁用优惠券
- `GET /mall/coupon/statistics` - 获取优惠券统计信息（发放数量、使用数量、使用率）

##### 用户优惠券管理 (`/mall/coupon/user`)

- `GET /mall/coupon/user/list` - 查询用户优惠券列表（分页）
- `GET /mall/coupon/user/{id}` - 获取用户优惠券详情
- `DELETE /mall/coupon/user/{ids}` - 删除用户优惠券
- `POST /mall/coupon/user/export` - 导出用户优惠券列表

### 4. ruoyi-mall-promotion (营销中心)

#### 管理端接口

##### 营销活动管理 (`/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}` - 启用/禁用营销活动

##### 秒杀活动管理 (`/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}` - 启用/禁用秒杀活动

##### 拼团活动管理 (`/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}` - 启用/禁用拼团活动

##### 砍价活动管理 (`/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/promotion`)

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

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

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

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

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

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

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

### 5. ruoyi-mall-statistics (统计中心)

#### 管理端接口

##### 统计数据 (`/mall/statistics`)

- `GET /mall/statistics/transaction` - 获取交易统计数据
  - 支持按日期范围查询（startDate, endDate）
  - 支持设置商品销售排行数量限制（limit，默认10）
  - 返回数据包括：总订单数、总销售额、已支付订单数、已支付金额、退款金额、今日统计、趋势数据、商品销售排行
- `GET /mall/statistics/member` - 获取会员统计数据
  - 支持按日期范围查询（startDate, endDate）
  - 返回数据包括：总会员数、今日新增会员数、活跃会员数、增长趋势、消费统计
  - ⚠️ 注意：会员统计功能需要会员模块支持，当前返回基础结构

## 定时任务规划

### 优惠券模块

- [x] 优惠券过期处理任务 ✅
    - **功能**: 定时扫描过期的用户优惠券，更新状态为已过期
    - **执行频率**: 每天凌晨2点执行一次
    - **实现位置**: `ruoyi-mall-coupon` 模块
    - **方法**: `MallCouponJob.processExpiredCoupons()` (调用 `MallCouponUserService.processExpiredCoupons()`)

### 营销模块

- [ ] 拼团过期处理任务
    - **功能**: 定时扫描过期的拼团订单，更新状态为已失败，处理退款
    - **执行频率**: 每5分钟执行一次
    - **实现位置**: `ruoyi-mall-promotion` 模块
- [ ] 砍价过期处理任务
    - **功能**: 定时扫描过期的砍价记录，更新状态为已失败
    - **执行频率**: 每5分钟执行一次
    - **实现位置**: `ruoyi-mall-promotion` 模块
- [x] 秒杀活动状态更新任务 ✅
    - **功能**: 定时更新秒杀活动状态（开始/结束）
    - **执行频率**: 每5分钟执行一次
    - **实现位置**: `ruoyi-mall-promotion` 模块
    - **方法**: `MallPromotionJob.updateSeckillStatus()`

### 订单模块（可选）

- [ ] 订单自动取消任务
    - **功能**: 定时扫描超时未支付的订单，自动取消并恢复库存
    - **执行频率**: 每10分钟执行一次
    - **实现位置**: `ruoyi-mall-trade` 模块

## 技术栈与开发规范

### 技术栈

- **框架**: Spring Boot 3.x
- **ORM**: MyBatis-Plus
- **数据库**: MySQL 8.0+
- **认证**: Sa-Token
- **API文档**: Swagger/OpenAPI 3.0
- **构建工具**: Maven

### 开发规范

#### 包结构规范

- `controller` - 控制器层（分为 `admin` 和 `app` 两个子包）
- `domain` - 实体类（包含 `bo` 业务对象和 `vo` 视图对象子包）
- `mapper` - MyBatis Mapper 接口
- `service` - 服务接口（实现类放在 `impl` 子包）
- `config` - 配置类（自动配置类）
- `enums` - 枚举类
- `job` - 定时任务（可选）

#### 代码规范

- 统一使用 Lombok 简化代码
- 统一异常处理，使用 `ServiceException` 抛出业务异常
- 统一返回格式，使用 `R<T>` 封装返回结果
- 统一分页查询，使用 `PageQuery` 和 `TableDataInfo<T>`
- 统一日志记录，使用 `@Log` 注解记录操作日志
- 统一权限控制，管理端接口使用 `@SaCheckPermission` 注解

#### 数据库设计规范

- 表名使用 `mall_` 前缀
- 字段命名使用下划线命名法（snake_case）
- 必须包含 `create_by`, `create_time`, `update_by`, `update_time` 字段
- 删除标记使用逻辑删除（`deleted` 字段）
- 状态字段统一使用 `status`，0表示启用/正常，1表示禁用/异常

#### API设计规范

- RESTful 风格设计
- 管理端接口路径：`/mall/{module}/{resource}`
- 移动端接口路径：`/app/mall/{module}/{resource}`
- 使用 HTTP 标准方法：GET（查询）、POST（新增）、PUT（修改）、DELETE（删除）
- 统一使用 JSON 格式进行数据交互
- 使用 Swagger 注解完善接口文档

## 模块集成说明

### 支付中心集成 (ruoyi-pay)

- **集成方式**: 通过 Feign 客户端或本地 Jar 依赖
- **核心功能**:
    - 订单提交时调用支付中心创建支付单
    - 支付中心回调通知支付结果
    - 订单状态与支付状态同步
- **配置要求**: 在 `application.yml` 中配置 `pay-app-id` 和 `pay-notify-url`

### 商品中心依赖关系

- `ruoyi-mall-trade` 依赖 `ruoyi-mall-product`（查询商品和SKU信息）
- `ruoyi-mall-promotion` 依赖 `ruoyi-mall-product`（营销活动关联商品）
- `ruoyi-mall-statistics` 依赖 `ruoyi-mall-product` 和 `ruoyi-mall-trade`（数据统计分析）

## 开发指南

### 新增功能开发步骤

1. **数据库设计**
    - 在 `script/sql/ry_mall.sql` 中设计表结构
    - 确保字段命名规范，包含必要的索引

2. **创建实体类**
    - 在对应模块的 `domain` 包下创建实体类
    - 创建对应的 `Bo`（业务对象）和 `Vo`（视图对象）

3. **创建 Mapper**
    - 在 `mapper` 包下创建 Mapper 接口
    - 如需复杂查询，在 `resources/mapper` 下创建 XML 文件

4. **创建 Service**
    - 在 `service` 包下创建 Service 接口
    - 在 `service/impl` 包下创建 Service 实现类

5. **创建 Controller**
    - 管理端接口：在 `controller/admin` 包下创建
    - 移动端接口：在 `controller/app` 包下创建
    - 添加 Swagger 注解完善接口文档

6. **测试验证**
    - 编写单元测试（可选）
    - 使用 Swagger UI 测试接口
    - 验证业务逻辑正确性

### 代码迁移指南

如果要将现有代码迁移到新模块结构：

1. **创建新模块结构**（如果尚未创建）
2. **复制代码到新模块**
3. **修改包名**（如 `org.dromara.mall.domain` → `org.dromara.mall.product.domain`）
4. **更新导入语句**
5. **更新 Mapper XML 文件中的命名空间**
6. **测试验证功能正常**

## 注意事项

1. **包名冲突**: 如果同时保留现有代码和新模块代码，需要注意包名冲突问题
2. **依赖管理**: 确保模块间的依赖关系正确配置，避免循环依赖
3. **数据库迁移**: 执行 SQL 文件创建新表结构，注意数据迁移（如果需要）
4. **配置管理**: 各子模块的配置通过 `spring.factories` 自动加载
5. **事务管理**: 订单创建、支付回调等核心流程需要确保事务一致性
6. **库存管理**: SKU库存扣减需要考虑并发问题，建议使用分布式锁或数据库锁（悲观锁/乐观锁）
7. **支付集成**: 订单支付需要与 `ruoyi-pay` 模块集成，确保支付流程正确
8. **数据统计**: 统计模块建议使用异步处理，避免影响业务性能
9. **文件上传**: 商品图片、品牌Logo、分类图标等文件上传功能需要集成文件服务（如OSS）
10. **缓存策略**: 商品列表、分类树等热点数据建议使用Redis缓存
11. **幂等性**: 支付回调、订单创建等关键操作需要保证幂等性
12. **数据一致性**: 订单创建、库存扣减等操作需要在同一事务中完成
