通用抽奖工具之系统设计
2020/1/2 14:05:51
本文主要是介绍通用抽奖工具之系统设计,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
前言
上篇文章《通用抽奖工具之需求分析》我们已经通过一些常见的抽奖场景,得到了符合这些抽奖场景的抽奖工具五要素:
抽奖五要素 | 要素名称 |
---|---|
第一要素 | 活动 |
第二要素 | 场次 |
第三要素 | 奖品 |
第四要素 | 中奖概率 |
第五要素 | 均匀投奖 |
以及创建一个抽奖活动的5个基本步骤,如下:
- 活动配置
- 场次配置
- 奖品配置
- 奖品中奖概率配置
- 奖品投奖配置
上篇文章回顾 《通用抽奖工具之需求分析》
需求已经分析完了,今天我们就来看看这通用抽奖工具具体的设计,分为如下三个部分:
- 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": { } }
结语
活动营销系统中的第一个字系统通用抽奖工具今天讲完了,希望对大家有一定的帮助或启示。
彩蛋
通用抽奖工具的代码设计特别适合设计模式中的模板模式
,你们觉着呢😏😏😏。所以,新的一年我会再写一篇《[Skr-Shop]通用抽奖工具之代码设计》吗?
(O_O)?
2020
最后后,祝大家2020年新年🆕快乐~
[Skr Shop] 项目地址长按进入:https://github.com/skr-shop/m...
Skr Shop系列更多文章:
- Skr Shop通用抽奖工具之系统设计
- Skr Shop营销体系开篇
- Skr Shop购物车设计之需求分析
- coder,你会设计交易系统吗(实干篇)?
- coder,你会设计交易系统吗(概念篇)?
- 第三方支付的流程分析与总结
- 电商设计手册之基础商品信息
- 电商设计手册之用户体系
这篇关于通用抽奖工具之系统设计的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-09一定要避坑:关于微信H5分享,温馨提示你不要再踩坑了!!!
- 2024-05-09本地项目放到公网访问!炒鸡煎蛋!
- 2024-04-07金融企业区域集中库的设计构想和测试验证
- 2024-03-11前端CSS的工程化——掌握Sass这四大特性就够了
- 2024-02-21h5关联css样式(html怎么和css关联)-icode9专业技术文章分享
- 2024-02-07Firefox禁止远程字体加速网页加载及图标字体补充安装
- 2024-02-07一个菜鸡前端的3年总结-「2023」
- 2024-01-18最火前端Web组态软件(可视化)
- 2024-01-12程序员提效 x10 的必备开源“神器”
- 2024-01-11前端可以监控静态资源的时间吗-icode9专业技术文章分享