CollectTaskCommand.php 3.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <?php
  2. namespace App\Console\Commands;
  3. use App\Facades\Servers\Logs\Log;
  4. use App\Models\CollectProduct;
  5. use App\Models\CollectEquipment;
  6. use App\Models\CollectTask;
  7. use App\Models\CollectTaskAllocate;
  8. use Carbon\Carbon;
  9. use Illuminate\Console\Command;
  10. use Illuminate\Support\Facades\DB;
  11. class CollectTaskCommand extends Command
  12. {
  13. protected $signature = 'collect-task';
  14. protected $description = '定时分配采集任务设备';
  15. public function __construct()
  16. {
  17. parent::__construct();
  18. }
  19. public function handle()
  20. {
  21. Log::info('collect-task','分配采集任务开始');
  22. $CollectTaskModel = new CollectTask();
  23. $endTime = strtotime(date('Y-m-d',time())) + 86400;
  24. $time = time();
  25. $map = [
  26. ['collect_product.status','=',0],
  27. ['collect_product.sampling_start_time','<=',$time],
  28. ];
  29. $collectProductList = CollectProduct::query()
  30. ->leftJoin('collect_product_keyword','collect_product.id','=','collect_product_keyword.collect_product_id')
  31. ->where($map)
  32. ->where(function ($query) use ($time) {
  33. $query->where('collect_product.sampling_end_time', '>=', $time)
  34. ->orWhere('collect_product.sampling_end_time', 0);
  35. })
  36. ->select(
  37. 'collect_product.*',
  38. DB::raw('GROUP_CONCAT(collect_product_keyword.keyword SEPARATOR ", ") as product_keyword')
  39. )
  40. ->groupBy('collect_product.id')
  41. ->get()
  42. ->toArray();
  43. if ($collectProductList){
  44. foreach ($collectProductList as $collectProduct){
  45. if ($collectProduct['sampling_cycle']){
  46. //查询任务最新执行时间
  47. $collectTask = $CollectTaskModel::query()->where([['collect_product_id','=',$collectProduct['id']]])->select('insert_time')->orderBy('insert_time','desc')->first();
  48. if($collectTask){
  49. if (($collectProduct['sampling_cycle']*86400) > ($endTime - $collectTask['insert_time'])){
  50. continue;
  51. }
  52. }
  53. }
  54. if (!$collectProduct['platform']){
  55. continue;
  56. }
  57. $platforms = explode(',',$collectProduct['platform']);
  58. $data = [];
  59. foreach ($platforms as $platform){
  60. $data[] = [
  61. 'collect_product_id' => $collectProduct['id'],
  62. 'platform' => $platform,
  63. 'product_name' => $collectProduct['product_name'] ?? '',
  64. 'product_specs' => $collectProduct['product_specs'] ?? '',
  65. 'product_brand' => $collectProduct['product_brand'] ?? '',
  66. 'product_keyword' => $collectProduct['product_keyword'] ?? '',
  67. 'company_id' => $collectProduct['company_id'],
  68. 'max_equipment_number' => 1,
  69. 'status' => 1,
  70. 'insert_time' => time(),
  71. ];
  72. }
  73. //添加到任务
  74. $res = $CollectTaskModel::query()->insert($data);
  75. if (!$res){
  76. Log::info('collect-task','添加采集任务失败');
  77. }
  78. }
  79. }else{
  80. Log::info('collect-task','暂无采集任务');
  81. }
  82. Log::info('collect-task','分配采集任务结束');
  83. return 0;
  84. }
  85. }