實現拼團業務邏輯
阿新 • • 發佈:2020-08-12
老大:時下拼多多活的不行,老大看著有搞頭,咱家商城也要加個拼團功能,開團拼團搞起來~~~~~~~~~
小弟:搞!!!!!!!!!!!!
一、廢話不多說,先上表結構
-- 拼團商品配置表 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);
二、業務流程介紹
商品單品價格配置:一套商品的原始價格,每個單品的價格,開團價、參團價。
機器人開團:商品沒人開團怎麼辦,沒事,機器人自動開團(多開幾個,假裝買的人很多,偷笑)。
機器人蔘團:沒人來參與你的團,我可不能讓單子溜走,機器人來幫你成團。
開團、參團,涉及到訂單的支付與回撥,所以表結構中的狀態列舉略繁瑣。
排程任務:檢測拼團有效期、機器人蔘與拼團的觸發
三、具體模組實現
- 拼團配置,後臺新建拼團(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
- 拼團列表資訊
- 使用者可檢視的拼團列表:查詢sms_group_product表中 status有效資料展示即可
- 顯示某個拼團的中各個單品的價格資訊:關聯查詢 sms_group_sku 獲取單品價格
- 使用者可參與的拼團:展示現有使用者已開啟的拼團資訊
- 查詢sms_group_member表中的status為1的,end_time結束時間未超時的列表資料
- 使用者使用拼團
- 使用者開團
- 插入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為作廢狀態
- 使用者開團
- 機器人蔘與,排程任務控制
- 機器人開團
- 遍歷資料:查詢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,儲存開團使用者資訊及商品單品資訊,訂單資訊,團長標誌位,機器人標誌位
- 機器人資訊:可通過隨機獲取使用者表中不活躍的使用者資訊,半保密狀態顯示
- 機器人開團
- 拼團結果處理
- 拼團成功:
- 修改拼團狀態:當有使用者參與拼團且成功付款後,查詢當前拼團已滿足人數,則更新sms_group_member(拼團資訊)的status(狀態)為3(完成),
- 訂單處理:修改當前拼團中參與使用者的訂單狀態,發貨狀態、庫存資料等。
- 拼團超時
- 修改拼團狀態:更新sms_group_member(拼團資訊)的status(狀態)為2(失效或關閉)
- 取消訂單:查詢sms_group_member_record關聯的訂單,取消訂單,退款,解除庫存鎖定
- 拼團成功:
- 拼團頁面與介面
-