OrderIssueRejectedBillService.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. <?php
  2. namespace App\Services;
  3. use App\OracleDOCOrderHeader;
  4. use App\OrderIssue;
  5. use App\OrderIssueRejectedBill;
  6. use App\RejectedBill;
  7. use Illuminate\Database\Eloquent\Builder;
  8. use Illuminate\Database\Eloquent\Model;
  9. Class OrderIssueRejectedBillService
  10. {
  11. /**
  12. * @param $orderIssue
  13. * @param $logistic_number_return
  14. * @return Builder|Model|object|null|boolean
  15. */
  16. public function joinRejectedBill($orderIssue,$logistic_number_return)
  17. {
  18. $orderIssueRejectedBill = OrderIssueRejectedBill::query()
  19. ->where('order_issue_id',$orderIssue->id)
  20. ->where('logistic_number_return',$logistic_number_return)->first();
  21. if($orderIssueRejectedBill)return null;
  22. $orderIssue->joinRejectedBill($logistic_number_return);
  23. return OrderIssueRejectedBill::query()->with('rejectedBill')
  24. ->where('order_issue_id',$orderIssue->id)
  25. ->where('logistic_number_return',$logistic_number_return)->first() ?? false;
  26. }
  27. /**
  28. * @param OrderIssue $orderIssue
  29. * @param $logistic_number_return
  30. * @return void|null|boolean
  31. */
  32. public function unJoinRejectedBill($orderIssue,$logistic_number_return)
  33. {
  34. $orderIssueRejectedBill = OrderIssueRejectedBill::query()
  35. ->where('order_issue_id',$orderIssue->id)
  36. ->where('logistic_number_return',$logistic_number_return)->first();
  37. if(!$orderIssueRejectedBill)return null;
  38. return $orderIssue->unJoinRejectedBill($logistic_number_return);
  39. }
  40. /**
  41. * @param OrderIssue $orderIssue
  42. * @param $logistic_number_return
  43. * @param $logistic_number_return_update
  44. * @return null|boolean|Builder|Model|object
  45. */
  46. public function reviseJoinRejectedBill($orderIssue,$logistic_number_return,$logistic_number_return_update)
  47. {
  48. $orderIssueRejectedBill = OrderIssueRejectedBill::query()->where('order_issue_id',$orderIssue->id)
  49. ->where('logistic_number_return',$logistic_number_return)->first();
  50. if($orderIssueRejectedBill) return null;
  51. $orderIssue->reviseJoinRejectedBill($logistic_number_return,$logistic_number_return_update);
  52. return OrderIssueRejectedBill::query()->with('rejectedBill')
  53. ->where('order_issue_id',$orderIssue->id)
  54. ->where('logistic_number_return',$logistic_number_return)->first() ?? false;
  55. }
  56. /**
  57. * 退回件同步问题件
  58. * @param RejectedBill $rejectedBill
  59. */
  60. public function syncOrderIssue($rejectedBill)
  61. {
  62. if(!$rejectedBill)return;
  63. if(!$rejectedBill->logistic_number_return)return;
  64. if(isset($rejectedBill->orderIssue))return;
  65. /** @var OrderIssue $orderIssue */
  66. $orderIssue = null;
  67. // 原单退回
  68. if($rejectedBill->logistic_number === '原单退回' || $rejectedBill->logistic_number_return){
  69. $orderIssue = OrderIssue::query()->where('order_id',function ($query)use($rejectedBill){
  70. $query->table('order_packages')->selectRaw('order_id')->where('logistic_number',$rejectedBill->logistic_number_return);
  71. })->first();
  72. }
  73. if(!$orderIssue){
  74. $orderHeader = OracleDOCOrderHeader::query()->selectRaw('OrderNO')->where('SoReference1', function ($query) use ($rejectedBill) {
  75. $query->select('AsnReference2')->from('DOC_ASN_HEADER')->where('AsnReference3', $rejectedBill->logistic_number_return)->first();
  76. })->first();
  77. if(!$orderHeader)return;
  78. $orderIssue = OrderIssue::query()->where('order_id',function($query)use($orderHeader){
  79. $query->table('orders')->select('id')->where('code',$orderHeader->orderno);
  80. })->first();
  81. }
  82. if(!$orderIssue)return;
  83. $orderIssue->joinRejectedBill($rejectedBill->logistic_number_return);
  84. $this->syncOrderIssueRejectingStatus($orderIssue);
  85. }
  86. /**
  87. * 问题件同步退回件
  88. * @param OrderIssue $orderIssue
  89. */
  90. public function syncRejectedBill($orderIssue)
  91. {
  92. if(!$orderIssue)return;
  93. $order_packages = $orderIssue->order->packages ?? collect();
  94. if(!$order_packages)return;
  95. $logistic_number_return = RejectedBill::query()->whereIn('logistic_number_return',$order_packages->map(function($rejectedBill){
  96. return $rejectedBill->logistic_number_return;
  97. }))->get();
  98. $orderIssue->joinRejectedBill($logistic_number_return);
  99. $this->syncOrderIssueRejectingStatus($orderIssue);
  100. }
  101. /**
  102. * 问题件更新退单状态
  103. * @param OrderIssue $orderIssue
  104. */
  105. public function syncOrderIssueRejectingStatus($orderIssue)
  106. {
  107. $orderIssue->syncRejectingStatus();
  108. }
  109. /**
  110. * 根据问题件信息
  111. * @param RejectedBill $rejectedBill
  112. */
  113. public function updateByOrderIssue($rejectedBill)
  114. {
  115. $rejectedBill->syncOrderInfo();
  116. }
  117. }