上篇文章《通用抽獎工具之需求分析》咱們已經經過一些常見的抽獎場景,獲得了符合這些抽獎場景的抽獎工具五要素:node
抽獎五要素 | 要素名稱 |
---|---|
第一要素 | 活動 |
第二要素 | 場次 |
第三要素 | 獎品 |
第四要素 | 中獎機率 |
第五要素 | 均勻投獎 |
以及建立一個抽獎活動的5個基本步驟,以下:git
上篇文章回顧 《通用抽獎工具之需求分析》
需求已經分析完了,今天咱們就來看看這通用抽獎工具具體的設計,分爲以下三個部分:github
第一要素活動配置
的抽獎活動表
:web
-- 通用抽獎工具(萬能膠Glue) glue_activity 抽獎活動表 CREATE TABLE `glue_activity` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '活動ID', `serial_no` char(16) unsigned NOT NULL DEFAULT '' COMMENT '活動編號(md5值中間16位)', `name` varchar(255) unsigned NOT NULL DEFAULT '' COMMENT '活動名稱', `description` varchar(255) unsigned NOT NULL DEFAULT '' COMMENT '活動描述', `activity_type` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '活動抽獎類型1: 按時間抽獎 2: 按抽獎次數抽獎 3:按數額範圍區間抽獎', `probability_type` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '中獎機率類型1: static 2: dynamic', `times_limit` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '抽獎次數限制,0默認不限制', `start_at` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '活動開始時間', `end_at` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '活動結束時間', `create_at` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '建立時間', `create_by` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '建立人staff_id', `update_at` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '更新時間', `update_by` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '修改人staff_id', `status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '狀態 -1:deleted, 0:disable, 1:enable', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='抽獎活動表';
第二要素場次配置
的抽獎場次表
:sql
-- 通用抽獎工具(萬能膠Glue) glue_session 抽獎場次表 CREATE TABLE `glue_session` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '場次ID', `activity_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '活動ID', `times_limit` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '抽獎次數限制,0默認不限制', `start_at` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '場次開始時間', `end_at` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '場次結束時間', `create_at` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '建立時間', `create_by` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '建立人staff_id', `update_at` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '更新時間', `update_by` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '修改人staff_id', `status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '狀態 -1:deleted, 0:disable, 1:enable', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='抽獎場次表';
第3、四要素獎品配置
的抽獎場次獎品表
:json
-- 通用抽獎工具(萬能膠Glue) glue_session_prizes 抽獎場次獎品表 CREATE TABLE `glue_session_prizes` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID', `session_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '場次ID', `node` varchar(255) unsigned NOT NULL DEFAULT '' COMMENT '節點標識 按時間抽獎: 空值, 按抽獎次數抽獎: 第幾回參與值, 按數額範圍區間抽獎: 數額區間上限值', `prize_type` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '獎品類型 1:優惠券, 2:積分, 3:實物, 4:空獎 ...', `name` varchar(255) unsigned NOT NULL DEFAULT '' COMMENT '獎品名稱', `pic_url` varchar(255) unsigned NOT NULL DEFAULT '' COMMENT '獎品圖片', `value` varchar(255) unsigned NOT NULL DEFAULT '' COMMENT '獎品抽象值 優惠券:優惠券ID, 積分:積分值, 實物: sku ID', `probability` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '中獎機率1~100', `create_at` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '建立時間', `create_by` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '建立人staff_id', `update_at` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '更新時間', `update_by` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '修改人staff_id', `status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '狀態 -1:deleted, 0:disable, 1:enable', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='抽獎場次獎品表';
第五要素均勻投獎
的抽獎場次獎品定時投放器表
:設計模式
-- 通用抽獎工具(萬能膠Glue) glue_session_prizes_timer 抽獎場次獎品定時投放器表 CREATE TABLE `glue_session_prizes_timer` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID', `session_prizes_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '抽獎場次獎品ID', `delivery_at` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '定時投放獎品數量的時間', `prize_quantity` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '獎品數量', `create_at` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '建立時間', `create_by` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '建立人staff_id', `update_at` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '更新時間', `update_by` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '修改人staff_id', `status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '狀態 -1:deleted, 0:wait, 1:success', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='抽獎場次獎品定時投放器表';
其餘表,抽獎記錄&獎品發放記錄表:session
-- 通用抽獎工具(萬能膠Glue) glue_user_draw_record 用戶抽獎記錄表 CREATE TABLE `glue_user_draw_record` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID', `activity_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '活動ID', `session_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '場次ID', `prize_type_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '獎品類型ID', `user_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '建立人user_id', `create_at` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '建立時間', `update_at` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '更新時間', `status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '狀態 -1:未中獎, 1:已中獎 , 2: 發獎失敗 , 3: 已發獎', `log` text COMMENT '操做信息等記錄', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用戶抽獎記錄表';
一、獲取活動信息 GET {version}/glue/activity工具
請求參數:post
字段 | 類型 | 是否必傳 | 描述 |
---|---|---|---|
serial_no | string | Y | 活動編號 |
響應內容:
{ "code": "200", "msg": "OK", "result": { "serial_no": "string, 活動編號", "type": "number, 活動抽獎類型1: 按時間抽獎 2: 按抽獎次數抽獎 3:按數額範圍區間抽獎", "name": "string, 活動名稱", "description": "string, 活動描述", "start_time": "number, 活動開始時間", "end_time": "number, 活動開始時間", "remaining_times": "number, 活動抽獎次數限制,0不限制", "sessions_list":[ { "start_time": "number, 場次開始時間", "end_time": "number, 場次開始時間", "remaining_times": "number, 場次抽獎次數限制,0不限制", "prizes_list": [ { "name": "string, 獎品名稱", "pic_url": "string, 獎品圖片" } ] } ] } }
二、抽獎 POST {version}/glue/activity/draw
請求參數:
字段 | 類型 | 是否必傳 | 描述 |
---|---|---|---|
serial_no | string | Y | 活動編號 |
uid | number | Y | 用戶ID |
響應內容:
// 中獎 { "code": "200", "msg": "OK", "result": { "serial_no": "string, spu id", "act_remaining_times": "number, 本活動抽獎剩餘次數,0不限制", "session_remaining_times": "number, 本場次抽獎剩餘次數,0不限制", "prizes_info": { "name": "string, 獎品名稱", "pic_url": "string, 獎品圖片" } } } // 未中獎 { "code": "401", "msg": "", "result": { } }
活動營銷系統中的第一個字系統通用抽獎工具今天講完了,但願對你們有必定的幫助或啓示。
通用抽獎工具的代碼設計特別適合設計模式中的模板模式
,大家覺着呢😏😏😏。因此,新的一年我會再寫一篇《[Skr-Shop]通用抽獎工具之代碼設計》嗎?
(O_O)?
最後後,祝你們2020年新年🆕快樂~
[Skr Shop] 項目地址長按進入:https://github.com/skr-shop/m...
Skr Shop系列更多文章: