又又又叒叕 發表於 2020-6-29 20:37:00

php抽奖功能

<p>在项目开发中经常会遇到花钱抽奖类型的需求。但是老板总是担心用户用小钱抽到大奖。这样会导致项目亏损。下边这段代码可以有效制止抽奖项目亏钱。</p>
<p>个人奖池:</p>
<p>语言:thinkphp redis mysql&nbsp;</p>
<p>表:desire抽奖商品表&nbsp;desire_log用户抽奖奖品表&nbsp;user_desire_log用户抽奖记录表&nbsp; &nbsp;desire_risk抽奖风控表</p>
<p>需求:用户奖池分为进行中奖池 和已完成奖池 当用户抽到大奖后 用户个人奖池重置 否则将继续抽奖 最后一次抽奖必中大奖 通过风控金额来判断用户是否可以抽大奖</p>
<p>  当所有用户已完成的抽奖 盈利大于风控金额的时候可以让用户抽大奖 否则用户抽不到大奖</p>
<div class="cnblogs_code">
<pre>&lt;?<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>-&gt;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>-&gt;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>-&gt;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>-&gt;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>-&gt;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>-&gt;<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')-&gt;name('user_money')-&gt;where(['uid' =&gt; <span style="color: rgba(128, 0, 128, 1)">$userData</span>['id']])-&gt;field('diamonds')-&gt;<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'] &lt; <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' =&gt; '金币不足'];<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')-&gt;name('desire')-&gt;order('num desc')-&gt;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')-&gt;name('desire'<span style="color: rgba(0, 0, 0, 1)">)
                </span>-&gt;alias('d'<span style="color: rgba(0, 0, 0, 1)">)
                </span>-&gt;<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>-&gt;where(['d.state' =&gt; 1<span style="color: rgba(0, 0, 0, 1)">])
                </span>-&gt;order('f.price desc'<span style="color: rgba(0, 0, 0, 1)">)
                </span>-&gt;field('f.name,f.price,f.egif,d.num,f.id,d.position')-&gt;<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'=&gt;'礼物查询错误'<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')-&gt;name('user_desire_log')-&gt;order('kind desc'<span style="color: rgba(0, 0, 0, 1)">)
                </span>-&gt;where(['uid'=&gt;<span style="color: rgba(128, 0, 128, 1)">$userData</span>['id'],'state'=&gt;0])-&gt;field('SUM(num) as kindNum')-&gt;<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>-&gt;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>-&gt;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>-&gt;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>&lt;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']&gt;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)&amp;&amp; (<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>-&gt;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) &amp;&amp; (<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>-&gt;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> &lt; <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>-&gt;name('desire_log')-&gt;where(['uid' =&gt; <span style="color: rgba(128, 0, 128, 1)">$userData</span>['id'<span style="color: rgba(0, 0, 0, 1)">]])
                </span>-&gt;field('SUM(num) as num'<span style="color: rgba(0, 0, 0, 1)">)
                </span>-&gt;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'=&gt;'已抽数量有误'<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>-&gt;name('desire')-&gt;where(['state' =&gt; 1<span style="color: rgba(0, 0, 0, 1)">])
                </span>-&gt;field('SUM(num) as num,checksum'<span style="color: rgba(0, 0, 0, 1)">)
                </span>-&gt;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'=&gt;'总数量有误'<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>) &gt; <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>) &gt; <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'=&gt;$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> &lt; <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> &gt; 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>-&gt;name('user_desire_log'<span style="color: rgba(0, 0, 0, 1)">)
                            </span>-&gt;alias('u'<span style="color: rgba(0, 0, 0, 1)">)
                            </span>-&gt;where(['u.state'=&gt;1<span style="color: rgba(0, 0, 0, 1)">])
                            </span>-&gt;field('SUM(u.num) as num')-&gt;<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')-&gt;name('user_desire_log'<span style="color: rgba(0, 0, 0, 1)">)
                              </span>-&gt;alias('u'<span style="color: rgba(0, 0, 0, 1)">)
                              </span>-&gt;where(['u.state'=&gt;1<span style="color: rgba(0, 0, 0, 1)">])
                              </span>-&gt;<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>-&gt;field('SUM(f.price*d.num) as num')-&gt;<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')-&gt;name('desire_risk')-&gt;<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> &gt;= <span style="color: rgba(128, 0, 128, 1)">$reskList</span>['price'])&amp;&amp;(<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')-&gt;name('user_desire_log')-&gt;order('id desc')-&gt;where(['uid'=&gt;<span style="color: rgba(128, 0, 128, 1)">$userData</span>['id']])-&gt;<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')-&gt;name('user_desire_log'<span style="color: rgba(0, 0, 0, 1)">)
                  </span>-&gt;where(['uid'=&gt;<span style="color: rgba(128, 0, 128, 1)">$userData</span>['id'],'state'=&gt;0])-&gt;update(['state'=&gt;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')-&gt;name('user_desire_log')-&gt;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> =&gt; <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>-&gt;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' =&gt; <span style="color: rgba(128, 0, 128, 1)">$userData</span>['id'],
                  'giftid' =&gt; <span style="color: rgba(128, 0, 128, 1)">$k</span>,
                  'num' =&gt; <span style="color: rgba(128, 0, 128, 1)">$v</span>,
                  'ctime' =&gt; <span style="color: rgba(0, 128, 128, 1)">time</span>(),
                  'cid' =&gt; <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')-&gt;name('desire'<span style="color: rgba(0, 0, 0, 1)">)
                  </span>-&gt;alias('d'<span style="color: rgba(0, 0, 0, 1)">)
                  </span>-&gt;<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>-&gt;where(['d.giftid' =&gt; <span style="color: rgba(128, 0, 128, 1)">$k</span><span style="color: rgba(0, 0, 0, 1)">])
                  </span>-&gt;field('f.name,f.egif,d.position')-&gt;<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')-&gt;name('desire_log')-&gt;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')-&gt;name('gift_knapsack')-&gt;where(['uid' =&gt; <span style="color: rgba(128, 0, 128, 1)">$userData</span>['id'], 'giftid' =&gt; <span style="color: rgba(128, 0, 128, 1)">$k</span>])-&gt;field('id,num')-&gt;<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' =&gt; <span style="color: rgba(128, 0, 128, 1)">$v</span> + <span style="color: rgba(128, 0, 128, 1)">$userKnapsack</span>['num'],
                        'updatetime' =&gt; <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')-&gt;name('gift_knapsack')-&gt;where(['id' =&gt; <span style="color: rgba(128, 0, 128, 1)">$userKnapsack</span>['id']])-&gt;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' =&gt; <span style="color: rgba(128, 0, 128, 1)">$v</span>,
                        'giftid' =&gt; <span style="color: rgba(128, 0, 128, 1)">$k</span>,
                        'uid' =&gt; <span style="color: rgba(128, 0, 128, 1)">$userData</span>['id'],
                        'createtime' =&gt; <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')-&gt;name('gift_knapsack')-&gt;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' =&gt; <span style="color: rgba(128, 0, 128, 1)">$userData</span>['id'],
                'xf_price' =&gt; <span style="color: rgba(128, 0, 128, 1)">$sendNum</span>,
                'xf_method' =&gt; 5,
                'scene' =&gt; 19,
                'status' =&gt; 1,
                'ctime' =&gt; <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')-&gt;name('xfprice')-&gt;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> &amp;&amp; <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' =&gt; <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')-&gt;name('user_money')-&gt;where(['uid' =&gt; <span style="color: rgba(128, 0, 128, 1)">$userData</span>['id']])-&gt;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' =&gt; <span style="color: rgba(128, 0, 128, 1)">$userData</span>['id'],
                        'giftid' =&gt; 0,
                        'num' =&gt; <span style="color: rgba(128, 0, 128, 1)">$userChecksum</span>,
                        'ctime' =&gt; <span style="color: rgba(0, 128, 128, 1)">time</span>(),
                        'cid' =&gt; <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')-&gt;name('desire_log')-&gt;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>-&gt;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>-&gt;name('desire')-&gt;where(['state' =&gt; 1, 'kind' =&gt; 1<span style="color: rgba(0, 0, 0, 1)">])
                  </span>-&gt;field('checksum as num'<span style="color: rgba(0, 0, 0, 1)">)
                  </span>-&gt;<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>-&gt;name('desire_log')-&gt;where(['uid' =&gt; <span style="color: rgba(128, 0, 128, 1)">$userData</span>['id'<span style="color: rgba(0, 0, 0, 1)">]])
                  </span>-&gt;field('SUM(num) as num'<span style="color: rgba(0, 0, 0, 1)">)
                  </span>-&gt;<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>-&gt;name('user_money')-&gt;where(['uid' =&gt; <span style="color: rgba(128, 0, 128, 1)">$userData</span>['id'<span style="color: rgba(0, 0, 0, 1)">]])
                  </span>-&gt;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'] &gt; <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'=&gt;$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>-&gt;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' =&gt; '奖池更新中'<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> =&gt; <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']&lt;=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']&lt;=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>&gt;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>-&gt;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>-&gt;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' =&gt; '奖池更新中'<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> =&gt; <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']&lt;=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']&lt;=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>-&gt;draw(<span style="color: rgba(128, 0, 128, 1)">$num</span><span style="color: rgba(0, 0, 0, 1)">);
      }
    }
</span>?&gt;</pre>
</div>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/phpclass/p/13210165.html
頁: [1]
查看完整版本: php抽奖功能