本文档旨在详细说明CRMEB系统中营销活动模块的设计架构、核心功能、代码实现及开发规范,为系统开发人员提供完整的开发参考。
本文档适用于CRMEB系统开发人员、维护人员及二次开发人员,用于指导营销活动模块的开发、扩展和维护工作。
| 术语 | 解释 |
|---|---|
| 限时秒杀 | 在特定时间段内,商品以低于原价的价格销售 |
| 商品砍价 | 用户邀请好友帮忙砍价,以更低价格购买商品 |
| 多人拼团 | 多个用户联合购买商品,享受更低价格 |
| 优惠券 | 可用于抵扣商品价格的电子券 |
| SPU | 标准化产品单元,如"iPhone 13" |
| SKU | 库存量单位,如"iPhone 13 128G 白色" |
| 开团 | 创建拼团活动 |
| 参团 | 加入他人创建的拼团活动 |
| 助力 | 帮助好友砍价 |
系统采用分层架构设计,严格遵循MVC设计模式:
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ ActivityModel │ │ ActivityDao │ │ ActivityServices│
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
└───────────────────────┼───────────────────────┘
│
┌─────────────────┐
│ ActivityController│
└─────────────────┘
│
┌─────────────────┐
│ Routes │
└─────────────────┘
所有营销活动模型均位于 crmeb/app/model/activity/ 目录下,按活动类型分类:
秒杀活动:
seckill/StoreSeckill.php - 秒杀商品模型砍价活动:
bargain/StoreBargain.php - 砍价商品模型bargain/StoreBargainUser.php - 砍价用户参与记录模型bargain/StoreBargainUserHelp.php - 砍价助力记录模型拼团活动:
combination/StoreCombination.php - 拼团商品模型combination/StorePink.php - 拼团记录模型优惠券活动:
coupon/StoreCoupon.php - 优惠券模板模型coupon/StoreCouponIssue.php - 优惠券发放记录模型coupon/StoreCouponProduct.php - 优惠券适用商品模型coupon/StoreCouponUser.php - 用户优惠券模型所有营销活动DAO均位于 crmeb/app/dao/activity/ 目录下,按活动类型分类:
秒杀活动:
seckill/StoreSeckillDao.php - 秒杀商品DAO砍价活动:
bargain/StoreBargainDao.php - 砍价商品DAObargain/StoreBargainUserDao.php - 砍价用户参与记录DAObargain/StoreBargainUserHelpDao.php - 砍价助力记录DAO拼团活动:
combination/StoreCombinationDao.php - 拼团商品DAOcombination/StorePinkDao.php - 拼团记录DAO优惠券活动:
coupon/StoreCouponDao.php - 优惠券模板DAOcoupon/StoreCouponIssueDao.php - 优惠券发放记录DAOcoupon/StoreCouponProductDao.php - 优惠券适用商品DAOcoupon/StoreCouponUserDao.php - 用户优惠券DAO所有营销活动Services均位于 crmeb/app/services/activity/ 目录下,按活动类型分类:
秒杀活动:
seckill/StoreSeckillServices.php - 秒杀商品Services砍价活动:
bargain/StoreBargainServices.php - 砍价商品Servicesbargain/StoreBargainUserServices.php - 砍价用户参与记录Servicesbargain/StoreBargainUserHelpServices.php - 砍价助力记录Services拼团活动:
combination/StoreCombinationServices.php - 拼团商品Servicescombination/StorePinkServices.php - 拼团记录Services优惠券活动:
coupon/StoreCouponServices.php - 优惠券模板Servicescoupon/StoreCouponIssueServices.php - 优惠券发放记录Servicescoupon/StoreCouponUserServices.php - 用户优惠券Services管理员API控制器位于 crmeb/app/adminapi/controller/v1/marketing/ 目录下:
StoreSeckill.php - 秒杀活动控制器StoreBargain.php - 砍价活动控制器StoreCombination.php - 拼团活动控制器StoreCoupon.php - 优惠券控制器移动端API控制器位于 crmeb/app/api/controller/v1/activity/ 目录下,提供移动端调用的活动接口。
营销活动路由配置位于 crmeb/app/adminapi/route/marketing.php 文件中,包含了各种活动的增删改查、状态管理、统计等路由。
移动端路由配置位于 crmeb/app/api/route/ 目录下,根据API版本分类。
| 字段名 | 数据类型 | 描述 |
|---|---|---|
| id | int(10) unsigned | 秒杀商品ID |
| product_id | int(10) | 关联商品ID |
| title | varchar(100) | 秒杀活动标题 |
| image | varchar(255) | 秒杀商品图片 |
| unit_name | varchar(10) | 单位名称 |
| sec_price | decimal(10,2) | 秒杀价格 |
| price | decimal(10,2) | 原价 |
| cost | decimal(10,2) | 成本价 |
| description | varchar(255) | 秒杀活动描述 |
| start_time | int(10) | 开始时间 |
| end_time | int(10) | 结束时间 |
| status | tinyint(1) | 状态(0-关闭,1-开启) |
| sales | int(10) | 销量 |
| stock | int(10) | 库存 |
| give_integral | int(10) | 赠送积分 |
| sort | int(10) | 排序 |
| is_delete | tinyint(1) | 是否删除 |
| add_time | int(10) | 添加时间 |
| 字段名 | 数据类型 | 描述 |
|---|---|---|
| id | int(10) unsigned | 砍价商品ID |
| product_id | int(10) | 关联商品ID |
| title | varchar(100) | 砍价活动标题 |
| image | varchar(255) | 砍价商品图片 |
| unit_name | varchar(10) | 单位名称 |
| min_price | decimal(10,2) | 最低价格 |
| price | decimal(10,2) | 原价 |
| cost | decimal(10,2) | 成本价 |
| description | varchar(255) | 砍价活动描述 |
| start_time | int(10) | 开始时间 |
| end_time | int(10) | 结束时间 |
| status | tinyint(1) | 状态(0-关闭,1-开启) |
| sales | int(10) | 销量 |
| stock | int(10) | 库存 |
| people_num | int(10) | 每人可发起砍价次数 |
| bargain_num | int(10) | 每次砍价可邀请人数 |
| sort | int(10) | 排序 |
| is_delete | tinyint(1) | 是否删除 |
| add_time | int(10) | 添加时间 |
| 字段名 | 数据类型 | 描述 |
|---|---|---|
| id | int(10) unsigned | 记录ID |
| uid | int(10) | 用户ID |
| bargain_id | int(10) | 砍价商品ID |
| price | decimal(10,2) | 最终砍价价格 |
| status | tinyint(1) | 状态(0-进行中,1-成功,2-失败) |
| add_time | int(10) | 开始时间 |
| stop_time | int(10) | 结束时间 |
| 字段名 | 数据类型 | 描述 |
|---|---|---|
| id | int(10) unsigned | 记录ID |
| bargain_user_id | int(10) | 砍价用户记录ID |
| uid | int(10) | 助力用户ID |
| price | decimal(10,2) | 砍掉的价格 |
| add_time | int(10) | 助力时间 |
| 字段名 | 数据类型 | 描述 |
|---|---|---|
| id | int(10) unsigned | 拼团商品ID |
| product_id | int(10) | 关联商品ID |
| title | varchar(100) | 拼团活动标题 |
| image | varchar(255) | 拼团商品图片 |
| unit_name | varchar(10) | 单位名称 |
| pink_price | decimal(10,2) | 拼团价格 |
| price | decimal(10,2) | 原价 |
| cost | decimal(10,2) | 成本价 |
| description | varchar(255) | 拼团活动描述 |
| start_time | int(10) | 开始时间 |
| end_time | int(10) | 结束时间 |
| status | tinyint(1) | 状态(0-关闭,1-开启) |
| sales | int(10) | 销量 |
| stock | int(10) | 库存 |
| people | int(10) | 成团人数 |
| sort | int(10) | 排序 |
| is_delete | tinyint(1) | 是否删除 |
| add_time | int(10) | 添加时间 |
| 字段名 | 数据类型 | 描述 |
|---|---|---|
| id | int(10) unsigned | 记录ID |
| cid | int(10) | 拼团商品ID |
| uid | int(10) | 开团用户ID |
| order_id | int(10) | 开团订单ID |
| people | int(10) | 成团人数 |
| price | decimal(10,2) | 拼团价格 |
| status | tinyint(1) | 状态(0-拼团中,1-成团,2-失败) |
| add_time | int(10) | 开团时间 |
| stop_time | int(10) | 结束时间 |
| 字段名 | 数据类型 | 描述 |
|---|---|---|
| id | int(10) unsigned | 优惠券ID |
| type | tinyint(1) | 优惠券类型(0-满减,1-折扣) |
| title | varchar(100) | 优惠券名称 |
| money | decimal(10,2) | 优惠券金额 |
| min_price | decimal(10,2) | 最低使用金额 |
| discount | decimal(10,2) | 折扣(如9.5折) |
| use_type | tinyint(1) | 使用类型(0-全场通用,1-指定商品,2-指定分类) |
| start_time | int(10) | 开始时间 |
| end_time | int(10) | 结束时间 |
| status | tinyint(1) | 状态(0-关闭,1-开启) |
| total_count | int(10) | 总发行量 |
| give_count | int(10) | 已发放数量 |
| use_count | int(10) | 已使用数量 |
| get_type | tinyint(1) | 获取方式(0-手动领取,1-自动发放) |
| is_perpetual | tinyint(1) | 是否永久有效 |
| effective_days | int(10) | 有效天数 |
| sort | int(10) | 排序 |
| add_time | int(10) | 添加时间 |
| 字段名 | 数据类型 | 描述 |
|---|---|---|
| id | int(10) unsigned | 记录ID |
| cid | int(10) | 优惠券ID |
| uid | int(10) | 用户ID |
| status | tinyint(1) | 状态(0-未使用,1-已使用,2-已过期) |
| get_time | int(10) | 领取时间 |
| use_time | int(10) | 使用时间 |
| order_id | int(10) | 使用订单ID |
| end_time | int(10) | 过期时间 |
/adminapi/v1/marketing/seckill/list/adminapi/v1/marketing/seckill/create/adminapi/v1/marketing/seckill/update/{id}/adminapi/v1/marketing/seckill/delete/{id}/adminapi/v1/marketing/bargain/list/adminapi/v1/marketing/bargain/create/adminapi/v1/marketing/combination/list/adminapi/v1/marketing/combination/create/adminapi/v1/marketing/coupon/list/adminapi/v1/marketing/coupon/create命名规范:
StoreSeckillServicesgetSeckillListseckillProductCOUPON_TYPE_FULL代码结构:
数据库操作:
问题:秒杀、拼团等活动在高并发场景下可能出现超卖、数据不一致等问题 解决方案:
问题:活动开始和结束时间的精确控制 解决方案:
问题:实时统计活动参与人数、销售额等数据 解决方案:
问题:同一商品参与多个活动时的冲突 解决方案:
系统设计具有良好的扩展性,可通过以下方式扩展功能:
添加新活动类型:
model/activity/ 目录下创建新的活动模型dao/activity/ 目录下创建对应的DAOservices/activity/ 目录下创建对应的Servicescontroller/ 目录下创建对应的控制器扩展现有活动功能:
系统在关键业务节点触发事件,可通过监听事件进行功能扩展:
系统提供了多个钩子点,可通过钩子函数进行功能扩展:
| 版本 | 更新日期 | 更新内容 | 更新人 |
|---|---|---|---|
| 1.0 | 2026-01-19 | 初始版本,包含秒杀、砍价、拼团、优惠券等核心营销活动 | AI Assistant |
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ ActivityModel │ │ ActivityDao │ │ ActivityServices│
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
└───────────────────────┼───────────────────────┘
│
┌─────────────────┐
│ ActivityController│
└─────────────────┘
│
┌─────────────────┐
│ Routes │
└─────────────────┘
秒杀活动流程:
1. 用户进入秒杀活动页面
2. 系统验证活动是否开始
3. 用户点击秒杀按钮
4. 系统验证商品库存
5. 系统预扣商品库存
6. 用户创建订单
7. 用户支付订单
8. 系统确认订单,扣减库存
9. 活动结束,释放未支付订单的库存
拼团活动流程:
1. 用户进入拼团活动页面
2. 选择商品和拼团规格
3. 选择开团或参团
a. 开团:创建新的拼团记录
b. 参团:加入已有拼团记录
4. 系统预扣商品库存
5. 用户创建订单
6. 用户支付订单
7. 系统检查是否达到成团人数
a. 达到:拼团成功
b. 未达到:等待其他用户参团
8. 拼团时间结束
a. 成团:订单生效
b. 未成团:退款给用户,释放库存
砍价活动流程:
1. 用户进入砍价活动页面
2. 选择商品,点击开始砍价
3. 系统创建砍价记录
4. 用户邀请好友帮忙砍价
5. 好友点击助力,系统随机砍掉一定金额
6. 用户达到最低价格或砍价时间结束
7. 用户以砍价价格购买商品
8. 系统创建订单,扣减库存
提示:该文档由AI生成,仅供参考。