Files
2025-10-20 09:59:39 +08:00

172 lines
7.5 KiB
PHP
Raw Permalink 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\adminApi;
use think\Controller;
use think\Db;
/*
* 工会
*/
class Subsidy
{
/*
* 运行函数
*/
function index()
{
echo "工会补贴生成开始:\n";
$this->createGuildSubsidyData();//工会补贴数据
echo "\n";
echo "房间补贴生成开始:\n";
$this->createRoomSubsidyData();//房间补贴数据
}
/*
* 生成工会补贴数据
* 配置:定时脚本每周一 执行
* 配置:/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-09-29');
// $week_end_time = strtotime('2025-09-29 23:59:59');
//获取上周时间
$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'])->field('room_id,createtime,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['createtime'] && $week_start_time_seach < $v['createtime']){
$week_start_time_seach = $v['createtime'];
}
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')->insertGetId($data);
if ($subsidy_id) {
echo "工会".$value['id']."生成成功(补贴ID".$subsidy_id." 补贴金额:".$subsidy_amount.")\n";
$data_count++;
}
}
}
echo $time_value . "工会周补贴数据生成完成-共" . $data_count . "条数据\n";
}
/*
* 生成房间补贴数据
* 配置:定时脚本每周一 执行
* 配置:/Core/RoomSubsidy/createRoomSubsidyData
*/
public function createRoomSubsidyData(){
//获取上周第一天时间
$week_start_time = strtotime('last monday');
$week_end_time = strtotime(date('Y-m-d 23:59:59',strtotime('last sunday')));
// $week_start_time = strtotime('2025-08-11');
// $week_end_time = strtotime('2025-08-17 23:59:59');
//获取上周时间
$time_value = date('o-W', $week_start_time);
echo $time_value . "房间周补贴数据生成开始\n";
//查询所有房间
$room_list = db::name('vs_room')->where(['delete_time'=>0,'is_earnings'=>1])->field('id')->select();
$data_count = 0;
foreach ($room_list as $key => $value) {
$transaction = db::name('vs_give_gift')
->where('from_id',$value['id'])
->where(['from'=>['in',[2,3,6]],'createtime' => ['between', [$week_start_time, $week_end_time]]])
->sum('total_price');
if($transaction > 0){
//判断是否已经生成过
if (db::name('vs_room_subsidy')->where(['room_id'=>$value['id'],'week'=>$time_value])->find()) {
continue;
}
//获取补贴配置
$config = db::name('vs_room_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 = [
'room_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(),
];
$subsidy_id = Db::name('vs_room_subsidy')->insertGetId($data);
if ($subsidy_id) {
echo "房间".$value['id']."生成成功(补贴ID".$subsidy_id." 补贴金额:".$subsidy_amount.")\n";
$data_count++;
}
}
}
echo $time_value . "房间周补贴数据生成完成-共" . $data_count . "条数据\n";
}
}