Files
yusheng-php/application/cron/controller/Test.php
2026-01-19 10:57:02 +08:00

1069 lines
48 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 app\common\library\GiftTableManager;
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->clean_guild_flow();
// $this->giftSend();
// $this->createGuildSubsidyDataNewNew();
// $this->task_coin_count();
$this->createGuildSubsidyDataNew();
// $this->repair_guild_room_data();
}
//统计盲盒转盘错误数据
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";
}
//清洗任务数据
public function clean_task_data()
{
echo "开始清洗任务数据 \n";
$task_student = Db::name('vs_tasks_student')->where(['status' => 2, 'delete_time' => 0])->select();
foreach ($task_student as $value) {
$tasks_bag_id = db::name('vs_tasks')->where(['id' => $value['task_id']])->value('tasks_bag_id');
$insert_data = [
'user_id' => $value['user_id'],
'task_id' => $value['task_id'],
'tasks_bag_id' => $tasks_bag_id,
'is_completed' => 1,
'is_claimed' => 1,
'createtime' => time(),
'updatetime' => time(),
'completion_time' => $value['createtime'],
'collection_time' => $value['updatetime'],
];
Db::name('vs_tasks_user_daily')->insert($insert_data);
echo "清洗师徒任务数据成功:" . $value['id'] . "\n";
}
$user_couple_task = Db::name('vs_user_cp_task')->where(['status' => 2, 'delete_time' => 0])->select();
foreach ($user_couple_task as $value) {
$tasks_bag_id = db::name('vs_tasks')->where(['id' => $value['tasks_bag_id']])->value('tasks_bag_id');
Db::name('vs_tasks_user_daily')->insert([
'user_id' => $value['user_id'],
'task_id' => $value['tasks_bag_id'],
'tasks_bag_id' => $tasks_bag_id,
'is_completed' => 1,
'is_claimed' => 1,
'createtime' => time(),
'updatetime' => time(),
'completion_time' => $value['createtime'],
'collection_time' => $value['createtime'],
]);
echo "清洗CP任务数据成功" . $value['id'] . "\n";
}
echo "清洗任务数据完成 \n";
}
//清洗公会流水
public function clean_guild_flow()
{
echo "开始清洗公会流水: \n";
$guild = db::name('vs_guild')->select();
foreach ($guild as $value) {
echo "================================\n";
echo "开始清洗公会({$value['id']})流水 \n";
$guild_user = db::name('vs_guild_user')->where(['guild_id' => $value['id'],'status' => 1,'apply_time'=>['>',0],'room_id' => ['>',0]])->select();
$transaction = 0;
foreach ($guild_user as $v) {
$week_start_time_seach = "1761554521";
$week_end_time_seach = "1766667632";
if($v['apply_time'] && $week_start_time_seach < $v['apply_time']){
$week_start_time_seach = $v['apply_time'];
}
if($v['quit_time'] && ($week_end_time_seach > $v['quit_time'])){
$week_end_time_seach = $v['quit_time'];
}
$transaction_one = db::name('vs_give_gift')
->where('from_id',$v['room_id'])
->where(['createtime'=>['>=',$week_start_time_seach]])
->where(['createtime'=>['<',$week_end_time_seach]])
->where(['from'=>2])
->sum('total_price');
// Db::name('vs_guild_user')->where(['id' => $v['id']])->setInc('coin', $transaction_one);
if($transaction_one>0){
$data = [
'guild_id' => $value['id'],
'room_id' => $v['room_id'],
'give_gift_id' => 0,
'flow_price' => $transaction_one,
'day' => "",
'createtime' => time(),
];
// $res = Db::name('vs_guild_flow')->insert($data);
}
$transaction += $transaction_one;
echo " 公会房间(". $v['room_id'] .")流水:" . $transaction_one . "\n";
}
// Db::name('vs_guild')->where(['id' => $value['id']])->setInc('income', $transaction);
echo "清洗公会房间流水完成:" . count($guild_user) . "\n";
}
echo "清洗公会流水完成: ".count($guild)."\n";
}
//清洗公会流水
public function clean_guild_flow1()
{die;
echo "开始清洗公会流水: \n";
$guild = db::name('vs_guild')->where(['status' => 1])->select();
foreach ($guild as $value) {
echo "================================\n";
//echo "开始清洗公会({$value['id']})流水 \n";
$guild_user = db::name('vs_guild_user')->where(['guild_id' => $value['id'],'status' => 1,'apply_time'=>['>',0],'room_id' => ['>',0]])->select();
$transaction = 0;
$transaction_one_all = 0;
foreach ($guild_user as $v) {
$guild_flow_price = Db::name('vs_guild_flow')->where(['guild_id' => $value['id'],'room_id' => $v['room_id']])->sum('flow_price');
$transaction += $guild_flow_price;
$week_start_time_seach = "1761554521";
$week_end_time_seach = "1766564906";
if($v['apply_time'] && $week_start_time_seach < $v['apply_time']){
$week_start_time_seach = $v['apply_time'];
}
if($v['quit_time'] && ($week_end_time_seach > $v['quit_time'])){
$week_end_time_seach = $v['quit_time'];
}
$transaction_one = db::name('vs_give_gift')
->where('from_id',$v['room_id'])
->where(['from'=>2,'createtime' => ['between', [$week_start_time_seach, $week_end_time_seach]]])
->sum('total_price');
if($guild_flow_price != $transaction_one){
echo "公会房间(". $v['room_id'] .")流水与公会用户流水不一致:" . $guild_flow_price . "--" . $transaction_one . "\n";
$flow_price_cha = $v['coin']-$guild_flow_price;
echo "差:".($flow_price_cha) . "\n";
// Db::name('vs_guild_user')->where(['id' => $v['id']])->setDec('coin', $flow_price_cha);
}
$transaction_one_all= $transaction_one_all+$transaction_one;
}
if($transaction != $transaction_one_all){
echo "公会流水与公会用户流水不一致:" . $transaction . "--" . $value['income'] . "\n";
$transaction_cha = $value['income']-$transaction;
echo $value['id']."差:".($transaction_cha) . "\n";
// Db::name('vs_guild')->where(['id' => $value['id']])->setDec('income', $transaction_cha);
}
// echo "清洗公会房间流水完成:" . count($guild_user) . "\n";
}
// echo "清洗公会流水完成: ".count($guild)."\n";
}
/*
* 生成工会补贴数据
* 配置:定时脚本每周一 执行
* 配置:/cron/Subsidy/createGuildSubsidyData
*/
public function createGuildSubsidyData(){
//获取上周第一天时间
$week_start_time = strtotime('last week Monday');
$week_end_time = strtotime(date('Y-m-d 23:59:59',strtotime('last week Sunday')));
$week_start_time = strtotime('2025-12-08');
$week_end_time = strtotime('2025-12-15');
// $week_start_time = strtotime('2025-12-15');
// $week_end_time = strtotime('2025-12-22');
//获取上周时间
$time_value = date('o-W', $week_start_time);
echo $time_value . "工会周补贴数据生成开始\n";
//查询所有工会
$guild_list = db::name('vs_guild')->where(['delete_time'=>0])->field('id')->select();
$data_count = 0;
foreach ($guild_list as $key => $value) {
//获取所有工会房间ID
$guild_user_data = db::name('vs_guild_user')->where('guild_id', $value['id'])->where(['apply_time'=>['>',0],'status'=>1,'room_id'=>['>',0]])->field('room_id,apply_time,quit_time')->select();
$transaction = 0;
foreach ($guild_user_data as $k => $v) {
$week_start_time_seach = $week_start_time;
$week_end_time_seach = $week_end_time;
if($v['apply_time'] && $week_end_time_seach < $v['apply_time']){
continue;
}
if($v['quit_time'] && $v['quit_time'] < $week_start_time_seach){
continue;
}
if($v['apply_time'] && $week_start_time_seach < $v['apply_time']){
$week_start_time_seach = $v['apply_time'];
}
if($v['quit_time'] && ($week_end_time_seach > $v['quit_time'])){
$week_end_time_seach = $v['quit_time'];
}
$transaction_one = db::name('vs_give_gift')
->whereIn('from_id',$v['room_id'])
->where(['from'=>['in',[2,3,6]],'createtime' => ['between', [$week_start_time_seach, $week_end_time_seach]]])
->sum('total_price');
$transaction += $transaction_one;
}
if($transaction > 0){
//判断是否已经生成过
if (db::name('vs_guild_subsidy')->where(['guild_id'=>$value['id'],'week'=>$time_value])->find()) {
continue;
}
//获取补贴配置
$config = db::name('vs_guild_subsidy_config')->where(['status' => 1])->order('end_amount desc')->select(); //配置查询
if (!$config) {
echo '补贴配置为空\n';
die;
}
$subsidy_ratio = 0;
$subsidy_amount = 0;
foreach ($config as $k => $v) {
if ($transaction >= $v['end_amount']) {
$subsidy_ratio = $v['subsidy_ratio'];
$subsidy_amount = ($transaction * ($subsidy_ratio / 100)) / get_system_config_value('rmb_coin_ratio');//转为钻石
break; // 找到匹配项后提前退出循环
}
}
//生成补贴数据
$data = [
'guild_id' => $value['id'],
'week' => $time_value,
'start_time' => date('Y-m-d H:i:s', $week_start_time),
'end_time' =>date('Y-m-d H:i:s', $week_end_time),
'total_transaction' => $transaction,
'subsidy_amount' => $subsidy_amount,
'subsidy_ratio' => $subsidy_ratio,
'status' => 0,
'createtime' => time(),
];
echo "工会".$value['id']."生成数据:流水金额:{$transaction} 补贴比例:{$subsidy_ratio}% 补贴金额:{$subsidy_amount}\n";
// $subsidy_id = Db::name('vs_guild_subsidy_1')->insertGetId($data);。。。。11
// if ($subsidy_id) {
// echo "工会".$value['id']."生成成功(补贴ID".$subsidy_id." 补贴金额:".$subsidy_amount.")\n";
// $data_count++;
// }
}
}
echo $time_value . "工会周补贴数据生成完成-共" . $data_count . "条数据\n";
}
/*
* 生成工会补贴数据
* 配置:定时脚本每周一 执行
* 配置:/cron/Subsidy/createGuildSubsidyData
*/
public function createGuildSubsidyDataNew(){
//获取上周第一天时间
$week_start_time = strtotime('last week Monday');
$week_end_time = strtotime(date('Y-m-d 23:59:59',strtotime('last week Sunday')));
// $week_start_time = strtotime('2025-12-08');
// $week_end_time = strtotime('2025-12-15');
// $week_start_time = strtotime('2025-12-15');
// $week_end_time = strtotime('2025-12-22');
//获取上周时间
$time_value = date('o-W', $week_start_time);
echo $time_value . "工会周补贴数据生成开始\n";
//查询所有工会
$guild_list = db::name('vs_guild')->where(['delete_time'=>0])->field('id')->select();
$data_count = 0;
foreach ($guild_list as $key => $value) {
//获取所有工会房间ID
$guild_user_data = db::name('vs_guild_user')->where('guild_id', $value['id'])->where(['apply_time'=>['>',0],'status'=>1,'room_id'=>['>',0]])->field('room_id,apply_time,quit_time')->select();
$transaction = 0;
foreach ($guild_user_data as $k => $v) {
$week_start_time_seach = $week_start_time;
$week_end_time_seach = $week_end_time;
if($v['apply_time'] && $week_end_time_seach < $v['apply_time']){
continue;
}
if($v['quit_time'] && $v['quit_time'] < $week_start_time_seach){
continue;
}
if($v['apply_time'] && $week_start_time_seach < $v['apply_time']){
$week_start_time_seach = $v['apply_time'];
}
if($v['quit_time'] && ($week_end_time_seach > $v['quit_time'])){
$week_end_time_seach = $v['quit_time'];
}
$tables = GiftTableManager::getTablesByTimeRange(
$week_start_time_seach,
$week_end_time_seach
);
$all_total_price =0;
if($tables){
foreach ($tables as $table_name){
//表前缀
$table_prefix = config('database.prefix');
$table_name = str_replace($table_prefix, '', $table_name);
$total_price = db::name($table_name)
->whereIn('from_id',$v['room_id'])
->where(['from'=>['in',[2,3,6]],'createtime' => ['between', [$week_start_time_seach, $week_end_time_seach]]])
->sum('total_price');
$all_total_price += $total_price;
}
}
$transaction_one = $all_total_price;
$transaction += $transaction_one;
}
if($transaction > 0){
//判断是否已经生成过
// if (db::name('vs_guild_subsidy')->where(['guild_id'=>$value['id'],'week'=>$time_value])->find()) {
// continue;
// }
//获取补贴配置
$config = db::name('vs_guild_subsidy_config')->where(['status' => 1])->order('end_amount desc')->select(); //配置查询
if (!$config) {
echo '补贴配置为空\n';
die;
}
$subsidy_ratio = 0;
$subsidy_amount = 0;
foreach ($config as $k => $v) {
if ($transaction >= $v['end_amount']) {
$subsidy_ratio = $v['subsidy_ratio'];
$subsidy_amount = ($transaction * ($subsidy_ratio / 100)) / get_system_config_value('rmb_coin_ratio');//转为钻石
break; // 找到匹配项后提前退出循环
}
}
//生成补贴数据
$data = [
'guild_id' => $value['id'],
'week' => $time_value,
'start_time' => date('Y-m-d H:i:s', $week_start_time),
'end_time' =>date('Y-m-d H:i:s', $week_end_time),
'total_transaction' => $transaction,
'subsidy_amount' => $subsidy_amount,
'subsidy_ratio' => $subsidy_ratio,
'status' => 0,
'createtime' => time(),
];
echo "工会".$value['id']."生成数据:流水金额:{$transaction} 补贴比例:{$subsidy_ratio}% 补贴金额:{$subsidy_amount}\n";
// $subsidy_id = Db::name('vs_guild_subsidy_1')->insertGetId($data);。。。。11
// if ($subsidy_id) {
// echo "工会".$value['id']."生成成功(补贴ID".$subsidy_id." 补贴金额:".$subsidy_amount.")\n";
// $data_count++;
// }
}
}
echo $time_value . "工会周补贴数据生成完成-共" . $data_count . "条数据\n";
}
/*
* 生成工会补贴数据
* 配置:定时脚本每周一 执行
* 配置:/cron/Subsidy/createGuildSubsidyData
*/
public function createGuildSubsidyDataNewNew(){
//获取上周第一天时间
$week_start_time = strtotime('last week Monday');
$week_end_time = strtotime(date('Y-m-d 23:59:59',strtotime('last week Sunday')));
// $week_start_time = strtotime('2025-12-08');
// $week_end_time = strtotime('2025-12-15');
// $week_start_time = strtotime('2025-12-22');
// $week_end_time = strtotime('2025-12-31');
//获取上周时间
$time_value = date('o-W', $week_start_time);
echo $time_value . "工会周补贴数据生成开始\n";
//查询所有工会
$guild_list = db::name('vs_guild')->where(['delete_time'=>0])->field('id')->select();
$data_count = 0;
foreach ($guild_list as $key => $value) {
$transaction = Db::name('vs_guild_flow')
->where(['guild_id' => $value['id']])
->where(['createtime' => ['between', [$week_start_time, $week_end_time]]])
->sum('flow_price');
if($transaction > 0){
//判断是否已经生成过
// if (db::name('vs_guild_subsidy')->where(['guild_id'=>$value['id'],'week'=>$time_value])->find()) {
// continue;
// }
//获取补贴配置
$config = db::name('vs_guild_subsidy_config')->where(['status' => 1])->order('end_amount desc')->select(); //配置查询
if (!$config) {
echo '补贴配置为空\n';
die;
}
$subsidy_ratio = 0;
$subsidy_amount = 0;
foreach ($config as $k => $v) {
if ($transaction >= $v['end_amount']) {
$subsidy_ratio = $v['subsidy_ratio'];
$subsidy_amount = ($transaction * ($subsidy_ratio / 100)) / get_system_config_value('rmb_coin_ratio');//转为钻石
break; // 找到匹配项后提前退出循环
}
}
//生成补贴数据
$data = [
'guild_id' => $value['id'],
'week' => $time_value,
'start_time' => date('Y-m-d H:i:s', $week_start_time),
'end_time' =>date('Y-m-d H:i:s', $week_end_time),
'total_transaction' => $transaction,
'subsidy_amount' => $subsidy_amount,
'subsidy_ratio' => $subsidy_ratio,
'status' => 0,
'createtime' => time(),
];
echo "工会".$value['id']."生成数据:流水金额:{$transaction} 补贴比例:{$subsidy_ratio}% 补贴金额:{$subsidy_amount}\n";
// $subsidy_id = Db::name('vs_guild_subsidy_1')->insertGetId($data);。。。。11
// if ($subsidy_id) {
// echo "工会".$value['id']."生成成功(补贴ID".$subsidy_id." 补贴金额:".$subsidy_amount.")\n";
// $data_count++;
// }
}
}
echo $time_value . "工会周补贴数据生成完成-共" . $data_count . "条数据\n";
}
//礼物发放
public function giftSend(){
die;
// 用户补偿12963 3个白马王子 (礼物ID399
// 10012 5个白马王子(礼物ID399
// $user_id = 24224; //拿大锤
// $gift_id = 399; //白马王子
// $num = 3;
echo $user_id."开始执行\n";die;
$res = model('api/UserGiftPack')->change_user_gift_pack($user_id,$gift_id,$num,model('api/UserGiftPack')::SYSTEM_ADJUSTMENT,"补偿:巡乐会卡顿赠送");
print_r($res);
// $user_id = 21222; //娃哈哈
// $gift_id = 399; //白马王子
// $num = 5;
echo $user_id."开始执行\n";die;
$res = model('api/UserGiftPack')->change_user_gift_pack($user_id,$gift_id,$num,model('api/UserGiftPack')::SYSTEM_ADJUSTMENT,"补偿:巡乐会卡顿赠送");
print_r($res);die;
}
//禁言
public function mute_member(){
$guild_id = 77;
$guild_user_ids = db::name('vs_guild_user')
->where(['delete_time'=>0])
->where(['status'=>1])
->where(['guild_id'=>$guild_id])
->field('user_id')->select();
$user_ids =[];
foreach ($guild_user_ids as $key => $value) {
$user_ids[] = 'u'.$value['user_id'];
}
model('api/Tencent')->mute_member('g'.$guild_id, $user_ids, 86400*7);
}
public function cesjs(){
$user_nobility_info = db::name('vs_user_nobility')
->field('id,user_id,lid,end_time')
->where('delete_time', 0)
->where(['end_time'=>['>',time()]])
->select();
foreach ($user_nobility_info as $key => $value) {
$nobility_info = db::name('vs_nobility')
->field('lid,name,image,pay_price,renew_price,day,power_ids')
->where('delete_time', 0)
->where('lid', $value['lid'])
->find();
if($value['end_time'] > time() + $nobility_info['day']*86400){
echo $value['user_id']. "续费时间:".date('Y-m-d H:i:s',$value['end_time'])."\n";
}
}
die();
// echo (1772977260-time()) / (3600*24) ;die;
//金币:
// $surplus_time = 1769664342 - 1767187765;
// if($surplus_time > 0){
// //小时
// $surplus_time_hour = floor($surplus_time / 3600); //向下取整
// $pay_coin = 49999.00 - bcmul($surplus_time_hour * ((10990.00 / 30) / 24),1,2); //一小时的价格算
//echo floor($pay_coin);die;
$old_nobility_info = db::name('vs_nobility')
->field('lid,name,pay_price,pay_coin')
->where('delete_time', 0)
->where('lid',7)
->find();
$nobility_info = db::name('vs_nobility')
->field('lid,name,image,pay_price,renew_price,day,power_ids')
->where('delete_time', 0)
->where('lid', 8)
->find();
$old_end_time = 1774848342;
$pay_time = 1767278104;
$surplus_time = $old_end_time - $pay_time;
// echo $surplus_time;
if($surplus_time > 0){
//小时
$surplus_time_hour = floor($surplus_time / 3600); //向下取整
// echo $surplus_time_hour;die;
// echo ($old_nobility_info['pay_price'] / $nobility_info['day']) / 24;die;
$price = $nobility_info['pay_price'] - bcmul($surplus_time_hour * (($old_nobility_info['pay_price'] / $nobility_info['day']) / 24),1,2);
//使用时间
$use_time = $old_nobility_info['1767072342'] - time();
$price = $nobility_info['pay_price'] - $old_nobility_info['pay_price'] + ((($old_nobility_info['pay_price'] / $nobility_info['day']) / 24) * $use_time);
//价格=
//一小时的价格算
}
// $end_time = time() + $nobility_info['day'] * 86400;
echo $price;
// }
// $re = model('api/Decorate')->pay_decorate(20150,46,30,9);
// print_r($re);die;
}
//任务金币统计
public function task_coin_count(){
// $etime = "2025-12-29 10:30:00";
// $stime = "2025-12-29 00:00:00";
// $etime = "2025-12-30 04:00:00";
// $stime = "2025-12-29 00:00:00";
// $etime = "2026-01-05 00:00:00";
// $stime = "2025-12-22 00:00:00";
// $etime = "2025-12-29 00:00:00";
// $stime = "2025-12-29 00:00:00";
// $etime = "2025-12-31 01:14:09";
$stime = "2025-12-31 01:14:09";
$etime = "2026-01-05 00:00:00";
//获取所有已领取的任务奖励礼包
$where = [];
if(!empty($stime)){
$where['a.createtime'] = ['>=', strtotime($stime)];
}
if(!empty($etime)){
$where['a.createtime'] = ['<=', strtotime($etime)];
}
if(!empty($stime) && !empty($etime)){
$where['a.createtime'] = ['between', [strtotime($stime), strtotime($etime)]];
}
// if(!empty($etime) && strtotime($etime)<="1767038400"){//2025-12-30 04:00:00
// $tasks_bag_details = db::name('vs_gift_bag_receive_log')
// ->alias('a')
// ->join('vs_gift_bag_detail b', 'a.parent_id=b.id')
// ->field('a.createtime,b.type,b.foreign_id,b.quantity,b.gold')
// ->where(['b.type'=>['in', [1,2]]])
// ->whereBetween('a.gift_bag_id', [18, 51])
// ->where($where)
// ->select();
// }else{
$tasks_bag_details = db::name('vs_gift_bag_receive_tasks_log')
->alias('a')
->join('vs_gift_bag_detail b', 'a.parent_id=b.id')
->field('a.createtime,b.type,b.foreign_id,b.quantity,b.gold')
->where(['b.type'=>['in', [1,2]]])
->whereBetween('a.gift_bag_id', [18, 51])
->where($where)
->select();
// }
$total_reward_price = 0;
foreach ($tasks_bag_details as $detail){
if($detail['type'] == 1){
$total_reward_price += $detail['gold'] * $detail['quantity'];
}else{
$gift_price = db::name('vs_gift')->where('gid',$detail['foreign_id'])->value('gift_price');
$total_reward_price += $gift_price * $detail['quantity'];
}
}
echo $total_reward_price;
}
//修复公会房间数据
public function repair_guild_room_data(){
$guild_user_data = db::name('vs_guild_user')->where(['apply_time'=>['>',0],'status'=>1,'room_id'=>['>',0]])->field('id,user_id,room_id,guild_id,apply_time,quit_time')->select();
$num = 0;
foreach ($guild_user_data as $k => $v) {
$room_info = db::name('vs_room')->where('id',$v['room_id'])->field('id,type_id')->find();
if($room_info['type_id'] == 6){
$troom_info = db::name('vs_room')->where(['user_id'=>$v['user_id'],'delete_time'=>0,'type_id'=>['<>',6]])->find();
$rid =0;
if($troom_info){
$rid = $troom_info['id']??0;
}
$guild_name = db::name('vs_guild')->where('id',$v['guild_id'])->value('guild_name');
echo "公会名称:".$guild_name." 公会Id".$v['guild_id']." 关系Id".$v['id']."错误房间Id".$v['room_id']."正确房间Id".$rid."\n";
// $re = db::name('vs_guild_user')->where('id',$v['id'])->update(['room_id'=>$rid]);
// if($re){
// $num++;
// }
}
}
echo "修改完成 共:".$num;
}
}