1,'type'=>$type])->value("id"); $egggiftModel = new \app\common\model\EggGift(); $where = []; $where["Jackpot_id"] = $jackId; $egggiftList = $egggiftModel->where($where)->group("gift_id")->order("price","desc")->select(); return $this->success("获取成功!",$egggiftList); } /** * 查找下一个奖池 */ private function getNextJackpot($jackpot_id) { $type = \app\common\model\EggJackpot::where(['id'=>$jackpot_id])->value('type'); $jackpotIds = \app\common\model\EggJackpot::order('weigh asc,id asc')->where('type',$type)->column("id"); $next = 0; foreach($jackpotIds as $k => $v) { if($v == $jackpot_id) { $next = isset($jackpotIds[$k+1])?$jackpotIds[$k+1]:$jackpotIds[0]; } } return $next; } /** * 砸金蛋 */ public function strike() { // $this->error("系统正在维护中。。。"); $num = $this->request->request("num"); $type = $this->request->request("type",1); $party_id = $this->request->request("party_id", 0);// 派对ID if($num <=0) { $this->error("参数错误"); } $giftdata = []; $user_id = $this->auth->id; // 防止超卖 $redis = new Redis(); $redisconfig = config("redis"); $redis->connect($redisconfig["host"], $redisconfig["port"]); if ($redisconfig['redis_pwd']) { $redis->auth($redisconfig['redis_pwd']); } if($redisconfig['redis_selectdb'] > 0){ $redis->select($redisconfig['redis_selectdb']); } $do_no = createUniqueNo('E',$user_id); Db::startTrans(); try{ // 查找正在开放的奖池 $jackpot = \app\common\model\EggJackpot::where(["status"=>1,'type'=>$type])->find(); if($jackpot) { // 有开放的奖池 // \app\common\model\EggJackpot::order("id","asc")->find(); $jackpot_id = $jackpot["id"]; } else { // 没有开放的奖池 $jackpotInfo = \app\common\model\EggJackpot::where('type',$type)->order('weigh asc,id asc')->find(); $jackpot_id = $jackpotInfo["id"]; \app\common\model\EggJackpot::update(["status"=>1],["id"=>$jackpot_id]);//打开 } // 查找奖池对应的奖池礼物 $jackpotGift = \app\common\model\EggGift::where(["Jackpot_id"=>$jackpot_id,"is_use"=>0])->select(); $giftCount = count($jackpotGift); $next_jackpot_id = $this->getNextJackpot($jackpot_id); if($giftCount <= $num) { // 先获取$giftCount个礼物 $giftArr1 = $jackpotGift; // 更新礼物抽取状态 $giftids = array_column($giftArr1,"id"); $res1 = \app\common\model\EggGift::update(["is_use"=>1],["id"=>["in",$giftids]]); // $res1Info = \app\common\model\EggGift::where(["id"=>["in",$giftids]])->select(); // 更新奖池 $res2 = \app\common\model\EggJackpot::update(["status"=>0],["id"=>$jackpot_id]); $res3 = \app\common\model\EggJackpot::update(["status"=>1],["id"=>$next_jackpot_id]); // 下个奖池所有礼物改为未使用 // $res4 = \app\common\model\EggGift::update(["is_use"=>0],["Jackpot_id"=>$next_jackpot_id]); $res4 = true; // 获取下个奖池礼物 $nextjackpotGift = \app\common\model\EggGift::where(["Jackpot_id"=>$next_jackpot_id])->select(); $newnum = $num-$giftCount; if($newnum == 0) { /* $giftArr = []; foreach($nextjackpotGift as $k => $v) $giftArr[$v["id"]] = $v; if(!$giftArr) $this->error("奖池礼物待更新,请耐心等待!"); $giftids = array_rand($giftArr,50); // 更新礼物抽取状态 \app\common\model\EggGift::where(["id"=>["in",$giftids]])->select(); $res5 = \app\common\model\EggGift::update(["updatetime"=>time()],["id"=>["in",$giftids]]); */ $res5 = true; $giftdata = $giftArr1; } else { if($newnum > count($nextjackpotGift)){ $this->error("奖池礼物待更新,请耐心等待!"); } $giftArr = []; foreach($nextjackpotGift as $k => $v) $giftArr[$v["id"]] = $v; if(!$giftArr) $this->error("奖池礼物待更新,请耐心等待!"); $giftids = array_rand($giftArr,$newnum); // 更新礼物抽取状态 $res5Info = \app\common\model\EggGift::where(["id"=>["in",$giftids]])->select(); $res5 = \app\common\model\EggGift::update(["is_use"=>1],["id"=>["in",$giftids]]); $giftdata = array_merge($giftArr1,$res5Info); } } else { // 随机抽取$num个礼物 $giftArr = []; foreach($jackpotGift as $k => $v) $giftArr[$v["id"]] = $v; $giftids = array_rand($giftArr,$num); // 更新礼物抽取状态 $res1 = \app\common\model\EggGift::update(["is_use"=>1],["id"=>["in",$giftids]]); $res1Info = \app\common\model\EggGift::where(["id"=>["in",$giftids]])->select(); /* // ------------------ 附加逻辑开始 ---------------------// // 更新奖池 $res2 = \app\common\model\EggJackpot::update(["updatetime"=>time()],["tes"=>1]); $res3 = \app\common\model\EggJackpot::update(["updatetime"=>time()],["id"=>$next_jackpot_id]); // 下个奖池所有礼物改为未使用 $res4 = \app\common\model\EggGift::update(["updatetime"=>time()],["Jackpot_id"=>$next_jackpot_id]); // 获取下个奖池礼物 $nextjackpotGift = \app\common\model\EggGift::where(["Jackpot_id"=>$next_jackpot_id])->select(); $giftArr = []; foreach($nextjackpotGift as $k => $v) $giftArr[$v["id"]] = $v; if(!$giftArr) $this->error("奖池礼物待更新,请耐心等待!"); $giftids = array_rand($giftArr,50); // 更新礼物抽取状态 \app\common\model\EggGift::where(["id"=>["in",$giftids]])->select(); $res5 = \app\common\model\EggGift::update(["updatetime"=>time()],["id"=>["in",$giftids]]); // ------------------ 附加逻辑结束 ---------------------// */ $res2 = true; $res3 = true; $res4 = true; $res5 = true; $giftdata = $res1Info; } if(!$giftdata) $this->error("系统错误!"); $data = []; foreach($giftdata as $k => $v) { // 保存砸蛋记录 $data[] = [ "do_no" => $do_no, "user_id" => $user_id, "gift_id" => $v["gift_id"], "egg_gift_id" => $v["id"], "image" => $v["image"], "special" => $v["special"], "gift_name" => $v["gift_name"], "Jackpot_id" => $v["Jackpot_id"], "prize_no" => $v["prize_no"], "price" => $v["price"], "createtime" => time(), ]; // 添加用户背包 $backdata[] = [ "user_id" => $user_id, 'gift_id' => $v["gift_id"], "name" => $v["gift_name"], "image" => $v["image"], "gif_image" => $v["special"], "value" => $v["price"], "number" => 1, "is_use" => 0, "get_way" => 1, "createtime" => time(), ]; } $data && $res5 = \app\common\model\EggDo::insertAll($data); // 扣除用户小锤子 $res6 = true; // 添加到用户背包 $backdata && $res7 = \app\common\model\GiftBack::insertAll($backdata); if($res1 !== false && $res2 && $res3 && $res4 && $res5 && $res6 && $res7) { Db::commit(); $eggStrikeNotice = config("site.eggStrikeNotice"); if($party_id){ $partyInfo = \app\common\model\Party::field("id,room_type,party_name")->where(["id"=>$party_id])->find(); foreach ($backdata as $backdatum) { $realMoney = $backdatum['value'] / 100; if ($realMoney >= $eggStrikeNotice){ $giftUserParty = ['number'=>$backdatum['number'],'gift_name'=>$backdatum['name'],'gift_gif_image'=>$backdatum['image']]; QueueApi::sendGroupMessage(73, '', $this->auth->nickname, $partyInfo, $giftUserParty); } } } } else { // 返还锤子 for($i=1;$i<=$num;$i++) { $val = date("YmdHis").$i; $redis->lpush("hammer_num_".$user_id,$val); } } }catch (ValidateException $e) { Db::rollback(); $this->error($e->getMessage()); } catch (PDOException $e) { Db::rollback(); $this->error($e->getMessage()); } catch (Exception $e) { Db::rollback(); $this->error($e->getMessage()); } // 返回抽到的礼物列表 $list = \app\common\model\EggDo::where(["do_no"=>$do_no])->select(); $this->success("获取成功!",$list); } /** * 获取排行榜 */ public function getRankList() { $time = $this->request->request("time"); // 1=今天,2=昨天 if(!in_array($time,[1,2])) { $this->error("参数缺失!"); } // 先根据用户抽奖总值排序 筛选 $today = strtotime(date("Y-m-d 00:00:00")); $yestoday = $today - 86400; $where = []; $time == 1 && $where["a.createtime"] = ["gt",$today]; $time == 2 && $where["a.createtime"] = ["between","$yestoday,$today"]; $ranklist = \app\common\model\EggDo::alias("a")->field("a.user_id,sum(a.price) as money,u.avatar,u.nickname") ->join("hx_user u","u.id = a.user_id","inner") ->where($where) ->group("a.user_id") ->order("money","desc") ->limit(20) ->select(); if(!$ranklist) $this->success("获取成功!",[]); foreach($ranklist as $k => $v) { // 查询 $where["user_id"] = $v["user_id"]; $ranklist[$k]["gifts"] = \app\common\model\EggDo::alias("a") ->field("image,count(id) as number,sum(a.price) as money") ->limit(3) ->where($where) ->group("gift_id") ->order("money","desc") ->select(); } $this->success("获取成功!",$ranklist); } /** * 获取砸蛋基本信息 */ public function getBaseInfo() { $user_id = $this->auth->id; // 构建数据 $data = []; $data["jewel"] = $this->auth->jewel; $data["playdetail"] = config("site.playdetail"); $this->success("获取成功!",$data); } }