Files
yusheng-php/application/cron/controller/Test.php

415 lines
19 KiB
PHP
Raw Normal View History

2025-10-20 10:02:41 +08:00
<?php
namespace app\cron\controller;
use app\common\controller\Push;
use think\Cache;
2025-10-20 10:02:41 +08:00
use think\Db;
use Yzh\YunPay;
/*
* 定时任务,每秒执行的方法
*/
class Test
{
/* https://vespa.qxyushen.top/api/Cron/Test
2025-10-20 10:02:41 +08:00
* 运行函数
*/
function index()
{
// 设置脚本执行时间无限
set_time_limit(0);
echo "统计盲盒转盘错误数据\n";
// $this->blind_box_error();
2025-12-13 00:37:51 +08:00
// $this->xlh_gift_send();
// echo "\n";
//
$this->task_history_send();
2025-10-20 10:02:41 +08:00
}
//统计盲盒转盘错误数据
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){//第一次拍卖关系
2025-12-12 15:37:09 +08:00
$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";
}
2025-12-12 15:37:09 +08:00
}
echo "用户({$value['id']})".$value['nickname']."第一次拍卖关系任务完成 \n";
}elseif($v['id']==10){//第一次星球房卡关系(互娱房)
2025-12-12 15:37:09 +08:00
$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";
}
2025-12-12 15:37:09 +08:00
}
echo "用户({$value['id']})".$value['nickname']."第一次星球房卡关系任务完成 \n";
}elseif($v['id']==11){//第一次 加入公会
2025-12-12 15:37:09 +08:00
$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";
}
2025-12-12 15:37:09 +08:00
}
echo "用户({$value['id']})".$value['nickname']."第一次加入公会任务完成 \n";
}
}
echo "用户({$value['id']})".$value['nickname']."的任务数据补发完成 \n";
echo '------------------------------------------------------'."\n";
}
echo "任务历史数据补发完成 用户总数:".count($user_list). " \n";
}
2025-12-16 10:57:25 +08:00
//推算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<=16;$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";
}
2025-10-20 10:02:41 +08:00
}