Files
midi-php/application/cron/controller/RoomHourRanking.php

178 lines
6.6 KiB
PHP
Raw Normal View History

2025-09-29 16:27:36 +08:00
<?php
namespace app\cron\controller;
2025-09-29 18:29:08 +08:00
use app\common\controller\Push;
2025-09-29 16:27:36 +08:00
use think\Db;
2025-09-29 18:29:08 +08:00
use think\Log;
2025-09-29 16:27:36 +08:00
class RoomHourRanking
{
/*
* 运行函数
*/
function index()
{
echo "小时榜 开始发礼物:\n";
$this->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'));
2025-09-29 18:29:08 +08:00
//当前小时的前一个小时24小时计时法0-23
$pre_hour = date('H', strtotime('-1 hour'));
2025-09-29 16:27:36 +08:00
//是否全局飘瓶
$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{
2025-09-29 18:29:08 +08:00
2025-09-29 16:27:36 +08:00
//当前的前一个小时是否在 $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;
}
2025-09-29 18:29:08 +08:00
//获取上一个时间段的配置
$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++;
}
}
}
2025-09-29 19:11:57 +08:00
2025-09-29 18:29:08 +08:00
if ($gift_list && $room_owner) {
2025-09-29 19:11:57 +08:00
$text_list_new = [];
2025-09-29 18:29:08 +08:00
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.'】实力绽放!';
}
2025-09-29 16:27:36 +08:00
2025-09-29 18:29:08 +08:00
$text_list_new[] = [
2025-09-29 19:11:57 +08:00
'text' => $text ?? '恭喜【'.$room_name.'】获得礼物!',
'room_id' => $room_owner[$k]['room_id'],
'room_name' => $room_name,
'rank_number' => $k + 1,
2025-09-29 18:29:08 +08:00
];
2025-09-29 19:11:57 +08:00
2025-09-29 18:29:08 +08:00
}
}
}
}
2025-09-29 19:11:57 +08:00
if(!empty($text_list_new)){
$push = new Push();
$push->hourRanking($text_list_new);
}
2025-09-29 18:29:08 +08:00
}
2025-09-29 18:41:37 +08:00
echo "送礼-共" . count($room_owner) . "个房间房主获益\n";
2025-09-29 16:27:36 +08:00
}
2025-09-29 18:29:08 +08:00
//添加金币到钱包
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;
}
2025-09-29 16:27:36 +08:00
}