send_gift();//小时榜 送礼物 echo "发礼物结束 \n"; } public function send_gift() { //获取上一个小时的开始时间和结束时间 $start_time = strtotime(date('Y-m-d H:00:00', strtotime('-1 hour'))); $end_time = strtotime(date('Y-m-d H:00:00')); //当前小时的前一个小时(24小时计时法,0-23) $pre_hour = date('H', strtotime('-1 hour')); //是否全局飘瓶 $is_public_server = db::name('vs_hour_ranking_config')->order('id', 'desc')->value('is_public_server'); if ($is_public_server == 1) { //全局飘瓶时间段 $xlh_time_range = db::name('vs_hour_ranking_config')->order('id', 'desc')->value('broadcast_times'); if($xlh_time_range){ if($xlh_time_range == 25){ $is_piao = 1; }else{ //当前的前一个小时是否在 $xlh_time_range中 if (in_array($pre_hour, explode(',', $xlh_time_range))) { $is_piao = 1; } else { $is_piao = 0; } } }else{ $is_piao = 0; } }else{ $is_piao = 0; } //获取上一个时间段的配置 $gift_list = db::name('vs_hour_ranking_gift_config')->where('time_id',$pre_hour)->group('ranking')->order('id', 'desc')->select(); //获取上个数组的个数,从而获取配置了多少个名次 $count = count($gift_list); //获取前一个小时的 前$count名房间排行 $room_list = model('api/RoomHourRanking')->room_hour_ranking(1, $count, $start_time, $end_time); $room_owner = []; if ($room_list['code'] == 1) { //获取房间排行奖励最低值 $min_price = db::name('vs_hour_ranking_config')->order('id', 'desc')->value('min_price'); if ($room_list['data']['lists']) { $i = 0; foreach ($room_list['data']['lists'] as $k => $v){ if ($v['total_price'] >= $min_price) { $room_owner[$i]['user_id'] = $v['user_id']; $room_owner[$i]['room_name'] = $v['room_name']; $room_owner[$i]['room_id'] = $v['room_id']; $room_owner[$i]['total_price'] = $v['total_price']; } $i++; } } } if ($gift_list && $room_owner) { $text_list_new = []; foreach ($gift_list as $k => $v) { //礼物全部给他偷偷放在装扮表及金额 中 //有几个用户就发几个 if(count($room_owner) > $k){ if($v['gift_type'] == 1){//1金币2礼物3头像4坐骑 $res = $this->add_coin($v['coin'], $room_owner[$k]['user_id'],$k + 1,$room_owner[$k]['room_id'],$room_owner[$k]['total_price']); }elseif ($v['gift_type'] == 2){ $res = $this->add_gift($v['gift_id'], $room_owner[$k]['user_id']); }elseif ($v['gift_type'] == 3){ $res = $this->add_decorate($v['gift_id'], $room_owner[$k]['user_id']); }elseif ($v['gift_type'] == 4){ $res = $this->add_decorate($v['gift_id'], $room_owner[$k]['user_id']); } if(isset($res) && $res){ if($is_piao == 1){ $room_name = $room_owner[$k]['room_name']; //推送礼物横幅 if($k == 0){ $text = '新科状元!【'.$room_name.'】独占鳌头!'; } elseif($k == 1){ $text = '金榜榜眼!【'.$room_name.'】才气逼人!'; } elseif($k == 2){ $text = '风采探花!【'.$room_name.'】实力绽放!'; } $text_list_new[] = [ 'text' => $text ?? '恭喜【'.$room_name.'】获得礼物!', 'room_id' => $room_owner[$k]['room_id'], 'room_name' => $room_name, 'rank_number' => $k + 1, ]; } } } } if(!empty($text_list_new)){ $push = new Push(); $push->hourRanking($text_list_new); } } echo "送礼-共" . count($room_owner) . "个房间房主获益\n"; } //添加金币到钱包 public function add_coin($coin,$user_id,$ranking,$room_id,$total_price){ $data = [ 'user_id' => $user_id, 'change_value' => $coin, // 'room_id' => $room_ids, 'money_type' => 1, 'change_type' => 27, 'from_id' => 0, 'remarks' => '小时榜获得', 'createtime' => time() ]; //开启事务 Db::startTrans(); $res = Db::name('vs_user_money_log')->insert($data); if(!$res){ Db::rollback(); } //增加用户金币 $res1 = Db::name('user_wallet')->where(['user_id'=>$user_id])->setInc('coin',$coin); if(!$res1){ Db::rollback(); } //添加到排行表 $start_time = strtotime(date('Y-m-d H:00:00', strtotime('-1 hour'))); $end_time = strtotime(date('Y-m-d H:00:00')) - 1; $res2 = db::name('vs_hour_ranking')->insert([ 'ranking' => $ranking, 'room_id' => $room_id, 'flowing_water' => $total_price, 'coin' => $coin, 'time_id' => date('H', strtotime('-1 hour')), 'stime' => $start_time, 'etime' => $end_time, 'createtime' => time(), 'updatetime' => time(), ]); if(!$res2){ Db::rollback(); } Db::commit(); return true; } //添加礼物到背包 public function add_gift($gift_id,$user_id,$ranking,$room_id,$total_price){ $res = model('api/UserGiftPack')->change_user_gift_pack($user_id,$gift_id,1,model('UserGiftPack')::HOUR_RANK_GET,"小时榜获得"); if($res['code'] == 0){ Log::record("小时榜获取礼物失败:".$res['msg'],"info"); } //添加到排行表 $start_time = strtotime(date('Y-m-d H:00:00', strtotime('-1 hour'))); $end_time = strtotime(date('Y-m-d H:00:00')) - 1; $res2 = db::name('vs_hour_ranking')->insert([ 'ranking' => $ranking, 'room_id' => $room_id, 'flowing_water' => $total_price, 'gift_id' => $gift_id, 'gift_type' => 2, 'time_id' => date('H', strtotime('-1 hour')), 'stime' => $start_time, 'etime' => $end_time, 'createtime' => time(), 'updatetime' => time(), ]); if(!$res2){ Log::record("小时榜礼物锁定失败","info"); } return true; } //添加装扮到背包 public function add_decorate($avatar_id,$user_id,$ranking,$room_id,$total_price){ $decorate_price_info = db::name('vs_decorate_price')->where(['id'=>$avatar_id])->find(); if(empty($decorate_price_info)){ Log::record("小时榜获取装扮失败:没有找到装扮!".$avatar_id,"info"); } $res = model('api/Decorate')->pay_decorate($user_id,$decorate_price_info['did'],$decorate_price_info['day'],2); if($res['code'] == 0){ Log::record("小时榜获取装扮失败:".$res['msg']."-".$avatar_id,"info"); } //添加到排行表 $start_time = strtotime(date('Y-m-d H:00:00', strtotime('-1 hour'))); $end_time = strtotime(date('Y-m-d H:00:00')) - 1; $res2 = db::name('vs_hour_ranking')->insert([ 'ranking' => $ranking, 'room_id' => $room_id, 'flowing_water' => $total_price, 'gift_id' => $avatar_id, // 'gift_type' => 2, 'time_id' => date('H', strtotime('-1 hour')), 'stime' => $start_time, 'etime' => $end_time, 'createtime' => time(), 'updatetime' => time(), ]); if(!$res2){ Log::record("小时榜咋装扮锁定失败","info"); } return true; } }