通用抽獎工具之系統設計

前言

上篇文章《通用抽獎工具之需求分析》咱們已經經過一些常見的抽獎場景,獲得了符合這些抽獎場景的抽獎工具五要素:node

抽獎五要素 要素名稱
第一要素 活動
第二要素 場次
第三要素 獎品
第四要素 中獎機率
第五要素 均勻投獎

以及建立一個抽獎活動的5個基本步驟,以下:git

  1. 活動配置
  2. 場次配置
  3. 獎品配置
  4. 獎品中獎機率配置
  5. 獎品投獎配置
上篇文章回顧 《通用抽獎工具之需求分析》

需求已經分析完了,今天咱們就來看看這通用抽獎工具具體的設計,分爲以下三個部分:github

  • DB設計
  • 配置後臺設計
  • 接口設計

DB設計

第一要素活動配置抽獎活動表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='用戶抽獎記錄表';

配置後臺設計

建立活動

http://cdn.tigerb.cn/20191229224816.png?imageMogr2/thumbnail/1934x1567!/format/webp/blur/1x0/quality/75|imageslim

建立活動場次-按數額範圍區間抽獎

http://cdn.tigerb.cn/20191230081157.png?imageMogr2/thumbnail/971x2069!/format/webp/blur/1x0/quality/75|imageslim

http://cdn.tigerb.cn/20191229224543.png?imageMogr2/thumbnail/971x2214!/format/webp/blur/1x0/quality/75|imageslim

http://cdn.tigerb.cn/20191229224834.png?imageMogr2/thumbnail/971x1693!/format/webp/blur/1x0/quality/75|imageslim

活動列表

http://cdn.tigerb.cn/20191229223706.png?imageMogr2/thumbnail/1338x761!/format/webp/blur/1x0/quality/75|imageslim

接口設計

一、獲取活動信息 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

最後後,祝你們2020年新年🆕快樂~


[Skr Shop] 項目地址長按進入:https://github.com/skr-shop/m...


Skr Shop系列更多文章:

相關文章
相關標籤/搜索