CollectEquipmentExecute.php 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Servers\Aliyun\Oss;
  4. use App\Models\CollectEquipment as Model;
  5. use App\Models\CollectTask;
  6. use App\Models\CollectTaskAllocate;
  7. use App\Models\CollectEquipmentAccount;
  8. use App\Models\CollectTaskRecord;
  9. use Illuminate\Support\Facades\Log;
  10. use Illuminate\Support\Facades\DB;
  11. class CollectEquipmentExecute extends Api
  12. {
  13. private const HEARTBEAT_CACHE_PREFIX = 'collect:equipment:heartbeat:';
  14. private const HEARTBEAT_DEFAULT_TTL = 180;
  15. private function heartbeatCacheKey($collectEquipmentId)
  16. {
  17. return self::HEARTBEAT_CACHE_PREFIX.$collectEquipmentId;
  18. }
  19. /**
  20. * 执行结果上报
  21. *
  22. * */
  23. public function result_report(Model $Model, CollectTaskAllocate $CollectTaskAllocate, CollectTaskRecord $CollectTaskRecord){
  24. // 接受参数
  25. $collectTaskAllocateId = request('collect_task_allocate_id','');
  26. $status = request('status','');
  27. $finishStatus = request('finish_status',0);
  28. $realCount = request('real_count','');
  29. $startTime = request('start_time','');
  30. $endTime = request('end_time','');
  31. $startPage = request('start_page','');
  32. $endPage = request('end_page','');
  33. $remark = request('remark','');
  34. $equipment_account_id = request('equipment_account_id','');
  35. $allocateInfo = CollectTaskAllocate::query()->where([['id','=',$collectTaskAllocateId]])->first();
  36. if (!$allocateInfo){
  37. return json_send(['code'=>'error','msg'=>'执行任务ID参数错误']);
  38. }
  39. if($status == 2){
  40. //修改任务状态
  41. $res = CollectTaskAllocate::query()->where([['id','=',$collectTaskAllocateId]])->update(['status'=>$status]);
  42. if (!$res){
  43. return json_send(['code'=>'error','msg'=>'修改任务状态失败']);
  44. }
  45. } else {
  46. //修改设备占用状态
  47. $res = $Model->edit($allocateInfo['collect_equipment_id'],['task_status'=>0]);
  48. if (!$res){
  49. return json_send(['code'=>'error','msg'=>'修改设备占用状态失败']);
  50. }
  51. //修改任务状态
  52. $res = CollectTaskAllocate::query()->where([['id','=',$collectTaskAllocateId]])->update(['status'=>$status]);
  53. if (!$res){
  54. return json_send(['code'=>'error','msg'=>'修改任务状态失败']);
  55. }
  56. if ($finishStatus){
  57. //查询设备ids
  58. $equipmentIds = CollectTaskAllocate::query()->where([
  59. ['collect_task_id','=',$allocateInfo['collect_task_id']],
  60. ['id','><',$collectTaskAllocateId],
  61. ['status','=',1]
  62. ])->pluck('collect_equipment_id')->toArray();
  63. //更新子任状态为弃用
  64. $allocateIds = CollectTaskAllocate::query()->where([
  65. ['collect_task_id','=',$allocateInfo['collect_task_id']],
  66. ['status','=',1]
  67. ])->pluck('id')->toArray();
  68. if ($allocateIds){
  69. $res = CollectTaskAllocate::query()->where([
  70. ['collect_task_id','=',$allocateInfo['collect_task_id']],
  71. ['status','=',1]
  72. ])->update(['status'=>6]);
  73. if (!$res){
  74. return json_send(['code'=>'error','msg'=>'修改子任务状态未弃用失败']);
  75. }
  76. }
  77. $res = CollectTask::query()->where([['id','=',$allocateInfo['collect_task_id']]])->update(['allocate_status'=>2,'status'=>2]);
  78. if (!$res){
  79. return json_send(['code'=>'error','msg'=>'修改总任务状态失败']);
  80. }
  81. if ($equipmentIds){
  82. //更新设备状态为空闲
  83. $res = $Model::query()->whereIn('id',$equipmentIds)->update(['task_status'=>0]);
  84. if (!$res){
  85. return json_send(['code'=>'error','msg'=>'修改设备状态失败']);
  86. }
  87. }
  88. }
  89. //添加任务执行记录
  90. $data = [
  91. 'collect_task_id' => $allocateInfo['collect_task_id'],
  92. 'collect_equipment_id' => $allocateInfo['collect_equipment_id'],
  93. 'platform' => $allocateInfo['platform'],
  94. 'product_name' => $allocateInfo['product_name'],
  95. 'product_specs' => $allocateInfo['product_specs'],
  96. 'minimum_order_quantity' => $allocateInfo['minimum_order_quantity'],
  97. 'start_time' => $startTime,
  98. 'end_time' => $endTime,
  99. 'start_page' => $startPage,
  100. 'end_page' => $endPage,
  101. 'real_count' => $realCount,
  102. 'status' => ($status == 3) ? 2 : 1,
  103. 'count' => $allocateInfo['count'],
  104. 'remark' => $remark,
  105. ];
  106. $res = $CollectTaskRecord->add($data);
  107. if (!$res){
  108. return json_send(['code'=>'error','msg'=>'添加任务执行记录失败']);
  109. }
  110. }
  111. if ($status == 4){
  112. $CollectEquipmentAccount = new CollectEquipmentAccount();
  113. //修改设备账号状态
  114. $res = $CollectEquipmentAccount::query()->where([['id','=',$allocateInfo['equipment_account_id']]])->update(['status'=>1]);
  115. if (!$res){
  116. return json_send(['code'=>'error','msg'=>'修改设备账号状态失败']);
  117. }
  118. }
  119. return json_send(['code'=>'success','msg'=>'成功','data'=>[]]);
  120. }
  121. /**
  122. * 设备心跳上报
  123. *
  124. * */
  125. public function heartbeat(Model $Model)
  126. {
  127. $collectEquipmentId = (int)request('collect_equipment_id',0);
  128. if (!$collectEquipmentId){
  129. return json_send(['code'=>'error','msg'=>'设备ID参数错误']);
  130. }
  131. $equipment = $Model->query()
  132. ->where('id','=',$collectEquipmentId)
  133. ->select('id','task_status')
  134. ->first();
  135. if (!$equipment){
  136. return json_send(['code'=>'error','msg'=>'设备不存在']);
  137. }
  138. if ((int)$equipment['task_status'] !== 1){
  139. return json_send(['code'=>'success','msg'=>'设备当前未执行任务','data'=>[]]);
  140. }
  141. $ttl = (int)request('ttl',self::HEARTBEAT_DEFAULT_TTL);
  142. if ($ttl < 60){
  143. $ttl = 60;
  144. }
  145. if ($ttl > 3600){
  146. $ttl = 3600;
  147. }
  148. $now = time();
  149. cache()->put($this->heartbeatCacheKey($collectEquipmentId),$now,$ttl);
  150. return json_send(['code'=>'success','msg'=>'心跳上报成功','data'=>['heartbeat_time'=>$now]]);
  151. }
  152. }