TaskSystem/app/task/TaskCron.php
2023-08-28 09:31:13 +08:00

110 lines
4.2 KiB
PHP

<?php
namespace app\task;
use app\common\model\task_scheduling_plan\TaskSchedulingPlan;
use app\job\TaskAdd;
use think\facade\Log;
use yunwuxin\cron\Task;
use app\common\model\Company;
use app\common\model\task_template\TaskTemplate;
use app\common\logic\task\TaskLogic;
use app\common\model\task_scheduling\TaskScheduling;
class TaskCron extends Task{
public function configure()
{
$this->daily(); //设置任务的周期,每天执行一次,更多的方法可以查看源代码,都有注释
// $this->everyMinute();
}
/**
* 执行任务
* @return mixed
*/
protected function execute()
{
//任务下发
// $time=strtotime(date('Y-m-d',strtotime('-1 day')));
$time=strtotime(date('Y-m-d'));
// $tiem_end=$time+86399;
$plan_all=TaskScheduling::where('cron_time','<',$time)->where('status',1)->with('company_info')->select()->toArray();
$plan_ids=[];
foreach($plan_all as $k=>$v){
$all=TaskTemplate::where('status',1)->where('task_scheduling',$v['id'])->limit(30)->select()->toArray();
$plan_ids[]=$v['id'];
if($all){
$plan_all[$k]['template']=$all;
}else{
unset($plan_all[$k]);
}
}
$company_id=[];
foreach($plan_all as $k=>$v){
foreach($v['template'] as $kkk=>$vvv){
if ($v['types'] == 1 ||$vvv['types'] == 3) {
if ($v['company_info'] && $v['company_info']['day_count'] <=$vvv['stage_day_one']) {
$res=$this->stage_inspection($v['template'],'moeny','一');
if($res==false){
return false;
}
} else {
$res=$this->stage_inspection($v['template'],'money_two','二');
if($res==false){
return false;
}
}
} elseif ($v['types'] == 2) {
if ($v['company_info']['day_count'] <=$vvv['stage_day_one']) {
$res=$this->stage_inspection($v['template'],'moeny','一');
if($res==false){
return false;
}
} elseif ($v['company_info']['day_count'] <=$vvv['stage_day_two']) {
$res=$this->stage_inspection($v['template'],'money_two','二');
if($res==false){
return false;
}
} else {
$res=$this->stage_inspection($v['template'],'money_three','三');
if($res==false){
return false;
}
}
} else {
if ( $v['company_info']['day_count'] <=$vvv['stage_day_one']) {
$res=$this->stage_inspection($v['template'],'money_three','三');
if($res==false){
return false;
}
} else {
$res=$this->stage_inspection($v['template'],'money_two','二');
if($res==false){
return false;
}
}
}
}
foreach($v['template'] as $kk=>$vv){
TaskLogic::CronAdd($vv,$v);
}
$company_id[]=$v['company_id'];
}
Company::where('id','in',$company_id)->inc('day_count')->update();
TaskScheduling::where('id','in',$plan_ids)->update(['cron_time' => time()]);
Log::error('定时任务下发执行成功'.date('Y-m-d H:i:s'));
//...具体的任务执行
}
public function stage_inspection($v,$moeny_type='moeny',$title='一'){
$count_moeny=0;
foreach($v['template'] as $kkkk=>$vvvv){
$count_moeny+=$vvvv[$moeny_type];
}
if($count_moeny>200){
Log::info($title.'阶段金额大于200无法下达'.json_encode($v['company_info']));
return false;
}
return true;
}
}