From 0a2f05a928a3b12438c831c2beada9dd4ee38d81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=8D=8E=E6=B8=85?= <18691022700@163.com> Date: Mon, 29 Sep 2025 18:29:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=BF=E9=97=B4=E5=B0=8F=E6=97=B6=E6=A6=9C?= =?UTF-8?q?=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/controller/RoomHourRanking.php | 2 +- application/api/model/RoomHourRanking.php | 2 +- application/api/model/UserGiftPack.php | 5 +- application/api/model/UserWallet.php | 1 + application/common/controller/Push.php | 7 + application/common/model/UserWallet.php | 5 +- .../cron/controller/RoomHourRanking.php | 125 +++++++++++++++++- 7 files changed, 138 insertions(+), 9 deletions(-) diff --git a/application/api/controller/RoomHourRanking.php b/application/api/controller/RoomHourRanking.php index 25d52f8..80d2b55 100644 --- a/application/api/controller/RoomHourRanking.php +++ b/application/api/controller/RoomHourRanking.php @@ -31,7 +31,7 @@ class RoomHourRanking extends BaseCom return V($reslut['code'], $reslut['msg'], $reslut['data']); } - //房间小时榜 + //房间小时榜 测试 等会删除 public function room_hour_rankings() { $page = input('page', 1); diff --git a/application/api/model/RoomHourRanking.php b/application/api/model/RoomHourRanking.php index e1e4e12..8797e93 100644 --- a/application/api/model/RoomHourRanking.php +++ b/application/api/model/RoomHourRanking.php @@ -35,7 +35,7 @@ class RoomHourRanking extends Model $profit = db::name('vs_room')->alias('a') ->join('vs_give_gift b', 'a.id = b.from_id AND b.from = 2 AND b.createtime BETWEEN '.$start_time.' AND '.$end_time, 'left') ->join('vs_room_label c', 'a.label_id = c.id','left') - ->field('a.id as room_id,a.room_name,a.label_id,a.room_cover,IFNULL(sum(b.total_price), 0) as total_price,c.label_icon') + ->field('a.id as room_id,a.user_id,a.room_name,a.label_id,a.room_cover,IFNULL(sum(b.total_price), 0) as total_price,c.label_icon') ->where('a.room_status', 1) // 只统计正常状态的房间 ->where('a.apply_status', 2) // 只统计审核通过的房间 ->where('a.type_id', '<>', 6) diff --git a/application/api/model/UserGiftPack.php b/application/api/model/UserGiftPack.php index 0fd927a..cab433d 100644 --- a/application/api/model/UserGiftPack.php +++ b/application/api/model/UserGiftPack.php @@ -34,6 +34,8 @@ class UserGiftPack extends Model const DRAW_GIFT = 7; //巡乐会抽奖所得 const XLH_DRAW_GIFT_GET = 8; + //小时榜获得 + const HOUR_RANK_GET = 9; public static function init() { @@ -51,7 +53,8 @@ class UserGiftPack extends Model self::GIFT_USE => '礼物使用', self::FIRST_CHARGE => '首充获得', self::DRAW_GIFT => '天降好礼获得', - self::XLH_DRAW_GIFT_GET => '巡乐会抽奖所得' + self::XLH_DRAW_GIFT_GET => '巡乐会抽奖所得', + self::HOUR_RANK_GET => '小时榜获得' ]; } diff --git a/application/api/model/UserWallet.php b/application/api/model/UserWallet.php index 8ab08b4..0853c7d 100644 --- a/application/api/model/UserWallet.php +++ b/application/api/model/UserWallet.php @@ -50,6 +50,7 @@ class UserWallet extends Model // 1.系统调节 2.充值 3.提现 4.金币转增(送出) 5.每日任务奖励 6.充值返利 7.购买装扮 // 8.礼盒奖励 9.房间补贴 10.购买礼物 11.收礼增加收益 12.工会补贴 13.转赠金币(接收) 14.收益兑换 // 15.首充 16.天降好礼充值 17.退出工会扣款 18.房主收益 19.主持人收益,20.发布头条扣除余额,21.公会长收益,22.提现驳回或提现失败返还,23.财富等级奖励金币领取,24.删除关系扣金币 + //27.小时榜获得 if($gift_type == 1){ //1金币,2收益(钻石) if($in_out_type == 1){//1收入 $in_out_types = [2,5,6,8,13,14,15,16,22,23,26]; diff --git a/application/common/controller/Push.php b/application/common/controller/Push.php index f0c5d84..6134743 100644 --- a/application/common/controller/Push.php +++ b/application/common/controller/Push.php @@ -73,6 +73,8 @@ class Push //房间盘推送 //巡乐会推送开启进度推送 const PUSH_ROOM_PAN_XLH_PROGRESS = 8000; + //小时榜 + const PUSH_ROOM_PAN_HOUR_PROGRESS = 8001; public $user_id, $room_id, $topic_room, $topic_client; @@ -299,6 +301,11 @@ class Push $this->push(self::PUSH_ROOM_PAN_XLH_PROGRESS, $topic, $data); } + //小时榜推送 + public function hourRanking($data){ + $topic = 'qx_hour_ranking'; + $this->push(self::PUSH_ROOM_PAN_HOUR_PROGRESS, $topic, $data); + } diff --git a/application/common/model/UserWallet.php b/application/common/model/UserWallet.php index 7bba6ee..1fa0136 100644 --- a/application/common/model/UserWallet.php +++ b/application/common/model/UserWallet.php @@ -73,6 +73,8 @@ class UserWallet extends Model const TRANSFER_COIN = 25; //好友转赠所得金币 const RECEIVE_COIN = 26; + //小时榜获得金币 + const HOUR_RANK_COIN = 27; //金币支出类型数组 @@ -135,7 +137,8 @@ class UserWallet extends Model self::FINANCE_LEVEL_REWARD => '财富等级奖励金币领取', self::DELETE_RELATION_COIN => '删除关系扣金币', self::TRANSFER_COIN => '赠送好友金币', - self::RECEIVE_COIN => '好友转赠所得金币' + self::RECEIVE_COIN => '好友转赠所得金币', + self::HOUR_RANK_COIN => '小时榜获得金币' ]; return $status[$type] ?? ''; } diff --git a/application/cron/controller/RoomHourRanking.php b/application/cron/controller/RoomHourRanking.php index 4cc59e1..4abb16d 100644 --- a/application/cron/controller/RoomHourRanking.php +++ b/application/cron/controller/RoomHourRanking.php @@ -2,8 +2,9 @@ namespace app\cron\controller; +use app\common\controller\Push; use think\Db; -use function fast\e; +use think\Log; class RoomHourRanking { @@ -23,7 +24,8 @@ class RoomHourRanking //获取上一个小时的开始时间和结束时间 $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) { @@ -33,8 +35,7 @@ class RoomHourRanking if($xlh_time_range == 25){ $is_piao = 1; }else{ - //当前小时的前一个小时(24小时计时法,0-23) - $pre_hour = date('H', strtotime('-1 hour')); + //当前的前一个小时是否在 $xlh_time_range中 if (in_array($pre_hour, explode(',', $xlh_time_range))) { $is_piao = 1; @@ -49,7 +50,121 @@ class RoomHourRanking $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']; + } + $i++; + } + } + } + $push = new Push(); + if ($gift_list && $room_owner) { + 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']); + }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.'】获得礼物!' + ]; + $push->hourRanking($text_list_new); + } + } + } + } + } + return true; } + + //添加金币到钱包 + public function add_coin($coin,$user_id){ + $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(); + } + Db::commit(); + return true; + } + + //添加礼物到背包 + public function add_gift($gift_id,$user_id){ + $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"); + } + return true; + } + + //添加装扮到背包 + public function add_decorate($avatar_id,$user_id){ + $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"); + } + return true; + } + + + + + } \ No newline at end of file