| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- <?php
- namespace App\Services;
- use App\OracleDOCOrderHeader;
- use App\OrderIssue;
- use App\OrderIssueRejectedBill;
- use App\RejectedBill;
- use Illuminate\Database\Eloquent\Builder;
- use Illuminate\Database\Eloquent\Model;
- Class OrderIssueRejectedBillService
- {
- /**
- * @param $orderIssue
- * @param $logistic_number_return
- * @return Builder|Model|object|null|boolean
- */
- public function joinRejectedBill($orderIssue,$logistic_number_return)
- {
- $orderIssueRejectedBill = OrderIssueRejectedBill::query()
- ->where('order_issue_id',$orderIssue->id)
- ->where('logistic_number_return',$logistic_number_return)->first();
- if($orderIssueRejectedBill)return null;
- $orderIssue->joinRejectedBill($logistic_number_return);
- return OrderIssueRejectedBill::query()->with('rejectedBill')
- ->where('order_issue_id',$orderIssue->id)
- ->where('logistic_number_return',$logistic_number_return)->first() ?? false;
- }
- /**
- * @param OrderIssue $orderIssue
- * @param $logistic_number_return
- * @return void|null|boolean
- */
- public function unJoinRejectedBill($orderIssue,$logistic_number_return)
- {
- $orderIssueRejectedBill = OrderIssueRejectedBill::query()
- ->where('order_issue_id',$orderIssue->id)
- ->where('logistic_number_return',$logistic_number_return)->first();
- if(!$orderIssueRejectedBill)return null;
- return $orderIssue->unJoinRejectedBill($logistic_number_return);
- }
- /**
- * @param OrderIssue $orderIssue
- * @param $logistic_number_return
- * @param $logistic_number_return_update
- * @return null|boolean|Builder|Model|object
- */
- public function reviseJoinRejectedBill($orderIssue,$logistic_number_return,$logistic_number_return_update)
- {
- $orderIssueRejectedBill = OrderIssueRejectedBill::query()->where('order_issue_id',$orderIssue->id)
- ->where('logistic_number_return',$logistic_number_return)->first();
- if($orderIssueRejectedBill) return null;
- $orderIssue->reviseJoinRejectedBill($logistic_number_return,$logistic_number_return_update);
- return OrderIssueRejectedBill::query()->with('rejectedBill')
- ->where('order_issue_id',$orderIssue->id)
- ->where('logistic_number_return',$logistic_number_return)->first() ?? false;
- }
- /**
- * 退回件同步问题件
- * @param RejectedBill $rejectedBill
- */
- public function syncOrderIssue($rejectedBill)
- {
- if(!$rejectedBill)return;
- if(!$rejectedBill->logistic_number_return)return;
- if(isset($rejectedBill->orderIssue))return;
- /** @var OrderIssue $orderIssue */
- $orderIssue = null;
- // 原单退回
- if($rejectedBill->logistic_number === '原单退回' || $rejectedBill->logistic_number_return){
- $orderIssue = OrderIssue::query()->where('order_id',function ($query)use($rejectedBill){
- $query->table('order_packages')->selectRaw('order_id')->where('logistic_number',$rejectedBill->logistic_number_return);
- })->first();
- }
- if(!$orderIssue){
- $orderHeader = OracleDOCOrderHeader::query()->selectRaw('OrderNO')->where('SoReference1', function ($query) use ($rejectedBill) {
- $query->select('AsnReference2')->from('DOC_ASN_HEADER')->where('AsnReference3', $rejectedBill->logistic_number_return)->first();
- })->first();
- if(!$orderHeader)return;
- $orderIssue = OrderIssue::query()->where('order_id',function($query)use($orderHeader){
- $query->table('orders')->select('id')->where('code',$orderHeader->orderno);
- })->first();
- }
- if(!$orderIssue)return;
- $orderIssue->joinRejectedBill($rejectedBill->logistic_number_return);
- $this->syncOrderIssueRejectingStatus($orderIssue);
- }
- /**
- * 问题件同步退回件
- * @param OrderIssue $orderIssue
- */
- public function syncRejectedBill($orderIssue)
- {
- if(!$orderIssue)return;
- $order_packages = $orderIssue->order->packages ?? collect();
- if(!$order_packages)return;
- $logistic_number_return = RejectedBill::query()->whereIn('logistic_number_return',$order_packages->map(function($rejectedBill){
- return $rejectedBill->logistic_number_return;
- }))->get();
- $orderIssue->joinRejectedBill($logistic_number_return);
- $this->syncOrderIssueRejectingStatus($orderIssue);
- }
- /**
- * 问题件更新退单状态
- * @param OrderIssue $orderIssue
- */
- public function syncOrderIssueRejectingStatus($orderIssue)
- {
- $orderIssue->syncRejectingStatus();
- }
- /**
- * 根据问题件信息
- * @param RejectedBill $rejectedBill
- */
- public function updateByOrderIssue($rejectedBill)
- {
- $rejectedBill->syncOrderInfo();
- }
- }
|