diff --git a/application/api/controller/Xxiaoshi.php b/application/api/controller/Xxiaoshi.php index 54dc1213..88ee29a0 100644 --- a/application/api/controller/Xxiaoshi.php +++ b/application/api/controller/Xxiaoshi.php @@ -8,427 +8,23 @@ use think\Log; use app\common\controller\Push; -class Xxiaoshi extends Controller +class Xxiaoshi extends Controllers { - - public function send_gift() + public function test() { - //获取上一个小时的开始时间和结束时间 - $start_time = strtotime(date('Y-m-d H:00:00', strtotime('-1 hour'))); - $end_time = strtotime(date('Y-m-d H:00:00')); - echo "开始时间:" .$start_time."\n"; - echo "结束时间:" .$end_time."\n"; - //当前小时的前一个小时(24小时计时法,0-23) - $pre_hour = date('H', strtotime('-1 hour')); - echo "上个时间段:" .$pre_hour."\n"; - $is_open_time = db::name('vs_hour_ranking_config')->where('id', 1)->value('open_time'); - if ($is_open_time == 0) { - echo "未开启时间段:" .$is_open_time."\n"; - return; - } - //是否全局飘瓶 - $is_public_server = db::name('vs_hour_ranking_config')->where('id', 1)->value('is_public_server'); - if ($is_public_server == 1) { - //全局飘瓶时间段 - $xlh_time_range = db::name('vs_hour_ranking_config')->where('id', 1)->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(); - $gift_list = $this->get_hour_ranking($pre_hour); -// echo "上个时间段的配置:" .json_encode($gift_list)."\n"; - // 提取所有有奖励的内容 - $allRewards = $this->extractAllRewards($gift_list); - // 按index分组 - $groupedRewards = $this->groupRewardsByIndex($allRewards); - // 按名次顺序分配奖励 - $distributionResult = $this->distributeByRank($groupedRewards); - - //获取上个数组的个数,从而获取配置了多少个名次 - $count = count($distributionResult); - echo "上个时间段的配置总数:" .$count."\n"; - //获取前一个小时的 前$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')->where('id', 1)->value('min_price'); - if ($room_list['data']['lists']) { - echo "房间列表:" .json_encode($room_list['data']['lists'])."\n"; - foreach ($room_list['data']['lists'] as $v){ - if ($v['total_price'] >= $min_price) { - $room_owner[] = [ - 'user_id' => $v['user_id'], - 'room_name' => $v['room_name'], - 'room_id' => $v['room_id'], - 'total_price' => $v['total_price'] - ]; + $res = db::name('user_zone')->where(['is_delete'=> 2,'delete_time'=> ['<>', 0]])->select(); + if($res){ + foreach ($res as $v){ + //删除动态下的标签引用 + $top_zone = db::name('user_zone_topic')->where('zone_id',$v['id'])->select(); + if($top_zone){ + foreach ($top_zone as $vs){ + db::name('user_zone_topic')->where('id',$vs['id'])->delete(); } } } } - - if ($distributionResult && $room_owner) { - $text_list_new = []; - echo "礼物数:" .json_encode($distributionResult)."\n"; - echo "房主:" .json_encode($room_owner)."\n"; - foreach ($distributionResult as $k => $value) { - //礼物全部给他偷偷放在装扮表及金额 中 - //有几个用户就发几个 - if(count($room_owner) > $k){ - // 为每个房间添加一个标志,表示是否已处理推送信息 - $hasProcessedPush = false; - - foreach ($value['rewards'] as $v){ - // if($v['type'] == 0){//1金币2礼物3头像4坐骑 - // echo "发金币:" .$v['value'].'==>'.$room_owner[$k]['user_id']."\n"; - // $res = $this->add_coin($v['value'], $room_owner[$k]['user_id'],$k + 1,$room_owner[$k]['room_id'],$room_owner[$k]['total_price'],$is_piao); - // }elseif ($v['type'] == 1){ - // echo "发礼物:" .$v['value'].'==>'.$room_owner[$k]['user_id']."\n"; - // $res = $this->add_gift($v['value'], $room_owner[$k]['user_id'],$k + 1,$room_owner[$k]['room_id'],$room_owner[$k]['total_price'],$is_piao); - // }elseif ($v['type'] == 2){ - // $res = $this->add_decorate($v['value'], $room_owner[$k]['user_id'],$k + 1,$room_owner[$k]['room_id'],$room_owner[$k]['total_price'],$is_piao,3); - // }elseif ($v['type'] == 3){ - // $res = $this->add_decorate($v['value'], $room_owner[$k]['user_id'],$k + 1,$room_owner[$k]['room_id'],$room_owner[$k]['total_price'],$is_piao,4); - // } - // 只有在第一次处理奖励时添加推送信息,避免重复推送 - if(!$hasProcessedPush && $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, - ]; - - $hasProcessedPush = true; // 标记已处理推送 - } - } - - } - } - if(!empty($text_list_new)){ - $push = new Push(); - $push->hourRankingcs($text_list_new); - Log::record("小时榜推送:".json_encode($text_list_new),"infos"); - } - } - echo "送礼-共" . count($room_owner) . "个房间房主获益\n"; } - //添加金币到钱包 -// public function add_coin($coin,$user_id,$ranking,$room_id,$total_price,$is_piao){ -// if($coin > 0){ -// $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(), -// 'is_public_server' => $is_piao -// ]); -// if(!$res2){ -// Db::rollback(); -// } -// Db::commit(); -// } - -// return true; -// } - -// //添加礼物到背包 -// public function add_gift($gift_id,$user_id,$ranking,$room_id,$total_price,$is_piao){ -// $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(), -// 'is_public_server' => $is_piao -// ]); -// if(!$res2){ -// Log::record("小时榜礼物锁定失败","info"); -// } -// return true; -// } - -// //添加装扮到背包 -// public function add_decorate($avatar_id,$user_id,$ranking,$room_id,$total_price,$is_piao,$type){ -// $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' => $type, -// 'time_id' => date('H', strtotime('-1 hour')), -// 'stime' => $start_time, -// 'etime' => $end_time, -// 'createtime' => time(), -// 'updatetime' => time(), -// 'is_public_server' => $is_piao, -// ]); -// if(!$res2){ -// Log::record("小时榜咋装扮锁定失败","info"); -// } -// return true; -// } - - - /** - * 提取所有有奖励的内容 - */ - private function extractAllRewards($responseData) - { - $allRewards = []; - - foreach ($responseData as $timeSlot) { - foreach ($timeSlot['reward'] as $rewardItem) { - $index = $rewardItem['index']; - $content = $rewardItem['content']; - - // 只处理有奖励内容的数据 - if (!empty($content)) { - foreach ($content as $rewardContent) { - $allRewards[] = [ - 'index' => $index, - 'type' => $rewardContent['type'], - 'value' => $rewardContent['value'], - 'name' => $rewardContent['name'] ?? '' - ]; - } - } - } - } - - return $allRewards; - } - - /** - * 按index分组奖励 - */ - private function groupRewardsByIndex($allRewards) - { - $grouped = []; - - foreach ($allRewards as $reward) { - $index = $reward['index']; - if (!isset($grouped[$index])) { - $grouped[$index] = []; - } - $grouped[$index][] = $reward; - } - - // 按index排序 - ksort($grouped); - - return $grouped; - } - - /** - * 按名次顺序分配奖励 - */ - private function distributeByRank($groupedRewards) - { - $distribution = []; - $currentRank = 0; // 从第1名开始 - - // 按index顺序分配(index 0 = 第1名,index 1 = 第2名,以此类推) - foreach ($groupedRewards as $index => $rewards) { - // 确保名次连续,如果有空缺则填充空名次 - while ($currentRank < $index) { - $distribution[] = [ - 'rank' => $currentRank + 1, - 'rewards' => [] - ]; - $currentRank++; - } - - // 分配当前名次的奖励 - $distribution[] = [ - 'rank' => $currentRank + 1, - 'rewards' => $rewards - ]; - $currentRank++; - } - - return $distribution; - } - - public function get_hour_ranking($time){ - // 先按时间段和排名索引分组查询 - $timeRanges = db::name('vs_hour_ranking_gift_config')->distinct(true) - ->where('time_id', '=', $time) - ->order('time_id') - ->column('time_id'); - - $result = []; - foreach ($timeRanges as $timeRange) { - // 查询该时间段的所有数据 - $rewards = db::name('vs_hour_ranking_gift_config')->where('time_id', $timeRange) - ->field('ranking, gift_type, gift_id,coin,name') - ->order('ranking') - ->select(); - - $rewardMap = []; - foreach ($rewards as $reward) { - $rankIndex = $reward['ranking']; - - if (!isset($rewardMap[$rankIndex])) { - $rewardMap[$rankIndex] = [ - 'index' => $rankIndex, -// 'name' => $reward['rank_name'], - 'content' => [] - ]; - } - - // 添加奖励内容到content数组 - if ($reward['gift_id'] != 0 || $reward['coin'] != 0) { - if($reward['gift_id'] != 0){ - $rewardMap[$rankIndex]['content'][] = [ - 'type' => $reward['gift_type'], - 'value' => $reward['gift_id'], -// 'coin' => $reward['coin'], - 'name' => $reward['name'], - ]; - } - if($reward['coin'] != 0){ - $rewardMap[$rankIndex]['content'][] = [ - 'type' => $reward['gift_type'], - 'value' => $reward['coin'], - 'name' => $reward['name'], - ]; - } - - } - } - - // 按index排序 - ksort($rewardMap); - - $result[] = [ - 'time' => $timeRange, - 'reward' => array_values($rewardMap) - ]; - } - return $result; - } - - - public function give_gifts(){ - $data = db::name('vs_give_gift')->where('from_id',5483)->select(); - $num = 0; - $i=0; - $j = 0; - foreach($data as $v){ - $j += $v['total_price']; - $nuu = db::name('vs_give_gift_ratio_log')->where('give_gift_id',$v['id'])->value('room_owner_earning'); - $id = db::name('vs_give_gift_ratio_log')->where('give_gift_id',$v['id'])->value('id'); - // echo $id."--".$nuu."\n"; - $num += $nuu; - $i++; - } - echo $num; - echo "==".$i."==".$j; - - // echo db::name()->where(['user_id' => 10857,'money_type' =>2,'change_type' =>18])-sum('change_value'); - } - - - public function room_liushui(){ - // $room = db::name('vs_give_gift')->where(['from_id' => ['<>',5418],'from' => 2])->group('from_id'); - $dd = db::name('vs_user_gift_pack')->alias('a')->join('vs_gift b','a.gid = b.gid')->field('a.gid,a.num,b.gift_price')->where(['a.num' =>['>',0]])->select(); - $count = 0; - foreach ($dd as $v){ - $count += $v['gift_price'] * $v['num']; - } - echo $count; - } - - - - - - } \ No newline at end of file diff --git a/application/api/model/Login.php b/application/api/model/Login.php index 026db3c6..42d38036 100644 --- a/application/api/model/Login.php +++ b/application/api/model/Login.php @@ -504,7 +504,8 @@ class Login extends Model 'delete_time' => time(), 'login_device' => $login_device, 'system' =>$system, - 'avatar' => get_system_config_value('delete_avatar') + 'avatar' => get_system_config_value('delete_avatar'), + 'nickname' => '注销用户' ]); if($isstatus){ //查询用户所在房间 diff --git a/application/api/model/UserZone.php b/application/api/model/UserZone.php index f12d49e9..faeef3e9 100644 --- a/application/api/model/UserZone.php +++ b/application/api/model/UserZone.php @@ -92,7 +92,7 @@ class UserZone extends Model } $map['a.show_status'] = 1;//1:显示 0不显示 $map['a.is_delete'] = 1;//是否删除 1否2是 - $map['b.status'] = ['<>',0];//是否注销 1正常,2禁止登录,0注销 +// $map['b.status'] = ['<>',0];//是否注销 1正常,2禁止登录,0注销 $order_string = 'a.createtime desc'; //排序规则