1254 lines
51 KiB
Markdown
1254 lines
51 KiB
Markdown
# 商城模块结构说明
|
||
|
||
## 模块拆分
|
||
|
||
根据 `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. **数据一致性**: 订单创建、库存扣减等操作需要在同一事务中完成
|