OrderIssueRejectedBillService.php 5.9 KB

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