LD 5 роки тому
батько
коміт
48ab76bc8e

+ 3 - 60
app/Http/Controllers/TestController.php

@@ -600,20 +600,18 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
 
     public function test3()
     {
-
         /** @var OrderTrackingService $orderTrackingService */
         $orderTrackingService = app('orderTrackingService');
         /** @var OrderService $orderService */
         $orderService = app(OrderService::class);
         $owners = app(OrderTrackingOwnerService::class)->getTrackingOrderOwner();
-        $startDate = \Illuminate\Support\Carbon::parse('2020-10-01 00:00:00')->toDateTimeString();
+        $startDate = \Illuminate\Support\Carbon::parse('2020-10-10 00:00:00')->toDateTimeString();
         $orderHeaders = OracleDOCOrderHeader::query()->with(['oracleDOCOrderDetails', 'actAllocationDetails', 'oracleBASCode'])
             ->where('addTime', '>=', $startDate)
             ->whereIn('customerID', data_get($owners, '*.code'))
             ->get();
-        app(OrderPackageCommoditiesService::class)->更新已有的包裹信息($orderHeaders);
-        $orderService->createByWmsOrder($orderHeaders);
-        $orderTrackingService->createByWmsOrderHeader($orderHeaders);
+//        $orderService->createByWmsOrder($orderHeaders);
+//        $orderTrackingService->createByWmsOrderHeader($orderHeaders);
         $orderService->updateByWmsOrders($orderHeaders);
         $orderTrackingService->updateByWmsOrderHeaders($orderHeaders);
     }
@@ -622,59 +620,4 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
         dd(Request::all());
         $users=User::query();
     }
-
-    public function orderTrckingOwnerAll(){
-        $owners = Owner::all();
-        foreach ($owners as $owner) {
-            $orderTrackingOwner =  OrderTrackingOwner::query()->where('owner_id',$owner->id)->first();
-            if($orderTrackingOwner == null){
-                OrderTrackingOwner::query()->create(['owner_id'=>$owner->id,'status'=>'启用']);
-            }else{
-                if($orderTrackingOwner->status == '禁用'){
-                    $orderTrackingOwner->status = '启用';
-                }
-            }
-        }
-    }
-
-    public function updateOrderTracking(){
-        $orderTrackings = OrderTracking::query()->with('commodities.package.order')->get();
-        foreach ($orderTrackings as $orderTracking) {
-            $order = $orderTracking->commodities->package->order;
-            $order_code = $order->client_code;
-            $orderTracking->update(['order_client_code'=>$order_code]);
-        }
-    }
-
-    public function deleteWmsOrderIsCancel()
-    {
-        $startDate = \Illuminate\Support\Carbon::parse('2020-09-01 00:00:00')->toDateTimeString();
-        $endDate = \Illuminate\Support\Carbon::parse('2020-10-13 00:00:00')->toDateTimeString();
-        $owners = app(OrderTrackingOwnerService::class)->getTrackingOrderOwner();
-        $orderHeaders = OracleDOCOrderHeader::query()->with(['oracleDOCOrderDetails', 'actAllocationDetails','oracleBASCode'])
-            ->where('addTime','>=',$startDate)
-            ->where('addTime','<=',$endDate)
-            ->whereIn('customerID',data_get($owners,'*.code'))
-            ->get();
-        app(OrderTrackingService::class)->删除订单追踪_订单取消($orderHeaders);
-    }
-
-    public function deleteRedundantOrderTrackingAndOrderInfo()
-    {
-        $startDate = \Illuminate\Support\Carbon::parse('2020-10-01 00:00:00')->toDateTimeString();
-        $owners = app(OrderTrackingOwnerService::class)->getTrackingOrderOwner();
-        $orderHeaders = OracleDOCOrderHeader::query()->with(['oracleDOCOrderDetails', 'actAllocationDetails','oracleBASCode'])
-            ->where('addTime','>=',$startDate)
-            ->whereIn('customerID',data_get($owners,'*.code'))
-            ->get();
-        app(OrderPackageService::class)->删除多余的订单包裹_根据WMS订单($orderHeaders);
-    }
-
-    public function get11()
-    {
-        $orders =  Order::all();
-        $orderHeaders = OracleDOCOrderHeader::query()->with('actAllocationDetails')
-            ->whereIn('orderno',$orders->pluck('code'))->get();
-        app(OrderPackageCommoditiesService::class)->更新OPC_根据WMS订单($orderHeaders);
-    }
 }

+ 271 - 209
app/Services/OrderPackageCommoditiesService.php

@@ -150,49 +150,50 @@ class OrderPackageCommoditiesService
     public function createByWmsOrder($orderHeaders)
     {
         if(!$orderHeaders){ return [];}
-        /** @var DataHandlerService $dataHandlerService */
-        $dataHandlerService = app(DataHandlerService::class);
-
-        $order_packages = app(OrderPackageService::class)->getByWmsOrders($orderHeaders);
-        $order_packages_logistic_number_map = $dataHandlerService->dataHeader(['logistic_number'],$order_packages);
-
-        $commodities = app(CommodityService::class)->getByWmsOrders($orderHeaders);
-        $commodity_owner_id_sku_map =  $dataHandlerService->dataHeader(['owner_id','sku'],$commodities);
-
-        $owners = app(OwnerService::class)->getByWmsOrders($orderHeaders);
-        $owner_code_map = $dataHandlerService->dataHeader(['code'],$owners);
-
-        $order_packages_commodities = $this->getByWmsOrder($orderHeaders);
-        $map = [];
-        foreach ($order_packages_commodities as $item) {
-            $key = ' commodity_id='.$item->commodity_id.' order_package_id'.$item->order_package_id.' amount='.$item->amount;
-            $map[$key][] = $item;
-        }
-        $insert_params = [];
-        foreach ($orderHeaders as $orderHeader) {
-            $actAllocationDetails = $orderHeader->actAllocationDetails;
-            $logistic_numbers = array_diff(array_unique(data_get($actAllocationDetails,'*.picktotraceid')),['*','',null]);
-            if(count($logistic_numbers) > 0){
-                $params = $this->getParamsByActAllocationDetails($actAllocationDetails,
-                    $order_packages_logistic_number_map,
-                    $owner_code_map,
-                    $commodity_owner_id_sku_map,
-                    $logistic_numbers);
-                foreach ($params as $key =>$param) {
-                    $mapkey = ' commodity_id='.($param['commodity_id'] ?? '').' order_package_id'.($param['order_package_id'] ?? '').' amount='.($param['amount'] ?? '');
-                    if(($map[$mapkey] ?? false) && count($map[$mapkey]) >0){
-                        array_shift($map[$mapkey]);
-                        unset($params[$key]);
-                    }
-                }
-                $insert_params = array_merge($insert_params,$params);
-                unset($params);
-            }
-        }
-        if(count($insert_params) > 0){
-            $this->create($insert_params);
-        }
-        unset($orderHeaders,$order_packages,$owner_code_map,$commodities,$insert_params);
+        $this->更新OPC_根据WMS订单($orderHeaders);
+//        /** @var DataHandlerService $dataHandlerService */
+//        $dataHandlerService = app(DataHandlerService::class);
+//
+//        $order_packages = app(OrderPackageService::class)->getByWmsOrders($orderHeaders);
+//        $order_packages_logistic_number_map = $dataHandlerService->dataHeader(['logistic_number'],$order_packages);
+//
+//        $commodities = app(CommodityService::class)->getByWmsOrders($orderHeaders);
+//        $commodity_owner_id_sku_map =  $dataHandlerService->dataHeader(['owner_id','sku'],$commodities);
+//
+//        $owners = app(OwnerService::class)->getByWmsOrders($orderHeaders);
+//        $owner_code_map = $dataHandlerService->dataHeader(['code'],$owners);
+//
+//        $order_packages_commodities = $this->getByWmsOrder($orderHeaders);
+//        $map = [];
+//        foreach ($order_packages_commodities as $item) {
+//            $key = ' commodity_id='.$item->commodity_id.' order_package_id'.$item->order_package_id.' amount='.$item->amount;
+//            $map[$key][] = $item;
+//        }
+//        $insert_params = [];
+//        foreach ($orderHeaders as $orderHeader) {
+//            $actAllocationDetails = $orderHeader->actAllocationDetails;
+//            $logistic_numbers = array_diff(array_unique(data_get($actAllocationDetails,'*.picktotraceid')),['*','',null]);
+//            if(count($logistic_numbers) > 0){
+//                $params = $this->getParamsByActAllocationDetails($actAllocationDetails,
+//                    $order_packages_logistic_number_map,
+//                    $owner_code_map,
+//                    $commodity_owner_id_sku_map,
+//                    $logistic_numbers);
+//                foreach ($params as $key =>$param) {
+//                    $mapkey = ' commodity_id='.($param['commodity_id'] ?? '').' order_package_id'.($param['order_package_id'] ?? '').' amount='.($param['amount'] ?? '');
+//                    if(($map[$mapkey] ?? false) && count($map[$mapkey]) >0){
+//                        array_shift($map[$mapkey]);
+//                        unset($params[$key]);
+//                    }
+//                }
+//                $insert_params = array_merge($insert_params,$params);
+//                unset($params);
+//            }
+//        }
+//        if(count($insert_params) > 0){
+//            $this->create($insert_params);
+//        }
+//        unset($orderHeaders,$order_packages,$owner_code_map,$commodities,$insert_params);
     }
 
     public function getParamsByActAllocationDetails($details,array $order_packages_logistic_number_map,array $owner_code_map,array $commodity_owner_id_sku_map,array $logistic_numbers){
@@ -242,97 +243,98 @@ class OrderPackageCommoditiesService
 
     public function updateByWmsOrder($orderHeaders){
         if(!$orderHeaders){return ;}
-        /** @var DataHandlerService $dataHandlerService*/
-        $dataHandlerService = app(DataHandlerService::class);
-        $commodities = app(CommodityService::class)->getByWmsOrders($orderHeaders);
-        $owners = app(OwnerService::class)->getByWmsOrders($orderHeaders);
-        $owners_id_map = $dataHandlerService->dataHeader(['id'],$owners);
-        $owner_code_map = $dataHandlerService->dataHeader(['code'],$owners);
-        $commodity_owner_id_sku_map = $dataHandlerService->dataHeader(['owner_id','sku'],$commodities);
-
-        $commodities_owner_code_code_map = [];
-        foreach ($commodities as $commodity) {
-            $owner = $dataHandlerService->getKeyValue(['id'=>$commodity->owner_id],$owners_id_map);
-            $commodities_owner_code_code_map[' owner_code='.$owner->code.' code='.$commodity->code] = $commodity;
-        }
-
-        $order_nos = data_get($orderHeaders,'*.orderno');
-        $order_package_commodities = OrderPackageCommodities::query()->with('package.order','commodity')
-            ->whereHas('package.order',function($query) use ($order_nos){
-                $query->whereIn('code',$order_nos);
-            })->get();
-
-        $order_packages = OrderPackage::query()->with('order')->whereHas('order',function($query) use ($order_nos){
-            $query->whereIn('code',$order_nos);
-        })->get();
-
-        $order_package_logistic_numbers_map = $dataHandlerService->dataHeader(['logistic_number'],$order_packages);
-        $order_no_map = [];
-        foreach ($order_package_commodities as $order_package_commodity) {
-            $order = $order_package_commodity->package->order;
-            $order_no_map[$order->code][] = $order_package_commodity;
-        }
-
-        $insertParams = [];
-        $updateParams = [['id','order_package_id'.'commodity_id','amount','updated_at']];
-        $updated_at = Carbon::now()->toDateTimeString();
-        $created_at = Carbon::now()->toDateTimeString();
-        foreach ($orderHeaders as $orderHeader) {
-            $order_package_commodities = $order_no_map[$orderHeader->orderno] ?? false;
-            $actAllocationDetails = $orderHeader->actAllocationDetails;
-            $logistic_numbers = array_unique(array_diff(data_get($actAllocationDetails,'*.picktotraceid'),['','*',null])) ;
-            if(!$order_package_commodities){
-                $params =  $this->getParamsByActAllocationDetails($actAllocationDetails,$order_package_logistic_numbers_map, $owner_code_map, $commodity_owner_id_sku_map, $logistic_numbers);
-                foreach ($params as $param) {
-                    $insertParams[] = $param;
-                }
-                continue;
-            }
-            if($actAllocationDetails->count() > count($order_package_commodities)){
-                $deleteKey = [];
-                foreach ($actAllocationDetails as $key1=>$actAllocationDetail) {
-                    foreach ( $order_package_commodities as $key=>$item) {
-                        $commodity = $item->commodity;
-                        if($actAllocationDetail->sku == $commodity->sku && $item->amount ==  $actAllocationDetail->qty_each){
-                            unset($order_package_commodities[$key]);
-                            unset($actAllocationDetails[$key1]);
-                            $deleteKey[] = $key1;
-                            break;
-                        }else if($item ->sku == $commodity->sku && $item->amount !=  $actAllocationDetail->qty_each){
-                            $updateParams[] = [
-                                'id' => $item->id,
-                                'commodity_id' => $commodity->id,
-                                'amount' => $actAllocationDetail->qty_each,
-                                'updated_at' => $updated_at
-                            ];
-                            $deleteKey[] = $key1;
-                            unset($actAllocationDetails[$key1]);
-                        }
-                    }
-                }
-                $actAllocationDetails  =$actAllocationDetails->filter(function ($value, $key) use($deleteKey) {
-                    return !in_array($key, $deleteKey);
-                });
-                $params =  $this->getParamsByActAllocationDetails($actAllocationDetails,$order_package_logistic_numbers_map, $owner_code_map, $commodity_owner_id_sku_map, $logistic_numbers);
-                foreach ($params as $param) {
-                    $insertParams[] = $param;
-                }
-                continue;
-            }
-        }
-
-        if(count($updateParams) > 0){
-            $this->batchUpdate($updateParams);
-        }
-
-        if(count($insertParams) > 0){
-            try {
-                $this->insert($insertParams);
-                LogService::log(__METHOD__,__FUNCTION__,'批量添加 OrderPackageCommodities '. count($insertParams) .json_encode($insertParams));
-            } catch (\Exception $e) {
-                LogService::log(__METHOD__,__FUNCTION__,'批量添加 OrderPackageCommodities error'.json_encode($insertParams)."||".$e->getMessage().'||'.$e->getTraceAsString());
-            }
-        }
+        $this->更新OPC_根据WMS订单($orderHeaders);
+//        /** @var DataHandlerService $dataHandlerService*/
+//        $dataHandlerService = app(DataHandlerService::class);
+//        $commodities = app(CommodityService::class)->getByWmsOrders($orderHeaders);
+//        $owners = app(OwnerService::class)->getByWmsOrders($orderHeaders);
+//        $owners_id_map = $dataHandlerService->dataHeader(['id'],$owners);
+//        $owner_code_map = $dataHandlerService->dataHeader(['code'],$owners);
+//        $commodity_owner_id_sku_map = $dataHandlerService->dataHeader(['owner_id','sku'],$commodities);
+//
+//        $commodities_owner_code_code_map = [];
+//        foreach ($commodities as $commodity) {
+//            $owner = $dataHandlerService->getKeyValue(['id'=>$commodity->owner_id],$owners_id_map);
+//            $commodities_owner_code_code_map[' owner_code='.$owner->code.' code='.$commodity->code] = $commodity;
+//        }
+//
+//        $order_nos = data_get($orderHeaders,'*.orderno');
+//        $order_package_commodities = OrderPackageCommodities::query()->with('package.order','commodity')
+//            ->whereHas('package.order',function($query) use ($order_nos){
+//                $query->whereIn('code',$order_nos);
+//            })->get();
+//
+//        $order_packages = OrderPackage::query()->with('order')->whereHas('order',function($query) use ($order_nos){
+//            $query->whereIn('code',$order_nos);
+//        })->get();
+//
+//        $order_package_logistic_numbers_map = $dataHandlerService->dataHeader(['logistic_number'],$order_packages);
+//        $order_no_map = [];
+//        foreach ($order_package_commodities as $order_package_commodity) {
+//            $order = $order_package_commodity->package->order;
+//            $order_no_map[$order->code][] = $order_package_commodity;
+//        }
+//
+//        $insertParams = [];
+//        $updateParams = [['id','order_package_id'.'commodity_id','amount','updated_at']];
+//        $updated_at = Carbon::now()->toDateTimeString();
+//        $created_at = Carbon::now()->toDateTimeString();
+//        foreach ($orderHeaders as $orderHeader) {
+//            $order_package_commodities = $order_no_map[$orderHeader->orderno] ?? false;
+//            $actAllocationDetails = $orderHeader->actAllocationDetails;
+//            $logistic_numbers = array_unique(array_diff(data_get($actAllocationDetails,'*.picktotraceid'),['','*',null])) ;
+//            if(!$order_package_commodities){
+//                $params =  $this->getParamsByActAllocationDetails($actAllocationDetails,$order_package_logistic_numbers_map, $owner_code_map, $commodity_owner_id_sku_map, $logistic_numbers);
+//                foreach ($params as $param) {
+//                    $insertParams[] = $param;
+//                }
+//                continue;
+//            }
+//            if($actAllocationDetails->count() > count($order_package_commodities)){
+//                $deleteKey = [];
+//                foreach ($actAllocationDetails as $key1=>$actAllocationDetail) {
+//                    foreach ( $order_package_commodities as $key=>$item) {
+//                        $commodity = $item->commodity;
+//                        if($actAllocationDetail->sku == $commodity->sku && $item->amount ==  $actAllocationDetail->qty_each){
+//                            unset($order_package_commodities[$key]);
+//                            unset($actAllocationDetails[$key1]);
+//                            $deleteKey[] = $key1;
+//                            break;
+//                        }else if($item ->sku == $commodity->sku && $item->amount !=  $actAllocationDetail->qty_each){
+//                            $updateParams[] = [
+//                                'id' => $item->id,
+//                                'commodity_id' => $commodity->id,
+//                                'amount' => $actAllocationDetail->qty_each,
+//                                'updated_at' => $updated_at
+//                            ];
+//                            $deleteKey[] = $key1;
+//                            unset($actAllocationDetails[$key1]);
+//                        }
+//                    }
+//                }
+//                $actAllocationDetails  =$actAllocationDetails->filter(function ($value, $key) use($deleteKey) {
+//                    return !in_array($key, $deleteKey);
+//                });
+//                $params =  $this->getParamsByActAllocationDetails($actAllocationDetails,$order_package_logistic_numbers_map, $owner_code_map, $commodity_owner_id_sku_map, $logistic_numbers);
+//                foreach ($params as $param) {
+//                    $insertParams[] = $param;
+//                }
+//                continue;
+//            }
+//        }
+//
+//        if(count($updateParams) > 0){
+//            $this->batchUpdate($updateParams);
+//        }
+//
+//        if(count($insertParams) > 0){
+//            try {
+//                $this->insert($insertParams);
+//                LogService::log(__METHOD__,__FUNCTION__,'批量添加 OrderPackageCommodities '. count($insertParams) .json_encode($insertParams));
+//            } catch (\Exception $e) {
+//                LogService::log(__METHOD__,__FUNCTION__,'批量添加 OrderPackageCommodities error'.json_encode($insertParams)."||".$e->getMessage().'||'.$e->getTraceAsString());
+//            }
+//        }
     }
 
     public function getByWmsOrder($orderHeaders){
@@ -396,48 +398,46 @@ class OrderPackageCommoditiesService
      * @param Order $order
      * @return array|Collection|\Tightenco\Collect\Support\Collection
      */
-    public function 返回创建数组($orderHeader,$order)
+    public function 返回创建数组($orderHeader)
     {
-        /** @var DataHandlerService $dataHandlerService */
-        $dataHandlerService = app(DataHandlerService::class);
         if($orderHeader->sostatus == 90){return [];}
         $actAllocationDetails = $orderHeader->actAllocationDetails->collect();
-        $orderPackages = $dataHandlerService->dataHeader(['logistic_number'],$order->packages);
         $innerParams = collect();
-        $actAllocationDetails->each(function($detail)use($orderPackages,$dataHandlerService,$innerParams){
-            $orderPackage = $dataHandlerService->getKeyValue(['logistic_number'=>$detail->picktotraceid],$orderPackages);
+        $actAllocationDetails->each(function($detail)use(&$innerParams){
             $sku =  $detail->sku;
             $amount =  $detail->qty_each;
-            $order_package_id = $orderPackage->id ?? '';
             $logistic_number = $detail->picktotraceid;
             $params = [
-                'ownerCode' > $detail->customerid,
+                'ownerCode' => $detail->customerid,
                 'orderNo' => $detail->orderno,
                 'sku' => $sku,
                 'amount' => $amount,
                 'logistic_number' => $logistic_number,
             ];
-            $innerParam = $innerParams->where('logistic_number',$orderPackage->id ?? '')->where('sku',$sku)->first();
-            if(!$innerParam){
-                $innerParams->push($params);
+
+            $innerParam = $innerParams->where('logistic_number',$logistic_number)->where('sku',$sku)->first();
+            if($innerParam ?? false){
+                $bool = false;
+                $innerParams = $innerParams->map(function($param)use($innerParam,$amount,&$bool){
+                    if($innerParam['logistic_number'] == $param['logistic_number'] &&
+                        $innerParam['sku'] == $param['sku'] && !$bool){
+                        $param['amount'] += $amount;
+                        $bool = !$bool;
+                    }
+                    return $param;
+                });
             }else{
-                $innerParam['amount'] += $amount;
+                $innerParams->push($params);
             }
         });
         return $innerParams;
     }
 
-    public function 返回创建数组_WMS订单_WAS订单($orderHeaders,$orders)
+    public function 返回创建数组_WMS订单($orderHeaders)
     {
-        $map = [];
-        foreach ($orders as $order) {
-            $key = $order->code;
-            $map[$key] =  $order;
-        }
         $innerParams = [];
         foreach ($orderHeaders as $orderHeader) {
-            $order = $map[$orderHeader->orderno];
-            $innerParam = $this->返回创建数组($orderHeader,$order);
+            $innerParam = $this->返回创建数组($orderHeader);
             foreach ($innerParam as $param) {
                 $innerParams[] = $param;
             }
@@ -446,30 +446,22 @@ class OrderPackageCommoditiesService
     }
     /**
      * @param array $innerParams
-     * @param OracleDOCOrderHeader $orderHeaders
      * @return array
      */
-    public function 生成OrderPackageCommodities_基于创建数组($innerParams,$orderHeaders)
+    public function 生成OrderPackageCommodities_基于创建数组($innerParams)
     {
-        /** @var DataHandlerService $dataHandlerService */
-        $dataHandlerService = app(DataHandlerService::class);
-        $commodities = app(CommodityService::class)->getByWmsOrder($orderHeaders);
-        $owners = app(OwnerService::class)->getByWmsOrders($orderHeaders);
-        $owner_id_map = $dataHandlerService->dataHeader(['id'],$owners);
-        $commodities_owner_code_sku_map = [];
-        foreach ($commodities as $commodity) {
-            $owner_code = $dataHandlerService->getKeyValue(['id'=>$commodity->owner_id],$owner_id_map);
-            $key = ' owner_code='.$owner_code.' sku='.$commodity->sku;
-            $commodities_owner_code_sku_map[$key] = $commodity;
-        }
-
-        $dataTime = Carbon::now()->format('Y-m-d H:i:s');
+        if(!$innerParams){return [];}
+        if(is_array($innerParams) && count($innerParams) == 0){return [];}
+        $commodity_map = $this->返回Commodity数组_根据数组中sku($innerParams);
+        $orderPackages_map = app(OrderPackageService::class)->返回OrderPackage数组_根据数组中的快递单号($innerParams);
         $createParams = [];
+        $dataTime = Carbon::now()->format('Y-m-d H:i:s');
         foreach ($innerParams as $innerParam) {
-            $key = ' owner_code='.$innerParam['ownerCode'].' sku='.$innerParam['sku'];
-            $commodity =  $commodities_owner_code_sku_map[$key]  ?? null;
+            $key = ' ownerCode='.($innerParam['ownerCode'] ?? '').' sku='.($innerParam['sku'] ?? '');
+            $commodity = $commodity_map[$key] ?? null;
+            $orderPackage = $orderPackages_map[$innerParam['logistic_number']] ?? '';
             $createParams[] = [
-                'order_package_id' => $innerParam['order_package_id'],
+                'order_package_id' => $orderPackage->id ?? '',
                 'commodity_id' => $commodity->id ?? null,
                 'amount' => $innerParam['amount'],
                 'created_at' => $dataTime,
@@ -479,29 +471,63 @@ class OrderPackageCommoditiesService
         return $createParams;
     }
 
+    public function createByOrderHeader($orderHeaders)
+    {
+        $orderPackageCommodities = $this->getByWmsOrder($orderHeaders);
+        $OPCCollects = $this->将orderPackageCommodity抽象成数组($orderPackageCommodities);
+        $creatParams = $this->返回创建数组_WMS订单($orderHeaders);
+        $this->数据重组($OPCCollects,$creatParams);
+        $collect = $this->删选需要修改的OrderPackageCommodities($OPCCollect,$creatParam);
+        $ids = $this->删选出删除的OrderPackageCommodities($OPCCollect,$creatParam);
+        $insertParam = $this->删选出需要添加的OrderPackageCommodities($OPCCollect,$creatParam);
+        $updateParams = [];
+        foreach ($collect as $item) {
+            $updateParams[] = $item;
+        }
+        $this->根据更新数组进行更新($updateParams);
+        $this->删除OPC以及对应的追踪件($ids);
+        $creatParams = $this->生成OrderPackageCommodities_基于创建数组($insertParam);
+        $this->create($creatParams);
+    }
+
+
+    /**
+     * @param $orderHeaders
+     */
     public function 更新OPC_根据WMS订单($orderHeaders)
     {
         if(!$orderHeaders){return ;}
         if(count($orderHeaders) == 0){return ;}
-        $orders = app(OrderService::class)->getOrderInfoByWmsOrder($orderHeaders);
         $orderPackageCommodities = $this->getByWmsOrder($orderHeaders);
         $OPCCollects = $this->将orderPackageCommodity抽象成数组($orderPackageCommodities);
-        $creatParams = $this->返回创建数组_WMS订单_WAS订单($orderHeaders,$orders);
+        $creatParams = $this->返回创建数组_WMS订单($orderHeaders);
         $orderNos = $this->数据重组($OPCCollects,$creatParams);
-        dd($orderNos,$creatParams['SO200901002558'],$OPCCollects['SO200901002558'] ?? null);
-        $retains = [];$updateParams= collect();$deleteIds = [];
+        $updateParams= collect();$deleteIds = [];$insertParams =[];
         foreach ($orderNos as $orderNo) {
-            $OPCCollect = $OPCCollects[$orderNo];
+            $OPCCollect = $OPCCollects[$orderNo] ?? null;
             $creatParam = $creatParams[$orderNo];
             $retain[] = $this->删选可以保留的OrderPackageCommodities($OPCCollect,$creatParam);
+
             $collect = $this->删选需要修改的OrderPackageCommodities($OPCCollect,$creatParam);
+
             $ids = $this->删选出删除的OrderPackageCommodities($OPCCollect,$creatParam);
-            array_merge($deleteIds,$ids);
+
+            $insertParam = $this->删选出需要添加的OrderPackageCommodities($OPCCollect,$creatParam);
+
+            $deleteIds = array_merge($deleteIds,$ids);
+
             foreach ($collect as $item) {
                 $updateParams->push($item);
             }
+            foreach ($insertParam as $item) {
+                $insertParams[]= $item;
+            }
+
         }
-        dd($retains,$updateParams,$deleteIds);
+        $this->根据更新数组进行更新($updateParams);
+        $this->删除OPC以及对应的追踪件($deleteIds);
+        $creatParams = $this->生成OrderPackageCommodities_基于创建数组($insertParams);
+        $this->create($creatParams);
     }
 
     /**
@@ -531,11 +557,11 @@ class OrderPackageCommoditiesService
         return $collect;
     }
 
-    public function 数据重组(&$orderPackageCommoditiesCollect,&$params)
+    public function 数据重组(&$OPCCollects,&$params)
     {
         $collect_map = [];$params_map = [];$order_no_map = [];
 
-        foreach ($orderPackageCommoditiesCollect as $item) {
+        foreach ($OPCCollects as $item) {
             $orderNo = $item['orderNo'];
             if(!isset($collect_map[$orderNo])){$collect_map[$orderNo] = collect();}
             $collect_map[$orderNo]->push($item);
@@ -548,7 +574,7 @@ class OrderPackageCommoditiesService
             $params_map[$orderNo]->push($param);
         }
         $order_no_map = array_unique($order_no_map);
-        $orderPackageCommoditiesCollect = $collect_map;
+        $OPCCollects = $collect_map;
         $params = $params_map;
         return $order_no_map;
     }
@@ -557,10 +583,11 @@ class OrderPackageCommoditiesService
     public function 删选可以保留的OrderPackageCommodities(&$OPCCollect,&$params)
     {
         $retain = collect();
+        if($OPCCollect == null){return $retain;}
         $map = [];
         foreach ($params as $param) {
             $key = ' logistic_number='.$param['logistic_number'].' sku='.$param['sku'].' amount='.$param['amount'];
-            if(!$map[$key] ?? false){
+            if(! isset($map[$key])){
                 $map[$key] = [];
             }
             $map[$key][] = $param;
@@ -570,13 +597,14 @@ class OrderPackageCommoditiesService
             $key = ' logistic_number='.$item['logistic_number'].' sku='.$item['sku'].' amount='.$item['amount'];
             if(isset($map[$key]) && count($map[$key]) > 0){
                 $value = $map[$key][0];
-                array_shift($map);
+                array_shift($map[$key]);
                 $params->filter(function($param)use($value){
                     return count(array_diff_assoc($param,$value)) != 0 ;
                 });
                 $retain->push($value);
             }
         }
+
         return $retain;
     }
 
@@ -584,6 +612,7 @@ class OrderPackageCommoditiesService
     {
         $innerParam = [];
         $OPCmap = [];
+        if($OPCCollect == null){return $params;}
         foreach ($OPCCollect as $item) {
             $key = ' logistic_number='.$item['logistic_number'].' sku='.$item['sku'].' amount='.$item['amount'];
             if(!isset($OPCmap[$key])){
@@ -602,12 +631,11 @@ class OrderPackageCommoditiesService
         $paramsCopy = $params->collect();
         foreach ($paramsCopy as $param) {
             $key = ' logistic_number='.$param['logistic_number'].' sku='.$param['sku'].' amount='.$param['amount'];
-            if(!isset($OPCmap[$key]) && count($OPCmap[$key]) == 0){
+            if(!(isset($OPCmap[$key]) && count($OPCmap[$key]) == 0)){
                 $innerParam[] = $param;
-                $params->filter(function($item)use($param){
-                    return count(array_diff_assoc($item,$param)) != 0 ;
+                $OPCCollect->filter(function($item)use($param){
+                    return !($item['logistic_number'] == $param['logistic_number'] &&$item['sku'] == $param['sku'] &&$item['amount'] == $param['amount'])  ;
                 });
-                unset($param);
             }
         }
         return $innerParam;
@@ -618,36 +646,37 @@ class OrderPackageCommoditiesService
     {
         $update = collect();
         $map = [];
+        if($OPCCollect == null){return $update;}
         foreach ($OPCCollect as $item) {
             $key = ' logistic_number='.$item['logistic_number'].' sku='.$item['sku'];
-            if(!isset($map[$key])){
-                $map[$key] = [];
-            }
+            if(!isset($map[$key])){$map[$key] = [];}
             $map[$key][] = $item;
         }
-
-        foreach ($params as $param) {
+        $paramsCopy = $params->collect();
+        foreach ($paramsCopy as $param) {
             $key = ' logistic_number='.$param['logistic_number'].' sku='.$param['sku'];
-            if(isset($map[$key]) && count($map[$key]) > 0){
-                $item = $map[$key][0];
-                array_shift($map[$key]);
-                $params->filter(function($value)use($param){
-                    return count(array_diff_assoc($param,$value)) != 0 ;
-                });
-                $OPCCollect->filter(function($opc)use($item){
-                    return $item!=$opc;
-                });
-                $item['amount'] = $param['sku'];
-                $update->push($item);
+            if(!isset($map[$key])){continue;}
+            $item = array_shift($map[$key]);
+            $params = $params->filter(function($value)use($item){
+                return !($value['logistic_number'] == $item['logistic_number'] && $value['sku'] == $item['sku'])  ;
+            });
+            $OPCCollect  = $OPCCollect->filter(function($opc)use($item){
+                return !($opc['logistic_number'] == $item['logistic_number'] && $opc['sku'] == $item['sku'] && $opc['amount'] == $item['amount'] && $item['id'] == $opc['id']);
+            });
+            if($item['amount']!= $param['amount']){
+                $param['id'] = $item['id'];
+                $update->push($param);
             }
         }
+
         return $update;
     }
 
     public function 删选出删除的OrderPackageCommodities(&$OPCCollect,&$params)
     {
-        $delteIds = [];
+        $deleteIds = [];
         $map = [];
+        if($OPCCollect == null){return $deleteIds;}
         foreach ($params as $item) {
             $key = ' logistic_number='.$item['logistic_number'].' sku='.$item['sku'].' amount='.$item['amount'];
             if(!isset($map[$key])){
@@ -655,14 +684,14 @@ class OrderPackageCommoditiesService
             }
             $map[$key][] = $item;
         }
-
         foreach ($OPCCollect as $opc) {
             $key = ' logistic_number='.$opc['logistic_number'].' sku='.$opc['sku'].' amount='.$opc['amount'];
-            if(!isset($map[$key]) || count($map[$key]) ==0) {
-                $delteIds[] = $opc['id'];
+            if(!isset($map[$key]) || count($map[$key])==0){
+                $deleteIds[] = $opc['id'];
             }
         }
-        return $delteIds;
+
+        return $deleteIds;
     }
 
     public function 删除OPC以及对应的追踪件($ids)
@@ -680,5 +709,38 @@ class OrderPackageCommoditiesService
         }
     }
 
+    public function 根据更新数组进行更新($updateParams)
+    {
+        if(!isset($updateParams)){return;}
+        if(is_array($updateParams) && count($updateParams)==0){return;}
+        $commodity_map = $this->返回Commodity数组_根据数组中sku($updateParams);
+        $orderPackages_map = app(OrderPackageService::class)->返回OrderPackage数组_根据数组中的快递单号($updateParams);
+        $dataTime = Carbon::now()->format('Y-m-d H:i:s');
+        $update_params = [['id','commodity_id','order_package_id','amount','updated_at']];
+        foreach ($updateParams as $updateParam) {
+            $commodity_key = ' ownerCode='.($updateParam['ownerCode'] ?? '').' sku='.($updateParam['sku'] ?? '');
+            $commodity = $commodity_map[$commodity_key] ?? '';
+            $orderPackage = $orderPackages_map[$updateParam['logistic_number']] ?? '';
+            $update_params[] = [
+                'id' => $updateParam['id'],
+                'commodity_id' => $commodity->id ?? '',
+                'order_package_id' => $orderPackage->id ?? '',
+                'amount' => $updateParam['amount'],
+                'updated_at' => $dataTime
+            ];
+        }
+        $this->batchUpdate($update_params);
+    }
 
+    private function 返回Commodity数组_根据数组中sku($params)
+    {
+        $skus = array_unique(data_get($params,'*.sku'));
+        $commodities = Commodity::query()->with('owner')->whereIn('sku',$skus)->get();
+        $commodity_map = [];
+        foreach ($commodities as $commodity) {
+            $key = ' ownerCode='.($commodity->owner->code ?? '').' sku='.$commodity->sku;
+            $commodity_map[$key] = $commodity;
+        }
+        return $commodity_map;
+    }
 }

+ 12 - 0
app/Services/OrderPackageService.php

@@ -361,4 +361,16 @@ class OrderPackageService
     {
         return $this->getByOrderNos(data_get($orders,'*.code'));
     }
+
+    public function 返回OrderPackage数组_根据数组中的快递单号($params)
+    {
+        $map = [];
+        $orderPackages = OrderPackage::query()->whereIn('logistic_number',data_get($params,'*.logistic_number'))->get();
+        if($orderPackages->count() == 0){return $map;}
+        foreach ($orderPackages as $orderPackage) {
+            $map[$orderPackage->logistic_number] = $orderPackage;
+        }
+        return  $map;
+    }
+
 }

+ 0 - 3
app/Services/OrderService.php

@@ -320,9 +320,7 @@ class OrderService
         /** @var OrderPackageService $orderPackageService */
         $orderPackageService = app('orderPackageService');
         $order = Order::query()->where('client_code', $clientCode)->first();
-        if(!$order->code ?? false){
 
-        }
         $orderHeader = OracleDOCOrderHeader::query()->where('SOReference1', $clientCode)->first();
 
         if ($orderHeader == null) {
@@ -353,7 +351,6 @@ class OrderService
                 $logistics_id = $logistics['id'];
             } else {
                 try {
-
                     $logistics = Logistic::query()->create(['name' => $orderHeadAttr['carriername'], 'code' => $orderHeadAttr['userdefine1']]);
                     $logistics_id = $logistics['id'];
                     LogService::log(__METHOD__,__FUNCTION__,'创建承运商'.json_encode($logistics));

+ 3 - 1
app/Services/OrderTrackingService.php

@@ -126,6 +126,8 @@ class OrderTrackingService
         $i = 0;
 
         foreach ($trackOrders as $trackOrder) {
+            $logisticName = $trackOrder['commodities']['package']['order']['logistic']['name'];
+            $logistic_number = $trackOrder['commodities']['package']['logistic_number'];
             $list[$i]['owner_name'] = $trackOrder['owner']['name'] ?? '';
             $list[$i]['order_client_code'] = $trackOrder['web_order_number'] ? '' : $trackOrder['order_client_code'];
             $list[$i]['web_order_number'] = $trackOrder['web_order_number'] ?? '';
@@ -140,7 +142,7 @@ class OrderTrackingService
             $list[$i]['bulk'] = $trackOrder['bulk'];
             $list[$i]['pallet_total'] = $trackOrder['pallet_total'];
             $list[$i]['package_logistic'] = $trackOrder['commodities']['package']['order']['logistic']['name'];
-            $list[$i]['package_logistic_number'] = $trackOrder['commodities']['package']['logistic_number'];
+            $list[$i]['package_logistic_number'] = $logisticName  == '新杰物流' ?   ( $trackOrder['web_order_number'] ? $trackOrder['web_order_number'] : $trackOrder['order_client_code']) : $logistic_number;
             $list[$i]['order_city'] = $trackOrder['commodities']['package']['order']['city'];
             $list[$i]['planning_sent_at'] = $trackOrder['planning_sent_at'];
             $list[$i]['is_on_duty_shift'] = $trackOrder['is_on_duty_shift'];

+ 3 - 7
resources/views/order/issue/index.blade.php

@@ -315,11 +315,9 @@
                                 <select class="form-control form-control-sm" :value="orderIssue.order_issue_type_id" @change="updateOrderIssue(orderIssue,'order_issue_type_id',$event)">
                                     <option value></option>
                                     <option v-for="type in orderIssueType" :value="type.name" >@{{ type.value }}</option>
-                                    <select>
-                                        @else
-                                            <span v-if="orderIssue.issue_type">
-                                @{{ orderIssue.issue_type.name}}
-                            </span>
+                                <select>
+                            @else
+                                <span v-if="orderIssue.issue_type">@{{ orderIssue.issue_type.name}}</span>
                             @endcan
                         </td>
 
@@ -413,8 +411,6 @@
                                                     <td >
                                                         <div class="text-truncate text-primary tooltipTarget" style="width: 100px;cursor:pointer;text-decoration: underline" title="双击展开" @dblclick="nowrapText($event)">@{{ item.commodity.name }}</div>
                                                         <div class="text-nowrap tooltipTarget"  style="display: none;cursor:pointer" @dblclick="truncateText($event)" title="双击收起">@{{ item.commodity.name }}</div>
-                                                        {{--                                                    <p class="text-truncate text-primary m-0 p-0" style="width: 100px;cursor:pointer;text-decoration: underline"  @click="nowrapText($event)">@{{ item.commodity.name }}</p>--}}
-                                                        {{--                                                    <p class="text-nowrap m-0 p-0" style="display: none;cursor:pointer" @click="truncateText($event)" >@{{ item.commodity.name }}</p>--}}
                                                     </td>
                                                     <td :data-value="orderIssue.secondeOrderItems+=item.amount">@{{ item.amount }}</td>
                                                 </tr>

+ 12 - 5
resources/views/order/tracking/index.blade.php

@@ -83,7 +83,9 @@
                         <td>@{{ index+1 }}</td>
                         <td class="text-decoration-none td-warm">@{{ trackOrder.ownerName }}</td>
                         <td class="td-warm">
-                            <span v-if="trackOrder.web_order_number"></span>
+                            <span v-if="trackOrder.web_order_number">
+                                <input class="form-control form-control-sm" :value="trackOrder.order_client_code === trackOrder.web_order_number ? '' : trackOrder.order_client_code " @change="warehouseUpdate($event,'order_client_code',trackOrder)" >
+                            </span>
                             <span v-else>
                             @can('订单管理-跟踪-仓库编辑')
                                 <input class="form-control form-control-sm" :value="trackOrder.order_client_code" @change="warehouseUpdate($event,'order_client_code',trackOrder)" >
@@ -98,8 +100,6 @@
                             @else
                                 @{{ trackOrder.web_order_number }}
                             @endcan
-{{--                            <span v-if="trackOrder.web_order_number">@{{ trackOrder.web_order_number }} </span>--}}
-{{--                            <span v-else> @{{ trackOrder.web_order_number }}</span>--}}
                         </td>
                         <td class="td-warm">
                             @can('订单管理-跟踪-仓库编辑')
@@ -141,8 +141,15 @@
                                 @{{ trackOrder.pallet_total }}
                             @endcan
                         </td>
-                        <td class="td-yellow">@{{ trackOrder.packageLogistic }}</td>
-                        <td class="td-yellow">@{{ trackOrder.packageLogisticNumber}}</td>
+                        <td class="td-yellow"> @{{ trackOrder.packageLogistic }}</td>
+                        <td class="td-yellow">
+                            <span v-if="trackOrder.packageLogistic === '新杰物流'">
+                                @{{ trackOrder.web_order_number ? trackOrder.web_order_number : trackOrder.order_client_code}}
+                            </span>
+                            <span v-else>
+                                @{{ trackOrder.packageLogisticNumber}}
+                            </span>
+                        </td>
                         <td class="td-yellow">@{{ trackOrder.orderCity}}</td>
 
                         <td class="td-calm">