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; } }