OrderFreeze.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. namespace App\Jobs;
  3. use App\Services\LogService;
  4. use App\Services\OrderFreezeService;
  5. use Illuminate\Bus\Queueable;
  6. use Illuminate\Contracts\Queue\ShouldQueue;
  7. use Illuminate\Foundation\Bus\Dispatchable;
  8. use Illuminate\Queue\InteractsWithQueue;
  9. use Illuminate\Queue\SerializesModels;
  10. use Illuminate\Support\Facades\DB;
  11. class OrderFreeze implements ShouldQueue
  12. {
  13. use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
  14. protected $params;
  15. protected $pool;
  16. /**
  17. * Create a new job instance.
  18. * @param array $params
  19. * @return void
  20. */
  21. public function __construct(array $params)
  22. {
  23. $this->params = $params;
  24. }
  25. /**
  26. * Execute the job.
  27. *
  28. * @param OrderFreezeService $service
  29. *
  30. * @return void
  31. */
  32. public function handle(OrderFreezeService $service)
  33. {
  34. if (!$this->params)return;
  35. $this->pool = $service->getFreezes();
  36. if (isset($this->params[0][0]))$this->processUpdate();
  37. $this->processCreate();
  38. }
  39. protected function processUpdate()
  40. {
  41. unset($this->params[0]);
  42. }
  43. protected function processCreate()
  44. {
  45. $freezeOrders = [];
  46. foreach ($this->params as $param){
  47. if (!$param["frozen"]=='是')continue;
  48. if (!$param["logistic_id"])continue;
  49. if ($this->isFreeze($param))$freezeOrders[] = $param["code"];
  50. }
  51. $this->pushWMS($freezeOrders);
  52. }
  53. private function isFreeze($param)
  54. {
  55. $status = ['分配完成','创建订单','拣货完成','播种完成'];
  56. if (array_search($param["wms_status"],$status)===false)return false;
  57. foreach ($this->pool as $pool){
  58. if ($pool["logistic_id"]!=$param["logistic_id"])continue;
  59. if ($pool["province_name"] && (mb_strpos($param["province"],$pool["province_name"]) === false))continue;
  60. if ($pool["city_name"] && (mb_strpos($param["city"],$pool["city_name"]) === false))continue;
  61. if ($pool["location_name"] && (mb_strpos($param["district"],$pool["location_name"]) === false))continue;
  62. return true;
  63. }
  64. return false;
  65. }
  66. private function pushWMS($freezeOrders)
  67. {
  68. if (!$freezeOrders)return;
  69. $where = "''";
  70. foreach ($freezeOrders as $f)$where .= ",'{$f}'";
  71. $sql = <<<sql
  72. UPDATE DOC_ORDER_HEADER SET releasestatus = 'H',waveno='*',notes = CASE WHEN notes IS NULL THEN '停运' ELSE notes||',停运' END where ORDERNO in ({$where})
  73. sql;
  74. DB::connection("oracle")->update($sql);
  75. LogService::log(__METHOD__,"订单同步-自动冻结",$sql);
  76. }
  77. }