Files
PoJie/ruoyi-modules/ruoyi-mall/MODULE_STRUCTURE.md
T
2026-02-22 12:12:02 +08:00

1254 lines
51 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 商城模块结构说明
## 模块拆分
根据 `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. **数据一致性**: 订单创建、库存扣减等操作需要在同一事务中完成