[Skr-Shop]通用抽奖工具之系统设计
预祝大家2020新年快乐???????????? 2019年最后一发来啦~ Skr Shop年底第二弹《营销体系》第三篇《通用抽奖工具之系统设计》~
前言
上篇文章《SkrShop通用抽奖工具之需求分析》我们已经通过一些常见的抽奖场景,得到了符合这些抽奖场景的抽奖工具五要素:
抽奖五要素 | 要素名称 |
---|---|
第一要素 | 活动 |
第二要素 | 场次 |
第三要素 | 奖品 |
第四要素 | 中奖概率 |
第五要素 | 均匀投奖 |
以及创建一个抽奖活动的5个基本步骤,如下:
1. 活动配置
2. 场次配置
3. 奖品配置
4. 奖品中奖概率配置
5. 奖品投奖配置
上篇文章回顾 《Skr-Shop通用抽奖工具之需求分析》
需求整理完成,今天我们就来看看通用抽奖工具的系统设计,本文分为三个部分:
DB设计
配置后台设计
接口设计
DB设计
第一要素活动配置
的抽奖活动表
:
代码可左右滑动
-- 通用抽奖工具(万能胶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='抽奖活动表';
第二要素场次配置
的抽奖场次表
:
代码可左右滑动
-- 通用抽奖工具(万能胶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='抽奖场次表';
第三、四要素奖品配置
的抽奖场次奖品表
:
代码可左右滑动
-- 通用抽奖工具(万能胶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='抽奖场次奖品定时投放器表';
其他表,抽奖记录&奖品发放记录表:
代码可左右滑动
-- 通用抽奖工具(万能胶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='用户抽奖记录表';
配置后台设计
创建活动
创建活动场次
活动列表
接口设计
1. 获取活动信息 GET {version}/glue/activity
请求参数:
表格可左右滑动
字段 | 类型 | 是否必传 | 描述 |
---|---|---|---|
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, 奖品图片"}]}]}
}
2. 抽奖 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": {}
}
结语
活动营销系统中的第一个子系统通用抽奖工具今天讲完了,希望对大家有一定的帮助或启示。
彩蛋
通用抽奖工具的代码设计特别适合设计模式中的模板模式
,你们觉着呢????????????。所以,新的一年我会再写一篇《通用抽奖工具之代码设计》吗?
谁知道呢(O_O)?
最后后,预祝大家2020年新年????快乐~
[Skr Shop] 项目地址
长按进入:https://github.com/skr-shop/manuals
Skr Shop系列更多文章
[Skr-Shop]通用抽奖系统之需求分析
[Skr-Shop]营销体系开篇
[Skr-Shop]购物车设计之需求分析
[Skr-Shop]coder,你会设计交易系统吗(实干篇)?
[Skr-Shop]coder,你会设计交易系统吗(概念篇)?
[Skr-Shop]电商设计手册之基础商品信息
[Skr-Shop]支付开发,不得不了解的国内、国际第三方支付流程
[Skr-Shop]电商设计手册之用户体系
[Skr-Shop]通用抽奖工具之系统设计相关推荐
- [Skr-Shop]通用抽奖工具之需求分析
还不更新❓❓❓来啦- Skr Shop年底第二弹<营销体系>第二篇<通用抽奖工具之需求分析>- 前言 回顾营销体系的组成: 营销体系 活动营销系统 销售营销系统 今天带来的是活 ...
- 抽奖工具(Demo_Draw)
[前言]很早就开始想写博客了,奈何一没时间,二嫌麻烦,一直拖到现在~~作为游戏开发工作了一年多,我想把一些通用的小功能小工具写下来~~偏逻辑方面吧,适合给初入门的萌新看,大佬就别笑话我了哈T^T,我也 ...
- 通用数据库管理工具DBeaver
通用数据库管理工具DBeaver 在渗透测试中,用户往往需要管理很多数据库.这些数据库可能是渗透软件使用的(如Metasploit使用的Postgresql),也有目标主机的数据库(如网站的数据库). ...
- 【业务建模_2】通用数据工具
[业务建模_2]通用数据工具 背景 在公司做数据工作会接触很多相关工具,这里会汇总一些核心并更理想化的工具. 工具汇总 1.打点平台 module,op,参数数组(s0-s5),常用参数,[实际打点位 ...
- java rabbitmq 工具类_RabbitMq通用管理工具类
import java.io.IOException; import java.util.concurrent.TimeoutException; import com.rabbitmq.client ...
- OpenCASCADE:形状愈合之通用拆分工具
OpenCASCADE:形状愈合之通用拆分工具 形状分割的通用工具 人脸分割的通用工具 分线通用工具 边缘分割的通用工具 几何分割的通用工具 形状分割的通用工具 类ShapeUpgrade_Shape ...
- 通用数据库管理工具_了解为什么这个直观的工具是您团队的通用团队管理工具...
通用数据库管理工具 每个项目管理工具都试图做同样的工具性工作:保持团队联系,按任务执行和按时完成重大计划. 但是市场变得非常拥挤,并且有充分的理由-没有平台似乎对人们需要看到的东西以及应该如何显示这些 ...
- lcs文本相似度_具有LCS方法的通用文本比较工具
lcs文本相似度 常见的问题是检测并显示两个文本的差异(尤其是几百行或几千行). 使用纯java.lang.String类方法可能是一种解决方案,但是对于此类操作最重要的问题是,"性能&qu ...
- 具有LCS方法的通用文本比较工具
常见的问题是检测并显示两个文本(尤其是几百行或几千行)的差异. 使用纯java.lang.String类方法可能是一种解决方案,但是对于此类操作最重要的问题是,"性能"将不能令人满 ...
最新文章
- python cnn代码详解图解_TextCNN 代码详解(附测试数据集以及GitHub 地址)
- zabbix安装--LAMP环境下
- python编程图片_python下载百度图片,python图片下载程序
- golang中的测试命令
- AMAZING AUCTION (第三届省赛)
- Java Review - 并发编程_ScheduledThreadPoolExecutor原理源码剖析
- JLupin Next Server乍一看
- java: cannot execute binary file 如果遇到这个错,一般是操作系统位数出问题了。
- 当一个人把你所有联系方式删除,意味着什么?
- atmega168p与328p_atmega328P 写入 Boot Loader的那点事 之 互相伤害
- 平安智慧城市总部智慧政务事业部总监张巍:平安智慧城市大数据应用实践分享
- html网页表格线条设置,css怎么设置表格边框?
- Router的路由表
- Depth from Motion:探索突破纯视觉 3D 检测瓶颈
- 无奈.是爱是狠.金山毒霸2007.从此改邪归正
- 7-3 垃圾分类 (20分)
- htmllt;pregt;标签,聊一聊HTML pre标签
- Linux中如何新建用户
- Jmeter分布式压力测试全过程(阿里云ECS)
- 美国通胀再创新高,一夜梦回八零年代