RejectedBillService.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. <?php
  2. namespace App\Services;
  3. use App\OracleDOCOrderHeader;
  4. use App\OrderIssue;
  5. use App\RejectedBill;
  6. use App\Services\common\BatchUpdateService;
  7. use App\Services\common\DataHandlerService;
  8. use Carbon\Carbon;
  9. Class RejectedBillService
  10. {
  11. private function conditionQuery(array $params){
  12. $query = RejectedBill::query();
  13. if ($params['order_number'] ?? false){
  14. $query->whereIn('order_number',$params['order_number']);
  15. }
  16. return $query;
  17. }
  18. public function get(array $params){
  19. return $this->conditionQuery($params)->get();
  20. }
  21. public function create(array $params){
  22. return RejectedBill::query()->create($params);
  23. }
  24. public function syncOrderIssue($rejectedBill)
  25. {
  26. /**
  27. * @var OrderIssue $orderIssue
  28. */
  29. $orderIssue = $rejectedBill->orderIssue()->first();
  30. if(!$orderIssue && $rejectedBill['logistic_number'] === '原单退回'){ // 原单退回
  31. $orderIssue = OrderIssue::query()->with('order')->whereHas('order',function($query)use($rejectedBill){
  32. $query->where('client_code',$rejectedBill['order_number']);
  33. })->first();
  34. }else if(!$orderIssue && isset($rejectedBill->logistic_number_return)){
  35. $orderIssue = OrderIssue::query()->with('order.packages')->whereHas('order.packages',function($query)use($rejectedBill){
  36. $query->where('logistic_number',$rejectedBill->logistic_number_return);
  37. })->first();
  38. }
  39. if(!isset($orderIssue)){ // 没有对应的问题发货订单
  40. $orderHeader = OracleDOCOrderHeader::query()->where('soreference1',function($query)use($rejectedBill){
  41. $query->select('asnreference2')->from('DOC_ASN_HEADER')->where('asnreference3',$rejectedBill->logistic_number_return)->first();
  42. })->first();
  43. // $orderHeader = OracleDOCOrderHeader::query()->where('soreference1',function($query)use($rejectedBill){
  44. // $query->select('asnreference2')->from('DOC_ASN_HEADER')->where('asnreference3',$rejectedBill->logistic_number_return)->first();
  45. // })->first();
  46. if(!isset($orderHeader))return;
  47. $orderIssue = OrderIssue::query()->with('order')->whereHas('order',function($query)use($orderHeader){
  48. $query->where('code',$orderHeader->orderno);
  49. })->first();
  50. }
  51. if(isset($orderIssue)){
  52. // 更新问题件的退回单号
  53. if($orderIssue['logistic_number_return']!=$rejectedBill['logistic_number_return'])
  54. $orderIssue->update(['logistic_number_return'=>$rejectedBill['logistic_number_return']]);
  55. //确认问题件有的时候需要更新状态和提示
  56. $orderIssue->同步退单状态();
  57. $orderIssue->update(['is_new_rejecting' => '有']);
  58. app('LogService')->log(__METHOD__,__FUNCTION__,'退回单同步问题件'.json_encode($rejectedBill).json_encode($orderIssue));
  59. }
  60. }
  61. public function syncLoadedStatusByAsnHerder($asnHerders){
  62. if ($asnHerders->isEmpty())return null;
  63. $updateCollect=$this->getUpdateCollect($asnHerders);
  64. if ($updateCollect->isEmpty())return null;
  65. $logisticNumberReturn=$this->getLogisticNumberReturn($updateCollect);
  66. $rejectedBills=$this->getRejectedBills($logisticNumberReturn);
  67. if ($rejectedBills->isEmpty())return null;
  68. $updateParams = [[
  69. 'logistic_number_return','is_loaded','updated_at'
  70. ]];
  71. $updated_at=Carbon::now()->toDateTimeString();
  72. /** @var DataHandlerService $dataHandlerService */
  73. $dataHandlerService = app(DataHandlerService::class);
  74. $rejectedBills_map = $dataHandlerService->dataHeader(['logistic_number_return'],$rejectedBills);
  75. foreach ($updateCollect as $data){
  76. if(!$data->asnreference3&&!$data->notes){continue;}
  77. $result=[];
  78. if ($data->asnreference3){
  79. $rejectedBill=$dataHandlerService->getKeyValue(['logistic_number_return'=>$data->asnreference3],$rejectedBills_map);
  80. if ($rejectedBill&&$rejectedBill->is_loaded!=1) $updateParams[] = [
  81. 'logistic_number_return'=>$data->asnreference3,
  82. 'is_loaded' => 1,
  83. 'updated_at' =>$updated_at,
  84. ];
  85. }else{
  86. preg_match("/[a-zA-Z]{0,5}\d{6,20}/",$data->notes, $result);
  87. $rejectedBill=$dataHandlerService->getKeyValue(['logistic_number_return'=>$result[0]],$rejectedBills_map);
  88. if ($rejectedBill&&$rejectedBill->is_loaded!=1) $updateParams[] = [
  89. 'logistic_number_return'=>$result[0],
  90. 'is_loaded' => 1,
  91. 'updated_at' =>$updated_at,
  92. ];
  93. $result=[];
  94. }
  95. }
  96. if(count($updateParams) > 1){
  97. $this->batchUpdate($updateParams);
  98. }
  99. }
  100. public function getUpdateCollect($asnHerders){
  101. $updateCollect=collect();
  102. foreach ($asnHerders as $asnHerder){
  103. if (($asnHerder->asnType->codename_c=='退货入库'
  104. || $asnHerder->asnType->codename_c=='其他入库')
  105. &&$asnHerder->asnStatus->codename_c=='完全收货'){
  106. $updateCollect->add($asnHerder);
  107. }
  108. }
  109. return $updateCollect;
  110. }
  111. public function getLogisticNumberReturn($updateCollect){
  112. $logisticNumberReturn=[];
  113. foreach ($updateCollect as $data){
  114. if(!$data->asnreference3&&!$data->notes){continue;}
  115. $result=[];
  116. if ($data->asnreference3){
  117. array_push($logisticNumberReturn,$data->asnreference3);
  118. }else{
  119. preg_match("/[a-zA-Z]{0,5}\d{6,20}/",$data->notes, $result);
  120. if (count($result)>0)array_push($logisticNumberReturn,$result[0]);
  121. $result=[];
  122. }
  123. }
  124. return $logisticNumberReturn;
  125. }
  126. public function batchUpdate($params){
  127. return app(BatchUpdateService::class)->batchUpdate('rejected_bills',$params);
  128. }
  129. public function getRejectedBills(array $logisticNumberReturn){
  130. if(count($logisticNumberReturn)<1){return null;}
  131. return RejectedBill::query()->whereIn('logistic_number_return',$logisticNumberReturn)->get();
  132. }
  133. }