预祝大家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]通用抽奖工具之系统设计相关推荐

  1. [Skr-Shop]通用抽奖工具之需求分析

    还不更新❓❓❓来啦- Skr Shop年底第二弹<营销体系>第二篇<通用抽奖工具之需求分析>- 前言 回顾营销体系的组成: 营销体系 活动营销系统 销售营销系统 今天带来的是活 ...

  2. 抽奖工具(Demo_Draw)

    [前言]很早就开始想写博客了,奈何一没时间,二嫌麻烦,一直拖到现在~~作为游戏开发工作了一年多,我想把一些通用的小功能小工具写下来~~偏逻辑方面吧,适合给初入门的萌新看,大佬就别笑话我了哈T^T,我也 ...

  3. 通用数据库管理工具DBeaver

    通用数据库管理工具DBeaver 在渗透测试中,用户往往需要管理很多数据库.这些数据库可能是渗透软件使用的(如Metasploit使用的Postgresql),也有目标主机的数据库(如网站的数据库). ...

  4. 【业务建模_2】通用数据工具

    [业务建模_2]通用数据工具 背景 在公司做数据工作会接触很多相关工具,这里会汇总一些核心并更理想化的工具. 工具汇总 1.打点平台 module,op,参数数组(s0-s5),常用参数,[实际打点位 ...

  5. java rabbitmq 工具类_RabbitMq通用管理工具类

    import java.io.IOException; import java.util.concurrent.TimeoutException; import com.rabbitmq.client ...

  6. OpenCASCADE:形状愈合之通用拆分工具

    OpenCASCADE:形状愈合之通用拆分工具 形状分割的通用工具 人脸分割的通用工具 分线通用工具 边缘分割的通用工具 几何分割的通用工具 形状分割的通用工具 类ShapeUpgrade_Shape ...

  7. 通用数据库管理工具_了解为什么这个直观的工具是您团队的通用团队管理工具...

    通用数据库管理工具 每个项目管理工具都试图做同样的工具性工作:保持团队联系,按任务执行和按时完成重大计划. 但是市场变得非常拥挤,并且有充分的理由-没有平台似乎对人们需要看到的东西以及应该如何显示这些 ...

  8. lcs文本相似度_具有LCS方法的通用文本比较工具

    lcs文本相似度 常见的问题是检测并显示两个文本的差异(尤其是几百行或几千行). 使用纯java.lang.String类方法可能是一种解决方案,但是对于此类操作最重要的问题是,"性能&qu ...

  9. 具有LCS方法的通用文本比较工具

    常见的问题是检测并显示两个文本(尤其是几百行或几千行)的差异. 使用纯java.lang.String类方法可能是一种解决方案,但是对于此类操作最重要的问题是,"性能"将不能令人满 ...

最新文章

  1. python cnn代码详解图解_TextCNN 代码详解(附测试数据集以及GitHub 地址)
  2. zabbix安装--LAMP环境下
  3. python编程图片_python下载百度图片,python图片下载程序
  4. golang中的测试命令
  5. AMAZING AUCTION (第三届省赛)
  6. Java Review - 并发编程_ScheduledThreadPoolExecutor原理源码剖析
  7. JLupin Next Server乍一看
  8. java: cannot execute binary file 如果遇到这个错,一般是操作系统位数出问题了。
  9. 当一个人把你所有联系方式删除,意味着什么?
  10. atmega168p与328p_atmega328P 写入 Boot Loader的那点事 之 互相伤害
  11. 平安智慧城市总部智慧政务事业部总监张巍:平安智慧城市大数据应用实践分享
  12. html网页表格线条设置,css怎么设置表格边框?
  13. Router的路由表
  14. Depth from Motion:探索突破纯视觉 3D 检测瓶颈
  15. 无奈.是爱是狠.金山毒霸2007.从此改邪归正
  16. 7-3 垃圾分类 (20分)
  17. htmllt;pregt;标签,聊一聊HTML pre标签
  18. Linux中如何新建用户
  19. Jmeter分布式压力测试全过程(阿里云ECS)
  20. 美国通胀再创新高,一夜梦回八零年代

热门文章

  1. 有了这些DEMO,开发支付宝小程序SO Easy!
  2. 通过安装360浏览器插件下载视频
  3. at91sam7x256编程c语言代码,at91sam7x256的程序串口0问题
  4. omnigraffle 导出html,Omnigraffle如何输出文件教程
  5. 企业为什么要申请专利?企业申请专利有哪些好处?
  6. 使用AutoJs实现微信抢红包
  7. 【好物推荐】Snipaste,一款简单但强大的截图工具
  8. 神经网络适用于什么问题,对神经网络的简单理解
  9. 神经网络辨识器的作用,神经网络辨识器是什么
  10. android 彩信保存,Android彩信存储