| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- <?php
- namespace App\Console\Commands;
- use App\Facades\Servers\Logs\Log;
- use App\Http\Controllers\Api\CollectEquipmentAccount;
- use App\Models\CollectProduct;
- use App\Models\CollectEquipment;
- use App\Models\CollectTask;
- use App\Models\CollectTaskRecord;
- use App\Models\CollectTaskAllocate;
- use App\Models\CollectPlatformConfig;
- use Carbon\Carbon;
- use Illuminate\Console\Command;
- use Illuminate\Support\Facades\DB;
- class CollectTaskAllocateAgainCommand extends Command
- {
- protected $signature = 'collect-task-allocate-again';
- protected $description = '定时重新分配采集失败任务设备';
- public function __construct()
- {
- parent::__construct();
- }
- public function handle()
- {
- Log::info('collect-task-allocate-again','分配采集任务开始');
- $time = time();
- $collectEquipmentList = CollectEquipment::query()
- ->where([['status','=',0],['task_status','=',0]])
- ->get()
- ->toArray();
- if (!$collectEquipmentList){
- Log::info('collect-task-allocate-again','暂无可使用设备,分配结束');
- return 0;
- }
- $today = date("Y-m-d");
- $timestamp = strtotime($today);
- $map = [
- ['status','=',4],
- ['insert_time','>=',$timestamp],
- ];
- $collectTaskList = CollectTaskAllocate::query()
- ->where($map)
- ->get()
- ->toArray();
- if(!$collectTaskList){
- Log::info('collect-task-allocate-again','暂无待分配任务,分配结束');
- return 0;
- }
- $result = $this->allocate($collectTaskList);
- if ($result){
- Log::info('collect-task-allocate-again','分配成功');
- }
- return $result;
- }
- public function allocate($collectTaskList)
- {
- Log::info('collect-task-allocate-again','重新分配采集任务开始');
- $CollectPlatformConfig = new CollectPlatformConfig();
- $CollectTaskAllocate = new CollectTaskAllocate();
- $CollectEquipment = new CollectEquipment();
- foreach ($collectTaskList as $collectTask){
- $page = 1;
- $platformConfig = $CollectPlatformConfig->getOne($collectTask['platform']);
- if (!$platformConfig){
- Log::info('collect-task-allocate-again','暂无配置平台参数,分配结束');
- continue;
- }
- //设备每次执行能采集页数
- $pageNumber = ceil((($platformConfig['duration']*$platformConfig['minute_size'])/$platformConfig['page_size']));
- //获取任务已分配的最大页数
- $maxPage = CollectTaskAllocate::query()
- ->where('collect_task_id','=',$collectTask['id'])
- ->select('end_page as max_page')
- ->orderBy('end_page','desc')
- ->first();
- if ($maxPage){
- $page = $maxPage['max_page'] + 1;
- }
- //查询可用设备
- $collectEquipmentList = CollectEquipment::query()
- ->join('collect_equipment_account','collect_equipment_account.collect_equipment_id','=','collect_equipment.id')
- ->where([['collect_equipment.status','=',0],
- ['collect_equipment.task_status','=',0],
- ['collect_equipment_account.status','=',0],
- ['collect_equipment_account.platform','=',$collectTask['platform']],
- ])
- ->select('collect_equipment.*','collect_equipment_account.username','collect_equipment_account.password')
- ->get()
- ->toArray();
- if (!$collectEquipmentList){
- Log::info('collect-task-allocate','暂无可使用设备,分配结束');
- continue;
- }
- if (!$collectEquipmentList){
- Log::info('collect-task-allocate_again','暂无可使用设备,分配结束');
- continue;
- }
- //查询设备当日的使用次数
- $collectEquipmentIds = array_column($collectEquipmentList,'id');
- $collectEquipmentRecordCount = CollectTaskRecord::query()
- ->whereIn('collect_equipment_id',$collectEquipmentIds)
- ->where([['start_time','>=',strtotime(date('Y-m-d'))],
- ['start_time','<=',strtotime(date('Y-m-d',strtotime('+1 day')))],
- ['platform','=',$collectTask['platform']]])
- ->groupBy('collect_equipment_id')
- ->select('collect_equipment_id',DB::raw('count(*) as count'))
- ->get()
- ->toArray();
- //重组使用次数,设备id作为键
- if ($collectEquipmentRecordCount){
- $collectEquipmentRecordCount = array_column($collectEquipmentRecordCount,'count','collect_equipment_id');
- }
- //分配设备数量
- $allocateNumber = 0;
- foreach ($collectEquipmentList as $collectEquipment){
- if ($platformConfig){
- //查询设备最后执行时间
- $collectEquipmentRecord = CollectTaskRecord::query()->where([['collect_equipment_id','=',$collectEquipment['id']]])->select('end_time')->orderBy('end_time','desc')->first();
- if($collectEquipmentRecord){
- if (($platformConfig['rest_duration'] * 60) > (time()-$collectEquipmentRecord['end_time'])){
- Log::info('collect-task-allocate-again','设备处于休息时间');
- continue;
- }
- }
- if (isset($collectEquipmentRecordCount[$collectEquipment['id']])){
- if ($platformConfig['day_number'] <= $collectEquipmentRecordCount[$collectEquipment['id']]){
- Log::info('collect-task-allocate-again','设备当天该平台可执行次数已用完');
- continue;
- }
- }
- }
- //分配设备
- $data = $collectTask;
- unset($data['id']);
- $res = $CollectTaskAllocate->add($data);
- if (!$res){
- Log::info('collect-task-allocate-again','添加采集任务分配失败');
- }
- //修改设备占用状态
- $res = $CollectEquipment->edit($collectEquipment['id'],['task_status'=>1]);
- if (!$res){
- Log::info('collect-task-allocate-again','修改设备占用状态失败');
- }
- //修改任务状态
- $res = $CollectTaskAllocate->edit($collectTask['id'],['status'=>5]);
- if (!$res){
- Log::info('collect-task-allocate-again','修改任务状态失败');
- }
- }
- Log::info('collect-task-allocate-again','分配成功');
- }
- Log::info('collect-task-allocate-again','分配结束');
- return true;
- }
- }
|