Files
yusheng-php/application/cron/controller/Test.php
2025-12-17 16:46:04 +08:00

458 lines
21 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace app\cron\controller;
use app\common\controller\Push;
use think\Cache;
use think\Db;
use Yzh\YunPay;
/*
* 定时任务,每秒执行的方法
*/
class Test
{
/* https://vespa.qxyushen.top/api/Cron/Test
* 运行函数
*/
function index()
{
// 设置脚本执行时间无限
set_time_limit(0);
echo "统计盲盒转盘错误数据\n";
// $this->blind_box_error();
// $this->xlh_gift_send();
// echo "\n";
//
$this->task_history_send();
}
//统计盲盒转盘错误数据
public function blind_box_error()
{
die("暂停");
// 设置数据库查询超时时间
Db::query("SET SESSION wait_timeout=600");
Db::query("SET SESSION interactive_timeout=600");
// 使用连表查询,直接找出送给多人的数据
echo "开始查询送给多人的数据...\n";
// 先查询所有有多个不同 gift_user_id 的 tid
$multipleGiftRecords = Db::name('vs_blind_box_turntable_results_log')
->group('tid')
->having('COUNT(DISTINCT gift_user_id) > 1')
->field('tid, COUNT(DISTINCT gift_user_id) as user_count,gift_user_id')
->select();
echo "找到 " . count($multipleGiftRecords) . " 条送给多人的记录\n";
// 输出详细信息
foreach ($multipleGiftRecords as $record) {
echo "转盘ID: {$record['tid']}, 接收人数: {$record['user_count']}\n";
// 获取该转盘的详细信息
$turntableInfo = Db::name('vs_blind_box_turntable_log')
->where('id', $record['tid'])
->find();
if ($turntableInfo) {
echo " 开奖用户ID: {$turntableInfo['user_id']}, 礼包ID: {$turntableInfo['gift_bag_id']}\n";
}
}
echo "统计盲盒转盘错误数据完成\n";
}
//统计盲盒转盘错误数据
public function blind_box_error1()
{
die("暂停");
// 设置数据库查询超时时间
Db::query("SET SESSION wait_timeout=600");
Db::query("SET SESSION interactive_timeout=600");
// 分批处理数据,避免一次性加载大量数据到内存
$batchSize = 1000;
$offset = 0;
$data_multiple = [];
$totalProcessed = 0;
do {
// 分批获取数据
$turntable_log = Db::name('vs_blind_box_turntable_log')
->limit($offset, $batchSize)
->select();
// 如果没有更多数据,退出循环
if (empty($turntable_log)) {
break;
}
foreach ($turntable_log as $key => $value) {
//查询本轮是否有多个接收礼物的人
$turntable_results_log = Db::name('vs_blind_box_turntable_results_log')
->where('tid', $value['id'])
->group('gift_user_id')
->select();
// 统计送给多人的数据
if (count($turntable_results_log) > 1) {
$data_multiple[] = [
'turntable_id' => $value['id'],
'recipient_count' => count($turntable_results_log),
'data' => $value
];
}
$totalProcessed++;
// 每处理100条记录输出一次进度
if ($totalProcessed % 100 == 0) {
echo "已处理 {$totalProcessed} 条记录...\n";
// 每100条记录后清理内存
gc_collect_cycles();
}
}
// 更新偏移量
$offset += $batchSize;
// 释放内存
unset($turntable_log);
unset($turntable_results_log);
} while ($totalProcessed <= 1400);
echo "送给多人的数据共 " . count($data_multiple) . " 条记录\n";
echo "统计盲盒转盘错误数据完成-共处理 " . $totalProcessed . " 条数据\n";
// 输出详细信息
foreach ($data_multiple as $item) {
echo "转盘ID: {$item['turntable_id']}, 接收人数: {$item['recipient_count']}\n";
}
}
public function RoomOwners()
{
$room = Db::name('vs_room')->where(['room_status' => 1,'apply_status' => 2])->select();
$arr = [];
foreach ($room as $key => $value) {
$liushui = Db::name('vs_give_gift')->where(['from_id' => $value['id'],'from' => 2])->sum('total_price');
$usercode = Db::name('user')->where(['id' => $value['user_id']])->value('user_code');
$nickname = Db::name('user')->where(['id' => $value['user_id']])->value('nickname');
$arr[] = [
'room_id' => $value['id'],
'user_id' => $value['user_id'],
'user_code' => $usercode,
'nickname' => $nickname,
'liushui' => $liushui
];
}
//房主的收益
foreach ($arr as $key => $v){
$shouyi = db::name('vs_user_money_log')->where(['user_id' => $v['user_id'],'change_type' => 18,'money_type' =>2,'createtime'=>['<',1759585380]])->sum('change_value');
$arr[$key]['shouyi'] = $shouyi;
$arr[$key]['duibi'] = $shouyi.'-'.$v['liushui']/10/10;
$arr[$key]['chazhi'] = $v['liushui']/10/10 - $shouyi;
}
var_dump($arr);
}
/*
* 巡乐会中奖后房主礼物补发放
*/
public function xlh_gift_send(){
die("暂停");
echo "开始补发巡乐会中奖后房主礼物 \n";
$xlh_list = db::name('vs_room_pan_xlh')->where(['id'=>['in',[279]]])->select();
echo "共有".count($xlh_list)."个需要发放的礼物 \n";
if(empty($xlh_list)){
echo "没有需要发放的礼物 \n";
}
foreach ($xlh_list as $key=>$value){
try{
//发放
//房主礼物落包
$res = [];
//获取房主id
$user_id = db::name('vs_room')->where(['id'=>$value['room_id']])->value('user_id');
$res = model('api/UserGiftPack')->change_user_gift_pack($user_id,$value['homeowner_gift_id'],1,model('api/UserGiftPack')::XLH_DRAW_GIFT_GET,"巡乐会中奖后房主礼物发放-补发");
if ($res['code'] != 1) {
echo $res['msg']."\n";
continue;
}
echo "巡乐会中奖后房主礼物发放成功 房主Id".$user_id."\n";
}catch (\Exception $e){
echo $e->getMessage()."\n";
}
}
}
/*
* 任务历史数据补发
*/
public function task_history_send(){
echo "开始补发任务历史数据 \n";
$user_list = db::name('user')->where(['status'=>1,'delete_time'=>0])->select();
//任务
$task_list = db::name('vs_tasks')->where(['task_type'=>1,'delete_time'=>0])->select();
foreach ($user_list as $key=>$value){
echo "开始补发用户({$value['id']})".$value['nickname']."的任务数据 \n";
foreach ($task_list as $k=>$v){
if($v['id']==3){//实名认证任务
//判断用户是否实名认证
$is_real = model('api/UserData')->real_name_info($value['id']);
if($is_real['code']==1&&$is_real['data']['is_real'] ==1){
$re =model('api/Tasks')->tasks_complete($value['id'],3);
if($re['code']!=1){
echo "用户({$value['id']})".$value['nickname']."任务({$v['id']})".$v['task_name']."任务完成失败 失败原因:".$re['msg']."\n";
}
}
echo "用户({$value['id']})".$value['nickname']."实名认证任务完成 \n";
}elseif($v['id']==4){//完善个人资料-创建相册
$album_list = db::name('user_album')->where(['user_id' => $value['id']])->field('id,name,image,pwd,read_num,like_num')->select();
if(!empty($album_list)){
$re = model('api/Tasks')->tasks_complete($value['id'],4);
if($re['code']!=1){
echo "用户({$value['id']})".$value['nickname']."任务({$v['id']})".$v['task_name']."任务完成失败 失败原因:".$re['msg']."\n";
}
}
echo "用户({$value['id']})".$value['nickname']."完善个人资料-创建相册任务完成 \n";
}elseif($v['id']==5){//完善个人资料- 绑定支付宝或银行卡信息
$user_data = db::name('user_data')->where('user_id',$value['id'])->find();
if(!empty($user_data['alipay_account'])||!empty($user_data['bank_card_number'])){
$re = model('api/Tasks')->tasks_complete($value['id'],5);
if($re['code']!=1){
echo "用户({$value['id']})".$value['nickname']."任务({$v['id']})".$v['task_name']."任务完成失败 失败原因:".$re['msg']."\n";
}
}
echo "用户({$value['id']})".$value['nickname']."完善个人资料- 绑定支付宝或银行卡信息任务完成 \n";
}elseif($v['id']==6){//第一次签约师傅
$is_sign = db::name('vs_user_sign')->where(['sign_user_id' => $value['id']])->find();
if(!empty($is_sign)){
$re = model('api/Tasks')->tasks_complete($value['id'],6);
if($re['code']!=1){
echo "用户({$value['id']})".$value['nickname']."任务({$v['id']})".$v['task_name']."任务完成失败 失败原因:".$re['msg']."\n";
}
}
echo "用户({$value['id']})".$value['nickname']."第一次签约师傅任务完成 \n";
} elseif($v['id']==7){//第一次送礼
$give_gift = db::name('vs_give_gift')->where(['user_id' => $value['id']])->find();
if(!empty($give_gift)){
$re = model('api/Tasks')->tasks_complete($value['id'],7);
if($re['code']!=1){
echo "用户({$value['id']})".$value['nickname']."任务({$v['id']})".$v['task_name']."任务完成失败 失败原因:".$re['msg']."\n";
}
}
echo "用户({$value['id']})".$value['nickname']."第一次送礼任务完成 \n";
}elseif($v['id']==8){//第一次收礼
$give_gift = db::name('vs_give_gift')->where(['gift_user' => $value['id']])->find();
if(!empty($give_gift)){
$re = model('api/Tasks')->tasks_complete($value['id'],8);
if($re['code']!=1){
echo "用户({$value['id']})".$value['nickname']."任务({$v['id']})".$v['task_name']."任务完成失败 失败原因:".$re['msg']."\n";
}
}
echo "用户({$value['id']})".$value['nickname']."第一次收礼任务完成 \n";
}elseif($v['id']==9){//第一次拍卖关系
$auction = db::name('vs_room_auction')->where(['user_id' => $value['id'],'bidder_user_id'=>['>',0]])->find();
if(!empty($auction)){
$re = model('api/Tasks')->tasks_complete($value['id'],9);
if($re['code']!=1){
echo "用户({$value['id']})".$value['nickname']."任务({$v['id']})".$v['task_name']."任务完成失败 失败原因:".$re['msg']."\n";
}
}
echo "用户({$value['id']})".$value['nickname']."第一次拍卖关系任务完成 \n";
}elseif($v['id']==10){//第一次星球房卡关系(互娱房)
$friending1 = db::name('vs_user_friending_heart')->where(['user1_id' => $value['id'],'status'=>3])->find();
if(empty($friending1)){
$friending1 = db::name('vs_user_friending_heart')->where(['user2_id' => $value['id'],'status'=>3])->find();
}
if(!empty($friending1)){
$re = model('api/Tasks')->tasks_complete($value['id'],10);
if($re['code']!=1){
echo "用户({$value['id']})".$value['nickname']."任务({$v['id']})".$v['task_name']."任务完成失败 失败原因:".$re['msg']."\n";
}
}
echo "用户({$value['id']})".$value['nickname']."第一次星球房卡关系任务完成 \n";
}elseif($v['id']==11){//第一次 加入公会
$guild_list = db::name('vs_guild_user')->where(['user_id' => $value['id']])->find();
if(!empty($guild_list)){
$re = model('api/Tasks')->tasks_complete($value['id'],11);
if($re['code']!=1){
echo "用户({$value['id']})".$value['nickname']."任务({$v['id']})".$v['task_name']."任务完成失败 失败原因:".$re['msg']."\n";
}
}
echo "用户({$value['id']})".$value['nickname']."第一次加入公会任务完成 \n";
}
}
echo "用户({$value['id']})".$value['nickname']."的任务数据补发完成 \n";
echo '------------------------------------------------------'."\n";
}
echo "任务历史数据补发完成 用户总数:".count($user_list). " \n";
}
//推算7号平台结余
public function calc_7_balance(){
set_time_limit(0);
$jisuan = 0;
// 分页处理,防止超时
$pageSize = 100;
$page = 1;
$hasMore = true;
while ($hasMore) {
// 分页查询用户钱包数据
$offset = ($page - 1) * $pageSize;
$user_list = db::name('user_wallet')
->limit($offset, $pageSize)
->select();
// 判断是否还有更多数据
if (count($user_list) < $pageSize) {
$hasMore = false;
}
// 如果没有数据则退出循环
if (empty($user_list)) {
break;
}
foreach ($user_list as $key => $value) {
$earnings = $value['earnings'];
//根据注释应该计算2025-12-07之前的收益所得
$income = db::name('vs_user_money_log')
->where(['user_id'=>$value['user_id']])
->whereIn('change_type',[6,9,11,12,18,19,21,22,31,28,34,52,53,54,55,57])
->where('createtime','>=', strtotime('2025-12-07'))
->where('createtime','<=', time())
->sum('change_value');
//根据注释应该计算2025-12-07之前的消费
$expense = db::name('vs_user_money_log')
->where(['user_id'=>$value['user_id']])
->whereIn('change_type',[3,14,29])
->where('createtime','>=', strtotime('2025-12-07'))
->where('createtime','<=', time())
->sum('change_value');
$jisuan += ($earnings - $income + $expense);
echo "用户({$value['user_id']})"."的结余:".($earnings - $income + $expense)."\n";
}
echo "".$page."页数据处理完成 \n";
// 释放内存
unset($user_list);
$page++;
// 每处理10页输出一次进度
if ($page % 10 == 0) {
echo "已处理 {$page} 页数据...\n";
}
}
echo "2025-12-07以前平台结余".$jisuan."\n";
}
public function calc_7_balances(){
//当前平台结余
for($i=1;$i<=18;$i++){
$time = strtotime('2025-12-'.$i);
$all_earnings = db::name('user_wallet')->sum('earnings');
$all_income = db::name('vs_user_money_log')
->whereIn('change_type',[6,9,11,12,18,19,21,22,31,28,34,52,53,54,55,57])
->where('money_type',2)
->where('createtime','>=', $time)
->where('createtime','<=', time())
->sum('change_value');
$all_expense = db::name('vs_user_money_log')
->whereIn('change_type',[14,29])
->where('money_type',2)
->where('createtime','>=',$time)
->where('createtime','<=', time())
->sum('change_value');
//提现
$all_tixian = db::name('vs_user_money_log')
->whereIn('change_type',[3])
->where('money_type',2)
->where('createtime','>=',$time)
->where('createtime','<=', time())
->sum('change_value');
//充值
// $all_recharge = db::name('vs_user_money_log')
// ->where('change_type',2)
// ->where('createtime','>=', $time)
// ->where('createtime','<=', time())
// ->sum('change_value');
//充值
$all_recharge1 = db::name('vs_user_recharge')
->where('pay_status',2)
->where('createtime','>=', $time)
->where('createtime','<=', time())
->sum('money');
$jisuan = ($all_earnings + $all_expense + $all_tixian) - $all_income;
echo date('Y-m-d',time())." 当前平台总结余:".$all_earnings."\n";
echo date('Y-m-d',$time)." 以后平台总收入(用户总收益):".$all_income."\n";
echo date('Y-m-d',$time)." 以后平台总支出(用户总消耗钻石红包,兑换金币):".$all_expense."\n";
echo date('Y-m-d',$time)." 以后的提现记录:".$all_tixian."\n";
echo date('Y-m-d',$time)." 以后充值(完成)".$all_recharge1 ."\n";
echo date('Y-m-d',$time)." 以前平台总结余:".$jisuan."\n";
echo "========================================================"."\n";
}
}
//1
public function calc_1_7_balances(){
//当前平台结余
$stime = strtotime('2025-12-01');
$etime = strtotime('2025-12-08');
$all_expense = db::name('vs_user_money_log')
->whereIn('change_type',[3,14,29])
->where('money_type',2)
->where('createtime','>=',$stime)
->where('createtime','<=', $etime)
->sum('change_value');
echo "2025-12-01至2025-12-07平台总提现".$all_expense."\n";
}
/*
* 首次创建房间任务历史数据补发
*/
public function task_history_send_34(){
die();
echo "开始补发任务历史数据 \n";
$room_list = db::name('vs_room')->where(['type_id' => ['<>',6], 'apply_status' => 2])->select();
foreach ($room_list as $key=>$value){
echo "开始补发房间({$value['room_name']}) 的任务数据 \n";
$re =model('api/Tasks')->tasks_complete($value['user_id'],34);
if($re['code']!=1){
echo $value['room_name']."首次建立房间任务完成失败 失败原因:".$re['msg']."\n";
continue;
}
}
$reslut = Db::name('vs_tasks_user_daily')->where('task_id',34)->update([
'is_claimed' => 1,
]);
echo "任务历史数据补发完成 用户总数:".count($room_list). " \n";
}
public function clear_room_offline_user() {
echo "开始清除房间离线用户 \n";
$room = db::name('vs_room_visitor')->where(['is_online' => 2])->select();
$res_i = 0;
if($room){
foreach ($room as $value) {
$time = time() - $value['updatetime'];
if($time > 86400){
$re = model('api/Room')->quit_room($value['user_id'], $value['room_id'],$value['user_id']);
if($re['code'] != 1){
echo "清除房间离线用户失败:".$value['user_id']."---".$re['msg']."\n";
}else{
echo "清除房间离线用户成功:".$value['user_id']."\n";
$res_i ++;
}
}
}
}
echo "清除房间离线用户完成 (".$res_i.") \n";
}
}