1. 程式人生 > >實現拼團業務邏輯

實現拼團業務邏輯

老大:時下拼多多活的不行,老大看著有搞頭,咱家商城也要加個拼團功能,開團拼團搞起來~~~~~~~~~

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

一、廢話不多說,先上表結構

-- 拼團商品配置表
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. 拼團頁面與介面
    •