loustwo 4 лет назад
Родитель
Сommit
ea526bb012

+ 277 - 270
app/Http/Controllers/OrderIssueController.php

@@ -15,11 +15,13 @@ use App\OrderIssueType;
 use App\Owner;
 use App\QualityLabel;
 use App\RejectedBill;
+use App\Services\LogService;
 use App\Services\OrderIssueProcessLogService;
 use App\Services\OrderIssueService;
 use App\Services\OrderIssueTypeService;
 use App\Services\OrderService;
 use App\Services\OwnerService;
+use App\Services\RejectedBillSyncOrderService;
 use App\Shop;
 use App\UserOwnerGroup;
 use App\UserWorkgroup;
@@ -35,29 +37,45 @@ use Oursdreams\Export\Export;
 
 class OrderIssueController extends Controller
 {
-    /**
-     * @var OrderIssueTypeService $orderIssueTypeService;
-     */
-    private $orderIssueTypeService ;
-    public function __construct()
-    {
-        $this->orderIssueTypeService = app(OrderIssueTypeService::class);
-    }
-
-    public function index(Request $request, OrderIssueFilters $filter,OrderIssueService $service)
+    private $service;
+    private $orderService;
+    private $ownerService;
+    private $orderIssueProcessLogService;
+    private $orderIssueTypeService;
+    private $rejectedBillSyncOrderService;
+    private $logService;
+
+    public function __construct(OrderIssueService $service,
+                                OwnerService $ownerService,
+                                OrderIssueProcessLogService $orderIssueProcessLogService,
+                                OrderService $orderService,
+                                OrderIssueTypeService $orderIssueTypeService,
+                                RejectedBillSyncOrderService $rejectedBillSyncOrderService,
+                                LogService $logService)
+    {
+        $this->service = $service;
+        $this->ownerService = $ownerService;
+        $this->orderIssueProcessLogService = $orderIssueProcessLogService;
+        $this->orderService = $orderService;
+        $this->orderIssueTypeService = $orderIssueTypeService;
+        $this->rejectedBillSyncOrderService = $rejectedBillSyncOrderService;
+        $this->logService = $logService;
+    }
+
+    public function index(Request $request, OrderIssueFilters $filter)
     {
         if (!Gate::allows('订单管理-问题件-查询')) {
             return redirect(url('/'));
         }
-        $owners = app(OwnerService::class)->getAuthorizedOwners();
+        $owners = $this->ownerService->getAuthorizedOwners();
         $orderIssues = OrderIssue::query()->filter($filter)->defaultWith()->paginate($request['paginate'] ?? 50);
-        $service->tagWorkOrder($orderIssues);
+        $this->service->tagWorkOrder($orderIssues);
         $orderIssueType = $this->orderIssueTypeService->getAllOrderIssueTypes();
         $qualityLabel = QualityLabel::all();
         $logistics = Logistic::all();
         $userWorkgroup = UserWorkgroup::all();
         $userOwnerGroups = UserOwnerGroup::all();
-        return view('order/issue/index', compact('owners', 'orderIssues', 'orderIssueType', 'qualityLabel','userWorkgroup','logistics','userOwnerGroups'));
+        return view('order/issue/index', compact('owners', 'orderIssues', 'orderIssueType', 'qualityLabel', 'userWorkgroup', 'logistics', 'userOwnerGroups'));
     }
 
     public function create()
@@ -78,19 +96,13 @@ class OrderIssueController extends Controller
         if (!Gate::allows('订单管理-订单问题件生成')) {
             return redirect(url('/'));
         }
-        /**
-         * @var OrderIssueService $orderIssueService
-         * @var OrderIssue $orderIssue
-         */
-        $orderIssueService = app('OrderIssueService');
-        $orderIssueService->validatorCreate($request)->validate();
-        $orderIssue = $orderIssueService->create($request->all());
+        $this->service->validatorCreate($request)->validate();
+        $orderIssue = $this->service->create($request->all());
         event(new AddOrUpdateOrderIssues([$orderIssue['order_id']]));
-        if($request->has('logistic_number_return') && !OrderIssueRejectedBill::isExit($orderIssue->id,$request['logistic_number_return'])){
+        if ($request->has('logistic_number_return') && !OrderIssueRejectedBill::isExit($orderIssue->id, $request['logistic_number_return'])) {
             $orderIssue->joinRejectedBill($request['logistic_number_return']);
         }
-        $orderIssue->loadMissing('orderIssueRejectedBills');
-        $orderIssue->syncRejectingStatus();
+        $this->rejectedBillSyncOrderService->orderIssueSyncRejectingStatus($orderIssue);
         OrderIssueProcessLog::query()->create(['order_issue_id' => $orderIssue['id'], 'user_id' => Auth::user()['id'], 'content' => $request['content'], 'type' => '创建']);
         return redirect('order/issue/index');
     }
@@ -100,7 +112,7 @@ class OrderIssueController extends Controller
         if (!Gate::allows('订单管理-问题件-编辑')) {
             return redirect(url('/'));
         }
-        $orderIssue = OrderIssue::query()->with(['order','secondOrder.packages.commodities.commodity'])->where('id', $id)->first();
+        $orderIssue = OrderIssue::query()->with(['order', 'secondOrder.packages.commodities.commodity'])->where('id', $id)->first();
         $order = $orderIssue->order;
         $secondOrder = $orderIssue->secondOrder;
         $rejectedBill = RejectedBill::query()->where('id', $orderIssue->rejected_bill_id)->first();
@@ -110,7 +122,7 @@ class OrderIssueController extends Controller
         $owners = Owner::all();
         $shops = Shop::all();
         $logistics = Logistic::all();
-        return view('order/issue/edit', compact('orderIssue', 'owners', 'userWorkgroup', 'shops', 'logistics', 'orderIssueType', 'order', 'secondOrder', 'rejectedBill','userOwnerGroups'));
+        return view('order/issue/edit', compact('orderIssue', 'owners', 'userWorkgroup', 'shops', 'logistics', 'orderIssueType', 'order', 'secondOrder', 'rejectedBill', 'userOwnerGroups'));
     }
 
     public function batchImport(Request $request)
@@ -134,7 +146,7 @@ class OrderIssueController extends Controller
                 for ($i = 0; $i < count($exception); $i++) {
                     $a .= implode(',', $exception[$i]) . '&#10';
                 };
-                app('LogService')->log(__METHOD__, __FUNCTION__, json_encode($request->toArray()), Auth::user()['id']);
+                $this->logService->log(__METHOD__, __FUNCTION__, json_encode($request->toArray()), Auth::user()['id']);
                 return '<h1 class="text-danger">导入Excel成功<br><textarea style="width: 50%;height: 50%">' . $a . '</textarea></h1>';
             }
         } else {
@@ -158,13 +170,11 @@ class OrderIssueController extends Controller
         if (!$request->input('orderNos')) {
             return ['success' => false, 'fail_info' => '没有传入的订单编号'];
         }
-        /** @var OrderIssueService $service */
-        $service = app(OrderIssueService::class);
-        $exits_orderNos = $service->校验问题件是否存在_WMS订单号_返回存在的订单号($request->input('orderNos'));
-        if(count($exits_orderNos)>0) return ['success'=>false,'fail_info'=>'标记问题件存在已有订单号','exitsOrderNos' =>$exits_orderNos];
-        $soft_delete_order_nos = $service->checkOrderIssueIsExistAndSoftDelete($request['orderNos']);
-        if(count($soft_delete_order_nos)>0) return ['success'=>false,'fail_info'=>'订单对应问题件存在回收站,如需要请从回收站恢复','exitsOrderNos' =>$soft_delete_order_nos];
-        return $service->orderIssueTag($request->all());
+        $exits_orderNos = $this->service->校验问题件是否存在_WMS订单号_返回存在的订单号($request->input('orderNos'));
+        if (count($exits_orderNos) > 0) return ['success' => false, 'fail_info' => '标记问题件存在已有订单号', 'exitsOrderNos' => $exits_orderNos];
+        $soft_delete_order_nos = $this->service->checkOrderIssueIsExistAndSoftDelete($request['orderNos']);
+        if (count($soft_delete_order_nos) > 0) return ['success' => false, 'fail_info' => '订单对应问题件存在回收站,如需要请从回收站恢复', 'exitsOrderNos' => $soft_delete_order_nos];
+        return $this->service->orderIssueTag($request->all());
     }
 
     public function apiDestroy(Request $request)
@@ -178,7 +188,7 @@ class OrderIssueController extends Controller
         $orderIssue = OrderIssue::query()->where('id', $request->input('id'))->first();
         $bool = $orderIssue->delete();
         if ($bool) {
-            app('LogService')->log(__METHOD__, __FUNCTION__, json_encode($request->toArray()), Auth::user()['id']);
+            $this->logService->log(__METHOD__, __FUNCTION__, json_encode($request->toArray()), Auth::user()['id']);
             return ['success' => 'true'];
         } else {
             return ['success' => 'false', 'fail_info' => '删除问题单出现异常,请联系管理员'];
@@ -191,18 +201,18 @@ class OrderIssueController extends Controller
             return ['success' => false, 'fail_info' => '没有对应权限'];
         }
         try {
-            $data =  $request->only([
-                'order_issue_type_id','owner_id','logistic_id', 'logistic_number_return','result_explain','final_status','second_order_id','second_client_no',
-                'logistic_indemnity_money','logistic_express_remission','baoshi_indemnity_money','baoshi_express_remission','user_workgroup_id','user_owner_group_id'
+            $data = $request->only([
+                'order_issue_type_id', 'owner_id', 'logistic_id', 'logistic_number_return', 'result_explain', 'final_status', 'second_order_id', 'second_client_no',
+                'logistic_indemnity_money', 'logistic_express_remission', 'baoshi_indemnity_money', 'baoshi_express_remission', 'user_workgroup_id', 'user_owner_group_id'
             ]);
             $orderIssue = OrderIssue::query()->find($request->id);
             $orderIssue->update($data);
-            $orderIssue->syncRejectingStatus();
-            app('LogService')->log(__METHOD__,__FUNCTION__,json_encode($request));
-            return  ['success' => true];
+            $this->rejectedBillSyncOrderService->orderIssueSyncRejectingStatus($orderIssue);
+            $this->logService->log(__METHOD__, __FUNCTION__, json_encode($request));
+            return ['success' => true];
         } catch (Exception $e) {
-            app('LogService')->log(__METHOD__,__FUNCTION__,json_encode($request)."||".$e->getMessage().'||'.$e->getTraceAsString());
-            return  ['success' => false ,'fail_info' => $e->getMessage()];
+            $this->logService->log(__METHOD__, __FUNCTION__, json_encode($request) . "||" . $e->getMessage() . '||' . $e->getTraceAsString());
+            return ['success' => false, 'fail_info' => $e->getMessage()];
         }
     }
 
@@ -222,7 +232,7 @@ class OrderIssueController extends Controller
             foreach ($request->input('ids') as $id) {
                 OrderIssueProcessLog::query()->create(['order_issue_id' => $id, 'user_id' => Auth::user()['id'], 'type' => '结束', 'content' => '完结订单']);
             }
-            app('LogService')->log(__METHOD__, __FUNCTION__, json_encode($request->toArray()), Auth::user()['id']);
+            $this->logService->log(__METHOD__, __FUNCTION__, json_encode($request->toArray()), Auth::user()['id']);
             return ['success' => true];
         }
     }
@@ -239,11 +249,11 @@ class OrderIssueController extends Controller
             OrderIssue::query()
                 ->where('id', $request->input('id'))
                 ->update(['is_new_rejecting' => '已处理']);
-            app('LogService')->log(__METHOD__,__FUNCTION__,json_encode($request->getContent()));
-            return ['success'=>true];
+            $this->logService->log(__METHOD__, __FUNCTION__, json_encode($request->getContent()));
+            return ['success' => true];
         } catch (Exception $e) {
-            app('LogService')->log(__METHOD__,__FUNCTION__,json_encode($request->getContent())."||".$e->getMessage()."||".$e->getTraceAsString());
-            return ['success' => false,'fail_info' => $e->getMessage()];
+            $this->logService->log(__METHOD__, __FUNCTION__, json_encode($request->getContent()) . "||" . $e->getMessage() . "||" . $e->getTraceAsString());
+            return ['success' => false, 'fail_info' => $e->getMessage()];
         }
     }
 
@@ -252,10 +262,10 @@ class OrderIssueController extends Controller
         if (!$request->filled('clientNo')) {
             return ['success' => false, 'fail_info' => '缺失WMS订单参数无法查询'];
         }
-        $orderInfo = app(OrderService::class)->findOrCreateByClientCode($request->input('clientNo'));
+        $orderInfo = $this->orderService->findOrCreateByClientCode($request->input('clientNo'));
         if (!$orderInfo) {
             return ['success' => true, 'message' => '没有对应的订单信息'];
-        }else{
+        } else {
             return ['success' => true, 'data' => $orderInfo];
         }
     }
@@ -265,23 +275,21 @@ class OrderIssueController extends Controller
         if (!$request->filled('clientCode')) {
             return ['success' => false, 'fail_info' => '缺少对应的参数或条件'];
         }
-        /** @var $orderService OrderService*/
-        $orderService = app('OrderService');
         $clientCode = $request->input('clientCode');
         $order = Order::query()->where('client_code', $clientCode)->first();
         if ($order) {
             if (OrderIssue::query()->where('order_id', $order['id'])->count()) {
                 return ['success' => false, 'fail_info' => '该客户订单号已有对应的订单问题件'];
             }
-            $order = $orderService->findOrCreateByClientCode($clientCode);
+            $order = $this->orderService->findOrCreateByClientCode($clientCode);
             return ['success' => true, 'order' => $order];
         } else {
             $orderHeader = OracleDOCOrderHeader::query()->where('SOReference1', $clientCode)->first();
             if (!$orderHeader) {
                 return ['success' => false, 'fail_info' => '该客户订单号没有对应的订单信息'];
             } else {
-                $order = $orderService->findOrCreateByClientCode($clientCode);
-                $rejectedBill = $orderService->getRejectedBillOfClientCode($clientCode);
+                $order = $this->orderService->findOrCreateByClientCode($clientCode);
+                $rejectedBill = $this->orderService->getRejectedBillOfClientCode($clientCode);
                 return ['success' => true, 'order' => $order, 'rejectedBill' => $rejectedBill];
             }
         }
@@ -293,57 +301,58 @@ class OrderIssueController extends Controller
             return ['success' => false, 'fail_info' => '缺少对应的参数或条件'];
         }
         $rejectedBill = RejectedBill::query()->with('items')->where('logistic_number_return', $request['logisticNumberReturn'])->first();
-        if(!$rejectedBill) return ['success' => true, 'message' => '没有对应的退回单号,不与WMS同步'];
-        $exists = OrderIssueRejectedBill::query()->where('logistic_number_return',$request['logisticNumberReturn'])->exists();
-        if($exists)return ['success' => false, 'fail_info' => '该退回单号已有对应的问题件'];
+        if (!$rejectedBill) return ['success' => true, 'message' => '没有对应的退回单号,不与WMS同步'];
+        $exists = OrderIssueRejectedBill::query()->where('logistic_number_return', $request['logisticNumberReturn'])->exists();
+        if ($exists) return ['success' => false, 'fail_info' => '该退回单号已有对应的问题件'];
         return ['success' => true, 'rejectedBill' => $rejectedBill];
     }
 
-    public function isExistByOrderNoApi(Request $request){
+    public function isExistByOrderNoApi(Request $request)
+    {
         if (!Gate::allows('订单管理-订单问题件生成')) {
-            return ['success'=>false,'fail_info' => '没有对应权限'];
+            return ['success' => false, 'fail_info' => '没有对应权限'];
         }
         $orderNos = $request->input('orderNos');
-        $orderIssues =OrderIssue::query()->with('order')
-            ->whereIn('order_id',function($query) use ($orderNos){
-                $query->from('orders')->select('id')->whereIn('code',$orderNos);
+        $orderIssues = OrderIssue::query()->with('order')
+            ->whereIn('order_id', function ($query) use ($orderNos) {
+                $query->from('orders')->select('id')->whereIn('code', $orderNos);
             })->get();
 
-        if($orderIssues->count() == 0){
-            return ['success'=>true ];
-        }else{
+        if ($orderIssues->count() == 0) {
+            return ['success' => true];
+        } else {
             $is_exist_orderNos = '';
             foreach ($orderIssues as $orderIssue) {
-                $is_exist_orderNos.= $orderIssue->order->code.',';
+                $is_exist_orderNos .= $orderIssue->order->code . ',';
             }
-            $is_exist_orderNos = rtrim($is_exist_orderNos,',');
+            $is_exist_orderNos = rtrim($is_exist_orderNos, ',');
             $is_exist_orderNos .= ';';
-            return ['success'=>false,'fail_info'=>'选中的订单已有存在的问题件:'.$is_exist_orderNos];
+            return ['success' => false, 'fail_info' => '选中的订单已有存在的问题件:' . $is_exist_orderNos];
         }
     }
 
-    public function updateColumnApi(Request $request,OrderIssueService $service): array
+    public function updateColumnApi(Request $request, OrderIssueService $service): array
     {
         if (!Gate::allows('订单管理-问题件-编辑')) {
-            return ['success'=>false,'fail_info' => '没有对应权限'];
+            return ['success' => false, 'fail_info' => '没有对应权限'];
         }
 
-        if($request['column']=='final_status'  && $request['value'] == '已归档'){
-            $orderIssues = OrderIssue::query()->where('id',$request['id'])->get();
+        if ($request['column'] == 'final_status' && $request['value'] == '已归档') {
+            $orderIssues = OrderIssue::query()->where('id', $request['id'])->get();
             $service->archive($orderIssues);
-            return ['success' =>true];
+            return ['success' => true];
         }
         try {
             OrderIssue::query()
                 ->where('id', $request->input('id'))
                 ->update([$request->input('column') => $request->input('value')]);
-            app('LogService')->log(__METHOD__,'更新问题件',json_encode($request->getContent()));
+            $this->logService->log(__METHOD__, '更新问题件', json_encode($request->getContent()));
             if ($request->input('column') == 'order_issue_type_id') {
                 event(new AddOrUpdateOrderIssues([$request->input('id')]));
             }
             return ['success' => true];
         } catch (Exception $e) {
-            app('LogService')->log(__METHOD__,'更新问题件error',json_encode($request->getContent()).'||'.$e->getMessage().'||'.$e->getTraceAsString());
+            $this->logService->log(__METHOD__, '更新问题件error', json_encode($request->getContent()) . '||' . $e->getMessage() . '||' . $e->getTraceAsString());
             return ['success' => false, $e->getMessage()];
         }
     }
@@ -351,15 +360,15 @@ class OrderIssueController extends Controller
     public function batchDestroyApi(Request $request)
     {
         if (!Gate::allows('订单管理-问题件-删除')) {
-            return ['success'=>false,'fail_info' => '没有对应权限'];
+            return ['success' => false, 'fail_info' => '没有对应权限'];
         }
         try {
             OrderIssue::query()->whereIn('id', $request->input('ids'))->delete();
-            app('LogService')->log(__METHOD__,__FUNCTION__,json_encode($request->getContent()));
+            $this->logService->log(__METHOD__, __FUNCTION__, json_encode($request->getContent()));
             return ['success' => true];
         } catch (Exception $e) {
-            app('LogService')->log(__METHOD__,__FUNCTION__,json_encode($request->getContent())."||".$e->getMessage()."||".$e->getTraceAsString());
-            return ['success' => false,'fail_info' => $e->getMessage()];
+            $this->logService->log(__METHOD__, __FUNCTION__, json_encode($request->getContent()) . "||" . $e->getMessage() . "||" . $e->getTraceAsString());
+            return ['success' => false, 'fail_info' => $e->getMessage()];
         }
     }
 
@@ -387,77 +396,75 @@ class OrderIssueController extends Controller
         ]);
     }
 
-    public function apiUpdateValidatorRejectedBill(array $arr){
+    public function apiUpdateValidatorRejectedBill(array $arr)
+    {
         return Validator::make($arr, [
-            'logistic_number_return'=>['required'],
-            'id_logistic_return'=>['required'],
+            'logistic_number_return' => ['required'],
+            'id_logistic_return' => ['required'],
         ], [
             'required' => [':attribute 为必填项', ':attribute'],
         ], [
-            'logistic_number_return'=> '退回单号',
-            'id_logistic_return'=> '退回单号承运商',
+            'logistic_number_return' => '退回单号',
+            'id_logistic_return' => '退回单号承运商',
         ]);
     }
 
     public function endOrderIssuesApi(Request $request): array
     {
         if (!Gate::allows('订单管理-问题件-编辑')) {
-            return ['success'=>false,'fail_info' => '没有对应权限'];
+            return ['success' => false, 'fail_info' => '没有对应权限'];
         }
         $orderIssue_ids = $request->input('ids');
-        $bool = app(OrderIssueService::class)->isExistOrderIssueTypeIsEnd($orderIssue_ids);
-        if($bool)return ['success'=>false,'fail_info'=> '需要完结的订单问题件中已有完结的订单问题件'];
-        $bool = app(OrderIssueService::class)->endOrderIssues($orderIssue_ids);
-        if($bool == 0) return ['success'=>false,'fail_info' => '操作失败'];
-        $params = ['ids'=>$orderIssue_ids,'content'=>'完结订单','type'=>'结束'];
-        $logs = app(OrderIssueProcessLogService::class)->create($params);
-        return ['success'=>true,'logs'=>$logs];
+        $bool = $this->service->isExistOrderIssueTypeIsEnd($orderIssue_ids);
+        if ($bool) return ['success' => false, 'fail_info' => '需要完结的订单问题件中已有完结的订单问题件'];
+        $bool = $this->service->endOrderIssues($orderIssue_ids);
+        if ($bool == 0) return ['success' => false, 'fail_info' => '操作失败'];
+        $params = ['ids' => $orderIssue_ids, 'content' => '完结订单', 'type' => '结束'];
+        $logs = $this->orderIssueProcessLogService->create($params);
+        return ['success' => true, 'logs' => $logs];
     }
 
     public function editSecondClientNoApi(Request $request): array
     {
-        if(!Gate::allows('订单管理-问题件-编辑')){
-            return ['success'=>false,'fail_info'=>'没有对应权限'];
+        if (!Gate::allows('订单管理-问题件-编辑')) {
+            return ['success' => false, 'fail_info' => '没有对应权限'];
         }
         try {
-            app(OrderIssueService::class)->editOrderIssueSecondClientNo($request['id'],$request['secondClientNo']);
-            $order = Order::query()->with(['packages.commodities.commodity','logistic'])->where('client_code',$request['secondClientNo'])->first();
+            $this->service->editOrderIssueSecondClientNo($request['id'], $request['secondClientNo']);
+            $order = Order::query()->with(['packages.commodities.commodity', 'logistic'])->where('client_code', $request['secondClientNo'])->first();
             if (!$order) {
                 return ['success' => true, 'message' => '二次客户单号已修改,没有对应的订单信息'];
             } else {
-               return ['success' => true, 'order' => $request['secondClientNo'] == '' ? null : $order];
+                return ['success' => true, 'order' => $request['secondClientNo'] == '' ? null : $order];
             }
         } catch (Exception $e) {
-            app('LogService')->log(__METHOD__, __FUNCTION__, json_encode($request->getContent()).$e->getMessage().$e->getTraceAsString());
-            return  ['success' =>false ,'fail_info' => $e->getMessage()];
+            $this->logService->log(__METHOD__, __FUNCTION__, json_encode($request->getContent()) . $e->getMessage() . $e->getTraceAsString());
+            return ['success' => false, 'fail_info' => $e->getMessage()];
         }
     }
 
     public function editSecondLogisticNumberApi(Request $request): array
     {
-        if(!Gate::allows('订单管理-问题件-编辑'))
-            return ['success'=>false,'fail_info'=>'没有对应权限'];
-        /** @var OrderIssueService $service */
-        $service = app(OrderIssueService::class);
+        if (!Gate::allows('订单管理-问题件-编辑'))
+            return ['success' => false, 'fail_info' => '没有对应权限'];
         try {
-            $message = $service->updateSecondLogisticNumber($request->input('id'), $request->logistic_number);
-            return $message;
+            return $this->service->updateSecondLogisticNumber($request->input('id'), $request->logistic_number);
         } catch (Exception $e) {
-            return ['success'=>false,'message' =>$e->getMessage()];
+            return ['success' => false, 'message' => $e->getMessage()];
         }
     }
 
     public function disposeImportApi(Request $request): array
     {
-        if(!Gate::allows('订单管理-问题件-编辑'))
-            return ['success'=>false,'fail_info'=>'没有对应权限'];
-        return app(OrderIssueService::class)->disposeImport($request->input('ids'));
+        if (!Gate::allows('订单管理-问题件-编辑'))
+            return ['success' => false, 'fail_info' => '没有对应权限'];
+        return $this->service->disposeImport($request->input('ids'));
     }
 
     public function importPasteDataApi(Request $request): array
     {
         if (!Gate::allows('订单管理-问题件-导入-文本导入'))
-            return ['success'=>false,'fail_info'=>'没有对应权限'];
+            return ['success' => false, 'fail_info' => '没有对应权限'];
         $rows = $request->input('rows');
         $logistic_numbers = [];
         $types = [];
@@ -468,90 +475,85 @@ class OrderIssueController extends Controller
         foreach ($orderIssueTypes as $orderIssueType) {
             $orderIssueType_map[$orderIssueType->name] = $orderIssueType;
         }
-        $array = explode("\n",$request->input('pasteDataText')); //拆分行
-        /** @var OrderIssueService $service */
-        $service =  app(OrderIssueService::class);
+        $array = explode("\n", $request->input('pasteDataText')); //拆分行
         foreach ($array as $i => $str) {
-//            $string= preg_replace('/[\s,\,\,]+/','*++*',$str);
-//            $items = explode('*++*',$string);
-            $items=[];
-
+            $items = [];
             preg_match('/^(\w*?)[\s,,;;]([\x{4e00}-\x{9fa5}]*?)[\s,,;;](.*?)[\s,,;;](\w*?)$/u', $str, $items);
-            if(count($items) == 0){
+            if (count($items) == 0) {
                 preg_match('/^(\w*?)[\s,,;;]([\x{4e00}-\x{9fa5}]*?)[\s,,;;](.*?)$/u', $str, $items);
             }
             array_shift($items);
-            $head = '第'.($i+1).'行';
-            if(count($items)<count($rows)-1){
+            $head = '第' . ($i + 1) . '行';
+            if (count($items) < count($rows) - 1) {
                 $errors[$head] = ['数据不完整'];
                 unset($items);
                 continue;
             }
             $map = [];
-            foreach ($rows as $index=>$row) {
-                if($row === '原始运单号'){
-                    if(!$items[$index]){
-                        $errors[$head][]='快递单号为空';
-                        $map =[];
+            foreach ($rows as $index => $row) {
+                if ($row === '原始运单号') {
+                    if (!$items[$index]) {
+                        $errors[$head][] = '快递单号为空';
+                        $map = [];
                     }
                     $logistic_numbers = [$items[$index]];
-                    $exist_logistic =  $service->校验问题件是否存在_快递单号_返回存在的快递单号($logistic_numbers);
-                    $orderHeaders=OracleDOCOrderHeader::query()->with('actAllocationDetails')->whereHas('actAllocationDetails',function($query)use($logistic_numbers){
-                        $query->whereIn('picktotraceid',$logistic_numbers);
+                    $exist_logistic = $this->service->校验问题件是否存在_快递单号_返回存在的快递单号($logistic_numbers);
+                    $orderHeaders = OracleDOCOrderHeader::query()->with('actAllocationDetails')->whereHas('actAllocationDetails', function ($query) use ($logistic_numbers) {
+                        $query->whereIn('picktotraceid', $logistic_numbers);
                     })->get();
-                    if(count($exist_logistic) > 0){
-                        $errors[$head][]='快递单号存在对应的问题件';
-                        $map =[];
-                    }else if($orderHeaders->count()==0){
-                        $errors[$head][]='快递单号不存在对应的发运订单';
-                        $map =[];
+                    if (count($exist_logistic) > 0) {
+                        $errors[$head][] = '快递单号存在对应的问题件';
+                        $map = [];
+                    } else if ($orderHeaders->count() == 0) {
+                        $errors[$head][] = '快递单号不存在对应的发运订单';
+                        $map = [];
                     }
                     $logistic_numbers[] = $items[$index];
                     $map['logistic_number'] = $items[$index];
                 }
-                if($row==='情况说明'){
-                    if(!$items[$index]){
-                        $errors[$head][]='情况说明为空';
-                        $map =[];
+                if ($row === '情况说明') {
+                    if (!$items[$index]) {
+                        $errors[$head][] = '情况说明为空';
+                        $map = [];
                     }
                     $map['result_explain'] = $items[$index];
                 }
-                if($row==='自定义订单号'){
-                    if($items[$index]??false){
+                if ($row === '自定义订单号') {
+                    if ($items[$index] ?? false) {
                         $map['custom_code'] = $items[$index];
                     }
                 }
-                if($row==='问题类别'){
-                    if(!$items[$index]){
-                        $errors[$head][]='问题类别为空';
+                if ($row === '问题类别') {
+                    if (!$items[$index]) {
+                        $errors[$head][] = '问题类别为空';
                         $map = [];
-                    }else{
-                        $type =  $orderIssueType_map[$items[$index]] ?? null;
-                        if(!$type){
-                            $errors[$head][]='问题类型不存在';
+                    } else {
+                        $type = $orderIssueType_map[$items[$index]] ?? null;
+                        if (!$type) {
+                            $errors[$head][] = '问题类型不存在';
                             $map = [];
                         }
                     }
-                    $types[] =$items[$index];
+                    $types[] = $items[$index];
                     $map['type'] = $items[$index];
                 }
             }
-            if(count($map)!==0)$maps[] = $map;
+            if (count($map) !== 0) $maps[] = $map;
         }
 
-        if(count($errors)>0) return ['success'=>false,'fail_info'=>$errors];
+        if (count($errors) > 0) return ['success' => false, 'fail_info' => $errors];
         try {
             foreach ($maps as $map) {
                 $logistic_number = $map['logistic_number'];
                 $result_explain = $map['result_explain'];
                 $type = $map['type'];
                 $custom_code = $map['custom_code'] ?? null;
-                $service->createOrderIssue($logistic_number, $type, $result_explain,'导入未处理',$custom_code,$request['hiddenTag'] ?? null);
+                $this->service->createOrderIssue($logistic_number, $type, $result_explain, '导入未处理', $custom_code, $request['hiddenTag'] ?? null);
             }
-            return ['success'=>true];
+            return ['success' => true];
         } catch (Exception $e) {
-            app('LogService')->log(__METHOD__,__FUNCTION__,'文本导入问题件失败'.json_encode($request->getContent().$e->getMessage().$e->getTraceAsString()));
-            return ['success'=>false,'fail_info'=>$e->getMessage()];
+            $this->logService->log(__METHOD__, __FUNCTION__, '文本导入问题件失败' . json_encode($request->getContent() . $e->getMessage() . $e->getTraceAsString()));
+            return ['success' => false, 'fail_info' => $e->getMessage()];
         }
     }
 
@@ -564,78 +566,89 @@ class OrderIssueController extends Controller
         return $this->getJson($order_Issues);
     }
 
-    public function getJson($order_Issues){
+    public function getJson($order_Issues)
+    {
         $json = [];
         $row = [
-            '登记日期','创建日期','客户','客户订单号','原始承运商','收货人','收货电话','省','市','区','收货人地址',
-            '原始运单号','原始商品','原始商品名称','原始商品数量',
-            '退回单号', '退单商品名','退单商品条码','退单商品数量','是否正品','退单状态','退单备注',
-            '操作类型','说明','操作者','情况说明','问题类别',
-            '二次订单号','二次承运商','二次运单号','二次商品条码','二次商品名','二次商品数量',
-            '最终状态', '承运商赔偿金额', '承运商快递减免', '宝时赔偿金额', '宝时快递减免','事故责任方','完结时间'
+            '登记日期', '创建日期', '客户', '客户订单号', '原始承运商', '收货人', '收货电话', '省', '市', '区', '收货人地址',
+            '原始运单号', '原始商品', '原始商品名称', '原始商品数量',
+            '退回单号', '退单商品名', '退单商品条码', '退单商品数量', '是否正品', '退单状态', '退单备注',
+            '操作类型', '说明', '操作者', '情况说明', '问题类别',
+            '二次订单号', '二次承运商', '二次运单号', '二次商品条码', '二次商品名', '二次商品数量',
+            '最终状态', '承运商赔偿金额', '承运商快递减免', '宝时赔偿金额', '宝时快递减免', '事故责任方', '完结时间'
         ];
-        foreach ($order_Issues as $order_issue){
-            $order =  $order_issue->order;
+        foreach ($order_Issues as $order_issue) {
+            $order = $order_issue->order;
             $orderPackages = $order_issue->order->packages ?? collect();
-            $logistic_numbers = '';$order_sku  = '';$order_sku_name  = '';$order_sku_amount  = '';
-            $orderPackages->each(function($package,$index)use(&$logistic_numbers,&$order_sku,&$order_sku_name,&$order_sku_amount){
-                if(!str_starts_with('null',$package->logistic_number))$logistic_numbers.=$package->logistic_number.",\r\n";
-                $package->commodities->each(function($commodities)use(&$order_sku,&$order_sku_name,&$order_sku_amount){
+            $logistic_numbers = '';
+            $order_sku = '';
+            $order_sku_name = '';
+            $order_sku_amount = '';
+            $orderPackages->each(function ($package, $index) use (&$logistic_numbers, &$order_sku, &$order_sku_name, &$order_sku_amount) {
+                if (!str_starts_with('null', $package->logistic_number)) $logistic_numbers .= $package->logistic_number . ",\r\n";
+                $package->commodities->each(function ($commodities) use (&$order_sku, &$order_sku_name, &$order_sku_amount) {
                     $commodity = $commodities->commodity ?? '';
-                    $order_sku.= ($commodity->sku ?? '').",\r\n";
-                    $order_sku_name.= ($commodity->name ?? '').",\r\n";
-                    $order_sku_amount.= ($commodities->amount ?? '').",\r\n";
+                    $order_sku .= ($commodity->sku ?? '') . ",\r\n";
+                    $order_sku_name .= ($commodity->name ?? '') . ",\r\n";
+                    $order_sku_amount .= ($commodities->amount ?? '') . ",\r\n";
                 });
             });
             $rejected_logistic_number = '';
 
             $rejected_Bill_remark = '';
             $rejected_is_checked = '';
-            $rejected_name = ''; $rejected_barcode = '';$rejected_amount = '';
-            if($order_issue->rejectedBills){
-                $order_issue->rejectedBills->each(function($rejectedBill)use(
-                    &$rejected_name,&$rejected_barcode, &$rejected_amount,&$rejected_Bill_remark,&$rejected_is_checked,&$rejected_logistic_number
+            $rejected_name = '';
+            $rejected_barcode = '';
+            $rejected_amount = '';
+            if ($order_issue->rejectedBills) {
+                $order_issue->rejectedBills->each(function ($rejectedBill) use (
+                    &$rejected_name, &$rejected_barcode, &$rejected_amount, &$rejected_Bill_remark, &$rejected_is_checked, &$rejected_logistic_number
+                ) {
+                    $rejected_logistic_number .= $rejectedBill->logistic_number_return . ",\r\n";
+                    $rejectedBill->items->each(function ($item) use (
+                        &$rejected_name, &$rejected_barcode, &$rejected_amount, &$rejected_Bill_remark, &$rejected_is_checked
                     ) {
-                    $rejected_logistic_number.=$rejectedBill->logistic_number_return . ",\r\n";
-                    $rejectedBill->items->each(function($item)use(
-                        &$rejected_name,&$rejected_barcode, &$rejected_amount,&$rejected_Bill_remark,&$rejected_is_checked
-                    ){
-                        $rejected_name.= $item->name_goods.",\r\n";
-                        $rejected_barcode.= $item->barcode_goods.",\r\n";
-                        $rejected_amount.= $item->amount.",\r\n";
-                        $rejected_Bill_remark.= $item->remark.",\r\n";
-                        $rejected_is_checked.= $item->quality->name.",\r\n";
+                        $rejected_name .= $item->name_goods . ",\r\n";
+                        $rejected_barcode .= $item->barcode_goods . ",\r\n";
+                        $rejected_amount .= $item->amount . ",\r\n";
+                        $rejected_Bill_remark .= $item->remark . ",\r\n";
+                        $rejected_is_checked .= $item->quality->name . ",\r\n";
                     });
                 });
             }
-            $log_type = ''; $log_content = '';$log_user = '';
-            $order_issue->logs->each(function($log)use(&$log_type, &$log_content,&$log_user){
-                $log_type.=$log->type.",\r\n";
-                $log_content.=$log->content.",\r\n";
-                isset($log->user->name) ? $log_user.=$log->user->name.",\r\n" : null;
+            $log_type = '';
+            $log_content = '';
+            $log_user = '';
+            $order_issue->logs->each(function ($log) use (&$log_type, &$log_content, &$log_user) {
+                $log_type .= $log->type . ",\r\n";
+                $log_content .= $log->content . ",\r\n";
+                isset($log->user->name) ? $log_user .= $log->user->name . ",\r\n" : null;
             });
-            $send_order = $order_issue->secondOrder ??  new Order();
-            $send_order_numbers = '';$send_order_sku ='';$send_order_name ='';$send_order_amount = '';
-            $send_order->packages->each(function($package)use(&$send_order_numbers ,&$send_order_sku ,&$send_order_name ,&$send_order_amount ){
-                $send_order_numbers.=($package->logistic_number).",\r\n";
-                $package->commodities->each(function ($commodities)use( &$send_order_sku ,&$send_order_name ,&$send_order_amount ){
+            $send_order = $order_issue->secondOrder ?? new Order();
+            $send_order_numbers = '';
+            $send_order_sku = '';
+            $send_order_name = '';
+            $send_order_amount = '';
+            $send_order->packages->each(function ($package) use (&$send_order_numbers, &$send_order_sku, &$send_order_name, &$send_order_amount) {
+                $send_order_numbers .= ($package->logistic_number) . ",\r\n";
+                $package->commodities->each(function ($commodities) use (&$send_order_sku, &$send_order_name, &$send_order_amount) {
                     $commodity = $commodities->commodity;
-                    $send_order_sku.=$commodity->sku.",\r\n";
-                    $send_order_name.=$commodity->name.",\r\n";
-                    $send_order_amount.=$commodities->amount.",\r\n";
+                    $send_order_sku .= $commodity->sku . ",\r\n";
+                    $send_order_name .= $commodity->name . ",\r\n";
+                    $send_order_amount .= $commodities->amount . ",\r\n";
                 });
             });
             $userWorkgroupsName = '';
-            $order_issue->userWorkgroups->each(function ($userWorkgroup)use (&$userWorkgroupsName) {
-                $userWorkgroupsName.=($userWorkgroup->name).",\r\n";
+            $order_issue->userWorkgroups->each(function ($userWorkgroup) use (&$userWorkgroupsName) {
+                $userWorkgroupsName .= ($userWorkgroup->name) . ",\r\n";
             });
-            if (isset($order_issue->userOwnerGroup->name))$userWorkgroupsName.=$order_issue->userOwnerGroup->name.",\r\n";
-            $endLog = $order_issue->logs->where('type','结束')->last() ?? null;
+            if (isset($order_issue->userOwnerGroup->name)) $userWorkgroupsName .= $order_issue->userOwnerGroup->name . ",\r\n";
+            $endLog = $order_issue->logs->where('type', '结束')->last() ?? null;
             $end_at = $endLog ? $endLog->created_at : null;
-            if ($end_at != null ) $end_at = $end_at->format(\Carbon\Carbon::DEFAULT_TO_STRING_FORMAT);
+            if ($end_at != null) $end_at = $end_at->format(\Carbon\Carbon::DEFAULT_TO_STRING_FORMAT);
             $json[] = [
-                isset($order_issue->created_at) ? str_split($order_issue->created_at,10)[0] :'',       // 登记日期
-                isset($order->created_at) ? str_split($order->created_at,10)[0] :'',             // 创建日期
+                isset($order_issue->created_at) ? str_split($order_issue->created_at, 10)[0] : '',       // 登记日期
+                isset($order->created_at) ? str_split($order->created_at, 10)[0] : '',             // 创建日期
                 $order->owner->name ?? '',      // 客户
                 $order->client_code,              // 客户订单号
                 $order->logistic->name ?? '',   // 原始承运商
@@ -646,25 +659,25 @@ class OrderIssueController extends Controller
                 $order->district,               // 区
                 $order->address,                // 收货人地址
 
-                rtrim($logistic_numbers,",\r\n"),              //原始运单号
-                rtrim($order_sku,",\r\n"),                     //原始商品
-                rtrim($order_sku_name,",\r\n"),                //原始商品名称
-                rtrim($order_sku_amount,",\r\n"),              //原始商品数量
+                rtrim($logistic_numbers, ",\r\n"),              //原始运单号
+                rtrim($order_sku, ",\r\n"),                     //原始商品
+                rtrim($order_sku_name, ",\r\n"),                //原始商品名称
+                rtrim($order_sku_amount, ",\r\n"),              //原始商品数量
 
                 //,'退单商品名','退单商品条码','退单商品数量','退单状态','退单备注'
-                rtrim($rejected_logistic_number,",\r\n"),                      //退回单号
-                rtrim($rejected_name,",\r\n"),        // 退单商品名
-                rtrim($rejected_barcode,",\r\n") ,    // 退单商品条码
-                rtrim($rejected_amount,",\r\n"),      // 退单商品数量
-                rtrim($rejected_is_checked,",\r\n"),  // 是否正品
-                rtrim($rejected_Bill_remark,",\r\n"),   // 退单备注
+                rtrim($rejected_logistic_number, ",\r\n"),                      //退回单号
+                rtrim($rejected_name, ",\r\n"),        // 退单商品名
+                rtrim($rejected_barcode, ",\r\n"),    // 退单商品条码
+                rtrim($rejected_amount, ",\r\n"),      // 退单商品数量
+                rtrim($rejected_is_checked, ",\r\n"),  // 是否正品
+                rtrim($rejected_Bill_remark, ",\r\n"),   // 退单备注
 
-                $order_issue->rejecting_status ,                                // 退单状态
+                $order_issue->rejecting_status,                                // 退单状态
 
                 // '操作类型','情况说明','问题类别',
-                rtrim($log_type,",\r\n"),                        //操作类型
-                rtrim($log_content,",\r\n"),                     //情况说明
-                rtrim($log_user,",\r\n"),                        //操作者
+                rtrim($log_type, ",\r\n"),                        //操作类型
+                rtrim($log_content, ",\r\n"),                     //情况说明
+                rtrim($log_user, ",\r\n"),                        //操作者
 
                 // '情况说明','问题类别',
                 $order_issue->result_explain,                               // 情况说明
@@ -673,23 +686,23 @@ class OrderIssueController extends Controller
                 // '二次订单号','二次承运商','二次运单号','二次商品条码','二次商品名','二次商品数量',
                 $order_issue->secondOrder->client_code ?? '',                //二次订单号
                 $order_issue->secondOrder->logistic->name ?? '',             //二次承运商
-                rtrim($send_order_numbers,",\r\n") ,                                        //二次运单号
-                rtrim($send_order_sku,",\r\n"),                                             // 二次商品条码
-                rtrim($send_order_name,",\r\n"),                                            // 二次商品名
-                rtrim($send_order_amount,",\r\n"),                                          // 二次商品数量
+                rtrim($send_order_numbers, ",\r\n"),                                        //二次运单号
+                rtrim($send_order_sku, ",\r\n"),                                             // 二次商品条码
+                rtrim($send_order_name, ",\r\n"),                                            // 二次商品名
+                rtrim($send_order_amount, ",\r\n"),                                          // 二次商品数量
 
                 //'最终状态', '承运商赔偿金额', '承运商快递减免', '宝时赔偿金额', '宝时快递减免','事故责任方'
-                $order_issue->final_status??'',
-                $order_issue->logistic_indemnity_money ,
+                $order_issue->final_status ?? '',
+                $order_issue->logistic_indemnity_money,
                 $order_issue->logistic_express_remission,
                 $order_issue->baoshi_indemnity_money,
                 $order_issue->baoshi_express_remission,
-                rtrim($userWorkgroupsName,",\r\n"),
+                rtrim($userWorkgroupsName, ",\r\n"),
 //                $order_issue->userOwnerGroup->name ?? '',
                 $end_at
             ];
         }
-        return Export::make($row,$json,"订单问题件");
+        return Export::make($row, $json, "订单问题件");
     }
 
     public function recycleBin(Request $request)
@@ -697,40 +710,33 @@ class OrderIssueController extends Controller
         if (!Gate::allows('订单管理-问题件-删除')) {
             return redirect(url('/'));
         }
-        /**
-         * @var OrderIssueService $service
-         */
-        $service = app('OrderIssueService');
-        $orderIssues = $service->getRecycleBinPaginate($request->input());
+
+        $orderIssues = $this->service->getRecycleBinPaginate($request->input());
         $paginate = $request['paginate'] ?? 50;
-        return view('order.issue.recycle',compact('orderIssues','paginate'));
+        return view('order.issue.recycle', compact('orderIssues', 'paginate'));
     }
 
     public function recoverOrderIssueApi(Request $request): array
     {
         if (!Gate::allows('订单管理-问题件-删除')) {
-            return ['success'=>false,'error'=>'没有对应权限'];
+            return ['success' => false, 'error' => '没有对应权限'];
         }
-        /**
-         * @var OrderIssueService $service
-         */
-        $service = app('OrderIssueService');
-        return  $service->recoverOrderIssue($request['ids']);
+        return $this->service->recoverOrderIssue($request['ids']);
     }
 
     public function financeConfirmApi(Request $request): array
     {
         if (!Gate::allows('订单管理-问题件-财务确认')) {
-            return ['success'=>false,'error'=>'没有对应权限'];
+            return ['success' => false, 'error' => '没有对应权限'];
         }
         try {
             $bool = OrderIssue::query()->whereIn('id', $request['ids'])->update(['finance_confirm' => $request->flag]);
-            if($bool==false)return ['success'=>false,'error'=>'财务确认失败'];
-            app('LogService')->log(__METHOD__, __FUNCTION__,'财务确认'. json_encode($request->getContent()), Auth::user()['id']);
-            return ['success'=>true];
+            if ($bool == false) return ['success' => false, 'error' => '财务确认失败'];
+            $this->logService->log(__METHOD__, __FUNCTION__, '财务确认' . json_encode($request->getContent()), Auth::user()['id']);
+            return ['success' => true];
         } catch (Exception $e) {
-            app('LogService')->log(__METHOD__,'Error'. __FUNCTION__,'财务确认 Error'. json_encode($request->getContent()).' || '.json_encode($e->getMessage()).' || '.json_encode($e->getTraceAsString()), Auth::user()['id']);
-            return ['success'=>false,'error'=>$e->getMessage()];
+            $this->logService->log(__METHOD__, 'Error' . __FUNCTION__, '财务确认 Error' . json_encode($request->getContent()) . ' || ' . json_encode($e->getMessage()) . ' || ' . json_encode($e->getTraceAsString()), Auth::user()['id']);
+            return ['success' => false, 'error' => $e->getMessage()];
         }
     }
 
@@ -741,26 +747,26 @@ class OrderIssueController extends Controller
      * @param OrderIssueService $service
      * @return array|bool[]
      */
-    public function archiveOrderIssueApi(Request $request,OrderIssueService $service): array
+    public function archiveOrderIssueApi(Request $request, OrderIssueService $service): array
     {
-        if (!Gate::allows('订单管理-问题件-编辑')) return ['success'=>false,'error'=>'没有对应权限'];
+        if (!Gate::allows('订单管理-问题件-编辑')) return ['success' => false, 'error' => '没有对应权限'];
 
-        if(!$request->has('ids'))return ['success'=>false,'error'=>'没有勾选问题件'];
+        if (!$request->has('ids')) return ['success' => false, 'error' => '没有勾选问题件'];
 
-        $orderIssues = OrderIssue::query()->whereIn('id',$request['ids'])->get();
+        $orderIssues = OrderIssue::query()->whereIn('id', $request['ids'])->get();
 
-        $archiveOrderIssues = $orderIssues->where('final_status','已归档');
+        $archiveOrderIssues = $orderIssues->where('final_status', '已归档');
 
-        if($archiveOrderIssues->count() > 0){
-            $archiveIds = $archiveOrderIssues->map(function($archiveOrderIssue){
+        if ($archiveOrderIssues->count() > 0) {
+            $archiveIds = $archiveOrderIssues->map(function ($archiveOrderIssue) {
                 return $archiveOrderIssue->id;
             });
-            return ['success' =>false,'error' => "选中问题件Id{$archiveIds}已有归档信息,请取消选中或刷新页面重试"];
+            return ['success' => false, 'error' => "选中问题件Id{$archiveIds}已有归档信息,请取消选中或刷新页面重试"];
         }
 
         $service->archive($orderIssues);
 
-        return ['success' =>true];
+        return ['success' => true];
     }
 
     public function addUserWorkgroup(Request $request): array
@@ -770,16 +776,17 @@ class OrderIssueController extends Controller
         try {
             OrderIssue::query()->find($orderIssueId)->userWorkgroups()->attach($userWorkgroupId);
         } catch (QueryException $e) {
-            return ['success' => false,'data' =>'事故责任方已存在'];
+            return ['success' => false, 'data' => '事故责任方已存在'];
         }
-        return ['success' => true,'data' =>UserWorkgroup::find($userWorkgroupId)];
+        return ['success' => true, 'data' => UserWorkgroup::find($userWorkgroupId)];
     }
+
     public function destroyUserWorkgroup(Request $request): array
     {
         $orderIssueId = $request->orderIssueId;
         $userWorkgroupId = $request->userWorkgroupId;
         OrderIssue::query()->find($orderIssueId)->userWorkgroups()->detach($userWorkgroupId);
-        return ['success' => true,'data' =>UserWorkgroup::find($userWorkgroupId)];
+        return ['success' => true, 'data' => UserWorkgroup::find($userWorkgroupId)];
     }
 
     public function batchOthers(Request $request)
@@ -798,7 +805,7 @@ class OrderIssueController extends Controller
         if ($request->input("baoshi_express_remission")) {
             $data['baoshi_express_remission'] = $request->input("baoshi_express_remission");
         }
-        OrderIssue::query()->whereIn('id',$orderIssueIds)->update($data);
+        OrderIssue::query()->whereIn('id', $orderIssueIds)->update($data);
         $userWorkGroupIds = $request->input("userWorkGroupIds");
         if (isset($userWorkGroupIds)) {
             $orderIssues = OrderIssue::query()->whereIn('id', $orderIssueIds)->get();
@@ -811,35 +818,35 @@ class OrderIssueController extends Controller
 
     public function destroySecondLogisticNumberApi(Request $request): array
     {
-        if (!Gate::allows('订单管理-问题件-编辑')) return ['success'=>false,'error'=>'没有对应权限'];
-        $count = OrderIssue::query()->where("id",$request->id)->update(["second_logistic_number"=>'']);
-        if($count == 1){
-            return ['success'=>true];
-        }else{
-            return ['success'=>false,'error'=>'删除失败'];
+        if (!Gate::allows('订单管理-问题件-编辑')) return ['success' => false, 'error' => '没有对应权限'];
+        $count = OrderIssue::query()->where("id", $request->id)->update(["second_logistic_number" => '']);
+        if ($count == 1) {
+            return ['success' => true];
+        } else {
+            return ['success' => false, 'error' => '删除失败'];
         }
     }
 
-    public function batchUpdateFinalStatusApi(Request $request,OrderIssueService $service): array
+    public function batchUpdateFinalStatusApi(Request $request, OrderIssueService $service): array
     {
-        if (!Gate::allows('订单管理-问题件-编辑')) return ['success'=>false,'error'=>'没有对应权限'];
+        if (!Gate::allows('订单管理-问题件-编辑')) return ['success' => false, 'error' => '没有对应权限'];
         try {
             $service->batchUpdateFinalStatus($request->input('ids', []), $request->input('final_status'));
-            return ['success'=>true];
+            return ['success' => true];
         } catch (Exception $e) {
-            return ['success'=>false,'message' => '批量修改异常'];
+            return ['success' => false, 'message' => '批量修改异常'];
         }
 
     }
 
-    public function batchIssueTypeApi(Request $request,OrderIssueService $service): array
+    public function batchIssueTypeApi(Request $request, OrderIssueService $service): array
     {
-        if (!Gate::allows('订单管理-问题件-编辑')) return ['success'=>false,'error'=>'没有对应权限'];
+        if (!Gate::allows('订单管理-问题件-编辑')) return ['success' => false, 'error' => '没有对应权限'];
         try {
             $service->batchUpdateIssueType($request->input('ids', []), $request->input('order_issue_type_id'));
-            return ['success'=>true];
+            return ['success' => true];
         } catch (Exception $e) {
-            return ['success'=>false,'message' => '批量修改异常'];
+            return ['success' => false, 'message' => '批量修改异常'];
         }
 
     }

+ 34 - 22
app/Http/Controllers/OrderIssueRejectedBillController.php

@@ -4,47 +4,59 @@ namespace App\Http\Controllers;
 
 use App\OrderIssue;
 use App\Services\OrderIssueRejectedBillService;
+use App\Services\RejectedBillSyncOrderService;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Gate;
 
 class OrderIssueRejectedBillController extends Controller
 {
+
+    private $service;
+    private $rejectedBillSyncOrderService;
+
+    public function __construct(OrderIssueRejectedBillService $service,
+                                RejectedBillSyncOrderService $rejectedBillSyncOrderService)
+    {
+        $this->service = $service;
+        $this->rejectedBillSyncOrderService = $rejectedBillSyncOrderService;
+    }
+
     public function joinRejectedBillApi(Request $request)
     {
-        if (!Gate::allows('订单管理-问题件-编辑')) return ['success'=>false,'error'=>'没有对应权限'];
-        if(!$request->has('logistic_number_return'))return ['success' => false,'error'=>'参数为空'];
+        if (!Gate::allows('订单管理-问题件-编辑')) return ['success' => false, 'error' => '没有对应权限'];
+        if (!$request->has('logistic_number_return')) return ['success' => false, 'error' => '参数为空'];
         /** @var OrderIssue $orderIssue */
         $orderIssue = OrderIssue::query()->find($request['id']);
-        if(!$orderIssue)return ['success' =>false,'error'=>'参数为空'];
-        $result =  app(OrderIssueRejectedBillService::class)->joinRejectedBill($orderIssue,$request['logistic_number_return']);
-        if(is_null($result))return ['success' => false,'error' => '已有对应的关联关系'];
-        if(!$result)return ['success' => false,'error' => '创建关联关系时出现异常'];
-        return ['success' => true,'data' => ['orderIssueRejectedBill' => $result,'orderIssue' => $orderIssue]];
+        if (!$orderIssue) return ['success' => false, 'error' => '参数为空'];
+        $result = $this->service->joinRejectedBill($orderIssue, $request['logistic_number_return']);
+        if (is_null($result)) return ['success' => false, 'error' => '已有对应的关联关系'];
+        if (!$result) return ['success' => false, 'error' => '创建关联关系时出现异常'];
+        return ['success' => true, 'data' => ['orderIssueRejectedBill' => $result, 'orderIssue' => $orderIssue]];
     }
 
     public function unJoinRejectedBillApi(Request $request)
     {
-        if (!Gate::allows('订单管理-问题件-编辑')) return ['success'=>false,'error'=>'没有对应权限'];
-        if(!$request->has('logistic_number_return') || !$request->has('id')) return ['success' => false,'error'=>'参数为空'];
+        if (!Gate::allows('订单管理-问题件-编辑')) return ['success' => false, 'error' => '没有对应权限'];
+        if (!$request->has('logistic_number_return') || !$request->has('id')) return ['success' => false, 'error' => '参数为空'];
         /** @var OrderIssue $orderIssue */
-        $orderIssue = OrderIssue::query()->where('id',$request->id)->first();
-        if(!$orderIssue)return ['success' => false, 'message'=>'没有找到对应的记录'];
-        $result =  app(OrderIssueRejectedBillService::class)->unJoinRejectedBill($orderIssue,$request['logistic_number_return']);
-        if(is_null($result))return ['success' => false,'message' => '没有相对应的连接关系!请刷新页面后重试'];
-        return ['success' => true , 'orderIssue' => $orderIssue];
+        $orderIssue = OrderIssue::query()->where('id', $request->id)->first();
+        if (!$orderIssue) return ['success' => false, 'message' => '没有找到对应的记录'];
+        $result = $this->service->unJoinRejectedBill($orderIssue, $request['logistic_number_return']);
+        if (is_null($result)) return ['success' => false, 'message' => '没有相对应的连接关系!请刷新页面后重试'];
+        return ['success' => true, 'orderIssue' => $orderIssue];
     }
 
     public function reviseJoinRejectedBillApi(Request $request)
     {
-        if (!Gate::allows('订单管理-问题件-编辑')) return ['success'=>false,'error'=>'没有对应权限'];
+        if (!Gate::allows('订单管理-问题件-编辑')) return ['success' => false, 'error' => '没有对应权限'];
         if (!$request->has('logistic_number_return_update'))
-            return ['success' => false,'error' => '退回单号为空'];
+            return ['success' => false, 'error' => '退回单号为空'];
         /** @var OrderIssue $orderIssue */
-        $orderIssue = OrderIssue::query()->where('id',$request->id)->first();
-        if(!$orderIssue)return ['success' => false,'error' => '没有找到对应的记录'];
-        $result = app(OrderIssueRejectedBillService::class)->unJoinRejectedBill($orderIssue,$request['logistic_number_return'],$request['logistic_number_return_update']);
-        if(is_null($result))return ['success' => false,'error' =>  '需更新的对应关系不存在!请刷新页面后重试'];
-        if(!$result)return ['success' => false,'error' => '更新关联关系时出现异常'];
-        return ['success' => true,'data' => ['orderIssueRejectedBill' => $result,'orderIssue' => $orderIssue]];
+        $orderIssue = OrderIssue::query()->where('id', $request->id)->first();
+        if (!$orderIssue) return ['success' => false, 'error' => '没有找到对应的记录'];
+        $result = $this->service->unJoinRejectedBill($orderIssue, $request['logistic_number_return'], $request['logistic_number_return_update']);
+        if (is_null($result)) return ['success' => false, 'error' => '需更新的对应关系不存在!请刷新页面后重试'];
+        if (!$result) return ['success' => false, 'error' => '更新关联关系时出现异常'];
+        return ['success' => true, 'data' => ['orderIssueRejectedBill' => $result, 'orderIssue' => $orderIssue]];
     }
 }

+ 7 - 5
app/Http/Controllers/RejectedBillController.php

@@ -13,6 +13,7 @@ use App\RejectedBill;
 use App\Services\LogService;
 use App\Services\RejectedBillItemService;
 use App\Services\RejectedBillService;
+use App\Services\RejectedBillSyncOrderService;
 use App\Services\WorkOrderService;
 use Illuminate\Contracts\View\Factory;
 use Illuminate\Http\RedirectResponse;
@@ -26,9 +27,11 @@ use Illuminate\View\View;
 
 class RejectedBillController extends Controller
 {
-    function __construct()
-    {
+    private $rejectedBillSyncOrderService;
 
+    function __construct(RejectedBillSyncOrderService $rejectedBillSyncOrderService)
+    {
+        $this->rejectedBillSyncOrderService = $rejectedBillSyncOrderService;
 //        app()->bind('OrderPackageCommoditiesService',OrderPackageCommoditiesService::class);
     }
 
@@ -454,9 +457,8 @@ class RejectedBillController extends Controller
                 $rejectedBillItemService->insert($inner_items_params);
                 LogService::log(__METHOD__, "批量生成退货单详情", json_encode($inner_items_params), Auth::user()['id']);
             }
-            $rejectedBill_collect->each(function ($rejectedBill)use($service){
-                $service->joinOrderIssue($rejectedBill);
-                $service->syncOrderIssue($rejectedBill);
+            $rejectedBill_collect->each(function ($rejectedBill){
+                $this->rejectedBillSyncOrderService->syncRejectingStatus($rejectedBill);
             });
             return ['success'=>true];
         } catch (\Exception $e) {

+ 43 - 0
app/Http/Controllers/TestController.php

@@ -7,6 +7,9 @@ use App\Components\Database;
 use App\Components\ErrorPush;
 use App\MaterialBox;
 use App\MaterialBoxModel;
+use App\OrderIssue;
+use App\RejectedBill;
+use App\Services\RejectedBillSyncOrderService;
 use App\Services\RejectedService;
 use App\User;
 use App\Waybill;
@@ -95,5 +98,45 @@ values(?,?,null,?,?,?,?,?,?,2)",[$code,$a->id,$item->depth,$item->width,$item->h
     public function test3($request){
         dd(Hash::make("wangyan"));
     }
+
+    public function get(){
+        dd($this->get0() ?? $this->get1() ?? $this->get2()) ;
+    }
+
+    public function get0()
+    {
+        dump(1);
+        return null;
+    }
+
+    public function get1()
+    {
+        dump(2);
+        return null;
+    }
+    public function get2()
+    {
+        dump(3);
+        return null;
+    }
+
+    public function OrderSync(){
+        $order_issue = OrderIssue::query()->where('id',67982)->first();
+        $service = new RejectedBillSyncOrderService();
+        dd($service->getOrderRejectingStatus($order_issue->order));
+    }
+
+    public function rejectedSync(){
+        $item = RejectedBill::query()->where('logistic_number_return','YT3186326829104')->first();
+        $service = new RejectedBillSyncOrderService();
+        $service->syncRejectingStatus($item);
+    }
+
+    public function orderIssue(){
+        $orderIssue = OrderIssue::query()->find(1);
+        $service = new RejectedBillSyncOrderService();
+        $service->orderIssueSyncRejectedBills($orderIssue);
+    }
+
 }
 

+ 30 - 24
app/Imports/OrderIssueImport.php

@@ -10,7 +10,9 @@ use App\OrderIssue;
 use App\OrderIssueProcessLog;
 use App\OrderIssueType;
 use App\OrderPackage;
+use App\Services\OrderIssueRejectedBillService;
 use App\Services\OrderService;
+use App\Services\RejectedBillSyncOrderService;
 use App\Services\RejectedService;
 use Illuminate\Support\Collection;
 use Illuminate\Support\Facades\Auth;
@@ -24,14 +26,26 @@ HeadingRowFormatter::default('none');
 
 class OrderIssueImport implements ToCollection, WithHeadingRow, WithMultipleSheets
 {
+    private $orderService;
+    private $orderIssueRejectedBillService;
+    private $rejectedService;
+    private $rejectedBillSyncOrderService;
 
-    public function Collection(Collection $collection)
+    public function __construct(OrderService $orderService,
+                                OrderIssueRejectedBillService $orderIssueRejectedBillService,
+                                RejectedService $rejectedService,
+                                RejectedBillSyncOrderService $rejectedBillSyncOrderService)
     {
-        /** @var OrderService $orderService */
-        $orderService = app('OrderService');
+        $this->orderService = $orderService;
+        $this->orderIssueRejectedBillService = $orderIssueRejectedBillService;
+        $this->rejectedService = $rejectedService;
+        $this->rejectedBillSyncOrderService = $rejectedBillSyncOrderService;
+    }
 
+    public function Collection(Collection $collection)
+    {
         $endIS = false;
-        $headerRow =  $collection->toArray()[0];
+        $headerRow = $collection->toArray()[0];
         if (!isset($headerRow['原始运单号']) || !isset($headerRow['情况说明']) || !isset($headerRow['问题类别'])) {
             Cache::put('error', '请检查您第一行标题是否存在原始运单号,情况说明,问题类别');
         } else {
@@ -39,7 +53,6 @@ class OrderIssueImport implements ToCollection, WithHeadingRow, WithMultipleShee
         }
         $exception = [];
         $sum = 2;
-        $rejectedService = new RejectedService();
         if ($endIS) {
             foreach ($collection as $row) {
                 $logistic_number = trim($row['原始运单号'], ' ');
@@ -68,16 +81,11 @@ class OrderIssueImport implements ToCollection, WithHeadingRow, WithMultipleShee
                     $sum++;
                     continue;
                 }
-                $orderPackage = OrderPackage::query()->where('logistic_number', $logistic_number)->first();
-                if ($orderPackage) {
-                    $order = Order::query()->where('id', $orderPackage['order_id'])->first();
-                    if ($order) {
-                        $orderIssue = OrderIssue::query()->where('order_id', $order['id'])->first();
-                        if ($orderIssue) {
-                            array_push($exception, ['原始运单号' . $row['原始运单号'] . '对应的问题件已存在']);
-                            continue;
-                        }
-                    }
+                $query = OrderPackage::query()->select('order_id')->where('logistic_number', $logistic_number);
+                $order_issue_exists = OrderIssue::query()->whereIn('order_id', $query)->exists();
+                if ($order_issue_exists) {
+                    array_push($exception, ['原始运单号' . $row['原始运单号'] . '对应的问题件已存在']);
+                    continue;
                 }
                 $client_no = null;
                 $order_nos = [];
@@ -91,26 +99,24 @@ class OrderIssueImport implements ToCollection, WithHeadingRow, WithMultipleShee
                     $client_no = $orderHeader['soreference1'];
                     $order_nos[] = $orderHeader['orderno'];
                 }
-                $orderService->syncOrderInfoByWmsOrderNos($order_nos);
-                $order = Order::query()->where('code',$order_nos[0])->first();
-                $orderIssue = OrderIssue::query()->where('order_id', $order['id'])->first();
-                $rejectedBill = $rejectedService->getRejectedByClientNo($client_no);
+                $this->orderService->syncOrderInfoByWmsOrderNos($order_nos);
+                $query = Order::query()->where('code', $order_nos[0]);
+                $orderIssue = OrderIssue::query()->where('order_id', $query)->first();
+                $rejectedBill = $this->rejectedService->getRejectedByClientNo($client_no);
                 if ($orderIssue) {
                     array_push($exception, ['原始运单号' . $row['原始运单号'] . '对应的问题件已存在']);
                     $sum++;
                     continue;
                 }
-                $arr = ['order_id' => $order['id'], 'order_issue_type_id' => $order_type['id'],'result_explain'=>$row['情况说明'],'imported_status'=>'导入未处理'];
+                $arr = ['order_id' => $orderIssue->order_id, 'order_issue_type_id' => $order_type['id'], 'result_explain' => $row['情况说明'], 'imported_status' => '导入未处理'];
                 if ($rejectedBill) {
                     $arr['rejected_bill_id'] = $rejectedBill['id'];
                 }
 
                 /** @var OrderIssue $orderIssue */
                 $orderIssue = OrderIssue::query()->create($arr);
-                event(new AddOrUpdateOrderIssues([$order['id']]));
-                $orderIssue->syncRejectedBills();
-                $orderIssue->syncRejectingStatus();
-
+                event(new AddOrUpdateOrderIssues([$orderIssue->order_id]));
+                $this->rejectedBillSyncOrderService->orderIssueSyncRejectingStatus($orderIssue);
                 if ($orderIssue) {
                     array_push($exception, ['订单' . $row['原始运单号'] . '问题件创建成功!']);
                     OrderIssueProcessLog::query()->create(['order_issue_id' => $orderIssue['id'], 'user_id' => Auth::user()['id'], 'content' => '', 'type' => '创建']);

+ 2 - 0
app/Providers/AppServiceProvider.php

@@ -206,6 +206,7 @@ use App\Services\AndroidInventoryService;
 use App\Services\WorkOrderCancelInterceptService;
 use App\Services\ReceivingTaskService;
 use App\Services\ReceivingTaskItemService;
+use App\Services\RejectedBillSyncOrderService;
 
 class AppServiceProvider extends ServiceProvider
 {
@@ -364,6 +365,7 @@ class AppServiceProvider extends ServiceProvider
         app()->singleton('ReceivingTaskItemService',ReceivingTaskItemService::class);
         app()->singleton('ReceivingTaskService',ReceivingTaskService::class);
         app()->singleton('RegionService', RegionService::class);
+        app()->singleton('RejectedBillSyncOrderService',RejectedBillSyncOrderService::class);
         app()->singleton('RejectedBillItemService', RejectedBillItemService::class);
         app()->singleton('RejectedBillService', RejectedBillService::class);
         app()->singleton('RejectedService', RejectedService::class);

+ 14 - 8
app/Services/OrderIssueRejectedBillService.php

@@ -11,6 +11,12 @@ use Illuminate\Database\Eloquent\Model;
 
 Class OrderIssueRejectedBillService
 {
+    private $rejectedBillSyncOrderService;
+    public function __construct(RejectedBillSyncOrderService  $rejectedBillSyncOrderService)
+    {
+        $this->rejectedBillSyncOrderService = $rejectedBillSyncOrderService;
+    }
+
     /**
      * 添加连接
      * @param OrderIssue $orderIssue
@@ -24,7 +30,7 @@ Class OrderIssueRejectedBillService
             ->where('logistic_number_return',$logistic_number_return)->first();
         if($orderIssueRejectedBill)return null;
         $orderIssue->joinRejectedBill($logistic_number_return);
-        $orderIssue->syncRejectingStatus();      // 问题件同步订单状态
+        $this->rejectedBillSyncOrderService->orderIssueSyncRejectingStatus($orderIssue);
         return OrderIssueRejectedBill::query()->with('rejectedBill.items')
                 ->where('order_issue_id',$orderIssue->id)
                 ->where('logistic_number_return',$logistic_number_return)->first() ?? false;
@@ -44,7 +50,7 @@ Class OrderIssueRejectedBillService
         if(!$orderIssueRejectedBill)return null;
 
         $bool = $orderIssue->unJoinRejectedBill($logistic_number_return);
-        $orderIssue->syncRejectingStatus();      // 问题件同步订单状态
+        $this->rejectedBillSyncOrderService->orderIssueSyncRejectingStatus($orderIssue);
         if($orderIssue->rejectedBills->count() == 0)$orderIssue->update(['is_new_rejecting' => '无']);
         return $bool;
     }
@@ -62,7 +68,7 @@ Class OrderIssueRejectedBillService
             ->where('logistic_number_return',$logistic_number_return)->first();
         if($orderIssueRejectedBill) return null;
         $orderIssue->reviseJoinRejectedBill($logistic_number_return,$logistic_number_return_update);
-        $orderIssue->syncRejectingStatus();      // 问题件同步订单状态
+        $this->rejectedBillSyncOrderService->orderIssueSyncRejectingStatus($orderIssue);
         return OrderIssueRejectedBill::query()->with('rejectedBill')
                 ->where('order_issue_id',$orderIssue->id)
                 ->where('logistic_number_return',$logistic_number_return)->first() ?? false;
@@ -78,11 +84,11 @@ Class OrderIssueRejectedBillService
         if(!$rejectedBills)return;
         if(is_array($rejectedBills)){
             foreach ($rejectedBills as $rejectedBill) {
-                $rejectedBill->syncOrderIssue();
+                $this->rejectedBillSyncOrderService->syncRejectingStatus($rejectedBill);
             }
             return;
         }
-        $rejectedBills->syncOrderIssue();
+        $this->rejectedBillSyncOrderService->syncRejectingStatus($rejectedBills);
     }
 
     /**
@@ -98,7 +104,7 @@ Class OrderIssueRejectedBillService
             return $rejectedBill->logistic_number_return;
         }))->get();
         $orderIssue->joinRejectedBill($logistic_number_return);
-        $orderIssue->syncRejectingStatus();
+        $this->rejectedBillSyncOrderService->orderIssueSyncRejectingStatus($orderIssue);
     }
 
     /**
@@ -111,10 +117,10 @@ Class OrderIssueRejectedBillService
         if(!$order_issues)return;
         if(is_array($order_issues)){
             foreach ($order_issues as $orderIssue) {
-                $orderIssue->syncRejectingStatus();
+                $this->rejectedBillSyncOrderService->orderIssueSyncRejectingStatus($orderIssue);
             }
             return;
         }
-        $order_issues->syncRejectingStatus();
+        $this->rejectedBillSyncOrderService->orderIssueSyncRejectingStatus($order_issues);
     }
 }

+ 115 - 111
app/Services/OrderIssueService.php

@@ -24,7 +24,28 @@ use App\Traits\ServiceAppAop;
 class OrderIssueService
 {
     use ServiceAppAop;
-    protected $modelClass=OrderIssue::class;
+
+    protected $modelClass = OrderIssue::class;
+
+    protected $orderService;
+    protected $rejectedBillSyncOrderService;
+    protected $oracleDocOrderHeaderService;
+    protected $orderIssueProcessLogService;
+    protected $logService;
+
+    public function __construct(OrderService $orderService,
+                                RejectedBillSyncOrderService $rejectedBillSyncOrderService,
+                                OracleDocOrderHeaderService $oracleDocOrderHeaderService,
+                                OrderIssueProcessLogService $orderIssueProcessLogService,
+                                LogService $logService
+    )
+    {
+        $this->orderService = $orderService;
+        $this->rejectedBillSyncOrderService = $rejectedBillSyncOrderService;
+        $this->oracleDocOrderHeaderService = $oracleDocOrderHeaderService;
+        $this->orderIssueProcessLogService = $orderIssueProcessLogService;
+        $this->logService = $logService;
+    }
 
     public function insert($params)
     {
@@ -34,9 +55,7 @@ class OrderIssueService
     public function orderIssueTag(array $params)
     {
         $orderNos = $params['orderNos'];
-        /** @var OracleDOCOrderHeaderService $orderHeaderService */
-        $orderHeaderService = app('OracleDocOrderHeaderService');
-        $orderHeaders = $orderHeaderService->getQuery()->whereIn('orderNo', $orderNos)->get();
+        $orderHeaders = $this->oracleDocOrderHeaderService->getQuery()->whereIn('orderNo', $orderNos)->get();
         $bool = $this->createOrderIssueByWmsOrder($orderHeaders, $params['typeId'], $params['result_explain']);
         if ($bool) {
             return ['success' => $bool];
@@ -47,19 +66,19 @@ class OrderIssueService
 
     /**
      * 生成问题件
-     * @param  array $params
+     * @param array $params
      * @return array|false[]
      */
     public function buildOrderIssue(array $params): array
     {
         $data = Carbon::now();
-        foreach ($params as $param){
+        foreach ($params as $param) {
             $inner_params[] = [
                 'order_id' => $param['order_id'],
-                'result_explain'=> $param['result_explain'] ?? '',
-                'imported_status'=> $param['imported_status'] ?? '正常',
-                'custom_code'=> $param['custom_code'] ?? null ,
-                'hidden_tag'=> $param['hidden_tag'] ?? null,
+                'result_explain' => $param['result_explain'] ?? '',
+                'imported_status' => $param['imported_status'] ?? '正常',
+                'custom_code' => $param['custom_code'] ?? null,
+                'hidden_tag' => $param['hidden_tag'] ?? null,
                 'order_issue_type_id' => $param['order_issue_type_id'] ?? '',
                 'created_at' => $data,
                 'updated_at' => $data,
@@ -67,9 +86,9 @@ class OrderIssueService
         }
         if (!isset($inner_params)) return ['success' => false];
         $bool = OrderIssue::query()->insert($inner_params);
-        if (!$bool) return ['success' => false,'message' => '创建问题件异常'];
+        if (!$bool) return ['success' => false, 'message' => '创建问题件异常'];
         $ordersIssues = OrderIssue::query()->whereIn('order_id', data_get($inner_params, '*.order_id'))->get();
-        event(new AddOrUpdateOrderIssues(data_get($ordersIssues,'*.order_id')));
+        event(new AddOrUpdateOrderIssues(data_get($ordersIssues, '*.order_id')));
         $this->同步退单状态($ordersIssues);
         $param = [
             'ids' => data_get($ordersIssues, '*.id'),
@@ -77,22 +96,21 @@ class OrderIssueService
             'user_id' => Auth::user()['id'],
             'type' => '创建'
         ];
-        app(OrderIssueProcessLogService::class)->create($param);
+        $this->orderIssueProcessLogService->create($param);
         return ['success' => true];
     }
 
-    public function createOrderIssueByWmsOrder($orderHeaders, $order_issue_type_id, $result_explain, $imported_status = '正常', $custom_code = null,$hiddenTag = null)
+    public function createOrderIssueByWmsOrder($orderHeaders, $order_issue_type_id, $result_explain, $imported_status = '正常', $custom_code = null, $hiddenTag = null)
     {
         /** @var OrderService $orderService */
-        $orderService = app('OrderService');
-        $orderService->syncOrderInfo($orderHeaders);
-        $orders = Order::query()->whereIn('code',data_get($orderHeaders,'*.orderno'))->whereHas('packages')->get();
-        if($orders->count()==0)return false;
+        $this->orderService->syncOrderInfo($orderHeaders);
+        $orders = Order::query()->whereIn('code', data_get($orderHeaders, '*.orderno'))->whereHas('packages')->get();
+        if ($orders->count() == 0) return false;
         $innerParams = [];
         $data = Carbon::now()->format('Y-m-d H:i:s');
         foreach ($orderHeaders as $orderHeader) {
-            $order = $orders->where('code',$orderHeader->orderno)->first();
-            if($order==null)$order = Order::query()->where('code',$orderHeader->orderno)->first();
+            $order = $orders->where('code', $orderHeader->orderno)->first();
+            if ($order == null) $order = Order::query()->where('code', $orderHeader->orderno)->first();
             $innerParams[] = [
                 'order_id' => $order->id,
                 'order_issue_type_id' => $order_issue_type_id,
@@ -107,7 +125,7 @@ class OrderIssueService
         try {
             $this->insert($innerParams);
             $ordersIssues = OrderIssue::query()->whereIn('order_id', data_get($innerParams, '*.order_id'))->get();
-            event(new AddOrUpdateOrderIssues(data_get($ordersIssues,'*.order_id')));
+            event(new AddOrUpdateOrderIssues(data_get($ordersIssues, '*.order_id')));
             $this->同步退单状态($ordersIssues);
             $param = [
                 'ids' => data_get($ordersIssues, '*.id'),
@@ -115,22 +133,21 @@ class OrderIssueService
                 'user_id' => Auth::user()['id'],
                 'type' => '创建'
             ];
-            app(OrderIssueProcessLogService::class)->create($param);
-            app('LogService')->log(__METHOD__, __FUNCTION__, '创建问题件' . count($innerParams) . json_encode($innerParams));
+            $this->orderIssueProcessLogService->create($param);
+            $this->logService->log(__METHOD__, __FUNCTION__, '创建问题件' . count($innerParams) . json_encode($innerParams));
             return true;
         } catch (\Exception $e) {
-            app('LogService')->log(__METHOD__, __FUNCTION__, '创建问题件 error' . count($innerParams) . json_encode($innerParams) .json_encode($e->getMessage())  .json_encode($e->getTraceAsString())) ;
+            $this->logService->log(__METHOD__, __FUNCTION__, '创建问题件 error' . count($innerParams) . json_encode($innerParams) . json_encode($e->getMessage()) . json_encode($e->getTraceAsString()));
             return false;
         }
     }
 
     public function 同步退单状态($orderIssues)
     {
-        if(!$orderIssues)return;
+        if (!$orderIssues) return;
         foreach ($orderIssues as $orderIssue) {
             /**@var OrderIssue $orderIssue */
-            $orderIssue->syncRejectedBills();
-            $orderIssue->syncRejectingStatus();
+            $this->rejectedBillSyncOrderService->orderIssueSyncRejectingStatus($orderIssue);
         }
     }
 
@@ -145,13 +162,11 @@ class OrderIssueService
 
     public function createOrFind($clientCode)
     {
-        /** @var OrderService $orderService */
-        $orderService = app('OrderService');
         $orderHeader = OracleDOCOrderHeader::query()->where('SOReference1', $clientCode)->first();
         if ($orderHeader === null) {
             return null;
         }
-        $order = $orderService->findOrCreateByClientCode($clientCode);
+        $order = $this->orderService->findOrCreateByClientCode($clientCode);
         $rejectedBill = RejectedBill::query()->where('order_number', $orderHeader['soreference1'])->first();
         if ($rejectedBill === null) {
             $asnHeader = OracleDOCASNHeader::query()->where('ASNReference2', $orderHeader['soreference1'])->first();
@@ -167,13 +182,12 @@ class OrderIssueService
         try {
             /** @var OrderIssue $orderIssue */
             $orderIssue = OrderIssue::query()->create($arr);
-            $orderIssue->syncRejectedBills();
-            $orderIssue->syncRejectingStatus();
+            $this->rejectedBillSyncOrderService->orderIssueSyncRejectingStatus($orderIssue);
             $orderIssue->order = $order;
             event(new AddOrUpdateOrderIssues([$orderIssue['order_id']]));
-            app('LogService')->log(__METHOD__, __FUNCTION__, '创建问题件' . json_encode($orderIssue));
+            $this->logService->log(__METHOD__, __FUNCTION__, '创建问题件' . json_encode($orderIssue));
         } catch (\Exception $e) {
-            app('LogService')->log(__METHOD__, __FUNCTION__, '创建问题件error' . json_encode($arr) . $e->getMessage() . $e->getTraceAsString());
+            $this->logService->log(__METHOD__, __FUNCTION__, '创建问题件error' . json_encode($arr) . $e->getMessage() . $e->getTraceAsString());
         } finally {
             unset($orderHeader, $rejectedBill, $order);
             return $orderIssue;
@@ -216,28 +230,25 @@ class OrderIssueService
         /** @var OrderIssue $orderIssue */
         $orderIssue = OrderIssue::query()->create($arr);
         if (!$arr['order_id']) {
-            $order = app("OrderService")->createOrder($arr);
+            $order = $this->orderService->createOrder($arr);
             $orderIssue->order_id = $order['id'];
             $orderIssue->save();
-            app('LogService')->log(__METHOD__,__FUNCTION__,'创建 Order'.json_encode($order));
+            $this->logService->log(__METHOD__, __FUNCTION__, '创建 Order' . json_encode($order));
         }
-        $orderIssue->syncRejectedBills();
-        $orderIssue->syncRejectingStatus();
         return $orderIssue;
     }
 
     public function createByLogisticNumber(array $arr)
     {
         /** @var OrderIssue $orderIssue */
-        $arr['code']='null_'.Uuid::uuid4();
-        $order = app("OrderService")->createOrder($arr);
-        app('LogService')->log(__METHOD__,__FUNCTION__,'创建 Order'.json_encode($order));
+        $arr['code'] = 'null_' . Uuid::uuid4();
+        $order = $this->orderService->createOrder($arr);
+        $this->logService->log(__METHOD__, __FUNCTION__, '创建 Order' . json_encode($order));
         $orderIssue = OrderIssue::query()->create($arr);
         $orderIssue['order_id'] = $order['id'];
         OrderPackage::query()->create(['order_id' => $order['id'], 'logistic_number' => $arr['logistic_number_return']]);
         $orderIssue->update(['order_id' => $order['id']]);
-        $orderIssue->syncRejectedBills();
-        $orderIssue->syncRejectingStatus();
+        $this->rejectedBillSyncOrderService->orderIssueSyncRejectingStatus($orderIssue);
         event(new AddOrUpdateOrderIssues([$orderIssue['order_id']]));
         return $orderIssue;
     }
@@ -246,10 +257,10 @@ class OrderIssueService
     {
         try {
             $bool = OrderIssue::query()->whereIn('id', $ids)->delete();
-            app('LogService')->log(__METHOD__, __FUNCTION__, json_encode($ids));
+            $this->logService->log(__METHOD__, __FUNCTION__, json_encode($ids));
             return ['success' => $bool];
         } catch (\Exception $e) {
-            app('LogService')->log(__METHOD__, __FUNCTION__, 'error' . json_decode($ids) . '||' . $e->getMessage() . '||' . $e->getTraceAsString());
+            $this->logService->log(__METHOD__, __FUNCTION__, 'error' . json_decode($ids) . '||' . $e->getMessage() . '||' . $e->getTraceAsString());
             return ['success' => false];
         }
     }
@@ -261,28 +272,26 @@ class OrderIssueService
 
     public function isExistOrderIssueTypeIsEnd($ids): bool
     {
-        return OrderIssueProcessLog::query()->whereIn('order_issue_id',$ids)->where('type','结束')->exists();
+        return OrderIssueProcessLog::query()->whereIn('order_issue_id', $ids)->where('type', '结束')->exists();
     }
 
     public function editOrderIssueSecondClientNo($id, $secondClientNo, &$order = null): bool
     {
-        $orderService = app(OrderService::class);
-        $orderHeaderService = app('OracleDocOrderHeaderService');
-        $orderHeaders = $orderHeaderService->getQuery()->where('SoReference1', $secondClientNo)->get();
-        $orderService->syncOrderInfo($orderHeaders,false);
+        $orderHeaders = $this->oracleDocOrderHeaderService->getQuery()->where('SoReference1', $secondClientNo)->get();
+        $this->orderService->syncOrderInfo($orderHeaders, false);
         return OrderIssue::query()->where('id', $id)->update(['second_client_no' => $secondClientNo]) > 0;
     }
 
     public function updateSecondLogisticNumber($id, $logisticNumber): array
     {
-        $orderIssue = OrderIssue::query()->where('id',$id)->first();
+        $orderIssue = OrderIssue::query()->where('id', $id)->first();
         // 有填写二次订单号 并没有对应的订单号
-        if($orderIssue->second_client_no){
-            if(!$orderIssue->secondOrder){
-                $orderIssue->update(['second_logistic_number'=>$logisticNumber]);
-                return ['success' => true,'second_logistic_number' => $logisticNumber];
-            }else{
-                return ['success' => false,'message' => '二次客户订单号对应的订单已存在,无法更改快递单号'];
+        if ($orderIssue->second_client_no) {
+            if (!$orderIssue->secondOrder) {
+                $orderIssue->update(['second_logistic_number' => $logisticNumber]);
+                return ['success' => true, 'second_logistic_number' => $logisticNumber];
+            } else {
+                return ['success' => false, 'message' => '二次客户订单号对应的订单已存在,无法更改快递单号'];
             }
         }
 //        // 没有填写二次订单号
@@ -294,46 +303,40 @@ class OrderIssueService
 //        $orderIssue->update(['second_client_no' => $order->client_code]);
 
         $orderIssue->second_logistic_number = $logisticNumber;
-        $order_package = OrderPackage::query()->selectRaw('order_id')->where('logistic_number',$logisticNumber);
-        if($order_package){
+        $order_package = OrderPackage::query()->selectRaw('order_id')->where('logistic_number', $logisticNumber);
+        if ($order_package) {
             $order = Order::query()->with(['packages.commodities.commodity', 'logistic'])
                 ->whereIn('id', $order_package)->first();
-            if($order)$orderIssue->second_client_no = $order->client_code;
+            if ($order) $orderIssue->second_client_no = $order->client_code;
             $orderIssue->save();
             return ['success' => true, 'order' => $order];
         }
-        /**
-         * @var OracleDOCOrderHeaderService $orderHeaderService
-         * @var OrderService $orderService
-         */
-        $orderHeaderService = app(OracleDOCOrderHeaderService::class);
-        $orderService = app(OrderService::class);
-        $orderHeader = $orderHeaderService->getQuery()->where("DOC_Order_Header.SOReference5",$logisticNumber)->get();
-        if(count($orderHeader) == 0){
-            $actAllocationQuery = OracleActAllocationDetails::query()->selectRaw("OrderNo")->where("PickToTraceId",$logisticNumber);
-            $orderHeader = $orderHeaderService->getQuery()->whereIn("DOC_Order_Header.OrderNo",$actAllocationQuery)->get();
+        $orderHeader = $this->oracleDocOrderHeaderService->getQuery()->where("DOC_Order_Header.SOReference5", $logisticNumber)->get();
+        if (count($orderHeader) == 0) {
+            $actAllocationQuery = OracleActAllocationDetails::query()->selectRaw("OrderNo")->where("PickToTraceId", $logisticNumber);
+            $orderHeader = $this->oracleDocOrderHeaderService->getQuery()->whereIn("DOC_Order_Header.OrderNo", $actAllocationQuery)->get();
         }
-        if(count($orderHeader)>0){
-            $orderService->syncOrder($orderHeader);
-            $order = Order::query()->with(['packages.commodities.commodity', 'logistic'])->where("code",$orderHeader->first()->orderno)->first();
-            if($order){
-                $orderIssue->update(['second_client_no'=>$order->client_code]);
+        if (count($orderHeader) > 0) {
+            $this->orderService->syncOrder($orderHeader);
+            $order = Order::query()->with(['packages.commodities.commodity', 'logistic'])->where("code", $orderHeader->first()->orderno)->first();
+            if ($order) {
+                $orderIssue->update(['second_client_no' => $order->client_code]);
                 return ['success' => true, 'order' => $order];
             }
         }
-        $orderIssue->update(['second_logistic_number'=>$logisticNumber]);
+        $orderIssue->update(['second_logistic_number' => $logisticNumber]);
         return ['success' => true, 'order' => null];
 
     }
 
-    public function createOrderIssue($logisticNumber, $type, $result_explain, $importedStatus = '正常', $custom_code = null,$hiddenTag = null): bool
+    public function createOrderIssue($logisticNumber, $type, $result_explain, $importedStatus = '正常', $custom_code = null, $hiddenTag = null): bool
     {
-        $orderHeaders = OracleDOCOrderHeader::query()->with(['oracleDOCOrderDetails', 'actAllocationDetails', 'oracleBASCode','orderType'])
+        $orderHeaders = OracleDOCOrderHeader::query()->with(['oracleDOCOrderDetails', 'actAllocationDetails', 'oracleBASCode', 'orderType'])
             ->whereHas('actAllocationDetails', function ($query) use ($logisticNumber) {
                 $query->where('picktotraceid', $logisticNumber);
             })->get();
         $orderIssueType = OrderIssueType::query()->where('name', $type)->first();
-        return $this->createOrderIssueByWmsOrder($orderHeaders, $orderIssueType->id, $result_explain, $importedStatus, $custom_code,$hiddenTag);
+        return $this->createOrderIssueByWmsOrder($orderHeaders, $orderIssueType->id, $result_explain, $importedStatus, $custom_code, $hiddenTag);
     }
 
     /**
@@ -364,8 +367,8 @@ class OrderIssueService
 
     public function checkOrderIssueIsExistAndSoftDelete($orderNos): array
     {
-        $orderIssues = OrderIssue::query()->onlyTrashed()->whereIn('order_id',function($query)use($orderNos){
-            $query->from('orders')->selectRaw('id')->whereIn('code',$orderNos);
+        $orderIssues = OrderIssue::query()->onlyTrashed()->whereIn('order_id', function ($query) use ($orderNos) {
+            $query->from('orders')->selectRaw('id')->whereIn('code', $orderNos);
         })->get();
         $exits_logistic_number = array_diff(array_unique(data_get($orderIssues, '*.order.code')), ['', null]);
         return array_intersect($exits_logistic_number, $orderNos);
@@ -379,42 +382,43 @@ class OrderIssueService
     public function disposeImport(array $ids): array
     {
         $orderIssues = OrderIssue::query()->with('order')->whereIn('id', $ids)->get();
-        if ($orderIssues->count()<count($ids)) {
+        if ($orderIssues->count() < count($ids)) {
             $is_exits_ids = array_diff($ids, data_get($orderIssues, '*.code'));
             return ['success' => false, 'fail_info' => json_encode($is_exits_ids) . '没有存在对应的问题件'];
         }
         if ($orderIssues->where('imported_status', '导入已梳理')->count() > 0) {
-             $is_dispose_orderNos = data_get($orderIssues->where('imported_status', '导入已梳理'), '*.order.code');
+            $is_dispose_orderNos = data_get($orderIssues->where('imported_status', '导入已梳理'), '*.order.code');
             return ['success' => false, 'fail_info' => json_encode($is_dispose_orderNos) . '导入已处理'];
         }
         try {
             OrderIssue::query()->whereIn('id', $ids)->update(['imported_status' => '导入已梳理']);
-            app('LogService')->log(__METHOD__,__FUNCTION__,'导入处理 '.json_encode($ids).'导入处理');
+            $this->logService->log(__METHOD__, __FUNCTION__, '导入处理 ' . json_encode($ids) . '导入处理');
             return ['success' => true];
         } catch (\Exception $e) {
-            app('LogService')->log(__METHOD__,__FUNCTION__,'导入处理 error'.json_encode($e->getMessage()).$e->getTraceAsString());
-            return ['success' => false,'fail_info'=>$e->getMessage()];
+            $this->logService->log(__METHOD__, __FUNCTION__, '导入处理 error' . json_encode($e->getMessage()) . $e->getTraceAsString());
+            return ['success' => false, 'fail_info' => $e->getMessage()];
         }
     }
 
-    public function getRecycleBinPaginate($params){
+    public function getRecycleBinPaginate($params)
+    {
         return OrderIssue::query()
-            ->with(['order'=>function($query){
-                $query->with(['logistic','shop','owner','packages'=>function($query){
-                $query->with('commodities');
-            }]);
-        },'orderIssueRejectedBills.rejectedBill.items','issueType','secondOrder.packages.commodities'])->onlyTrashed()->paginate($params['paginate'] ?? 50);
+            ->with(['order' => function ($query) {
+                $query->with(['logistic', 'shop', 'owner', 'packages' => function ($query) {
+                    $query->with('commodities');
+                }]);
+            }, 'orderIssueRejectedBills.rejectedBill.items', 'issueType', 'secondOrder.packages.commodities'])->onlyTrashed()->paginate($params['paginate'] ?? 50);
     }
 
     public function recoverOrderIssue($ids): array
     {
         try {
             $bool = OrderIssue::query()->withTrashed()->whereIn('id', $ids)->restore();
-            app('LogService')->log(__METHOD__, __FUNCTION__, '恢复问题件 ids = ' . json_encode($ids));
-            return ['success'=>$bool];
+            $this->logService->log(__METHOD__, __FUNCTION__, '恢复问题件 ids = ' . json_encode($ids));
+            return ['success' => $bool];
         } catch (\Exception $e) {
-            app('LogService')->log(__METHOD__, 'ERROR '.__FUNCTION__, '恢复问题件 Error' . json_encode($ids).' || '.json_encode($e->getMessage()).' || '.json_encode($e->getTraceAsString()));
-            return ['success'=>false,'error'=>$e->getMessage()];
+            $this->logService->log(__METHOD__, 'ERROR ' . __FUNCTION__, '恢复问题件 Error' . json_encode($ids) . ' || ' . json_encode($e->getMessage()) . ' || ' . json_encode($e->getTraceAsString()));
+            return ['success' => false, 'error' => $e->getMessage()];
         }
     }
 
@@ -424,8 +428,8 @@ class OrderIssueService
      */
     public function archive($orderIssues)
     {
-        $updateParams = ['final_status'=>'已归档','archive_at' =>  Carbon::now()->format('Y-m-d H:i:s')];
-        $orderIssues->each(function($orderIssue)use($updateParams){
+        $updateParams = ['final_status' => '已归档', 'archive_at' => Carbon::now()->format('Y-m-d H:i:s')];
+        $orderIssues->each(function ($orderIssue) use ($updateParams) {
             $orderIssue->update($updateParams);
         });
     }
@@ -437,41 +441,41 @@ class OrderIssueService
      */
     public function isExists($logistic_number): bool
     {
-        $order_package_query = OrderPackage::query()->select('order_id')->whereIn('logistic_number',[$logistic_number]);
-        $order_issue_type_query = OrderIssueType::query()->select('id')->where('name' ,'拦截');
-        return OrderIssue::query()->whereIn('order_id',$order_package_query)->whereIn('order_issue_type_id',$order_issue_type_query)->count() ;
+        $order_package_query = OrderPackage::query()->select('order_id')->whereIn('logistic_number', [$logistic_number]);
+        $order_issue_type_query = OrderIssueType::query()->select('id')->where('name', '拦截');
+        return OrderIssue::query()->whereIn('order_id', $order_package_query)->whereIn('order_issue_type_id', $order_issue_type_query)->count();
     }
 
     // 已拦截 在 问题件 的显示
     public function intercept($logistic_number)
     {
-        $order_package = OrderPackage::query()->select('order_id')->where('logistic_number',$logistic_number)->first();
+        $order_package = OrderPackage::query()->select('order_id')->where('logistic_number', $logistic_number)->first();
         if (!$order_package) return;
-        OrderIssue::query()->where('order_id',$order_package->order_id)->update(['is_intercept' => 1]);
+        OrderIssue::query()->where('order_id', $order_package->order_id)->update(['is_intercept' => 1]);
     }
 
     public function tagWorkOrder(&$orderIssues)
     {
-        $orderIds = data_get($orderIssues->items(),'*.order_id');
-        $workOrders = WorkOrder::query()->whereIn('order_id',$orderIds)->get();
+        $orderIds = data_get($orderIssues->items(), '*.order_id');
+        $workOrders = WorkOrder::query()->whereIn('order_id', $orderIds)->get();
         $tags = [];
-        $workOrders->each(function($workOrder)use(&$tags){
+        $workOrders->each(function ($workOrder) use (&$tags) {
             $tags[$workOrder->order_id] = true;
         });
         foreach ($orderIssues as &$orderIssue) {
-            if (array_key_exists($orderIssue->order_id,$tags))$orderIssue->is_work_order = true;
+            if (array_key_exists($orderIssue->order_id, $tags)) $orderIssue->is_work_order = true;
             else $orderIssue->is_work_order = false;
         }
     }
 
-    public function batchUpdateFinalStatus($ids,$status)
+    public function batchUpdateFinalStatus($ids, $status)
     {
-        OrderIssue::query()->whereIn('id',$ids)->update(['final_status'=>$status]);
+        OrderIssue::query()->whereIn('id', $ids)->update(['final_status' => $status]);
     }
 
-    public function batchUpdateIssueType($ids,$orderIssueTypeID)
+    public function batchUpdateIssueType($ids, $orderIssueTypeID)
     {
-        OrderIssue::query()->whereIn('id',$ids)->update(['order_issue_type_id'=>$orderIssueTypeID]);
+        OrderIssue::query()->whereIn('id', $ids)->update(['order_issue_type_id' => $orderIssueTypeID]);
     }
 }
 

+ 0 - 1
app/Services/RejectedBillService.php

@@ -22,7 +22,6 @@ use App\Traits\ServiceAppAop;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Database\Query\Builder;
 use Overtrue\LaravelPinyin\Facades\Pinyin;
-use function Symfony\Component\String\s;
 
 
 class RejectedBillService

+ 191 - 0
app/Services/RejectedBillSyncOrderService.php

@@ -0,0 +1,191 @@
+<?php
+
+namespace App\Services;
+
+use App\Commodity;
+use App\CommodityBarcode;
+use App\OracleDOCOrderHeader;
+use App\Order;
+use App\OrderIssue;
+use App\OrderIssueRejectedBill;
+use App\OrderPackage;
+use App\RejectedBill;
+use App\RejectedBillItem;
+use App\WorkOrder;
+
+class RejectedBillSyncOrderService
+{
+    public function syncRejectingStatusByReturnLogisticNumber($returnLogisticNumber){
+        /** @var RejectedBill $rejected_bill */
+        $rejected_bill = RejectedBill::query()->where('logistic_number_return',$returnLogisticNumber)->first();
+        if(!$rejected_bill) return;
+        $this->rejectedBillSyncOrderIssue($rejected_bill);
+        $this->syncRejectingStatus($rejected_bill);
+    }
+
+
+    public function syncRejectingStatus(RejectedBill $rejectedBill)
+    {
+        /** @var Order $order */
+        $order = $this->getCorrespondOrder($rejectedBill);
+        if(!$order) return;
+        $rejecting_status = $this->getOrderRejectingStatus($order);
+        $this->syncOrderRejectingStatus($order,$rejecting_status);
+    }
+
+    private function syncOrderRejectingStatus(Order $order,$rejecting_status){
+        OrderIssue::query()->where('order_id',$order->id)->update(['rejecting_status' => $rejecting_status,'is_new_rejecting' => 1]);
+        WorkOrder::query()->where('order_id',$order->id)->update(['rejecting_status' => $rejecting_status,'is_new_rejecting' => 1]);
+    }
+
+    public function orderIssueSyncRejectingStatus(OrderIssue $orderIssue){
+        $order = $orderIssue->order;
+        if (!$order) return;
+        $this->orderIssueSyncRejectedBills($orderIssue);
+        $rejecting_status = $this->getOrderRejectingStatus($order);
+        $this->syncOrderRejectingStatus($order,$rejecting_status);
+    }
+
+    public function getOrderRejectingStatus(Order $order): string
+    {
+        $rejected_bill_items = $this->getRejectedBillItems($order);
+        $rejected_bill_item_map = $this->getRejectedBillMaps($rejected_bill_items,$order);
+        $order_commodity_map = $this->getOrderCommodityMap($order);
+        return $this->computerRejectingStatus($rejected_bill_item_map,$order_commodity_map);
+    }
+
+    private function getCorrespondOrder(RejectedBill $rejectedBill)
+    {
+        return $this->getCorrespondOrderByRejectedBill($rejectedBill) ??
+            ($this->getCorrespondOrderByOrderIssueRejectedBill($rejectedBill) ??
+             $this->getCorrespondOrderByOracleOrderHeader($rejectedBill));
+    }
+
+    private function getCorrespondOrderByRejectedBill(RejectedBill $rejectedBill)
+    {
+        return Order::query()->with('packages.commodities.commodity')->whereHas('packages', function ($query) use ($rejectedBill) {
+            $query->where('logistic_number', $rejectedBill->logistic_number_return);
+        })->first();
+    }
+
+    private function getCorrespondOrderByOrderIssueRejectedBill(RejectedBill $rejectedBill)
+    {
+        if (!$rejectedBill) return null;
+        $order_issue_rejected_bill_query = OrderIssueRejectedBill::query()
+            ->select('order_issue_id')->where('logistic_number_return',$rejectedBill->logistic_number_return);
+        $order_issue_query = OrderIssue::query()
+            ->select('order_id')->whereIn('order_issue_id',$order_issue_rejected_bill_query);
+        return Order::query()->with('packages.commodities.commodity')->whereIn('id', $order_issue_query)->first();
+    }
+
+    private function getCorrespondOrderByOracleOrderHeader(RejectedBill $rejectedBill)
+    {
+        if (!$rejectedBill) return null;
+        $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 null;
+        return Order::query()->with('packages.commodities.commodity')->where('code', $orderHeader->orderno)->first();
+    }
+
+    private function getRejectedBillItems(Order $order)
+    {
+        $query = OrderIssue::query()->select('id')->where('order_id',$order->id);
+        $query = OrderIssueRejectedBill::query()->select('logistic_number_return')->whereIn('order_issue_id',$query);
+        $query = RejectedBill::query()->select('id')->whereIn('logistic_number_return',$query);
+        return RejectedBillItem::query()->with('quality')->whereIn('id_rejected_bill',$query)->get();
+    }
+
+    private function getRejectedBillMaps($rejectedBillItems,$order): array
+    {
+        $map = [];
+        if(!$rejectedBillItems) return $map;
+        foreach ($rejectedBillItems as $item) {
+            $code = $item->barcode_goods;
+            $amount = $item->amount;
+            if (!Commodity::query()->where("sku", $code)->where('owner_id',$order->owner_id)->exists()) {
+                $query = CommodityBarcode::query()->select('commodity_id')->where('code',$code);
+                $commodity = Commodity::query()->where('owner_id',$order->owner_id)->whereIn('id',$query)->first();
+                if ($commodity)$code = $commodity->sku;
+            }
+            $quality_name = $item->quality->name;
+            if($map[$code][$quality_name] ?? false) $map[$code][$quality_name] += $amount;
+            else $map[$code][$quality_name] = $amount;
+        }
+        return $map;
+    }
+
+    private function getOrderCommodityMap(Order $order): array
+    {
+        $map = [];
+        $order->packages->each(function ($package)use($order,&$map){
+            $package->commodities->map(function($item) use($order,&$map){
+                $sku = $item->commodity->sku ?? null;
+                if ($sku) {
+                    $amount = $item->amount;
+                    empty($map[$sku]) ?  $map[$sku] = $amount : $map[$sku]+=$amount ;
+                }
+            });
+        });
+        return $map;
+    }
+
+    private function computerRejectingStatus(array $rejected_bill_item_map, array $order_commodity_map):string
+    {
+        //未退回,差异退回,全部退回,超量退回,部分退回
+        if (count($rejected_bill_item_map) == 0) return "未退回";
+        $equal = 0;     // 相等sku
+        $portion = 0;   // 相等的sku
+        foreach ($rejected_bill_item_map as $key => $map) {
+            if (isset($map['残次']) && $map['残次'] > 0) return "差异退回";
+            if (empty($order_commodity_map[$key])) return "差异退回";
+            if(isset($map['正品']) && isset($order_commodity_map[$key])){
+                if ( $map['正品'] < $order_commodity_map[$key]) $portion += 1;
+                if ( $map['正品'] > $order_commodity_map[$key]) return "超量退回";
+                if ( $map['正品'] == $order_commodity_map[$key]) $equal += 1;
+            }
+        }
+        if ($equal == count($rejected_bill_item_map)
+            && $equal == count($rejected_bill_item_map)
+            && $portion == 0) return "全部退回";        // 全部退回
+        if ($portion > 0) return "部分退回";
+        if (count(array_diff_key($rejected_bill_item_map,$order_commodity_map)) > 0)return '部分退回';
+        if (count(array_diff_key($order_commodity_map,$rejected_bill_item_map)) > 0)return '差异退回';
+        return "无";
+    }
+
+
+    public function orderIssueSyncRejectedBills(OrderIssue $orderIssue)
+    {
+        $logistic_numbers = OrderPackage::query()->where('order_id',$orderIssue->order_id)->get()->map(function($item){
+            return $item->logistic_number;
+        })->toArray();
+
+        $rejected_bills = RejectedBill::query()->select('logistic_number_return')
+            ->whereIn('logistic_number_return',$logistic_numbers)
+            ->get()->map(function($item){
+                return $item->logistic_number_return;
+            })->toArray();
+        if(count($rejected_bills) === 0) return;
+
+        $order_issue_rejected_bills = OrderIssueRejectedBill::query()->where('order_issue_id',$orderIssue->id)->get()->map(function ($item){
+            return $item->logistic_number_return;
+        })->toArray();
+
+        $insert_param = array_map(function($item)use($orderIssue){
+            return ['order_issue_id' => $orderIssue->id,'logistic_number_return' => $item];
+        },array_diff($rejected_bills,$order_issue_rejected_bills));
+
+        OrderIssueRejectedBill::query()->insert($insert_param);
+    }
+
+    public function rejectedBillSyncOrderIssue(RejectedBill $rejectedBill){
+        $reaction_exists = OrderIssueRejectedBill::query()->where('logistic_number_return',$rejectedBill->logistic_number_return)->exists();
+        if ($reaction_exists) return;
+        $query = Order::query()->select('id')->whereHas('packages',function($query)use($rejectedBill){
+            $query->where('logistic_number',$rejectedBill->logistic_number_return);
+        });
+        $order_issue = OrderIssue::query()->whereIn('order_id',$query)->first();
+        OrderIssueRejectedBill::query()->create(['order_issue_id' => $order_issue->id,'logistic_number_return' => $rejectedBill->logistic_number_return]);
+    }
+}

+ 0 - 1
resources/views/order/issue/index.blade.php

@@ -2242,7 +2242,6 @@
                 },
                 joinRejectedBill(orderIssue, e) {
                     let logistic_number = $(e.target).prev().val();
-                    this
                     let is_return = false;
                     if (logistic_number === null) {
                         tempTip.show('请输入需要关联的退回单号');

+ 3 - 3
routes/apiLocal.php

@@ -105,9 +105,9 @@ Route::group(['prefix' => 'order'], function () {
         Route::post('financeConfirm','OrderIssueController@financeConfirmApi');
 
         Route::group(['prefix'=>'rejectedBill'],function(){
-            Route::post('join','OrderIssueRejectedBillController@joinRejectedBillApi');
-            Route::post('unJoin','OrderIssueRejectedBillController@unJoinRejectedBillApi');
-            Route::post('reviseJoin','OrderIssueRejectedBillController@reviseJoinRejectedBillApi');
+            Route::post('join','OrderIssueRejectedBillController@joinRejectedBillApi')->name('order.issue.join.rejectedBillApi');
+            Route::post('unJoin','OrderIssueRejectedBillController@unJoinRejectedBillApi')->name('order.issue.unJoin.rejectedBillApi');
+            Route::post('reviseJoin','OrderIssueRejectedBillController@reviseJoinRejectedBillApi')->name('order.issue.reviseJoin.rejectedBillApi');
         });
 
          Route::group(['prefix'=>'onTop'],function(){