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("参数错误"); } $total_jewel = $this->times_jewel($num); if($total_jewel == false){ $this->error('错误的次数'); } $giftdata = []; $user_id = $this->auth->id; $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(); if(!empty($jackpotInfo)){ Db::rollback(); $this->error('暂时还没有奖池'); } $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"=>-1],["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]); // 获取下个奖池礼物 $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)){ Db::rollback(); $this->error("奖池礼物待更新,请耐心等待!"); } $giftArr = []; foreach($nextjackpotGift as $k => $v) $giftArr[$v["id"]] = $v; if(!$giftArr){ Db::rollback(); $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) { Db::rollback(); $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); //扣钻石 $rs_wallet = model('wallet')->lockChangeAccountRemain($user_id,$total_jewel,'-',0,'开箱子和大转盘',13,'jewel'); if($rs_wallet['status'] === false){ $this->error($rs_wallet['msg']); Db::rollback(); } if($res1 !== false && $res2 !== false && $res3 !== false && $res4 !== false && $res5 !== false && $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 { Db::rollback(); $this->error('开奖失败'); } }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(){ $today = strtotime(date("Y-m-d")); $where = []; $where["a.createtime"] = ["gt",$today]; $ranklist = \app\common\model\EggDo::alias("a")->field("a.user_id,a.image,a.price as money,a.createtime,u.nickname") ->join("hx_user u","u.id = a.user_id","inner") ->where($where) // ->group("a.user_id") ->order("money","desc") ->limit(20) ->select(); $this->success("获取成功!",$ranklist); } /** * 获取排行榜 */ public function getRankList_old() { $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); } private function times_jewel($times = 0){ $pay_config = [ 1 => 20, 10 => 200, 100 => 2000, ]; $jewel = isset($pay_config[$times]) ? $pay_config[$times] : false; return $jewel; } /** * 获取砸蛋基本信息 */ public function getBaseInfo() { $user_id = $this->auth->id; // 构建数据 $data = []; $data["jewel"] = $this->auth->jewel; $data["playdetail"] = config("site.playdetail"); $data["egggift_content"] = config("site.egggift_content"); $data['pay_config'] = [ [ 'times'=>1, 'price'=>20, ], [ 'times'=>10, 'price'=>200, ], [ 'times'=>100, 'price'=>2000, ], ]; $this->success("获取成功!",$data); } }