RejectedBillService.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. <?php
  2. namespace App\Services;
  3. use App\RejectedBill;
  4. use App\Services\common\BatchUpdateService;
  5. use App\Services\common\DataHandlerService;
  6. use Carbon\Carbon;
  7. Class RejectedBillService
  8. {
  9. private function conditionQuery(array $params)
  10. {
  11. $query = RejectedBill::query();
  12. if ($params['order_number'] ?? false) {
  13. $query->whereIn('order_number', $params['order_number']);
  14. }
  15. return $query;
  16. }
  17. public function get(array $params)
  18. {
  19. return $this->conditionQuery($params)->get();
  20. }
  21. public function create(array $params)
  22. {
  23. return RejectedBill::query()->create($params);
  24. }
  25. /**
  26. * 同步退回单号
  27. * @param RejectedBill $rejectedBill
  28. */
  29. public function syncOrderIssue($rejectedBill)
  30. {
  31. $rejectedBill->syncOrderIssue();
  32. }
  33. public function syncLoadedStatusByAsnHerder($asnHerders)
  34. {
  35. $updateParams=$this->getNeedUpdateLoadedStatusByWms($asnHerders);
  36. if (!$updateParams)return;
  37. if (count($updateParams) > 1) {
  38. $this->batchUpdate($updateParams);
  39. }
  40. }
  41. public function getNeedUpdateLoadedStatusByWms($asnHerders)
  42. {
  43. if ($asnHerders->isEmpty()) return null;
  44. $updateCollect = $this->getUpdateCollect($asnHerders);
  45. if ($updateCollect->isEmpty()) return null;
  46. $logisticNumberReturn = $this->getLogisticNumberReturn($updateCollect);
  47. $rejectedBills = $this->getRejectedBills($logisticNumberReturn);
  48. if (!$rejectedBills) return null;
  49. $updateParams = [[
  50. 'logistic_number_return', 'is_loaded', 'updated_at'
  51. ]];
  52. $updated_at = Carbon::now()->toDateTimeString();
  53. /** @var DataHandlerService $dataHandlerService */
  54. $dataHandlerService = app(DataHandlerService::class);
  55. $rejectedBills_map = $dataHandlerService->dataHeader(['logistic_number_return'], $rejectedBills);
  56. foreach ($updateCollect as $data) {
  57. if (!$data->asnreference3 && !$data->notes) {
  58. continue;
  59. }
  60. $result = [];
  61. if ($data->asnreference3) {
  62. $rejectedBill = $dataHandlerService->getKeyValue(['logistic_number_return' => $data->asnreference3], $rejectedBills_map);
  63. if ($rejectedBill && $rejectedBill->is_loaded != 1) $updateParams[] = [
  64. 'logistic_number_return' => $data->asnreference3,
  65. 'is_loaded' => 1,
  66. 'updated_at' => $updated_at,
  67. ];
  68. } else {
  69. preg_match("/[a-zA-Z]{0,5}\d{6,20}/", $data->notes, $result);
  70. if (count($result)<1) continue;
  71. $rejectedBill = $dataHandlerService->getKeyValue(['logistic_number_return' => $result[0]], $rejectedBills_map);
  72. if ($rejectedBill && $rejectedBill->is_loaded != 1) $updateParams[] = [
  73. 'logistic_number_return' => $result[0],
  74. 'is_loaded' => 1,
  75. 'updated_at' => $updated_at,
  76. ];
  77. $result = [];
  78. }
  79. }
  80. return $updateParams;
  81. }
  82. public function getUpdateCollect($asnHerders)
  83. {
  84. $updateCollect = collect();
  85. foreach ($asnHerders as $asnHerder) {
  86. if ($asnHerder->asnType && $asnHerder->asnStatus &&
  87. ($asnHerder->asnType->codename_c == '退货入库' || $asnHerder->asnType->codename_c == '其他入库')
  88. && ($asnHerder->asnStatus->codename_c == '完全收货' ||$asnHerder->asnStatus->codename_c == 'ASN关闭')) {
  89. $updateCollect->add($asnHerder);
  90. }
  91. }
  92. return $updateCollect;
  93. }
  94. public function getLogisticNumberReturn($updateCollect)
  95. {
  96. $logisticNumberReturn = [];
  97. foreach ($updateCollect as $data) {
  98. if (!$data->asnreference3 && !$data->notes) {
  99. continue;
  100. }
  101. $result = [];
  102. if ($data->asnreference3) {
  103. array_push($logisticNumberReturn, $data->asnreference3);
  104. } else {
  105. preg_match("/[a-zA-Z]{0,5}\d{6,20}/", $data->notes, $result);
  106. if (count($result) > 0) array_push($logisticNumberReturn, $result[0]);
  107. $result = [];
  108. }
  109. }
  110. return $logisticNumberReturn;
  111. }
  112. public function batchUpdate($params)
  113. {
  114. return app(BatchUpdateService::class)->batchUpdate('rejected_bills', $params);
  115. }
  116. public function getRejectedBills(array $logisticNumberReturn)
  117. {
  118. if (count($logisticNumberReturn) < 1) {
  119. return null;
  120. }
  121. return RejectedBill::query()->whereIn('logistic_number_return', $logisticNumberReturn)->get();
  122. }
  123. }