Browse Source

订单同步功能 修改

ajun 5 years ago
parent
commit
ebc725e871

+ 2 - 2
app/Order.php

@@ -128,7 +128,7 @@ class Order extends Model
         return parent::delete();
     }
 
-    public function isEquals(Order $order)
+    public function isEquals($order)
     {
         return
             $this['code'] == $order['code'] &&
@@ -148,7 +148,7 @@ class Order extends Model
             (string)$this['created_at'] == (string)$order['created_at'];
     }
 
-    public function assignValueByOrder(Order $order)
+    public function assignValueByOrder($order)
     {
         $this['code'] = $order['code'] ;
         $this['warehouse_id'] = $order['warehouse_id'] ;

+ 3 - 3
app/Services/OracleDOCOrderHeaderService.php

@@ -19,7 +19,7 @@ Class OracleDOCOrderHeaderService
         'DOC_Order_Header.EditTime','DOC_Order_Header.Notes','DOC_Order_Header.CarrierID',
         'DOC_Order_Header.CarrierName', 'DOC_Order_Header.LastShipmentTime','DOC_Order_Header.EDISendFlag',
         'DOC_Order_Header.SOReference5', 'DOC_Order_Header.C_Tel2','DOC_Order_Header.Transportation',
-        'DOC_Order_Header.WareHouseId','DOC_Order_Header.SOStatus','DOC_Order_Header.C_Tel1'
+        'DOC_Order_Header.WareHouseId','DOC_Order_Header.SOStatus','DOC_Order_Header.C_Tel1','DOC_Order_Header.C_District','DOC_Order_Header.IssuePartyName'
     ];
 
     function first(array $params){
@@ -72,11 +72,11 @@ Class OracleDOCOrderHeaderService
             },'oracleDOCOrderDetails'=>function($query){
                 $query->selectRaw('doc_order_details.orderNo,doc_order_details.customerid,doc_order_details.sku,doc_order_details.QtyOrdered');
             }, 'actAllocationDetails'=>function($query){
-                $query->selectRaw('ACT_Allocation_Details.AllocationDetailsID,ACT_Allocation_Details.OrderNo,ACT_Allocation_Details.Qty_Each,ACT_Allocation_Details.PickToTraceID,ACT_Allocation_Details.CustomerID');
+                $query->selectRaw('ACT_Allocation_Details.AllocationDetailsID,ACT_Allocation_Details.OrderNo,ACT_Allocation_Details.Qty_Each,ACT_Allocation_Details.PickToTraceID,ACT_Allocation_Details.CustomerID,ACT_Allocation_Details.Sku');
             },'oracleBASCode'=>function($query){
                 $query->selectRaw('BAS_Codes.CodeID,BAS_Codes.CodeName_C,BAS_Codes.Code');
             }])
-            ->where('addTime','>=',$startDate)
+            ->where('DOC_Order_Header.addTime','>=',$startDate)
             ->get();
     }
 }

+ 92 - 72
app/Services/OrderPackageCommoditiesService.php

@@ -27,7 +27,7 @@ class OrderPackageCommoditiesService
     public function batchUpdate($params){
         return app(BatchUpdateService::class)->batchUpdate('order_package_commodities',$params);
     }
-
+    //-------------------------
     public function basedOnOracleDetailsStore($orderNo, $orderPackage)
     {
         $details = OracleDOCOrderDetail::query()->where('orderNo', $orderNo)->get();
@@ -426,7 +426,6 @@ class OrderPackageCommoditiesService
         return $order_no_map;
     }
 
-
     public function 删选可以保留的OrderPackageCommodities(&$OPCCollect,&$params)
     {
         $retain = collect();
@@ -488,7 +487,6 @@ class OrderPackageCommoditiesService
         return $innerParam;
     }
 
-
     public function 删选需要修改的OrderPackageCommodities(&$OPCCollect,&$params)
     {
         $update = collect();
@@ -591,79 +589,91 @@ class OrderPackageCommoditiesService
         return $commodity_map;
     }
 
+    // TODO
     public function deleteUnnecessaryOrderCommodities($ids)
     {
         if(!$ids)return;
         OrderPackageCommodities::query()->whereHas('package',function($query)use($ids){
             $query->whereIn('id',$ids);
         })->delete();
+        app('LogService')->log(__METHOD__,__FUNCTION__,'删除 OrderPackageCommodities'.json_encode($ids));
     }
     // TODO
-    public function createOrderCommodity($orderHeaders)
-    {
+    public function createOrderCommodity(&$orderHeaders)
+    {
+        /**
+         * @var DataHandlerService $dataHandService
+         * @var CommodityService $commodityService
+         * @var OrderPackageService $orderPackageService
+         */
+        $dataHandService = app('DataHandlerService');
+        $commodityService = app('CommodityService');
+        $orderPackageService  = app( 'OrderPackageService');
         if(!$orderHeaders)return ;
-        $order_nos = data_get($orderHeaders,'*.orderno');
-        $orderCommodities = OrderPackageCommodities::query()
-            ->with(['package.order','commodity'])
-            ->whereHas('package.order',function($query)use($order_nos){
-            $query->whereIn('code',$order_nos);
-        })->get();
+
+        $commodityService->getByWmsOrders($orderHeaders);   // 预先处理     3s
+        $orderPackages = $orderPackageService->getByWmsOrders($orderHeaders);
+        $orderCommodities = $this->getByWmsOrder($orderHeaders);
+
+        $package_map = $dataHandService->dataHeader(['logistic_number'],$orderPackages);
 
         $orderCommodities = $this->regroupOrderCommodities($orderCommodities);
         $orderAllocationDetails = $this->regroupWmsOrderAllocationDetails($orderHeaders);
-        $this->filterExistParams($orderAllocationDetails,$orderCommodities);
-        $inner_params = $this->filterInnerParams($orderAllocationDetails,$orderCommodities);
-        $update_params =$this->filterUpdateParams($orderAllocationDetails,$orderCommodities);
-        $delete_params = $this->filterDeleteParams($orderAllocationDetails,$orderCommodities);
-        if($inner_params){
-            $package = [];
-            foreach ($orderCommodities as $orderCommodity) {
-                $order_package = $orderCommodity->package;
-                if(!isset($package[$order_package->logistic_number]))
-                    $package[$order_package->logistic_number] = $order_package;
-            }
-            $this->createOrderCommodities($inner_params,$package);
-        }
-        if(!$update_params)
-            $this->updateOrderCommodities($update_params);
+        $del_orderCommodities  =[];
+
+        $update_params =$this->filterUpdateParams($orderAllocationDetails,$orderCommodities,$del_orderCommodities);                  // 修改
+        $inner_params = $this->filterInnerParams($orderAllocationDetails,$orderCommodities);                              // 创建
+        $delete_params = $this->filterDeleteParams($orderAllocationDetails,$orderCommodities);                                           // 删除
+
+        if(count($inner_params)>0)
+            $this->createOrderCommodities($inner_params,$package_map);  // 创建 3s
+
+        if(count($update_params)>0)
+            $this->updateOrderCommodities($update_params);              // 更新
+        if(count($delete_params)>0)
+            $this->deleteOrderCommodities($delete_params);              // 删除
+
+        if(count($del_orderCommodities)>0)
+            $this->deleteOrderCommodities($del_orderCommodities);       // 删除
 
-        if(!$delete_params)
-            $this->deleteOrderCommodities($delete_params);
     }
-    // TODO
-    public function regroupOrderCommodities($orderCommodities)
+    // TODO 重组已有的OrderCommodities
+    public function regroupOrderCommodities(&$orderCommodities)
     {
         $params = [];
         $orderCommodities->each(function($orderCommodity)use(&$params){
-            $order_no = $orderCommodity->pacakge->order->code ?? '';
-            dd($orderCommodity->pacakge->order ?? '');
+            $order_no = $orderCommodity->package->order->code ?? '';
             $logistic_number = $orderCommodity->package->logistic_number ?? '';
             $sku = $orderCommodity->commodity->sku ?? '';
             $key = ' orderno='.$order_no.' logsitic_number='.$logistic_number.' sku='.$sku.' ';
-            $params[$key] = [
+            $params[$key][] = [
                 'id' =>$orderCommodity->id,
                 'orderno'=>$order_no,
                 'logistic_number'=>$logistic_number,
                 'sku' => $sku,
-                'amount' => $orderCommodity->amount
+                'amount' => $orderCommodity->amount,
+                'order_package_id'=>$orderCommodity->package->id ?? '',
+                'commodity_id'=>$orderCommodity->commodity->id ?? '',
             ];
         });
         return $params;
     }
-    // TODO
-    public function regroupWmsOrderAllocationDetails($orderHeaders)
+    // TODO 重组OrderAllocationDetails
+    public function regroupWmsOrderAllocationDetails(&$orderHeaders)
     {
+        /**
+         * @var OracleDOCOrderHeader $orderHeader
+         */
         $params =[];
         foreach ($orderHeaders as $orderHeader) {
             $order_no = $orderHeader->orderno;
             $actAllocationDetails = $orderHeader->actAllocationDetails ?? [];
-            foreach ($actAllocationDetails as $item) {
-                if($item)continue;
+            $actAllocationDetails->each(function($item)use(&$params,$order_no){
                 $logistic_number = $item->picktotraceid;
                 $sku = $item->sku;
                 $key = ' orderno='.$order_no.' logsitic_number='.$logistic_number.' sku='.$sku.' ';
                 if(isset($params[$key])){
-                    $params[$key]->amount += $item->qty_each;
+                    $params[$key]['amount']+= $item->qty_each;
                 }else{
                     $params[$key] = [
                         'orderno'=>$item->orderno,
@@ -673,62 +683,71 @@ class OrderPackageCommoditiesService
                         'owner_code' => $item->customerid
                     ];
                 }
-            }
+            });
         }
         return $params;
     }
-    // TODO
-    public function filterExistParams(&$orderAllocationDetails,&$orderCommodities)
+    // TODO 过滤已有的
+    public function filterUpdateParams(&$orderAllocationDetails,&$orderCommodities,&$del_orderCommodities)
     {
+        $update_params = [];
         foreach ($orderCommodities as $key=>$orderCommodity) {
             if(isset($orderAllocationDetails[$key])){
-                unset($orderCommodity,$orderAllocationDetails[$key]);
+                $update_params[$key] = array_shift($orderCommodity);
+                $update_params[$key]['amount'] = $orderAllocationDetails[$key]['amount'];
+                collect($orderCommodity)->each(function($item)use(&$del_orderCommodities){
+                    $del_orderCommodities[] = $item;
+                });
+                unset($orderCommodities[$key],$orderAllocationDetails[$key]);
             }
         }
+        return $update_params;
     }
-    // TODO
+    // TODO 创建
     public function filterInnerParams(&$orderAllocationDetails,&$orderCommodities)
     {
         $inner_params = [];
         foreach ($orderAllocationDetails as $key=>$orderAllocationDetail) {
-            if($orderCommodities[$key]){
+            if(!($orderCommodities[$key] ?? false)){
                 $inner_params[] = $orderAllocationDetail;
                 unset($orderCommodities[$key],$orderAllocationDetail);
             }
         }
         return $inner_params;
     }
-    // TODO
-    public function filterUpdateParams(&$orderAllocationDetails,&$orderCommodities)
-    {
-        $update_params = [];
-        foreach ($orderCommodities as $key => $orderCommodity) {
-            if(isset($orderAllocationDetails[$key])){
-                if($orderCommodity->amount != $orderAllocationDetails[$key]->amount){
-                    $update_params[$key] = $orderCommodity[$key]->amount = $orderAllocationDetails[$key]->amount;
-                    unset($orderCommodity,$orderAllocationDetails[$key]);
-                }
-            }
-        }
-        return $update_params;
-    }
+    // TODO 更新
+//    public function filterUpdateParams(&$orderAllocationDetails,&$orderCommodities)
+//    {
+//        $update_params = [];
+//        foreach ($orderCommodities as $key => $orderCommodity) {
+//            if(isset($orderAllocationDetails[$key])){
+//                if($orderCommodity->amount != $orderAllocationDetails[$key]->amount){
+//                    $update_params[$key] = $orderCommodity[$key]->amount = $orderAllocationDetails[$key]->amount;
+//                    unset($orderCommodity,$orderAllocationDetails[$key]);
+//                }
+//            }
+//        }
+//        return $update_params;
+//    }
     // TODO
     public function filterDeleteParams(&$orderAllocationDetails,&$orderCommodities)
     {
         $del_params = [];
         foreach ($orderCommodities as $key => $orderCommodity) {
             if(!isset($orderAllocationDetails[$key])){
-                $del_params[] = $orderCommodity;
+                collect($orderCommodity)->each(function ($item)use(&$del_params){
+                    $del_params[] = $item;
+                });
+                unset($orderCommodities[$key]);
             }
         }
         return $del_params;
     }
-    // TODO
-    public function createOrderCommodities($inner_params,$packages)
+    // TODO  根据数据创建
+    public function createOrderCommodities($inner_params,$package_map)
     {
         /** @var DataHandlerService $dataHandlerService */
         $dataHandlerService  = app('DataHandlerService');
-        $package_map = $dataHandlerService->dataHeader(['logistic_number'],$packages);
         $sku = [];$owners = [];
         foreach ($inner_params as $inner_param) {
             $sku_code = $inner_param['sku'];$owner_code = $inner_param['owner_code'];
@@ -748,7 +767,8 @@ class OrderPackageCommoditiesService
         $create_params =[];
         $date = Carbon::now();
         foreach ($inner_params as $inner_param) {
-            $package = $dataHandlerService->getKeyValue(['logistic_number'=>$inner_param],$package_map);
+            if($inner_param['logistic_number'] === '*' || $inner_param['logistic_number'] === ' ')continue;
+            $package = $dataHandlerService->getKeyValue(['logistic_number'=>$inner_param['logistic_number']],$package_map);
             $commodity = $commodity_map[' owner='.$inner_param['owner_code'].' sku='.$inner_param['sku']] ?? null;
             $create_params[] = [
                 'order_package_id'=>$package->id,
@@ -760,7 +780,7 @@ class OrderPackageCommoditiesService
         }
         if(count($create_params)>0){
             try {
-                $bool = OrderPackageCommodities::query()->insert($create_params);
+                $bool = $this->insert($create_params);
                 LogService::log(__METHOD__,__FUNCTION__,'批量添加 orderCommodity --'. $bool ." || ".count($create_params).' || '.json_encode($create_params));
             } catch (\Exception $e) {
                 LogService::log(__METHOD__,__FUNCTION__.'error','批量添加 orderCommodity error'." || ".count($create_params).' || '.json_encode($create_params));
@@ -775,22 +795,22 @@ class OrderPackageCommoditiesService
         $update_params = [['id','order_package_id','commodity_id','amount','updated_at']];
         foreach ($orderCommodities as $orderCommodity) {
             $update_params[] = [
-                'id' => $orderCommodity->id,
-                'order_package_id'=>$orderCommodity->order_package_id,
-                'commodity_id'=>$orderCommodity->commodity_id,
-                'amount' => $orderCommodity->amount,
+                'id' => $orderCommodity['id'] ?? '',
+                'order_package_id'=>$orderCommodity['order_package_id'] ?? '',
+                'commodity_id'=>$orderCommodity['commodity_id'] ?? '',
+                'amount' => $orderCommodity['amount'],
                 'updated_at' => $updated_at
             ];
         }
-        if(count($update_params)>0)
+        if(count($update_params)>1)
             $this->batchUpdate($update_params);
     }
-    // TODO
+    // TODO 删除
     public function deleteOrderCommodities($orderCommodities){
         if(!$orderCommodities)return;
         try {
             $bool = OrderPackageCommodities::query()->whereIn('id', data_get($orderCommodities, '*.id'))->delete();
-            LogService::log(__METHOD__, __FUNCTION__, '批量删除 OrderCommodity -- ' . $bool . '||' . $orderCommodities->count() . ' || ' . json_encode($orderCommodities->toArray()));
+            LogService::log(__METHOD__, __FUNCTION__, '批量删除 OrderCommodity -- ' . $bool . '||' .count($orderCommodities)  . ' || ' . json_encode($orderCommodities));
         } catch (\Exception $e) {
             LogService::log(__METHOD__, __FUNCTION__.' error', '批量删除 OrderCommodity Error-- ' . $e->getMessage() . '||' . $e->getTraceAsString() );
         }

+ 20 - 10
app/Services/OrderPackageService.php

@@ -382,18 +382,24 @@ class OrderPackageService
         $orderPackage = OrderPackage::query()->create(['order_id'=>$order->id,'logistic_number'=>$logisticNumber]);
         return  compact('orderPackage','order');
     }
+
     // TODO
-    public function createPackageInfo($orderHeaders)
+    public function createPackageInfo(&$orderHeaders)
     {
         /**
          * @var OrderPackageCommoditiesService $OrderPackageCommoditiesService
          */
         $OrderPackageCommoditiesService = app('OrderPackageCommoditiesService');
+        var_dump('createPackageInfo--start'.(string)Carbon::now());
         $this->createPackageByOrderHeader($orderHeaders);
+        var_dump('createPackageInfo--start'.(string)Carbon::now());
+
+        var_dump('createOrderCommodity--start'.(string)Carbon::now());
         $OrderPackageCommoditiesService->createOrderCommodity($orderHeaders);
+        var_dump('createOrderCommodity--start'.(string)Carbon::now());
     }
     // TODO
-    public function createPackageByOrderHeader($orderHeaders)
+    public function createPackageByOrderHeader(&$orderHeaders)
     {
         /**
          * @var OrderService $orderService
@@ -405,12 +411,13 @@ class OrderPackageService
         $orderTrackingService = app('OrderTrackingService');
         if(!$orderHeaders)return;
         $orders = $orderService->getByWmsOrders($orderHeaders);
-        $packages = $this->getByOrderNos(data_get($orderHeaders,'*.orderno'));
-
+        $packages = $this->getByOrderNos(data_get($orderHeaders,'*.orderno'));          // 已有
         $this->createOrderPackage($orderHeaders,$orders,$packages);                     // 创建package
-        $del_ids = $this->deleteUnnecessaryPackage($orderHeaders,$packages);            // 删除package
 
-        $orderPackageCommodityService->deleteUnnecessaryOrderCommodities($del_ids);     // orderCommodity
+        $package_created = $this->getByOrderNos(data_get($orderHeaders,'*.orderno'));   //
+        $del_ids = $this->deleteUnnecessaryPackage($orderHeaders,$package_created);     // 删除package
+        $orderPackageCommodityService->deleteUnnecessaryOrderCommodities($del_ids);     // 删除 orderCommodity
+
         $orderTracking = OrderTracking::query()->whereHas('commodities.package',function($query)use($del_ids){
             $query->whereIn('id',$del_ids);
         })->get();
@@ -458,6 +465,7 @@ class OrderPackageService
                 'logistic_number' => $logistic_number,
                 'created_at' => $date,
                 'updated_at' => $date,
+                'status' =>'无'
             ];
         }
         return $inner_params;
@@ -469,7 +477,7 @@ class OrderPackageService
          * @var DataHandlerService $dataHandlerService
          */
         $dataHandlerService = app(DataHandlerService::class);
-        $logistic_numbers = data_get($orderHeaders,'*.actAllocationDetails.picktotraceid');     // 获取picktotraceid (运单的快递单号)
+        $logistic_numbers = data_get($orderHeaders,'*.actAllocationDetails.*.picktotraceid');     // 获取picktotraceid (运单的快递单号)
         $logistic_numbers = array_unique($logistic_numbers);
         $logistic_numbers = array_diff($logistic_numbers,['',' ','*']);
 
@@ -479,11 +487,13 @@ class OrderPackageService
         $diff_number = array_diff($exits_number,$logistic_numbers);
         foreach ($diff_number as $number) {
             $package = $dataHandlerService->getKeyValue(['logistic_number'=>$number],$packages_maps);
-            if($package)$packages->push($package->id);
+            if($package ?? false)$packages->push($package->id);
         }
-        if(!$packages)return $packages;
+        if($packages->isEmpty())return $packages;
         try {
-            return OrderPackage::query()->whereIn('id', $packages)->delete() ? $packages : collect();
+            $bool = OrderPackage::query()->whereIn('id', $packages)->delete();
+            $bool ? LogService::log(__METHOD__,__FUNCTION__,'删除多余包裹 ids:'.json_encode($packages)) : null;
+            return $bool ? $packages : collect();
         } catch (\Exception $e) {
             LogService::log(__METHOD__,__FUNCTION__,'删除多余包裹 ids:'.json_encode($packages).$e->getMessage());
             return collect();

+ 0 - 2
app/Services/OrderService.php

@@ -868,7 +868,6 @@ class OrderService
         $owner = $dataHandlerService->getKeyValue(['code'=>$orderHeader->customerid],$owner_map);
         $logistic = $dataHandlerService->getKeyValue(['code'=>$orderHeader->userdefine1],$logistic_map);
         $shop = $dataHandlerService->getKeyValue(['name'=>$orderHeader->issuepartyname,'owner_id'=>$owner->id??null],$shop_map);
-//        $date = (string)Carbon::now();
         return [
             'code'=>$orderHeader['orderno'],
             'warehouse_id' => $warehouse['id'] ?? null,
@@ -887,7 +886,6 @@ class OrderService
             'updated_at' => $date,
             'created_at' => $orderHeader['addtime']
         ];
-        // return  new Order(
     }
 
     /**