| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- <?php
- namespace App\Http\Controllers\Api;
- use App\Servers\Aliyun\Oss;
- use App\Models\CollectEquipment as Model;
- use App\Models\CollectTask;
- use App\Models\CollectTaskAllocate;
- use App\Models\CollectEquipmentAccount;
- use App\Models\CollectTaskRecord;
- use Illuminate\Support\Facades\Log;
- use Illuminate\Support\Facades\DB;
- class CollectEquipmentExecute extends Api
- {
- private const HEARTBEAT_CACHE_PREFIX = 'collect:equipment:heartbeat:';
- private const HEARTBEAT_DEFAULT_TTL = 180;
- private function heartbeatCacheKey($collectEquipmentId)
- {
- return self::HEARTBEAT_CACHE_PREFIX.$collectEquipmentId;
- }
- /**
- * 执行结果上报
- *
- * */
- public function result_report(Model $Model, CollectTaskAllocate $CollectTaskAllocate, CollectTaskRecord $CollectTaskRecord){
- // 接受参数
- $collectTaskAllocateId = request('collect_task_allocate_id','');
- $status = request('status','');
- $finishStatus = request('finish_status',0);
- $realCount = request('real_count','');
- $startTime = request('start_time','');
- $endTime = request('end_time','');
- $startPage = request('start_page','');
- $endPage = request('end_page','');
- $remark = request('remark','');
- $equipment_account_id = request('equipment_account_id','');
- $allocateInfo = CollectTaskAllocate::query()->where([['id','=',$collectTaskAllocateId]])->first();
- if (!$allocateInfo){
- return json_send(['code'=>'error','msg'=>'执行任务ID参数错误']);
- }
- if($status == 2){
- //修改任务状态
- $res = CollectTaskAllocate::query()->where([['id','=',$collectTaskAllocateId]])->update(['status'=>$status]);
- if (!$res){
- return json_send(['code'=>'error','msg'=>'修改任务状态失败']);
- }
- } else {
- //修改设备占用状态
- $res = $Model->edit($allocateInfo['collect_equipment_id'],['task_status'=>0]);
- if (!$res){
- return json_send(['code'=>'error','msg'=>'修改设备占用状态失败']);
- }
- cache()->forget($this->heartbeatCacheKey($allocateInfo['collect_equipment_id']));
- //修改任务状态
- $res = CollectTaskAllocate::query()->where([['id','=',$collectTaskAllocateId]])->update(['status'=>$status]);
- if (!$res){
- return json_send(['code'=>'error','msg'=>'修改任务状态失败']);
- }
- if ($finishStatus){
- //查询设备ids
- $equipmentIds = CollectTaskAllocate::query()->where([
- ['collect_task_id','=',$allocateInfo['collect_task_id']],
- ['id','><',$collectTaskAllocateId],
- ['status','=',1]
- ])->pluck('collect_equipment_id')->toArray();
- //更新子任状态为弃用
- $allocateIds = CollectTaskAllocate::query()->where([
- ['collect_task_id','=',$allocateInfo['collect_task_id']],
- ['status','=',1]
- ])->pluck('id')->toArray();
- if ($allocateIds){
- $res = CollectTaskAllocate::query()->where([
- ['collect_task_id','=',$allocateInfo['collect_task_id']],
- ['status','=',1]
- ])->update(['status'=>6]);
- if (!$res){
- return json_send(['code'=>'error','msg'=>'修改子任务状态未弃用失败']);
- }
- }
- $res = CollectTask::query()->where([['id','=',$allocateInfo['collect_task_id']]])->update(['allocate_status'=>2,'status'=>2]);
- if (!$res){
- return json_send(['code'=>'error','msg'=>'修改总任务状态失败']);
- }
- if ($equipmentIds){
- //更新设备状态为空闲
- $res = $Model::query()->whereIn('id',$equipmentIds)->update(['task_status'=>0]);
- if (!$res){
- return json_send(['code'=>'error','msg'=>'修改设备状态失败']);
- }
- foreach ($equipmentIds as $equipmentId){
- cache()->forget($this->heartbeatCacheKey($equipmentId));
- }
- }
- }
- //添加任务执行记录
- $data = [
- 'collect_task_id' => $allocateInfo['collect_task_id'],
- 'collect_equipment_id' => $allocateInfo['collect_equipment_id'],
- 'platform' => $allocateInfo['platform'],
- 'product_name' => $allocateInfo['product_name'],
- 'product_specs' => $allocateInfo['product_specs'],
- 'minimum_order_quantity' => $allocateInfo['minimum_order_quantity'],
- 'start_time' => $startTime,
- 'end_time' => $endTime,
- 'start_page' => $startPage,
- 'end_page' => $endPage,
- 'real_count' => $realCount,
- 'status' => ($status == 3) ? 2 : 1,
- 'count' => $allocateInfo['count'],
- 'remark' => $remark,
- ];
- $res = $CollectTaskRecord->add($data);
- if (!$res){
- return json_send(['code'=>'error','msg'=>'添加任务执行记录失败']);
- }
- }
- if ($status == 4){
- $CollectEquipmentAccount = new CollectEquipmentAccount();
- //修改设备账号状态
- $res = $CollectEquipmentAccount::query()->where([['id','=',$allocateInfo['equipment_account_id']]])->update(['status'=>1]);
- if (!$res){
- return json_send(['code'=>'error','msg'=>'修改设备账号状态失败']);
- }
- }
- return json_send(['code'=>'success','msg'=>'成功','data'=>[]]);
- }
- /**
- * 设备心跳上报
- *
- * */
- public function heartbeat(Model $Model)
- {
- $collectEquipmentId = (int)request('collect_equipment_id',0);
- if (!$collectEquipmentId){
- return json_send(['code'=>'error','msg'=>'设备ID参数错误']);
- }
- $equipment = $Model->query()
- ->where('id','=',$collectEquipmentId)
- ->select('id','task_status')
- ->first();
- if (!$equipment){
- return json_send(['code'=>'error','msg'=>'设备不存在']);
- }
- if ((int)$equipment['task_status'] !== 1){
- return json_send(['code'=>'success','msg'=>'设备当前未执行任务','data'=>[]]);
- }
- $ttl = (int)request('ttl',self::HEARTBEAT_DEFAULT_TTL);
- if ($ttl < 60){
- $ttl = 60;
- }
- if ($ttl > 3600){
- $ttl = 3600;
- }
- $now = time();
- cache()->put($this->heartbeatCacheKey($collectEquipmentId),$now,$ttl);
- return json_send(['code'=>'success','msg'=>'心跳上报成功','data'=>['heartbeat_time'=>$now]]);
- }
- }
|