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