OrderFreeze.php 3.1 KB

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