BatchService.php 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <?php
  2. namespace App\Services;
  3. use App\Batch;
  4. use Exception;
  5. Class BatchService
  6. {
  7. /** @var StationTaskBatchService $stationTaskBatchService */
  8. private $stationTaskBatchService;
  9. /** @var StationRuleBatchService $stationRuleBatchService */
  10. private $stationRuleBatchService;
  11. /** @var StationTaskMaterialBoxService $stationTaskMaterialBoxService */
  12. private $stationTaskMaterialBoxService;
  13. /** @var StationTaskCommodityService $stationTaskCommodityService */
  14. private $stationTaskCommodityService;
  15. /** @var StationTaskService $stationTaskService */
  16. private $stationTaskService;
  17. public function __construct(){
  18. $this->stationTaskBatchService=null;
  19. $this->stationRuleBatchService=null;
  20. $this->stationTaskMaterialBoxService=null;
  21. $this->stationTaskCommodityService=null;
  22. $this->stationTaskService=null;
  23. }
  24. public function get(array $params)
  25. {~
  26. $query = Batch::query();
  27. foreach ($params as $column=>$param){
  28. if (is_array($param))$query->whereIn($column,$param);
  29. else $query->where($column,$param);
  30. }
  31. return $query->get();
  32. }
  33. public function insert(array $insert)
  34. {
  35. $result = Batch::query()->insert($insert);
  36. if($result)$this->assignTasks($insert);
  37. return $result;
  38. }
  39. public function updateWhereIn($key,$values,$updateKeyValues){
  40. Batch::query()->whereIn($key,$values)->update($updateKeyValues);
  41. }
  42. /**
  43. * 为波次附加任务,已附加的重复任务不影响
  44. * @param Batch[] $batches
  45. * @throws Exception
  46. */
  47. public function assignTasks(array $batches)
  48. {
  49. $this->stationTaskBatchService=app('StationTaskBatchService');
  50. $this->stationRuleBatchService=app('StationRuleBatchService');
  51. $this->stationTaskService=app('StationTaskService');
  52. $this->stationTaskCommodityService=app('StationTaskCommodityService');
  53. $this->stationTaskMaterialBoxService=app('StationTaskMaterialBoxService');
  54. $batches_canProcess = $this->stationRuleBatchService->getBatches_canProcess($batches); //按规则过滤需要的波次
  55. if($batches_canProcess->isEmpty()) return;
  56. $stationTasks = $this->stationTaskService->create($batches_canProcess->count()); //生成总任务
  57. $stationTaskBatches=$this->stationTaskBatchService->createByBatches($batches_canProcess,$stationTasks); //注册波次任务
  58. $this->stationTaskCommodityService->createByBatches($batches_canProcess,$stationTasks); //注册商品任务
  59. $this->stationTaskMaterialBoxService->createByBatches($batches_canProcess,$stationTasks); //注册料箱任务
  60. $this->stationTaskBatchService->runMany($stationTaskBatches);//执行波次任务
  61. }
  62. public function getBatchByCodes($codes)
  63. {
  64. if(empty($codes))return collect();
  65. if(count($codes) == 0)return collect();
  66. return Batch::query()->whereIn('code',$codes)->get();
  67. }
  68. }