实现拼团业务逻辑

Posted melodyf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实现拼团业务逻辑相关的知识,希望对你有一定的参考价值。

老大:时下拼多多活的不行,老大看着有搞头,咱家商城也要加个拼团功能,开团拼团搞起来~~~~~~~~~

小弟:搞!!!!!!!!!!!!

一、废话不多说,先上表结构

-- 拼团商品配置表
create table sms_group_product
(
    id               bigint auto_increment        primary key,
    product_id       bigint         null comment 商品id,
    name             varchar(255)   null comment 团购名称,
    group_price      decimal(10, 2) null comment 拼团价,
    head_price       decimal(10, 2) null comment 开团价,
    hours            int            null comment 拼团小时,
    population       int            null comment 成团人数,
    robot_join       int            null comment 是否机器人参团,
    robot_join_hour  int            null comment 机器人参团时刻,
    least_population int            null comment 最少成团人数,
    status           int            null comment 状态:0停用 1启用,
    delete_status    int(1)         null comment 删除状态,
    create_time      datetime       null comment 创建时间,
    robot_start      int            null comment 机器人开团,
    keep_num         int(1)         null comment 保持拼团数量
); 
-- 拼团单品价格表
create
table sms_group_sku ( id bigint auto_increment primary key, group_id bigint null comment 拼团配置id, product_id bigint null comment 商品id, goods_id bigint null comment 单品id, group_price decimal(10, 2) null comment 拼团价, head_price decimal(10, 2) null comment 开团价, ); create index id on sms_group_sku (id);
-- 拼团表:一个拼团一条记录
create
table sms_group_member ( id bigint auto_increment primary key, group_id bigint null comment 拼团配置id, group_hours int(1) null comment 拼团小时, group_population int(1) null comment 成团人数, group_least_population int null comment 最少成团人数, product_id bigint null comment 商品id, member_id bigint null comment 开团用户id, status int null comment 状态,1开启,2关闭、失效 3完成, start_time datetime null comment 开始时间, end_time datetime null comment 结束时间, join_num int(1) null comment 参团人数, robot_join int(1) null comment 是否机器人参团, robot_join_hour int null comment 机器人参团时刻, );
-- 参团记录表
create
table sms_group_member_record ( id bigint auto_increment primary key, group_id bigint null comment 拼团配置id, group_member_id bigint null comment 拼团id, group_product_id bigint null comment 拼团商品id, group_sku_id bigint null comment 拼团单品配置id, member_id bigint null comment 参团人id, member_avatar varchar(512) null comment 参团人头像, member_nick_name varchar(256) null comment 参团人昵称, goods_id bigint null comment 单品id, group_price decimal(10, 2) null comment 拼团价, order_id bigint null comment 订单id, order_sn varchar(64) null comment 订单编号, status int(1) null comment 参团状态 1锁定 2参团 3作废, create_time datetime null comment 创建时间, join_time datetime null comment 参团时间, leader int(1) null comment 是否团长, robot int null comment 是否机器人, delete_time datetime null comment 删除时间, constraint order_id unique (order_id), constraint order_sn unique (order_sn) ); create index id on sms_group_member_record (id);

 

二、业务流程介绍

  商品单品价格配置:一套商品的原始价格,每个单品的价格,开团价、参团价。

  机器人开团:商品没人开团怎么办,没事,机器人自动开团(多开几个,假装买的人很多,偷笑)。

  机器人参团:没人来参与你的团,我可不能让单子溜走,机器人来帮你成团。

  开团、参团,涉及到订单的支付与回调,所以表结构中的状态枚举略繁琐。

  调度任务:检测拼团有效期、机器人参与拼团的触发

 

三、具体模块实现

  1. 拼团配置,后台新建拼团(sms_group_product、sms_group_sku)
    • 选取一个现有商品用于拼团  product_id
    • 配置开团价、拼团价(只用于全局价格) head_price group_price
    • 活动起止时间配置,用于自动开展结束活动  start_time end_time
    • 上下架控制 status 
    • 拼团时效性配置,即多少时间后拼团截止 hours 
    • 配置成团需要的人数 population
    • 配置机器人是否可参团 robot_join
    • 设定最少成团人数,不然就都是机器人了,总得设定几个大活人,拼团才有意义 least_population
    • 机器人啥时候参团,拼团仅剩多少时间时,让机器人参团 robot_join_hour
    • 是否需要机器人开团 robot_start
    • 让机器人开多少团,维持一个相对稳定的数量,数量振幅,更真实 keep_num
    • 配置商品下,每个单品的开团价、拼团价 sms_group_sku
  2. 拼团列表信息
    • 用户可查看的拼团列表:查询sms_group_product表中 status有效数据展示即可
    • 显示某个拼团的中各个单品的价格信息:关联查询 sms_group_sku 获取单品价格
    • 用户可参与的拼团:展示现有用户已开启的拼团信息
      • 查询sms_group_member表中的status为1的,end_time结束时间未超时的列表数据
  3. 用户使用拼团
    • 用户开团
      • 插入sms_group_member,将sms_group_product中的必要配置数据,冗余拷贝过来,描述当前拼团的具体信息
      • 插入sms_group_member_record,保存开团用户信息及商品单品信息,订单信息,团长标志位,非机器人标志位
      • 建立订单与拼团记录绑定,更新订单付款状态,但是先不发货,暂时锁定库存
    • 用户参团:具体时序:选团->下单->付款->回调 
      • 参团:插入sms_group_member_record,保存拼团信息,用户信息,订单信息,非团长标志位,非机器人标志位。修改status为锁定状态
      • 下单:建立订单与拼团记录绑定,更新订单付款状态,但是先不发货,暂时锁定库存
      • 付款成功回调:修改sms_group_member_record的status为参团状态
      • 下单未付款、超时、取消订单:修改sms_group_member_record的status为作废状态
  4. 机器人参与,调度任务控制
    • 机器人开团
      • 遍历数据:查询robot_start为1的sms_group_product配置,根据keep_num数量自动创建拼团
      • 插入sms_group_member,将sms_group_product中的必要配置数据,冗余拷贝过来,描述当前拼团的具体信息
      • 插入sms_group_member_record,保存开团用户信息及商品单品信息,订单信息,团长标志位,机器人标志位
    • 机器人参团
      • 查询sms_group_member,开启状态status为1,机器人可参团robot_join为1的数据
      • 判断拼团中总人数是否大于group_least_population(最少参团人数) ,且拼团结束时间小于group_join_hour(机器人参团时刻)小时
      • 满足以上条件机器人参团,插入sms_group_member_record,保存开团用户信息及商品单品信息,订单信息,团长标志位,机器人标志位
    • 机器人信息:可通过随机获取用户表中不活跃的用户信息,半保密状态显示
  5. 拼团结果处理
    • 拼团成功:
      • 修改拼团状态:当有用户参与拼团且成功付款后,查询当前拼团已满足人数,则更新sms_group_member(拼团信息)的status(状态)为3(完成),
      • 订单处理:修改当前拼团中参与用户的订单状态,发货状态、库存数据等。
    • 拼团超时
      • 修改拼团状态:更新sms_group_member(拼团信息)的status(状态)为2(失效或关闭)
      • 取消订单:查询sms_group_member_record关联的订单,取消订单,退款,解除库存锁定
  6. 拼团页面与接口
    • 技术图片

       

       

       

以上是关于实现拼团业务逻辑的主要内容,如果未能解决你的问题,请参考以下文章

拼团商城小程序开发

(4.1-4.7)拼团项目进度汇报

微信拼团商城怎么实现

9月23日-10月7日日报

(4.16-4.22)拼团系统进度汇报

编程语言业务逻辑分类