php抽奖功能
<p>在项目开发中经常会遇到花钱抽奖类型的需求。但是老板总是担心用户用小钱抽到大奖。这样会导致项目亏损。下边这段代码可以有效制止抽奖项目亏钱。</p><p>个人奖池:</p>
<p>语言:thinkphp redis mysql </p>
<p>表:desire抽奖商品表 desire_log用户抽奖奖品表 user_desire_log用户抽奖记录表 desire_risk抽奖风控表</p>
<p>需求:用户奖池分为进行中奖池 和已完成奖池 当用户抽到大奖后 用户个人奖池重置 否则将继续抽奖 最后一次抽奖必中大奖 通过风控金额来判断用户是否可以抽大奖</p>
<p> 当所有用户已完成的抽奖 盈利大于风控金额的时候可以让用户抽大奖 否则用户抽不到大奖</p>
<div class="cnblogs_code">
<pre><?<span style="color: rgba(0, 0, 0, 1)">php
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">抽奖接口</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> desire()
{
</span><span style="color: rgba(128, 0, 128, 1)">$userData</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>->userSessionData();<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">/用户的唯一标识</span>
<span style="color: rgba(128, 0, 128, 1)">$time</span> = <span style="color: rgba(0, 128, 128, 1)">time</span><span style="color: rgba(0, 0, 0, 1)">();
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->limit_reward_time(<span style="color: rgba(128, 0, 128, 1)">$userData</span>['id'], <span style="color: rgba(128, 0, 128, 1)">$time</span>);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">/限制抽奖间隔时间 防止被恶意刷奖品
//活动开启开关</span>
<span style="color: rgba(128, 0, 128, 1)">$num</span> = input('num/d'<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(128, 0, 128, 1)">$num</span><span style="color: rgba(0, 0, 0, 1)">) {
output(</span>'1008', '参数错误'<span style="color: rgba(0, 0, 0, 1)">);
}
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$num</span>!=1<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$num</span> !=10<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$num</span> !=100<span style="color: rgba(0, 0, 0, 1)">){
output(</span>'1008', '参数错误'<span style="color: rgba(0, 0, 0, 1)">);
}</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(128, 0, 128, 1)">$send</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>->draw(<span style="color: rgba(128, 0, 128, 1)">$num</span><span style="color: rgba(0, 0, 0, 1)">);
}
}</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(128, 0, 128, 1)">$send</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>->draw(<span style="color: rgba(128, 0, 128, 1)">$num</span><span style="color: rgba(0, 0, 0, 1)">);
}
}</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(128, 0, 128, 1)">$send</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>->draw(<span style="color: rgba(128, 0, 128, 1)">$num</span><span style="color: rgba(0, 0, 0, 1)">);
}
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$send</span> != '金币不足'<span style="color: rgba(0, 0, 0, 1)">) {
output(</span>'200', '列表', <span style="color: rgba(128, 0, 128, 1)">$send</span><span style="color: rgba(0, 0, 0, 1)">);
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
output(</span>'1012', <span style="color: rgba(128, 0, 128, 1)">$send</span><span style="color: rgba(0, 0, 0, 1)">);
}
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">///抽奖核心</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span> draw(<span style="color: rgba(128, 0, 128, 1)">$num</span><span style="color: rgba(0, 0, 0, 1)">)
{
</span><span style="color: rgba(128, 0, 128, 1)">$userData</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>-><span style="color: rgba(0, 0, 0, 1)">userSessionData();
</span><span style="color: rgba(128, 0, 128, 1)">$resultSend</span> = Cache::get('奖池名称加上用户的唯一标识,确保一人一奖池' . <span style="color: rgba(128, 0, 128, 1)">$userData</span>['id']);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取个人奖池</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 255, 1)">empty</span>(<span style="color: rgba(128, 0, 128, 1)">$resultSend</span><span style="color: rgba(0, 0, 0, 1)">)) {
</span><span style="color: rgba(128, 0, 128, 1)">$userRedis</span> = <span style="color: rgba(0, 128, 128, 1)">unserialize</span>(Cache::get('newdesiredraw' . <span style="color: rgba(128, 0, 128, 1)">$userData</span>['id']));<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">/将奖池序列化</span>
} <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(128, 0, 128, 1)">$userRedis</span> = '';<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">/当前用户不存在奖池</span>
<span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">/查询当前用户的金币</span>
<span style="color: rgba(128, 0, 128, 1)">$desireDiamonds</span> = Db::connect('db_qmconfig')->name('user_money')->where(['uid' => <span style="color: rgba(128, 0, 128, 1)">$userData</span>['id']])->field('diamonds')-><span style="color: rgba(0, 0, 0, 1)">find();
</span><span style="color: rgba(128, 0, 128, 1)">$sendNum</span> = <span style="color: rgba(128, 0, 128, 1)">$num</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$desireDiamonds</span>['diamonds'] < <span style="color: rgba(128, 0, 128, 1)">$num</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span> ['msg' => '金币不足'];<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">/判断当前用户的金币是不是够抽奖</span>
<span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(128, 0, 128, 1)">$gift_height</span> = 0;<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">/检测是否更新个人奖池和抽奖数量</span>
<span style="color: rgba(128, 0, 128, 1)">$newNum</span> = 0;<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">/检测下一轮抽奖数量</span>
<span style="color: rgba(128, 0, 128, 1)">$suiji</span> = Db::connect('db_qmconfig')->name('desire')->order('num desc')->find();<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">/随机小礼物</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$userRedis</span>) {<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">/如果用户奖池存在</span>
<span style="color: rgba(128, 0, 128, 1)">$joins</span> =<span style="color: rgba(0, 0, 0, 1)"> [
[</span>'gift_info f', 'd.giftid = f.id'<span style="color: rgba(0, 0, 0, 1)">]
];
</span><span style="color: rgba(128, 0, 128, 1)">$gift</span> = Db::connect('db_qmconfig')->name('desire'<span style="color: rgba(0, 0, 0, 1)">)
</span>->alias('d'<span style="color: rgba(0, 0, 0, 1)">)
</span>-><span style="color: rgba(0, 128, 128, 1)">join</span>(<span style="color: rgba(128, 0, 128, 1)">$joins</span><span style="color: rgba(0, 0, 0, 1)">)
</span>->where(['d.state' => 1<span style="color: rgba(0, 0, 0, 1)">])
</span>->order('f.price desc'<span style="color: rgba(0, 0, 0, 1)">)
</span>->field('f.name,f.price,f.egif,d.num,f.id,d.position')-><span style="color: rgba(0, 0, 0, 1)">find();
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">/查询抽奖表的礼物</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(128, 0, 128, 1)">$gift</span><span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 0, 255, 1)">return</span> ['msg'=>'礼物查询错误'<span style="color: rgba(0, 0, 0, 1)">];
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">/查询用户的总抽奖数量</span>
<span style="color: rgba(128, 0, 128, 1)">$user_all</span> = Db::connect('db_qmconfig')->name('user_desire_log')->order('kind desc'<span style="color: rgba(0, 0, 0, 1)">)
</span>->where(['uid'=><span style="color: rgba(128, 0, 128, 1)">$userData</span>['id'],'state'=>0])->field('SUM(num) as kindNum')-><span style="color: rgba(0, 0, 0, 1)">find();
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">十次抽奖 必中</span>
<span style="color: rgba(128, 0, 128, 1)">$count</span> = <span style="color: rgba(0, 128, 128, 1)">count</span>(<span style="color: rgba(128, 0, 128, 1)">$userRedis</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$num</span> == 10<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(128, 0, 128, 1)">$where</span>[] = ['d.state', '=', 1<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$where</span>[] = ['d.ten', '=', 1<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$giftId</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>->giftInfo(<span style="color: rgba(128, 0, 128, 1)">$where</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$giftId</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(128, 0, 128, 1)">$result</span>[] = <span style="color: rgba(128, 0, 128, 1)">$giftId</span>['id'<span style="color: rgba(0, 0, 0, 1)">];
}
</span><span style="color: rgba(128, 0, 128, 1)">$num</span> = <span style="color: rgba(128, 0, 128, 1)">$num</span> - 1<span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">/百次抽奖 必中</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$num</span> == 100<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(128, 0, 128, 1)">$where</span>[] = ['d.state', '=', 1<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$where</span>[] = ['d.hundred', '=', 1<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$giftId</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>->giftInfo(<span style="color: rgba(128, 0, 128, 1)">$where</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(128, 0, 128, 1)">$lwhere</span>[] = ['d.state', '=', 1<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$lwhere</span>[] = ['d.ten', '=', 1<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$lgiftId</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>->giftInfo(<span style="color: rgba(128, 0, 128, 1)">$lwhere</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$lgiftId</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(128, 0, 128, 1)">$l</span>=0;<span style="color: rgba(128, 0, 128, 1)">$l</span><10;<span style="color: rgba(128, 0, 128, 1)">$l</span>++<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(128, 0, 128, 1)">$result</span>[] = <span style="color: rgba(128, 0, 128, 1)">$lgiftId</span>['id'<span style="color: rgba(0, 0, 0, 1)">];
}
}
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$giftId</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(128, 0, 128, 1)">$result</span>[] = <span style="color: rgba(128, 0, 128, 1)">$giftId</span>['id'<span style="color: rgba(0, 0, 0, 1)">];
}
</span><span style="color: rgba(128, 0, 128, 1)">$num</span> = <span style="color: rgba(128, 0, 128, 1)">$num</span> - 11<span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$num</span> ==1<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$user_all</span><span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(128, 0, 128, 1)">$number1</span> = ''<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$num1</span> = <span style="color: rgba(0, 128, 128, 1)">str_split</span>(<span style="color: rgba(128, 0, 128, 1)">$user_all</span>['kindNum'<span style="color: rgba(0, 0, 0, 1)">]);
</span><span style="color: rgba(128, 0, 128, 1)">$number</span> = <span style="color: rgba(128, 0, 128, 1)">$num1</span>[<span style="color: rgba(0, 128, 128, 1)">count</span>(<span style="color: rgba(128, 0, 128, 1)">$num1</span>) - 1<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$user_all</span>['kindNum']>98<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(128, 0, 128, 1)">$number1</span> = <span style="color: rgba(128, 0, 128, 1)">$num1</span>[<span style="color: rgba(0, 128, 128, 1)">count</span>(<span style="color: rgba(128, 0, 128, 1)">$num1</span>) - 2<span style="color: rgba(0, 0, 0, 1)">];
}
</span><span style="color: rgba(0, 0, 255, 1)">if</span> ((<span style="color: rgba(128, 0, 128, 1)">$number</span>==9)&& (<span style="color: rgba(128, 0, 128, 1)">$number1</span> !=9)){ <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">十抽必中</span>
<span style="color: rgba(128, 0, 128, 1)">$where</span>[] = ['d.state', '=', 1<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$where</span>[] = ['d.ten', '=', 1<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$giftId</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>->giftInfo(<span style="color: rgba(128, 0, 128, 1)">$where</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$giftId</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(128, 0, 128, 1)">$result</span>[] = <span style="color: rgba(128, 0, 128, 1)">$giftId</span>['id'<span style="color: rgba(0, 0, 0, 1)">];
}
</span><span style="color: rgba(128, 0, 128, 1)">$num</span> = <span style="color: rgba(128, 0, 128, 1)">$num</span> - 1<span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">if</span> ((<span style="color: rgba(128, 0, 128, 1)">$number1</span>==9) && (<span style="color: rgba(128, 0, 128, 1)">$number</span>==9)){<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">百抽必中</span>
<span style="color: rgba(128, 0, 128, 1)">$where</span>[] = ['d.state', '=', 1<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$where</span>[] = ['d.hundred', '=', 1<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$giftId</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>->giftInfo(<span style="color: rgba(128, 0, 128, 1)">$where</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$giftId</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(128, 0, 128, 1)">$result</span>[] = <span style="color: rgba(128, 0, 128, 1)">$giftId</span>['id'<span style="color: rgba(0, 0, 0, 1)">];
}
</span><span style="color: rgba(128, 0, 128, 1)">$num</span> = <span style="color: rgba(128, 0, 128, 1)">$num</span> - 1<span style="color: rgba(0, 0, 0, 1)">;
}
}
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">//判断当前奖池的奖品是否够此次抽奖 如果奖池奖品数量不够此次抽奖 将此次奖池抽完后 获取剩下要抽将的数量 重置奖池 并且递归此方法传入剩下要抽的数量</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$count</span> < <span style="color: rgba(128, 0, 128, 1)">$num</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(128, 0, 128, 1)">$newNum</span> = <span style="color: rgba(128, 0, 128, 1)">$num</span> - <span style="color: rgba(128, 0, 128, 1)">$count</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$num</span> = <span style="color: rgba(128, 0, 128, 1)">$count</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(128, 0, 128, 1)">$user</span> = Db::connect('db_qmconfig'<span style="color: rgba(0, 0, 0, 1)">)
</span>->name('desire_log')->where(['uid' => <span style="color: rgba(128, 0, 128, 1)">$userData</span>['id'<span style="color: rgba(0, 0, 0, 1)">]])
</span>->field('SUM(num) as num'<span style="color: rgba(0, 0, 0, 1)">)
</span>->find();<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">/已抽数量</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(128, 0, 128, 1)">$user</span><span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 0, 255, 1)">return</span> ['msg'=>'已抽数量有误'<span style="color: rgba(0, 0, 0, 1)">];
}
</span><span style="color: rgba(128, 0, 128, 1)">$res</span>['zongshu'] = Db::connect('db_qmconfig'<span style="color: rgba(0, 0, 0, 1)">)
</span>->name('desire')->where(['state' => 1<span style="color: rgba(0, 0, 0, 1)">])
</span>->field('SUM(num) as num,checksum'<span style="color: rgba(0, 0, 0, 1)">)
</span>->find();<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">/总数量</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(128, 0, 128, 1)">$res</span>['zongshu'<span style="color: rgba(0, 0, 0, 1)">]){
</span><span style="color: rgba(0, 0, 255, 1)">return</span> ['msg'=>'总数量有误'<span style="color: rgba(0, 0, 0, 1)">];
}
</span><span style="color: rgba(128, 0, 128, 1)">$resNum</span> = 0<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">//获取个人多少次抽奖</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> ((<span style="color: rgba(128, 0, 128, 1)">$user</span>['num']+<span style="color: rgba(128, 0, 128, 1)">$sendNum</span>) > <span style="color: rgba(128, 0, 128, 1)">$res</span>['zongshu']['checksum'<span style="color: rgba(0, 0, 0, 1)">]) {
</span><span style="color: rgba(128, 0, 128, 1)">$res</span>['zongshu']['user_num'] = <span style="color: rgba(128, 0, 128, 1)">$user</span>['num'] % <span style="color: rgba(128, 0, 128, 1)">$res</span>['zongshu']['checksum']; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">/获取余数</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> ((<span style="color: rgba(128, 0, 128, 1)">$res</span>['zongshu']['user_num'] + <span style="color: rgba(128, 0, 128, 1)">$sendNum</span>) > <span style="color: rgba(128, 0, 128, 1)">$res</span>['zongshu']['checksum'<span style="color: rgba(0, 0, 0, 1)">]) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">/获取这次抽奖的数量</span>
<span style="color: rgba(128, 0, 128, 1)">$resNum</span> = <span style="color: rgba(128, 0, 128, 1)">$sendNum</span> - ((<span style="color: rgba(128, 0, 128, 1)">$res</span>['zongshu']['user_num'] + <span style="color: rgba(128, 0, 128, 1)">$sendNum</span>) - <span style="color: rgba(128, 0, 128, 1)">$res</span>['zongshu']['checksum'<span style="color: rgba(0, 0, 0, 1)">]);
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> return ['msg'=>$res['zongshu']['user_num']];</span>
}<span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(128, 0, 128, 1)">$res</span>['zongshu']['user_num'] = <span style="color: rgba(128, 0, 128, 1)">$user</span>['num'<span style="color: rgba(0, 0, 0, 1)">];
}
</span><span style="color: rgba(128, 0, 128, 1)">$cruuy</span> = 0<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">/随机选择奖池</span>
<span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(128, 0, 128, 1)">$i</span> = 0; <span style="color: rgba(128, 0, 128, 1)">$i</span> < <span style="color: rgba(128, 0, 128, 1)">$num</span>; <span style="color: rgba(128, 0, 128, 1)">$i</span>++<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(128, 0, 128, 1)">$send</span> = <span style="color: rgba(0, 128, 128, 1)">array_rand</span>(<span style="color: rgba(128, 0, 128, 1)">$userRedis</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$resNum</span> > 0<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">/如果本轮奖池抽完 并且没有抽到大奖 那么必中大奖</span>
<span style="color: rgba(128, 0, 128, 1)">$result</span>[] = <span style="color: rgba(128, 0, 128, 1)">$gift</span>['id'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$gift_height</span> = 1;<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">抽到大奖后更改三个变量状态</span>
<span style="color: rgba(128, 0, 128, 1)">$resNum</span>=0<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$cruuy</span> = 1<span style="color: rgba(0, 0, 0, 1)">;
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$userRedis</span>[<span style="color: rgba(128, 0, 128, 1)">$send</span>]==<span style="color: rgba(128, 0, 128, 1)">$gift</span>['id'<span style="color: rgba(0, 0, 0, 1)">]){
</span><span style="color: rgba(128, 0, 128, 1)">$haveJoin</span> =<span style="color: rgba(0, 0, 0, 1)"> [
[</span>'desire_log d', 'd.cid = u.id'],<span style="color: rgba(0, 0, 0, 1)">
[</span>'gift_info f', 'd.giftid = f.id'<span style="color: rgba(0, 0, 0, 1)">]
];
</span><span style="color: rgba(128, 0, 128, 1)">$all</span>= Db::connect('db_qmconfig'<span style="color: rgba(0, 0, 0, 1)">)
</span>->name('user_desire_log'<span style="color: rgba(0, 0, 0, 1)">)
</span>->alias('u'<span style="color: rgba(0, 0, 0, 1)">)
</span>->where(['u.state'=>1<span style="color: rgba(0, 0, 0, 1)">])
</span>->field('SUM(u.num) as num')-><span style="color: rgba(0, 0, 0, 1)">find();
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> var_dump($all);</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">/如果抽到大奖</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$all</span>['num']==<span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">/如果这是整个奖池第一轮抽奖 那么可以中大奖</span>
<span style="color: rgba(128, 0, 128, 1)">$result</span>[] = <span style="color: rgba(128, 0, 128, 1)">$suiji</span>['giftid'<span style="color: rgba(0, 0, 0, 1)">];
}</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(128, 0, 128, 1)">$alls</span>= Db::connect('db_qmconfig')->name('user_desire_log'<span style="color: rgba(0, 0, 0, 1)">)
</span>->alias('u'<span style="color: rgba(0, 0, 0, 1)">)
</span>->where(['u.state'=>1<span style="color: rgba(0, 0, 0, 1)">])
</span>-><span style="color: rgba(0, 128, 128, 1)">join</span>(<span style="color: rgba(128, 0, 128, 1)">$haveJoin</span><span style="color: rgba(0, 0, 0, 1)">)
</span>->field('SUM(f.price*d.num) as num')-><span style="color: rgba(0, 0, 0, 1)">find();
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">/查询奖池风控金额</span>
<span style="color: rgba(128, 0, 128, 1)">$reskList</span> = Db::connect('db_qmconfig')->name('desire_risk')-><span style="color: rgba(0, 0, 0, 1)">find();
</span><span style="color: rgba(128, 0, 128, 1)">$riskPrice</span> = <span style="color: rgba(128, 0, 128, 1)">$all</span>['num'] * 20 - <span style="color: rgba(128, 0, 128, 1)">$alls</span>['num'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">/如果风控金额小于当前已完成抽奖的金额 那么代表软件处于盈利状态 可以中大奖</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> ((<span style="color: rgba(128, 0, 128, 1)">$riskPrice</span> >= <span style="color: rgba(128, 0, 128, 1)">$reskList</span>['price'])&&(<span style="color: rgba(128, 0, 128, 1)">$cruuy</span>==0<span style="color: rgba(0, 0, 0, 1)">)){
</span><span style="color: rgba(128, 0, 128, 1)">$result</span>[] = <span style="color: rgba(128, 0, 128, 1)">$userRedis</span>[<span style="color: rgba(128, 0, 128, 1)">$send</span><span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$gift_height</span> = 1<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$cruuy</span> = 1<span style="color: rgba(0, 0, 0, 1)">;
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">/如果风控金额大于当前已完成抽奖金额 不能中大奖 随机选择一次小奖品 替换大奖</span>
<span style="color: rgba(128, 0, 128, 1)">$result</span>[] = <span style="color: rgba(128, 0, 128, 1)">$suiji</span>['giftid'<span style="color: rgba(0, 0, 0, 1)">];
}
}
}</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(128, 0, 128, 1)">$result</span>[] = <span style="color: rgba(128, 0, 128, 1)">$userRedis</span>[<span style="color: rgba(128, 0, 128, 1)">$send</span><span style="color: rgba(0, 0, 0, 1)">];
}
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">/清空个人奖池此次抽奖的礼物</span>
<span style="color: rgba(0, 0, 255, 1)">unset</span>(<span style="color: rgba(128, 0, 128, 1)">$userRedis</span>[<span style="color: rgba(128, 0, 128, 1)">$send</span><span style="color: rgba(0, 0, 0, 1)">]);
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">//新增用户抽奖次数 </span>
<span style="color: rgba(128, 0, 128, 1)">$result</span> = <span style="color: rgba(0, 128, 128, 1)">array_count_values</span>(<span style="color: rgba(128, 0, 128, 1)">$result</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(128, 0, 128, 1)">$user_desire_list</span> = Db::connect('db_qmconfig')->name('user_desire_log')->order('id desc')->where(['uid'=><span style="color: rgba(128, 0, 128, 1)">$userData</span>['id']])-><span style="color: rgba(0, 0, 0, 1)">find();
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$user_desire_list</span><span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$user_desire_list</span>['state']==0<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(128, 0, 128, 1)">$user_desire_logData</span>[ 'kind'] = <span style="color: rgba(128, 0, 128, 1)">$user_desire_list</span>['kind']+1<span style="color: rgba(0, 0, 0, 1)">;
}</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(128, 0, 128, 1)">$user_desire_logData</span>[ 'kind'] = 1<span style="color: rgba(0, 0, 0, 1)">;
}
}</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(128, 0, 128, 1)">$user_desire_logData</span>[ 'kind'] = 1<span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(128, 0, 128, 1)">$user_desire_logData</span>['uid'] =<span style="color: rgba(128, 0, 128, 1)">$userData</span>['id'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$user_desire_logData</span>['ctime'] =<span style="color: rgba(0, 128, 128, 1)">time</span><span style="color: rgba(0, 0, 0, 1)">();
</span><span style="color: rgba(128, 0, 128, 1)">$user_desire_logData</span>['num'] =<span style="color: rgba(128, 0, 128, 1)">$sendNum</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">//更改此轮抽奖后 用户奖池的状态</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$gift_height</span>==1<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(128, 0, 128, 1)">$user_desire_log_update</span> = Db::connect('db_qmconfig')->name('user_desire_log'<span style="color: rgba(0, 0, 0, 1)">)
</span>->where(['uid'=><span style="color: rgba(128, 0, 128, 1)">$userData</span>['id'],'state'=>0])->update(['state'=>1<span style="color: rgba(0, 0, 0, 1)">]);
</span><span style="color: rgba(128, 0, 128, 1)">$user_desire_logData</span>[ 'state'] = 1<span style="color: rgba(0, 0, 0, 1)">;
}</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(128, 0, 128, 1)">$user_desire_logData</span>[ 'state'] = 0<span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(128, 0, 128, 1)">$user_desire_log</span> = Db::connect('db_qmconfig')->name('user_desire_log')->insertGetId(<span style="color: rgba(128, 0, 128, 1)">$user_desire_logData</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">foreach</span> (<span style="color: rgba(128, 0, 128, 1)">$result</span> <span style="color: rgba(0, 0, 255, 1)">as</span> <span style="color: rgba(128, 0, 128, 1)">$k</span> => <span style="color: rgba(128, 0, 128, 1)">$v</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$resNum</span> == (<span style="color: rgba(128, 0, 128, 1)">$k</span> + 1<span style="color: rgba(0, 0, 0, 1)">)) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">/如果这次抽奖大于奖池总数 那么更新奖池并且抽奖剩下的次数</span>
Cache::set('newdesiredraw' . <span style="color: rgba(128, 0, 128, 1)">$userData</span>['id'], <span style="color: rgba(0, 128, 128, 1)">serialize</span><span style="color: rgba(0, 0, 0, 1)">([]));
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$this</span>->draw(<span style="color: rgba(128, 0, 128, 1)">$sendNum</span> - (<span style="color: rgba(128, 0, 128, 1)">$k</span> + 1<span style="color: rgba(0, 0, 0, 1)">));
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">//礼物新增用户背包 </span>
<span style="color: rgba(128, 0, 128, 1)">$data</span> =<span style="color: rgba(0, 0, 0, 1)"> [
</span>'uid' => <span style="color: rgba(128, 0, 128, 1)">$userData</span>['id'],
'giftid' => <span style="color: rgba(128, 0, 128, 1)">$k</span>,
'num' => <span style="color: rgba(128, 0, 128, 1)">$v</span>,
'ctime' => <span style="color: rgba(0, 128, 128, 1)">time</span>(),
'cid' => <span style="color: rgba(128, 0, 128, 1)">$user_desire_log</span><span style="color: rgba(0, 0, 0, 1)">
];
</span><span style="color: rgba(128, 0, 128, 1)">$join</span> =<span style="color: rgba(0, 0, 0, 1)"> [
[</span>'gift_info f', 'd.giftid = f.id'<span style="color: rgba(0, 0, 0, 1)">]
];
</span><span style="color: rgba(128, 0, 128, 1)">$gift_info</span> = Db::connect('db_qmconfig')->name('desire'<span style="color: rgba(0, 0, 0, 1)">)
</span>->alias('d'<span style="color: rgba(0, 0, 0, 1)">)
</span>-><span style="color: rgba(0, 128, 128, 1)">join</span>(<span style="color: rgba(128, 0, 128, 1)">$join</span><span style="color: rgba(0, 0, 0, 1)">)
</span>->where(['d.giftid' => <span style="color: rgba(128, 0, 128, 1)">$k</span><span style="color: rgba(0, 0, 0, 1)">])
</span>->field('f.name,f.egif,d.position')-><span style="color: rgba(0, 0, 0, 1)">find();
</span><span style="color: rgba(128, 0, 128, 1)">$gift_infonum</span>['num'] = <span style="color: rgba(128, 0, 128, 1)">$v</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$list</span>['gift'][] = <span style="color: rgba(0, 128, 128, 1)">array_merge</span>(<span style="color: rgba(128, 0, 128, 1)">$gift_info</span>, <span style="color: rgba(128, 0, 128, 1)">$gift_infonum</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(128, 0, 128, 1)">$desireLog</span> = Db::connect('db_qmconfig')->name('desire_log')->insert(<span style="color: rgba(128, 0, 128, 1)">$data</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(128, 0, 128, 1)">$userKnapsack</span> = Db::connect('db_qmconfig')->name('gift_knapsack')->where(['uid' => <span style="color: rgba(128, 0, 128, 1)">$userData</span>['id'], 'giftid' => <span style="color: rgba(128, 0, 128, 1)">$k</span>])->field('id,num')-><span style="color: rgba(0, 0, 0, 1)">find();
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$userKnapsack</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(128, 0, 128, 1)">$userKnapsackData</span> =<span style="color: rgba(0, 0, 0, 1)"> [
</span>'num' => <span style="color: rgba(128, 0, 128, 1)">$v</span> + <span style="color: rgba(128, 0, 128, 1)">$userKnapsack</span>['num'],
'updatetime' => <span style="color: rgba(0, 128, 128, 1)">time</span><span style="color: rgba(0, 0, 0, 1)">()
];
</span><span style="color: rgba(128, 0, 128, 1)">$userKnapsackUpdate</span> = Db::connect('db_qmconfig')->name('gift_knapsack')->where(['id' => <span style="color: rgba(128, 0, 128, 1)">$userKnapsack</span>['id']])->update(<span style="color: rgba(128, 0, 128, 1)">$userKnapsackData</span><span style="color: rgba(0, 0, 0, 1)">);
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(128, 0, 128, 1)">$userKnapsackData</span> =<span style="color: rgba(0, 0, 0, 1)"> [
</span>'num' => <span style="color: rgba(128, 0, 128, 1)">$v</span>,
'giftid' => <span style="color: rgba(128, 0, 128, 1)">$k</span>,
'uid' => <span style="color: rgba(128, 0, 128, 1)">$userData</span>['id'],
'createtime' => <span style="color: rgba(0, 128, 128, 1)">time</span><span style="color: rgba(0, 0, 0, 1)">()
];
</span><span style="color: rgba(128, 0, 128, 1)">$userKnapsackInsert</span> = Db::connect('db_qmconfig')->name('gift_knapsack')->insert(<span style="color: rgba(128, 0, 128, 1)">$userKnapsackData</span><span style="color: rgba(0, 0, 0, 1)">);
}
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">/增加用户消费记录</span>
<span style="color: rgba(128, 0, 128, 1)">$userXfData</span> =<span style="color: rgba(0, 0, 0, 1)"> [
</span>'uid' => <span style="color: rgba(128, 0, 128, 1)">$userData</span>['id'],
'xf_price' => <span style="color: rgba(128, 0, 128, 1)">$sendNum</span>,
'xf_method' => 5,
'scene' => 19,
'status' => 1,
'ctime' => <span style="color: rgba(0, 128, 128, 1)">time</span><span style="color: rgba(0, 0, 0, 1)">()
];
</span><span style="color: rgba(128, 0, 128, 1)">$userXf</span> = Db::connect('db_qmconfig')->name('xfprice')->insert(<span style="color: rgba(128, 0, 128, 1)">$userXfData</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$desireLog</span> && <span style="color: rgba(128, 0, 128, 1)">$userXf</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">/扣除用户金币</span>
<span style="color: rgba(128, 0, 128, 1)">$newDiamondsData</span> =<span style="color: rgba(0, 0, 0, 1)"> [
</span>'diamonds' => <span style="color: rgba(128, 0, 128, 1)">$desireDiamonds</span>['diamonds'] - <span style="color: rgba(128, 0, 128, 1)">$sendNum</span><span style="color: rgba(0, 0, 0, 1)">
];
</span><span style="color: rgba(128, 0, 128, 1)">$newDiamonds</span> = Db::connect('db_qmconfig')->name('user_money')->where(['uid' => <span style="color: rgba(128, 0, 128, 1)">$userData</span>['id']])->update(<span style="color: rgba(128, 0, 128, 1)">$newDiamondsData</span><span style="color: rgba(0, 0, 0, 1)">);
}
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$userRedis</span><span style="color: rgba(0, 0, 0, 1)">) {
Cache</span>::set('用户奖池名称' . <span style="color: rgba(128, 0, 128, 1)">$userData</span>['id'], <span style="color: rgba(0, 128, 128, 1)">serialize</span>(<span style="color: rgba(128, 0, 128, 1)">$userRedis</span><span style="color: rgba(0, 0, 0, 1)">));
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">//如果此轮抽奖抽到大奖 重置用户个人奖池</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$gift_height</span> == 1<span style="color: rgba(0, 0, 0, 1)">) {
Cache</span>::set('用户奖池名称' . <span style="color: rgba(128, 0, 128, 1)">$userData</span>['id'], <span style="color: rgba(0, 128, 128, 1)">serialize</span><span style="color: rgba(0, 0, 0, 1)">([]));
</span><span style="color: rgba(128, 0, 128, 1)">$userChecksum</span> = <span style="color: rgba(128, 0, 128, 1)">$res</span>['zongshu']['checksum'] - (<span style="color: rgba(128, 0, 128, 1)">$res</span>['zongshu']['user_num'] + <span style="color: rgba(128, 0, 128, 1)">$sendNum</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(128, 0, 128, 1)">$desireLogUserWhere</span> =<span style="color: rgba(0, 0, 0, 1)"> [
</span>'uid' => <span style="color: rgba(128, 0, 128, 1)">$userData</span>['id'],
'giftid' => 0,
'num' => <span style="color: rgba(128, 0, 128, 1)">$userChecksum</span>,
'ctime' => <span style="color: rgba(0, 128, 128, 1)">time</span>(),
'cid' => <span style="color: rgba(128, 0, 128, 1)">$user_desire_log</span>,<span style="color: rgba(0, 0, 0, 1)">
];
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">/添加礼物抽中记录</span>
<span style="color: rgba(128, 0, 128, 1)">$desireLogUser</span> = Db::connect('db_qmconfig')->name('desire_log')->insert(<span style="color: rgba(128, 0, 128, 1)">$desireLogUserWhere</span><span style="color: rgba(0, 0, 0, 1)">);
}
</span><span style="color: rgba(128, 0, 128, 1)">$swhere</span>[] = ['d.state', '=', 1<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$swhere</span>[] = ['d.kind', '=', 1<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$res</span>['data'] = <span style="color: rgba(128, 0, 128, 1)">$this</span>->giftInfo(<span style="color: rgba(128, 0, 128, 1)">$swhere</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">empty</span>(<span style="color: rgba(128, 0, 128, 1)">$res</span>['data'<span style="color: rgba(0, 0, 0, 1)">])) {
output(</span>'1008', '奖池更新中'<span style="color: rgba(0, 0, 0, 1)">);
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">//获取用户此轮抽奖数量 返回给前端 控制奖池动画百分比</span>
<span style="color: rgba(128, 0, 128, 1)">$res</span>['zongshu'] = Db::connect('db_qmconfig'<span style="color: rgba(0, 0, 0, 1)">)
</span>->name('desire')->where(['state' => 1, 'kind' => 1<span style="color: rgba(0, 0, 0, 1)">])
</span>->field('checksum as num'<span style="color: rgba(0, 0, 0, 1)">)
</span>-><span style="color: rgba(0, 0, 0, 1)">find();
</span><span style="color: rgba(128, 0, 128, 1)">$user</span> = Db::connect('db_qmconfig'<span style="color: rgba(0, 0, 0, 1)">)
</span>->name('desire_log')->where(['uid' => <span style="color: rgba(128, 0, 128, 1)">$userData</span>['id'<span style="color: rgba(0, 0, 0, 1)">]])
</span>->field('SUM(num) as num'<span style="color: rgba(0, 0, 0, 1)">)
</span>-><span style="color: rgba(0, 0, 0, 1)">find();
</span><span style="color: rgba(128, 0, 128, 1)">$res</span>['diamonds'] = Db::connect('db_qmconfig'<span style="color: rgba(0, 0, 0, 1)">)
</span>->name('user_money')->where(['uid' => <span style="color: rgba(128, 0, 128, 1)">$userData</span>['id'<span style="color: rgba(0, 0, 0, 1)">]])
</span>->value('diamonds'<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$user</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$user</span>['num'] > <span style="color: rgba(128, 0, 128, 1)">$res</span>['zongshu']['num'<span style="color: rgba(0, 0, 0, 1)">]) {
</span><span style="color: rgba(128, 0, 128, 1)">$res</span>['zongshu']['user_num'] = <span style="color: rgba(128, 0, 128, 1)">$user</span>['num'] % <span style="color: rgba(128, 0, 128, 1)">$res</span>['zongshu']['num'<span style="color: rgba(0, 0, 0, 1)">];
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(128, 0, 128, 1)">$res</span>['zongshu']['user_num'] = <span style="color: rgba(128, 0, 128, 1)">$user</span>['num'<span style="color: rgba(0, 0, 0, 1)">];
}
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(128, 0, 128, 1)">$res</span>['zongshu']['user_num'] = 0<span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(128, 0, 128, 1)">$list</span>['info'] = <span style="color: rgba(128, 0, 128, 1)">$res</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$list</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> return ['msg'=>$res['zongshu']['user_num']];</span>
} <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">//如果当前用户奖池抽完奖了那么重置此用户奖池</span>
<span style="color: rgba(128, 0, 128, 1)">$where</span>[] = ['d.state', '=', 1<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$where</span>[] = ['d.kind', '=', 1<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$res</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>->giftInfo(<span style="color: rgba(128, 0, 128, 1)">$where</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">empty</span>(<span style="color: rgba(128, 0, 128, 1)">$res</span><span style="color: rgba(0, 0, 0, 1)">)) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span> ['msg' => '奖池更新中'<span style="color: rgba(0, 0, 0, 1)">];
}
</span><span style="color: rgba(128, 0, 128, 1)">$c</span> =<span style="color: rgba(0, 0, 0, 1)"> [];
</span><span style="color: rgba(0, 0, 255, 1)">foreach</span> (<span style="color: rgba(128, 0, 128, 1)">$res</span> <span style="color: rgba(0, 0, 255, 1)">as</span> <span style="color: rgba(128, 0, 128, 1)">$m</span> => <span style="color: rgba(128, 0, 128, 1)">$n</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">/十抽必中奖品</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$n</span>['ten']==1<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(128, 0, 128, 1)">$n</span>['num'] = <span style="color: rgba(128, 0, 128, 1)">$n</span>['num'] - <span style="color: rgba(128, 0, 128, 1)">$n</span>['checksum']/10<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$giftarr</span> = <span style="color: rgba(0, 128, 128, 1)">array_fill</span>(0, <span style="color: rgba(128, 0, 128, 1)">$n</span>['num']+<span style="color: rgba(128, 0, 128, 1)">$n</span>['checksum']/10, <span style="color: rgba(128, 0, 128, 1)">$suiji</span>['giftid'<span style="color: rgba(0, 0, 0, 1)">]);
</span><span style="color: rgba(128, 0, 128, 1)">$c</span> = <span style="color: rgba(0, 128, 128, 1)">array_merge</span>(<span style="color: rgba(128, 0, 128, 1)">$c</span>, <span style="color: rgba(128, 0, 128, 1)">$giftarr</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$n</span>['num']<=0<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 0, 255, 1)">continue</span><span style="color: rgba(0, 0, 0, 1)">;
}
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">/百抽必中奖品</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$n</span>['hundred']==1<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(128, 0, 128, 1)">$n</span>['num'] = <span style="color: rgba(128, 0, 128, 1)">$n</span>['num'] - <span style="color: rgba(128, 0, 128, 1)">$n</span>['checksum']/100<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$giftarr</span> = <span style="color: rgba(0, 128, 128, 1)">array_fill</span>(0, <span style="color: rgba(128, 0, 128, 1)">$n</span>['num']+<span style="color: rgba(128, 0, 128, 1)">$n</span>['checksum']/100, <span style="color: rgba(128, 0, 128, 1)">$suiji</span>['giftid'<span style="color: rgba(0, 0, 0, 1)">]);
</span><span style="color: rgba(128, 0, 128, 1)">$c</span> = <span style="color: rgba(0, 128, 128, 1)">array_merge</span>(<span style="color: rgba(128, 0, 128, 1)">$c</span>, <span style="color: rgba(128, 0, 128, 1)">$giftarr</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$n</span>['num']<=0<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 0, 255, 1)">continue</span><span style="color: rgba(0, 0, 0, 1)">;
}
}
</span><span style="color: rgba(128, 0, 128, 1)">$giftarr</span> = <span style="color: rgba(0, 128, 128, 1)">array_fill</span>(0, <span style="color: rgba(128, 0, 128, 1)">$n</span>['num'], <span style="color: rgba(128, 0, 128, 1)">$n</span>['id'<span style="color: rgba(0, 0, 0, 1)">]);
</span><span style="color: rgba(128, 0, 128, 1)">$c</span> = <span style="color: rgba(0, 128, 128, 1)">array_merge</span>(<span style="color: rgba(128, 0, 128, 1)">$c</span>, <span style="color: rgba(128, 0, 128, 1)">$giftarr</span><span style="color: rgba(0, 0, 0, 1)">);
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">/随机打乱奖池</span>
<span style="color: rgba(0, 128, 128, 1)">shuffle</span>(<span style="color: rgba(128, 0, 128, 1)">$c</span><span style="color: rgba(0, 0, 0, 1)">);
Cache</span>::set('用户奖池名称' . <span style="color: rgba(128, 0, 128, 1)">$userData</span>['id'], <span style="color: rgba(0, 128, 128, 1)">serialize</span>(<span style="color: rgba(128, 0, 128, 1)">$c</span><span style="color: rgba(0, 0, 0, 1)">));
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$newNum</span>>0<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">/递归此方法 抽剩下的奖品</span>
<span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$this</span>->draw(<span style="color: rgba(128, 0, 128, 1)">$newNum</span><span style="color: rgba(0, 0, 0, 1)">);
}
}
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">/如果没有奖池 生成奖池</span>
<span style="color: rgba(128, 0, 128, 1)">$where</span>[] = ['d.state', '=', 1<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$where</span>[] = ['d.kind', '=', 1<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$res</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>->giftInfo(<span style="color: rgba(128, 0, 128, 1)">$where</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">empty</span>(<span style="color: rgba(128, 0, 128, 1)">$res</span><span style="color: rgba(0, 0, 0, 1)">)) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span> ['msg' => '奖池更新中'<span style="color: rgba(0, 0, 0, 1)">];
}
</span><span style="color: rgba(128, 0, 128, 1)">$c</span> =<span style="color: rgba(0, 0, 0, 1)"> [];
</span><span style="color: rgba(0, 0, 255, 1)">foreach</span> (<span style="color: rgba(128, 0, 128, 1)">$res</span> <span style="color: rgba(0, 0, 255, 1)">as</span> <span style="color: rgba(128, 0, 128, 1)">$m</span> => <span style="color: rgba(128, 0, 128, 1)">$n</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$n</span>['ten']==1<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(128, 0, 128, 1)">$n</span>['num'] = <span style="color: rgba(128, 0, 128, 1)">$n</span>['num'] - <span style="color: rgba(128, 0, 128, 1)">$n</span>['checksum']/10<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$giftarr</span> = <span style="color: rgba(0, 128, 128, 1)">array_fill</span>(0, <span style="color: rgba(128, 0, 128, 1)">$n</span>['num']+<span style="color: rgba(128, 0, 128, 1)">$n</span>['checksum']/10, <span style="color: rgba(128, 0, 128, 1)">$suiji</span>['giftid'<span style="color: rgba(0, 0, 0, 1)">]);
</span><span style="color: rgba(128, 0, 128, 1)">$c</span> = <span style="color: rgba(0, 128, 128, 1)">array_merge</span>(<span style="color: rgba(128, 0, 128, 1)">$c</span>, <span style="color: rgba(128, 0, 128, 1)">$giftarr</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$n</span>['num']<=0<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 0, 255, 1)">continue</span><span style="color: rgba(0, 0, 0, 1)">;
}
}
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$n</span>['hundred']==1<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(128, 0, 128, 1)">$n</span>['num'] = <span style="color: rgba(128, 0, 128, 1)">$n</span>['num'] - <span style="color: rgba(128, 0, 128, 1)">$n</span>['checksum']/100<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$giftarr</span> = <span style="color: rgba(0, 128, 128, 1)">array_fill</span>(0, <span style="color: rgba(128, 0, 128, 1)">$n</span>['num']+<span style="color: rgba(128, 0, 128, 1)">$n</span>['checksum']/100, <span style="color: rgba(128, 0, 128, 1)">$suiji</span>['giftid'<span style="color: rgba(0, 0, 0, 1)">]);
</span><span style="color: rgba(128, 0, 128, 1)">$c</span> = <span style="color: rgba(0, 128, 128, 1)">array_merge</span>(<span style="color: rgba(128, 0, 128, 1)">$c</span>, <span style="color: rgba(128, 0, 128, 1)">$giftarr</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$n</span>['num']<=0<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 0, 255, 1)">continue</span><span style="color: rgba(0, 0, 0, 1)">;
}
}
</span><span style="color: rgba(128, 0, 128, 1)">$giftarr</span> = <span style="color: rgba(0, 128, 128, 1)">array_fill</span>(0, <span style="color: rgba(128, 0, 128, 1)">$n</span>['num'], <span style="color: rgba(128, 0, 128, 1)">$n</span>['id'<span style="color: rgba(0, 0, 0, 1)">]);
</span><span style="color: rgba(128, 0, 128, 1)">$c</span> = <span style="color: rgba(0, 128, 128, 1)">array_merge</span>(<span style="color: rgba(128, 0, 128, 1)">$c</span>, <span style="color: rgba(128, 0, 128, 1)">$giftarr</span><span style="color: rgba(0, 0, 0, 1)">);
}
</span><span style="color: rgba(0, 128, 128, 1)">shuffle</span>(<span style="color: rgba(128, 0, 128, 1)">$c</span><span style="color: rgba(0, 0, 0, 1)">);
Cache</span>::set('用户奖池名称' . <span style="color: rgba(128, 0, 128, 1)">$userData</span>['id'], <span style="color: rgba(0, 128, 128, 1)">serialize</span>(<span style="color: rgba(128, 0, 128, 1)">$c</span><span style="color: rgba(0, 0, 0, 1)">));
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">/递归此方法抽奖</span>
<span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$this</span>->draw(<span style="color: rgba(128, 0, 128, 1)">$num</span><span style="color: rgba(0, 0, 0, 1)">);
}
}
</span>?></pre>
</div>
<p> </p><br><br>
来源:https://www.cnblogs.com/phpclass/p/13210165.html
頁:
[1]