日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

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

發(fā)布時(shí)間:2023/12/4 asp.net 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用.NET Core实现一个类似于饿了吗的简易拆红包功能 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

需求說(shuō)明

以前很討厭點(diǎn)外賣(mài)的我,最近中午經(jīng)常點(diǎn)外賣(mài),因?yàn)榇_實(shí)很方便,提前點(diǎn)好餐,算準(zhǔn)時(shí)間,就可以在下班的時(shí)候吃上飯,然后省下的那些時(shí)間就可以在中午的時(shí)候多休息一下了。

點(diǎn)餐結(jié)束后,會(huì)有一個(gè)好友分享紅包功能,雖說(shuō)這個(gè)紅包不能提現(xiàn),但卻可以抵扣點(diǎn)餐費(fèi)用,對(duì)于經(jīng)常點(diǎn)餐的人來(lái)說(shuō),直接用于抵扣現(xiàn)金確實(shí)是很大的誘惑,在點(diǎn)餐之后所獲得的那個(gè)紅包,必須要分享出去才能拆。

那么如果自己也想實(shí)現(xiàn)以下?lián)尲t包功能,需要說(shuō)明的是,本文所描述的紅包功能更多的關(guān)注與隨機(jī)紅包的生成,至于高并發(fā)、數(shù)據(jù)一致性等問(wèn)題,本文暫未涉及,以下是本文所討論的兩個(gè)技術(shù)點(diǎn):

  • 不同的消費(fèi)金額獲取的紅包總額不同,消費(fèi)金額越大,紅包總額就越大,紅包總數(shù)也就越多;

  • 假設(shè)有一天,有一種需求是,需要保證參與搶紅包的人獲得的紅包金額在平均數(shù)附近波動(dòng),也就是盡量的服從正態(tài)分布;?

功能實(shí)現(xiàn)

本文描述的場(chǎng)景,所涉及到的金額以分為單位,目的是為了更好的處理隨機(jī)數(shù)。總體的示意圖如下:

消費(fèi)后紅包的初始化

需求重點(diǎn),用戶(hù)分享出去的紅包總額跟消費(fèi)總額成正比,可以分拆的子紅包個(gè)數(shù)也與消費(fèi)總額成正比。

比如:

  • 10-20元的消費(fèi)金額,可以分享的單個(gè)紅包金額為10元,可以供5個(gè)人搶

  • 20-40元的消費(fèi)金額,可以分享的單個(gè)紅包金額為20元,可以供8個(gè)人搶

  • 40-60元的消費(fèi)金額,可以分享的單個(gè)紅包金額為30元,可以供10個(gè)人搶

  • 60-100元的消費(fèi)金額,可以分享的單個(gè)紅包金額為40元,可以供10個(gè)人搶

  • 100元以上的消費(fèi)金額,可以分享的單個(gè)紅包金額為50元,可以供10個(gè)人搶

那么我們?cè)O(shè)計(jì)出來(lái)一個(gè)實(shí)體,用于表示紅包信息,以方便的配置及調(diào)整紅包規(guī)則

紅包初始化信息

接下來(lái)我們就可以通過(guò)消費(fèi)金額獲取相應(yīng)的紅包信息了。

隨機(jī)紅包的生成時(shí)機(jī)及處理

隨機(jī)紅包的生成可以在搶之前生成也可以在搶的過(guò)程中確定,一般而言,很多時(shí)候紅包會(huì)在搶的過(guò)程中動(dòng)態(tài)的實(shí)際分配,不過(guò)在本文中,紅包在用戶(hù)分享成功后會(huì)預(yù)先生成,主要原因是為了更好地處理處理數(shù)據(jù),以使得數(shù)據(jù)能夠服從正態(tài)分布。

以下是其流程圖,其中有一段邏輯是回調(diào)功能,可能會(huì)有圈友會(huì)問(wèn),如何保證有回調(diào)以及回調(diào)是成功的,這個(gè)地方有很多種處理,比如MQ、任務(wù)調(diào)度等,此處也不做討論

那么我們需要設(shè)計(jì)一個(gè)新的實(shí)體,以表示分享出去的紅包及其生成的隨機(jī)紅包:

在實(shí)現(xiàn)過(guò)程中,根據(jù)用戶(hù)消費(fèi)金額獲取相應(yīng)紅包,然后通過(guò)隨機(jī)數(shù),生成n-1個(gè)原始的隨機(jī)數(shù)據(jù),最后一個(gè)數(shù)據(jù)用總和減去n-1個(gè)數(shù)據(jù)的和獲取到。

然后通過(guò)設(shè)置好系數(shù),以處理數(shù)據(jù)達(dá)到服從正太分布的目的:

經(jīng)過(guò)第二次處理后,得到的數(shù)據(jù)與原始數(shù)據(jù)有偏差,那么我們通過(guò)等比例方式再次處理,以確保拆分后的紅包總額等于紅包原始總額:


測(cè)試

測(cè)試效果圖如下:

部分代碼如下,


總結(jié)

以上是生活随笔為你收集整理的用.NET Core实现一个类似于饿了吗的简易拆红包功能的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。