['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;
}
}