需求说明

以前很讨厌点外卖的我,最近中午经常点外卖,因为确实很方便,提前点好餐,算准时间,就可以在下班的时候吃上饭,然后省下的那些时间就可以在中午的时候多休息一下了。

点餐结束后,会有一个好友分享红包功能,虽说这个红包不能提现,但却可以抵扣点餐费用,对于经常点餐的人来说,直接用于抵扣现金确实是很大的诱惑,在点餐之后所获得的那个红包,必须要分享出去才能拆。

那么如果自己也想实现以下抢红包功能,需要说明的是,本文所描述的红包功能更多的关注与随机红包的生成,至于高并发、数据一致性等问题,本文暂未涉及,以下是本文所讨论的两个技术点:

  • 不同的消费金额获取的红包总额不同,消费金额越大,红包总额就越大,红包总数也就越多;

  • 假设有一天,有一种需求是,需要保证参与抢红包的人获得的红包金额在平均数附近波动,也就是尽量的服从正态分布;

功能实现

本文描述的场景,所涉及到的金额以分为单位,目的是为了更好的处理随机数。总体的示意图如下:

消费后红包的初始化

需求重点,用户分享出去的红包总额跟消费总额成正比,可以分拆的子红包个数也与消费总额成正比。

比如:

  • 10-20元的消费金额,可以分享的单个红包金额为10元,可以供5个人抢

  • 20-40元的消费金额,可以分享的单个红包金额为20元,可以供8个人抢

  • 40-60元的消费金额,可以分享的单个红包金额为30元,可以供10个人抢

  • 60-100元的消费金额,可以分享的单个红包金额为40元,可以供10个人抢

  • 100元以上的消费金额,可以分享的单个红包金额为50元,可以供10个人抢

那么我们设计出来一个实体,用于表示红包信息,以方便的配置及调整红包规则

红包初始化信息

接下来我们就可以通过消费金额获取相应的红包信息了。

随机红包的生成时机及处理

随机红包的生成可以在抢之前生成也可以在抢的过程中确定,一般而言,很多时候红包会在抢的过程中动态的实际分配,不过在本文中,红包在用户分享成功后会预先生成,主要原因是为了更好地处理处理数据,以使得数据能够服从正态分布。

以下是其流程图,其中有一段逻辑是回调功能,可能会有圈友会问,如何保证有回调以及回调是成功的,这个地方有很多种处理,比如MQ、任务调度等,此处也不做讨论

那么我们需要设计一个新的实体,以表示分享出去的红包及其生成的随机红包:

在实现过程中,根据用户消费金额获取相应红包,然后通过随机数,生成n-1个原始的随机数据,最后一个数据用总和减去n-1个数据的和获取到。

然后通过设置好系数,以处理数据达到服从正太分布的目的:

经过第二次处理后,得到的数据与原始数据有偏差,那么我们通过等比例方式再次处理,以确保拆分后的红包总额等于红包原始总额:

测试

测试效果图如下:

部分代码如下,

用.NET Core实现一个类似于饿了吗的简易拆红包功能相关推荐

  1. c++怎么做app_想开发一个类似于抖音短视频这样的APP大概多少钱?应该怎么做?...

    随着智能手机和网络速度的发展,类似的实时应用软件或短视频应用软件已经开发出来,也很受用户欢迎.开发一个类似抖音短视频的应用软件要花多少钱?这个问题也成为一些准备开发视频应用软件的商家和客户经常问及的问 ...

  2. boost::spirit模块实现一个类似于 XML 的小型解析器的测试程序

    boost::spirit模块实现一个类似于 XML 的小型解析器的测试程序 实现功能 C++实现代码 实现功能 boost::spirit模块实现一个类似于 XML 的小型解析器的测试程序 C++实 ...

  3. boost::spirit模块实现一个类似于 XML 的小型解析器,Karma 用于打印生成的 AST

    boost::spirit模块实现一个类似于 XML 的小型解析器,Karma 用于打印生成的 AST 实现功能 C++实现代码 实现功能 boost::spirit模块实现一个类似于 XML 的小型 ...

  4. 给 asp.net core 写一个简单的健康检查

    给 asp.net core 写一个简单的健康检查 Intro 健康检查可以帮助我们知道应用的当前状态是不是处于良好状态,现在无论是 docker 还是 k8s 还是现在大多数的服务注册发现大多都提供 ...

  5. .NET Core跨平台:使用.NET Core开发一个初心源商城总括

    1..NET Core基本介绍 a 作为一个.NET的开发者,在以前的开发中,我们开发的项目基本都是部署在windows服务器上,但是在windows服务器上的话某些比较流行的解决访问量的方案基本都是 ...

  6. 【WPF】一个类似于QQ面板的GroupShelf控件

    最近做控件上了瘾,现在把做的一个类似于QQ面板的控件放上来. [分析] 从整体来看,这个控件应该同ListBox,ListView这类控件一样,是一个ItemsControl,而中间的项,就是它的It ...

  7. java mysql点赞功能_用Java做一个类似于微博QQ空间点赞的功能-Fun言

    点赞是一个互动性很强的功能,网站加入点赞可以增强用户之间的亲密度,可以利用点赞排出受欢迎文章或者其他的列表,所以今天教大家如何做一个类似于微博.QQ空间的点赞功能 需求分析: 首先要明确这个功能是需要 ...

  8. ABP Asp.net core 创建一个http get 请求

    ABP Asp.net core 创建一个http  get 请求,携带token Post man 先调用一下试试,是通的 public async Task SendRequestAsync(){ ...

  9. 开发一个类似饿了吗外卖app的价格是多少钱?

    开发一个类似饿了吗外卖app的价格是多少钱?广州app开发公司品向科技(www.dthulian.com)表示随着移动餐饮业的发展,很多传统企业也想追赶互联网的发展,所以很多人都会来咨询广州app开发 ...

最新文章

  1. getcoo php_PHP简单实现DES加密解密的方法
  2. Windows下将MySQL5.5升级为MySQL5.7
  3. 创智播客微服务_【传智播客】JavaEE在职加薪课
  4. 新建maven项目更改 web版本
  5. 数据结构课上笔记13
  6. idea如何反编译字节码指令_美团点评:Java字节码增强技术,线上问题诊断利器...
  7. 填充 孔洞_防火门或防火窗与墙洞口的间隙,填充材料的选择
  8. 分类模型confusion matrix混淆矩阵可视化
  9. 数据结构与算法(陈越版)第一讲 基本概念
  10. android webview 手机兼容问题
  11. 体系结构学习笔记一:硬件动态调度算法介绍以及基于Verilog的Tomasulo实现
  12. win10 无声音 耳机设备不显示 驱动显示正常 就是没有声音
  13. 一键重装系统工具和U盘重装工具有什么区别?
  14. H5 VIDEO标签视频黑屏的原因及解决方法
  15. Linux 系统进程、线程之间的爱恨纠葛
  16. WEB14:代码模板的制作
  17. 齐博x1教程:快速增加下拉菜单
  18. quartus——使用vhdl语言实现层次化设计
  19. MySQL必知必会pdf网盘下载+每章总结
  20. Python的对象与类

热门文章

  1. airpods2使用_如何使用AirPods和AirPods Pro:完整指南
  2. discord linux_如何在Discord中应用文本格式
  3. dropbox文件_Dropbox即将发布的扩展程序更新将添加更多文件编辑支持,包括Pixlr照片...
  4. ubuntu,kali linux和windows三系统流水账——写给自己
  5. 《飞机大战》安卓游戏开发源码(三)
  6. snmpd服务无法更改默认端口
  7. 如何使用 C# 压缩单个文件?
  8. 里程碑!中文版.NET官网发布,.NET开发起飞!
  9. 编程语言也环保?C语言领跑,Python、Perl垫底
  10. Win11推送加速!