['lt',$today_start], ]; Db::name('gift_baobi_log')->where($map)->delete(); } //每天24点,房间流水重置:麦位红心,两个排行榜 public function auto_party_clear(){ $update = ['party_hot'=>0]; Db::name('party')->where('id','neq',0)->update($update); //redis $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']); } //所有正常的房间 $partyInfo_arr = Db::name('party')->where('status',1)->column('id,user_id,easemob_room_id'); //dump($partyInfo_arr);exit; foreach($partyInfo_arr as $party_id => $partyInfo){ //用户魅力榜,清空 $redis->zRemRangeByRank("hourCharm_".$party_id, 0,-1); //用户贡献榜,清空 $redis->zRemRangeByRank("hourWealth_".$party_id, 0,-1); //贡献榜前三,设置为空 $redis->hSet("user_jewel_top3",$party_id,json_encode([])); } foreach($partyInfo_arr as $party_id => $partyInfo){ //更新麦位魅力值 $this->clearSeatCharm($partyInfo['easemob_room_id'],$partyInfo,$redis); } } //送礼物(api/party/giveGiftToYou)拆分出来的异步用户升级方法, public function auto_while_sleep(){ $i = 6; while($i > 0){ $i--; echo '第'.$i.'次'; $starttime = time(); echo date('Y-m-d H:i:s',$starttime);echo '
'; $this->auto_user_level_up_new(); $endtime = time(); echo date('Y-m-d H:i:s',$endtime);echo '
'; $sleeptime = 8 - ($endtime - $starttime); if($sleeptime < 0){ $sleeptime = 1; } ob_flush(); flush(); sleep($sleeptime); } } //最新方法 public function auto_user_level_up_new(){ $tasklist = Db::name('gift_user_party')->where('task_status',0)->order('id asc')->field('party_id')->select(); if(empty($tasklist)){ echo 'empty'; return true; } //redis $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']); } //去重的party_id $party_ids = array_column($tasklist,'party_id'); $party_ids = array_flip($party_ids); $party_ids = array_flip($party_ids); //dump($party_ids); //更新任务状态 $rs_up = Db::name('gift_user_party')->where('task_status',0)->where('party_id','IN',$party_ids)->update(['task_status'=>1]); $partyInfo_arr = Db::name('party')->where('id','IN',$party_ids)->column('id,user_id,easemob_room_id'); //dump($partyInfo_arr);exit; foreach($partyInfo_arr as $party_id => $partyInfo){ //更新麦位魅力值 $this->updateSeatCharm($partyInfo['easemob_room_id'],$partyInfo,$redis); } } public function auto_user_level_up(){ Db::startTrans(); $tasklist = Db::name('gift_user_party')->where('task_status',0)->order('id asc')->field('party_id')->select(); if(empty($tasklist)){ Db::rollback(); echo 'empty'; exit; } try { //redis $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']); } //开始 $party_ids = array_column($tasklist,'party_id'); $party_ids = array_flip($party_ids); $party_ids = array_flip($party_ids); //dump($party_ids); $partyInfo_arr = Db::name('party')->where('id','IN',$party_ids)->column('id,user_id,easemob_room_id'); //dump($partyInfo_arr);exit; foreach($partyInfo_arr as $party_id => $partyInfo){ //更新麦位魅力值 $this->updateSeatCharm($partyInfo['easemob_room_id'],$partyInfo,$redis); } //结束 $rs_up = Db::name('gift_user_party')->where('party_id','IN',$party_ids)->update(['task_status'=>1]); Db::commit(); } 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()); } } /////////////////////////////////////////下面都是工具方法//////////////////////////////////////////////// /** * 用户赠送礼物后房间内麦位魅力值增加,更新到麦位自定义信息 * $seatnum 座位数字 1,不是键名 seat1 */ private function updateSeatCharm($easemob_room_id,$party_info,$redis) { //获取已有信息 try { $easemob = new Easemob(); $seatlist = $easemob->room_getRoomCustomAttribute($easemob_room_id,['seat0','seat1','seat2','seat3','seat4','seat5','seat6','seat7']); if(empty($seatlist)){ return true; } $matedata = []; // 获取用户魅力值 $users = $redis->zRevRange("hourCharm_".$party_info['id'],0,-1,true); //轮询麦位 foreach($seatlist as $seatnum => $seatdata){ $seatdata = json_decode($seatdata,true); if($users) { foreach($users as $user_id => $charm){ if(isset($seatdata['userNo']) && $seatdata['userNo'] == $user_id){ $seatdata['charm'] = changeW($charm); } } } $seatdata = json_encode($seatdata); $matedata[$seatnum] = $seatdata; } //重新设置麦位小红心 //获取房间用户周前三名 getPartyUserTop里面摘出来的一部分 //[环信]更新财富榜前3。 $avatarArr = $redis->hGet("user_jewel_top3",$party_info['id']); $matedata['wealth_top3_userlist'] = $avatarArr; $easemob->room_setRoomCustomAttributeForced($easemob_room_id,$party_info['user_id'],$matedata); return true; } catch (ValidateException $e) { return $e->getMessage(); } catch (PDOException $e) { return $e->getMessage(); } catch (Exception $e) { return $e->getMessage(); } return true; } /** * 更新到麦位小红心为0,房间内榜前三清空 */ private function clearSeatCharm($easemob_room_id,$party_info,$redis) { //获取已有信息 $easemob = new Easemob(); $seatlist = $easemob->room_getRoomCustomAttribute($easemob_room_id,['seat0','seat1','seat2','seat3','seat4','seat5','seat6','seat7']); if(empty($seatlist)){ return true; } $matedata = []; //轮询麦位 foreach($seatlist as $seatnum => $seatdata){ $seatdata = json_decode($seatdata,true); $seatdata['charm'] = 0;//改为0 $seatdata = json_encode($seatdata); $matedata[$seatnum] = $seatdata; } //重新设置麦位小红心 //获取房间用户周前三名 getPartyUserTop里面摘出来的一部分 //[环信]更新财富榜前3。 $avatarArr = $redis->hGet("user_jewel_top3",$party_info['id']); $matedata['wealth_top3_userlist'] = $avatarArr; $easemob->room_setRoomCustomAttributeForced($easemob_room_id,$party_info['user_id'],$matedata); return true; } }