秒杀与砍价
这篇解决什么
同一商品能不能既做秒杀又做砍价、一笔订单为什么只有一个 type。读完能对上两套库存和两套成功条件,避免把砍价记录当成秒杀时段。
示意图:TradeOrderTypeEnum 一单一型。1 秒杀,2 砍价。结算时 calculateRespBO.type 只写其中一个。
怎么区分
| 名称 | 说明 | 仓库路径 |
|---|---|---|
| 秒杀订单 | type = 1,写 seckillActivityId | ruoyi-office/yudao-module-mall/.../TradeOrderDO.java |
| 砍价订单 | type = 2,写 bargainActivityId / bargainRecordId | 同上 |
| 秒杀库存 | promotion_seckill_activity.stock | SeckillActivityDO |
| 砍价库存 | promotion_bargain_activity.stock | BargainActivityDO |
| 秒杀冲突 | 同一 SPU 不能两个启用秒杀 | SeckillActivityServiceImpl#validateProductConflict |
| 砍价冲突 | 同一 SPU 不能两个启用砍价 | BargainActivityServiceImpl#validateBargainConflict |
同类活动互斥。跨类型(秒杀 + 砍价)没有共用的「SPU 只能参加一种营销」校验。两套表可以同时挂同一个 spuId,用户从哪个入口下单,订单就是哪个类型。
成功条件
秒杀:落在时段内、活动库存和限购够,立刻以秒杀价下单。
砍价:先有 promotion_bargain_record,助力到低价或人数满(status = 2)才能下单。到期失败是 3。
| 名称 | 说明 | 仓库路径 |
|---|---|---|
| 秒杀时段 | configIds + promotion_seckill_config | SeckillActivityDO |
| 砍价助力 | promotion_bargain_help | BargainHelpDO |
| 砍价成功 | 底价或 helpMaxCount | BargainRecordDO 注释 |
不要共用库存字段
补秒杀只加秒杀 stock。补砍价只加砍价 stock。改 product_sku.stock 不会让活动重新可卖。
示意图:入口决定类型。管理端列表用 type 过滤,不要只看 SPU。
配置与操作
分别在秒杀商品页和砍价商品页配。没有「秒杀与砍价」菜单。一笔订单只有一个 type:1 秒杀立刻买,2 砍价要先助力成功。
同类活动互斥,跨类型没有统一拦截。补库存只加对应活动 stock,不要只改 product_sku。开启见 商城功能设计。

本系统截图:秒杀商品。

本系统截图:砍价商品。
