Ver Fonte

Merge branch 'zengjun'

LD há 5 anos atrás
pai
commit
bdbab84bc8

+ 7 - 7
app/Http/Controllers/TestController.php

@@ -37,6 +37,7 @@ use App\Services\OracleDOCOrderHeaderService;
 use App\Services\OrderIssueService;
 use App\Services\OrderPackageService;
 use App\Services\OrderService;
+use App\Services\OrderTrackingOwnerService;
 use App\Services\OrderTrackingService;
 use App\Unit;
 use App\User;
@@ -473,8 +474,8 @@ class TestController extends Controller
     }
 
 
-    public function test3(){
-
+    public function test3()
+    {
         /** @var DataHandlerService $dataHandlerService */
         $dataHandlerService = app('dataHandlerService');
         $startDate = \Illuminate\Support\Carbon::parse('2020-05-06 13:16:51')->toDateTimeString();
@@ -496,7 +497,7 @@ class TestController extends Controller
 //            ->where('addTime','<=',$endData)
             ->whereIn('customerID',data_get($owners,'*.code'))
             ->get();
-
+//        dd($orderHeaders);
 //        $orderHeaders = app(OracleDOCOrderHeaderService::class)->getWmsOrderOnStartDateCreate($startData);
         $orderService->createByWmsOrder($orderHeaders);
         $orderTrackingService->createByWmsOrderHeader($orderHeaders);
@@ -539,7 +540,7 @@ class TestController extends Controller
 
     public function updateOrderTrackingGrossWeightAndBulk(){
         $orderTrackings = OrderTracking::query()->with('commodities.package.order.owner','commodities.commodity')
-            ->where('created_at','>','2020-09-28 00:07:06')->get();
+            ->where('created_at','>','2020-09-17 00:00:00')->get();
         foreach ($orderTrackings as $orderTracking) {
             $code = $orderTracking->commodities->package->order->owner->code ?? false;
             $amount = $orderTracking->commodities->amount;
@@ -548,12 +549,11 @@ class TestController extends Controller
             $basSku =  OracleBasSKU::query()->where('CustomerID',$code)->where('SKU',$commodity->sku)->first();
             $gross_weight = null;
             $bulk = null;
-            $gross_weight = round($basSku->cube * $amount,3);
-            $bulk = round($basSku->grossweight * $amount,3);
+            $gross_weight = round($basSku->grossweight * $amount,3);
+            $bulk = round($basSku->cube * $amount,3);
             if($orderTracking->gross_weight!= $gross_weight ||$orderTracking->bulk!= $bulk ){
                 OrderTracking::query()->where('id',$orderTracking->id)->update(['gross_weight'=>$gross_weight,'bulk'=>$bulk]);
             }
         }
-
     }
 }

+ 81 - 130
app/Services/OrderPackageCommoditiesService.php

@@ -12,6 +12,7 @@ use App\OrderPackage;
 use App\OrderPackageCommodities;
 use App\Owner;
 use App\Services\common\BatchUpdateService;
+use App\Services\common\DataHandlerService;
 use Carbon\Carbon;
 
 class OrderPackageCommoditiesService
@@ -403,27 +404,27 @@ class OrderPackageCommoditiesService
         return $orderPackagerCommodities;
     }
 
-    public function createByWmsOrder($orderHeaders,$owner_code_map,$commodities)
+    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 = [];
-        $commodity_owner_id_sku_map = [];
-        foreach ($order_packages as $order_package) {
-            $order_packages_logistic_number_map[$order_package->logistic_number]  = $order_package;
-        }
-        if($commodities ?? false){
-            foreach ($commodities as $commodity) {
-                $commodity_owner_id_sku_map[' owner_id='.$commodity->owner_id.' sku='.$commodity->sku] = $commodity;
-            }
-        }
+        $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;
@@ -444,49 +445,30 @@ class OrderPackageCommoditiesService
                 $insert_params = array_merge($insert_params,$params);
                 unset($params);
             }
-//            $oracleDOCOrderDetails = $orderHeader->oracleDOCOrderDetails;
-//            if(count($logistic_numbers) ==0 && $oracleDOCOrderDetails->count() > 0){
-//                $logistic_number = $orderHeader->soreference5;
-//                $params = $this->getParamsByOracleDOCOrderDetail($oracleDOCOrderDetails,
-//                    $order_packages_logistic_number_map,
-//                    $owner_code_map,
-//                    $commodity_owner_id_sku_map,
-//                    $logistic_number
-//                );
-//                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){
-//                        array_shift($map[$mapkey]);
-//                        unset($params[$key]);
-//                    }
-//                }
-//                $insert_params = array_merge($insert_params,$params);
-//                unset($params);
-//            }
-        }
-        $order_packages_commodities= [];
+        }
         if(count($insert_params) > 0){
-            $order_packages_commodities = $this->create($insert_params);
+            $this->create($insert_params);
         }
         unset($orderHeaders,$order_packages,$owner_code_map,$commodities,$insert_params);
-        return $order_packages_commodities;
     }
 
     public function getParamsByActAllocationDetails($details,array $order_packages_logistic_number_map,array $owner_code_map,array $commodity_owner_id_sku_map,array $logistic_numbers){
-        if(!$details){return [];}
-        $fillables = [];
+        /** @var DataHandlerService  $dataHandlerService */
+        $dataHandlerService =  app(DataHandlerService::class);
+        if(!$details)return [];
+        $params = [];
         $create_at = Carbon::now()->format('Y-m-d H:i:s');
+        $updated_at = Carbon::now()->format('Y-m-d H:i:s');
         foreach ($details as $actAllocationDetail) {
             $pickToTraceID = $actAllocationDetail->picktotraceid;
             if(in_array($pickToTraceID,$logistic_numbers)){
-                $orderPackage = $order_packages_logistic_number_map[$pickToTraceID] ?? false;
-                if(!$orderPackage){continue;}
-                $owner = $owner_code_map[$actAllocationDetail->customerid] ?? false;
-                if(!$owner){continue;}
-                $key= ' owner_id=' . $owner->id . ' sku=' . $actAllocationDetail->sku;
-                $commodity = $commodity_owner_id_sku_map[$key] ?? false;
-                if(!$commodity){continue;}
-                $fillables[] = [
+                $orderPackage = $dataHandlerService->getKeyValue(['logistic_number'=>$pickToTraceID],$order_packages_logistic_number_map);
+                if(!$orderPackage)continue;
+                $owner = $dataHandlerService->getKeyValue(['code'=>$actAllocationDetail->customerid],$owner_code_map);
+                if(!$owner)continue;
+                $commodity = $dataHandlerService->getKeyValue(['owner_id'=>$owner->id,'sku'=>$actAllocationDetail->sku],$commodity_owner_id_sku_map);
+                if(!$commodity)continue;
+                $params[] = [
                     'commodity_id' =>$commodity->id,
                     'order_package_id' =>$orderPackage->id,
                     'amount' => $actAllocationDetail->qty,
@@ -495,31 +477,9 @@ class OrderPackageCommoditiesService
             }
         }
         unset($details,$order_packages_logistic_number_map,$owner_code_map,$commodity_owner_id_sku_map,$logistic_numbers);
-        return $fillables;
+        return $params;
     }
-    public function getParamsByOracleDOCOrderDetail($details,array $order_packages_logistic_number_map,array $owner_code_map,array $commodity_owner_id_sku_map,$logistic_number)
-    {
-        if(!$details){ return [];}
 
-        $orderPackage = $order_packages_logistic_number_map[$logistic_number] ?? false;
-        if(!$orderPackage){return [];}
-
-        $fillables = [];
-        $create_at = Carbon::now()->format('Y-m-d H:i:s');
-        foreach ($details as $oracleDOCOrderDetail) {
-            $owner = $owner_code_map[$oracleDOCOrderDetail->customerid] ?? false;
-            if(!$owner){continue;}
-            $commodity = $commodity_owner_id_sku_map[ ' owner_id='.$owner->id.' sku='.$oracleDOCOrderDetail->sku];
-            $fillables[] = [
-                'commodity_id' =>$commodity->id,
-                'order_package_id' =>$orderPackage->id,
-                'amount' => $oracleDOCOrderDetail->qtyordered,
-                'created_at' => $create_at
-            ];
-        }
-        unset($details,$order_packages_logistic_number_map,$owner_code_map,$commodity_owner_id_sku_map,$logistic_number);
-        return $fillables;
-    }
 
     public function create(array $params){
         if(!$params){return [];}
@@ -538,40 +498,36 @@ class OrderPackageCommoditiesService
         }
     }
 
-
     public function updateByWmsOrder($orderHeaders){
         if(!$orderHeaders){return ;}
-        /** @var CommodityService $commodityService */
-        /** @var OwnerService $ownerService */
-        $commodityService = app(CommodityService::class);
-        $ownerService = app(OwnerService::class);
-        $owners =$ownerService->getByWmsOrders($orderHeaders);
-        $owner_code_map = [];
-        $owner_id_map = [];
-        foreach ($owners as $owner) {
-            $owner_code_map[$owner->code] = $owner;
-            $owner_id_map[$owner->id] = $owner;
-        }
-        $commodities = $commodityService->getByWmsOrders($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 = $owner_id_map[$commodity->owner_id] ?? '';
+            $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')
+        $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 = [];
-        $order_package_logistic_numbers_map = [];
         foreach ($order_package_commodities as $order_package_commodity) {
-            $order_package = $order_package_commodity->package;
-            $order = $order_package->order;
+            $order = $order_package_commodity->package->order;
             $order_no_map[$order->code][] = $order_package_commodity;
-            $order_package_logistic_numbers_map[$order_package->logistic_number] = $order_package;
         }
 
         $insertParams = [];
@@ -579,57 +535,52 @@ class OrderPackageCommoditiesService
         $updated_at = Carbon::now()->toDateTimeString();
         $created_at = Carbon::now()->toDateTimeString();
         foreach ($orderHeaders as $orderHeader) {
-            $order_no = $orderHeader->orderno;
-            $order_package_commodities = $order_no_map[$order_no] ?? false;
-            if(!$order_package_commodities){continue;}
+            $order_package_commodities = $order_no_map[$orderHeader->orderno] ?? false;
             $actAllocationDetails = $orderHeader->actAllocationDetails;
-            foreach ($actAllocationDetails as $actAllocationDetail) {
-                $logistic_number = $actAllocationDetail->picktotraceid;
-                if(in_array($logistic_number,['*','',null])){continue;}
-                $order_package = $order_package_logistic_numbers_map[$logistic_number] ?? false;
-                if(!$order_package){continue;}
-                $key = ' owner_code='.$actAllocationDetail->code.' code='.$actAllocationDetail->sku;
-                $commodity = $commodities_owner_code_code_map[$key] ?? false;
-                if(!$commodity){continue;}
-                foreach ($order_package_commodities as $key=>$order_package_commodity) {
-                    if($order_package_commodity->sku == $actAllocationDetail->sku  &&
-                        $order_package_commodity->commodity_id ==  $actAllocationDetail->id &&
-                        $order_package_commodity->amount == $actAllocationDetail->qty){
-                        unset($order_package_commodities[$key]);
-                        break;
-                    }elseif($order_package_commodity->sku == $actAllocationDetail->sku  &&
-                        $order_package_commodity->commodity_id ==  $actAllocationDetail->id){
-                        $updateParams[] = [
-                            'id' => $order_package_commodity->id,
-                            'commodity_id' => $order_package_commodity->commodity_id,
-                            'amount' => $actAllocationDetail->qty,
-                            'updated_at' => $updated_at
-                        ];
-                        unset($order_package_commodities[$key]);
-                        break;
-                    }elseif($order_package_commodity->sku !== $actAllocationDetail->sku  &&
-                        $order_package_commodity->amount !== $actAllocationDetail->qty){
-                        $insertParams[] = [
-                            'order_package_id' => $order_package->id,
-                            'commodity_id' => $order_package_commodity->commodity_id,
-                            'amount' => $actAllocationDetail->qty,
-                            'created_at' => $created_at
-                        ];
-                        break;
+            $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){
+                            unset($order_package_commodities[$key]);
+                            unset($actAllocationDetails[$key1]);
+                            $deleteKey[] = $key1;
+                            break;
+                        }else if($item ->sku == $commodity->sku && $item->amount !=  $actAllocationDetail->qty){
+                            $updateParams[] = [
+                                'id' => $item->id,
+                                'commodity_id' => $commodity->id,
+                                'amount' => $actAllocationDetail->qty,
+                                '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);
         }
-//        {
-//            /** @var OrderPackageService $orderPackageService */
-//            $orderPackageService = app(OrderPackageService::class);
-//            $order_packages = $orderPackageService->getByWmsOrders($orderHeaders);
-//            $this->createByWmsOrder($orderHeaders, $order_packages, $owner_code_map, $commodities);
-//        }
 
         if(count($insertParams) > 0){
             try {

+ 34 - 125
app/Services/OrderPackageService.php

@@ -9,6 +9,7 @@ use App\Order;
 use App\OrderPackage;
 use App\OrderPackageCommodities;
 use App\Services\common\BatchUpdateService;
+use App\Services\common\DataHandlerService;
 use Carbon\Carbon;
 
 class OrderPackageService
@@ -346,37 +347,30 @@ class OrderPackageService
         }
     }
 
-    public function createByWmsOrder($orderHeaders_map)
+    public function createByWmsOrder($orderHeaders)
     {
-        if(!$orderHeaders_map ){return [];}
+        if(!$orderHeaders ){return ;}
         /** @var OrderService $orderService */
         $orderService = app(OrderService::class);
-        $orders = $orderService->getByWmsOrders($orderHeaders_map);
-        if(!$orders){return [];}
-        $orders_code_map = [];
-        foreach ($orders as $order) {
-            $orders_code_map[$order->code] = $order;
-        }
+        /** @var DataHandlerService $dataHandlerService */
+        $dataHandlerService = app(DataHandlerService::class);
+        $order_headers_orderNo_map =  $dataHandlerService->dataHeader(['orderno'],$orderHeaders);
 
-        $order_packages_logistic_number_map = [];
+        $orders = $orderService->getByWmsOrders($orderHeaders);
+        if(!$orders){return ;}
         $order_packages = OrderPackage::query()->whereIn('order_id',data_get($orders,'*.id'))->get();
-        foreach ($order_packages as $order_package) {
-//            $key = ' order_id='.$order_package->order_id.' logistic_number='.$order_package->logistic_number;
-            $key =  ' order_id='.$order_package->order_id.' logistic_number='.$order_package->logistic_number;
-            $order_packages_logistic_number_map[$key] = $order_package;
-        }
+        $order_packages_logistic_number_map  =$dataHandlerService->dataHeader(['order_id','logistic_number'],$order_packages);
 
         $insert_params = [];
-        foreach ($orders_code_map as $key=>$order) {
-            $orderHeader = $orderHeaders_map[$key];
+        foreach ($orders as $order) {
+            $orderHeader =  $dataHandlerService->getKeyValue(['orderno'=>$order->code],$order_headers_orderNo_map);
             if(!$orderHeader){ continue;}
             $params = $this->getParamsByOrderHeader($orderHeader,$order,$order_packages_logistic_number_map);
             if(!$params){continue;}
-
-//            $insert_params[] = $params;
             foreach ($params as $param) {
-                $key =  ' order_id='.$param['order_id'].' logistic_number='.$param['logistic_number'];
-                if(isset($order_packages_logistic_number_map[$key])){
+                $key = ['order_id'=>$param['order_id'],'logistic_number'=>$param['logistic_number']];
+                $orderPackage = $dataHandlerService->getKeyValue($key,$order_packages_logistic_number_map);
+                if(isset($orderPackage)){
                     continue;
                 }else{
                     $insert_params[] = $param;
@@ -386,150 +380,65 @@ class OrderPackageService
         if(count($insert_params)>0){
             $order_packages = $this->create($insert_params);
         }
+        unset($orders_code_map,$order_packages_logistic_number_ma,$insert_params,$order_packages,$order_package_commodities);
         /** @var OrderPackageCommoditiesService $orderPackageCommodityService */
-        /** @var OwnerService  $ownerService */
-        /** @var CommodityService  $commodityService */
         $orderPackageCommodityService = app(OrderPackageCommoditiesService::class);
-        $ownerService = app(OwnerService::class);
-        $commodityService = app(CommodityService::class);
-        $owner_code_map = [];
-
-        $commodities = $commodityService->getByWmsOrders($orderHeaders_map);
-        $owners = $ownerService->getByWmsOrders($orderHeaders_map);
-        foreach ($owners as $owner) {
-            $owner_code_map[$owner->code] = $owner;
-        }
-        $order_package_commodities = $orderPackageCommodityService->createByWmsOrder($orderHeaders_map,$owner_code_map,$commodities);
-        unset($orderHeaders_map,$orders_code_map,$fillables,$order_packages_logistic_number_map);
-//        $this->updateWeightAndBulk($order_packages,$order_package_commodities);
-        unset($order_packages,$order_package_commodities);
+        $orderPackageCommodityService->createByWmsOrder($orderHeaders);
+        unset($orderHeaders);
     }
 
     public function getParamsByOrderHeader($orderHeader,$order,$order_packages_logistic_number_map){
+        /** @var DataHandlerService $dataHandlerService */
+        $dataHandlerService = app(DataHandlerService::class);
         $actAllocationDetails = $orderHeader->actAllocationDetails;
         $logistic_numbers = array_diff(array_unique(data_get($actAllocationDetails,'*.picktotraceid')),['','*',null]);
         $params = [];
         $created_at = Carbon::now()->format('Y-m-d H:i:s');;
+        $updated_at = Carbon::now()->format('Y-m-d H:i:s');;
         foreach ($logistic_numbers as $logistic_number) {
-            $map_key = ' order_id='.$order->id.' logistic_number='.$logistic_number;
-            if(isset($order_packages_logistic_number_map[$map_key])){ continue;}
+            $key  = ['order_id'=>$order->id,'logistic_number'=>$logistic_number];
+            $orderPackage = $dataHandlerService->getKeyValue($key,$order_packages_logistic_number_map);
+            if(isset($orderPackage)){ continue;}
             $params[] = [
-                'order_id' => $order->id, 'logistic_number' => $logistic_number,'created_at' => $created_at
+                'order_id' => $order->id, 'logistic_number' => $logistic_number,'created_at' => $created_at,'updated_at' => $updated_at
             ];
         }
-        $oracleDOCOrderDetails = $orderHeader->oracleDOCOrderDetails;
-        if(count($logistic_numbers) === 0 && count($oracleDOCOrderDetails) > 0){
-            $key = ' logistic_number='.$orderHeader->soreference5;
-            if(!isset($orderHeader->soreference5) || in_array($orderHeader->soreference5,[''.'*',null])){return $params;}
-            if(!isset($order_packages_logistic_number_map[$key])){
-                $params[] = [
-                    'order_id' => $order->id, 'logistic_number' => $orderHeader->soreference5,'created_at' => $created_at
-                ];
-            }
-        }
         return $params;
     }
 
-    public function updateWeightAndBulk($orderPackages,$orderPackageCommodities){
-        if(!$orderPackageCommodities){return ;}
-        if(!$orderPackages){return ;}
-        $orderPackageCommodities_map =[];
-        foreach ($orderPackageCommodities as $orderPackageCommodity) {
-            $order_package_id = $orderPackageCommodity->order_package_id;
-            if(!isset($orderPackageCommodities_map[$order_package_id])){
-                $orderPackageCommodities_map[$order_package_id]= [];
-            }
-            $orderPackageCommodities_map[$order_package_id][] = $orderPackageCommodity;
-        }
-
-        $update_params = [['id','bulk','updated_at']];
-        $updated_at = Carbon::now()->format('Y-m-d H:i:s');
-        foreach ($orderPackages as $orderPackage) {
-            $order_package_id = $orderPackage->id;
-            $orderPackageCommodity_list = $orderPackageCommodities_map[$order_package_id] ?? [];
-            if(!$orderPackageCommodity_list){continue;}
-            if( isset($orderPackage['bulk']) && $orderPackage['bulk']!=0){
-                continue;
-            }
-            $params = ['id'=>$order_package_id,'bulk' => null,'updated_at'=>$updated_at];
-            foreach ($orderPackageCommodity_list as $orderPackageCommodity) {
-                $commodity = $orderPackageCommodity->commodity;
-                if(!$commodity['length'] || !$commodity['width'] || !$commodity['height']){
-                    continue;
-                }
-//                $bulk = bcmul($commodity['length'],$commodity['width'],5);
-//                $bulk = bcmul($commodity['height'],$bulk,5);
-//                $bulk = bcmul($bulk,$orderPackageCommodity->amount,5);
-                $bulk = round($commodity['length']*$commodity['width'],5);
-                $bulk = round($commodity['height']*$bulk,5);
-                $bulk = round($bulk*$orderPackageCommodity->amount,5);
-//                if($bulk>=1000000)bcdiv($bulk,1000000000,3);
-                if($bulk>=1000000)round($bulk/1000000000,3);
-                $params['bulk'] +=  $bulk;
-            }
-            if($params['bulk'] == $orderPackage->bulk && $orderPackage->bulk!= 0){continue;}
-            $update_params[]= $params;
-        }
-        if(count($update_params) > 1){
-            $this->batchUpdate($update_params);
-        }
-    }
-
     public function updateOrderPackageByWmsOrder($orderHeaders){
         /** @var OrderPackageCommoditiesService $orderPackageCommoditiesService */
         $orderPackageCommoditiesService =  app(OrderPackageCommoditiesService::class);
+        /** @var DataHandlerService $dataHandlerService */
+        $dataHandlerService = app(DataHandlerService::class);
         if(!$orderHeaders){return;}
 
-        $order_nos = data_get($orderHeaders,'*.orderno');
-        $orders = Order::query()->with('packages')->whereIn('code',$order_nos)->get();
-
-        $orders_code_map = [];
-        $order_packages_logistic_number_map = [];
-        foreach ($orders as $order) {
-            $orders_code_map[$order->code] = $order;
-            $order_packages = $order->packages;
-            if(!$order_packages){continue;}
-            foreach ($order_packages as $order_package) {
-                $key = ' order_id='.$order->id.' logistic_number='.$order_package->logistic_number;
-                $order_packages_logistic_number_map[$key] =$order_package;
-            }
-        }
+        $orders = Order::query()->with('packages')->whereIn('code',data_get($orderHeaders,'*.orderno'))->get();
+        $orders_code_map =  $dataHandlerService->dataHeader(['code'],$orders);
 
+        $orderPackages =$this->getByWmsOrders($orderHeaders);
+        $order_packages_logistic_number_map = $dataHandlerService->dataHeader(['order_id','logistic_number'],$orderPackages);
 
         $insertParams = [];
         foreach ($orderHeaders as $orderHeader) {
-            $order = $orders_code_map[$orderHeader->orderno] ?? false;
+            $order = $dataHandlerService->getKeyValue(['code'=>$orderHeader->orderno ?? ''],$orders_code_map);
             if(!$order){continue;}
             $order_packages = $order->packages;
             if(!$order_packages){continue;}
             $params =$this->getParamsByOrderHeader($orderHeader,$order,$order_packages_logistic_number_map);
             if(count($params) > 0){
                 foreach ($params as $param) {
-                    $key = ' order_id='.$param['order_id'].' logistic_number='.$param['logistic_number'];
-                    $order_package =  $order_packages_logistic_number_map[$key] ?? false;
-//                    $order_package =  $order_packages_logistic_number_map[$param['logistic_number']] ?? false;
-//                    $order_package = $order_packages->where('logistic_number',$param)->first();
+                    $key  = ['order_id'=>$param['order_id'],'logistic_number'=>$param['logistic_number']];
+                    $order_package = $dataHandlerService->getKeyValue($key,$order_packages_logistic_number_map);
                     if($order_package){continue;}
                     $insertParams[] = $param;
                 }
             }
         }
         if(count($insertParams)>0){
-            $this->insert($insertParams);
+            $this->create($insertParams);
         }
-
         $orderPackageCommoditiesService->updateByWmsOrder($orderHeaders);
-        $order_packages = OrderPackage::query()->with('order')
-            ->whereHas('order',function($query) use($order_nos){
-                $query->whereIn('code',$order_nos);
-            })->get();
-
-        $order_package_ids = data_get($order_packages,'*.id');
-//        $order_package_commodities = OrderPackageCommodities::query()->with('package')
-//            ->whereHas('package',function($query) use ($order_package_ids){
-//                $query->whereIn('id',$order_package_ids);
-//            })->get();
-//        $this->updateWeightAndBulk($order_packages,$order_package_commodities);
     }
 
     public function getLogisticNumbersByOrderHeader($orderHeader){

+ 28 - 54
app/Services/OrderService.php

@@ -811,15 +811,12 @@ class OrderService
         $shopService = app(ShopService::class);
         $orderPackageService = app(OrderPackageService::class);
 
-        $orderHeaders_map = [];$owners_code_map = [];$logistics_code_map = [];$shop_name_map=[]; $owners_id_map = [];
+       ;$owners_code_map = [];$logistics_code_map = [];$shop_name_map=[]; $owners_id_map = [];
 
         $owners = $ownerService->getByWmsOrders($orderHeaders);
         $logistics = $logisticService->getByWmsOrders($orderHeaders);
         $shops = $shopService->getByWmsOrders($orderHeaders);
 
-        foreach ($orderHeaders as $orderHeader) {
-            $orderHeaders_map[$orderHeader->orderno] = $orderHeader;
-        }
         foreach ($owners as $owner) {
             $owners_code_map[$owner->code] = $owner;
             $owners_id_map[$owner->id] = $owner;
@@ -833,30 +830,19 @@ class OrderService
             $key = ' owner_code='.$owner_code.' name='.$shop->name;
             $shop_name_map[$key] = $shop;
         }
-
-//        $this->filterExitingOrder($orderHeaders_map);
-        $insert_params = $this->getParamsByOrderHeader($orderHeaders_map,$owners_code_map,$logistics_code_map,$shop_name_map);
-        $this->create($insert_params);
-
-        $orderPackageService->createByWmsOrder($orderHeaders_map);
-        $order_nos = array_keys($orderHeaders_map);
+        $insert_params = $this->getParamsByOrderHeader($orderHeaders,$owners_code_map,$logistics_code_map,$shop_name_map);
+        if(count($insert_params)> 0){
+            $this->create($insert_params);
+        }
+        $orderPackageService->createByWmsOrder($orderHeaders);
+        $order_nos = data_get($orderHeaders,'*.orderno');
         unset($orderHeaders_map,$orders_code_map,$shop_name_map,$logistics_code_map,$owners_code_map);
         return Order::query()->whereIn('code',$order_nos)->get();
     }
 
-    public function filterExitingOrder(&$orderHeaders_map){
-        $order_map = [];
-        $order_nos = array_keys($orderHeaders_map);
-        $orders = Order::query()->whereIn('code',$order_nos)->get();
 
-        foreach ($orders as $order) {
-            $key = $order->code;
-            $order_map[$key] = $order;
-        }
-        $orderHeaders_map = array_diff_key($orderHeaders_map,$order_map);
-    }
-
-    public function getParamsByOrderHeader($orderHeaders_map,$owners_code_map,$logistics_code_map,$shop_name_map){
+    public function getParamsByOrderHeader($orderHeaders_map,$owners_code_map,$logistics_code_map,$shop_name_map)
+    {
         $params = [];
         // 自提 转 新杰物流
         $orders = Order::query()->whereIn('code',data_get($orderHeaders_map,'*.orderno'))->get();
@@ -909,33 +895,23 @@ class OrderService
 
     public function updateByWmsOrders($orderHeaders)
     {
+        if(!$orderHeaders){return null;}
+        /** @var DataHandlerService $dataHandlerService */
+        $dataHandlerService =  app(DataHandlerService::class);
         /** @var OrderPackageService $orderPackageService */
         $orderPackageService = app(OrderPackageService::class);
         if(!$orderHeaders || $orderHeaders->count() == 0){return null;}
-        $order_nos = data_get($orderHeaders,'*.orderno');
-        $orders = Order::query()->whereIn('code',$order_nos)->get();
-        $order_code_map = [];
-        foreach ($orders as $order) {
-            $order_code_map[$order->code] = $order;
-        }
-
+        $orders = $this->getByWmsOrders($orderHeaders);
+        $orders_code_map =  $dataHandlerService->dataHeader(['code'],$orders);
         $owners = app(OwnerService::class)->getByWmsOrders($orderHeaders);
-        $owner_code_map = [];
-        foreach ($owners as $owner) {
-            $owner_code_map[$owner->code] = $owner;
-        }
+        $owner_code_map = $dataHandlerService->dataHeader(['code'],$owners);
+
         $logistics = app(LogisticService::class)->getByWmsOrders($orderHeaders);
-        $logistics_code_map = [];
-        foreach ($logistics as $logistic) {
-            $logistics_code_map[$logistic->code] = $logistic;
-        }
+        $logistics_code_map = $dataHandlerService->dataHeader(['code'],$logistics);
 
         $shops = app(ShopService::class)->getByWmsOrders($orderHeaders);
-        $shops_owner_id_name_map = [];
-        foreach ($shops as  $shop){
-            $key = ' owner_id='.$shop->owner_id.' name='.$shop->name;
-            $shops_owner_id_name_map[$key] = $shop;
-        }
+        $shops_map = $dataHandlerService->dataHeader(['owner_id','name'],$shops);
+
         $updateParams = [[
             'id','owner_id','wms_status','logistic_id','shop_id','consignee_name','consignee_phone','province','city','district','address','client_code','updated_at','wms_edittime'
         ]];
@@ -943,20 +919,18 @@ class OrderService
         // 新杰物流
         $logistic_XJWL = Logistic::query()->where('code','XJWL')->first();
         foreach ($orderHeaders as $orderHeader) {
-            $order_no = $orderHeader->orderno;
-            $order = $order_code_map[$order_no] ?? false;
+            $order =$dataHandlerService->getKeyValue(['code'=>$orderHeader->orderno],$orders_code_map);
             if(!$order){continue;}
-            $logistic = $logistics_code_map[$orderHeader->userdefine1] ?? '';
+            $logistic = $dataHandlerService->getKeyValue(['code'=>$orderHeader->userdefine1] ,$logistics_code_map);
             // 自提 转 新杰物流
             if($logistic != '' && $logistic->name == '自提'){
                 $logistic = $logistic_XJWL;
             }
-            $owner = $owner_code_map[$orderHeader->customerid] ?? '';
-            $shop = $shops_owner_id_name_map[' owner_id='.$owner->id.' name='.$orderHeader->issuepartyname] ?? '';
-
-            $shop_id = $shop['id'] ?? '';
-            $logistic_id = $logistic->id ?? '';
-            $owner_id = $owner['id'] ?? '';
+            $owner = $dataHandlerService->getKeyValue(['code'=>$orderHeader->customerid] ,$owner_code_map);
+            $shop = $dataHandlerService->getKeyValue(['owner_id'=>$owner->id ?? '','name'=> $orderHeader->issuepartyname] ,$shops_map);
+            $shop_id = $shop->id ?? null;
+            $logistic_id = $logistic->id ?? null;
+            $owner_id = $owner->id ?? null;
 
             if($order->wms_status != $orderHeader->oracleBASCode_codename_c ||
                 $order->logistic_id != $logistic_id ||
@@ -972,7 +946,7 @@ class OrderService
                 $order->wms_edittime != $orderHeader->edittime){
                 $updateParams[] = [
                     'id'=>$order->id,
-                    'owner_id' => $owner->id ?? null,
+                    'owner_id' => $owner_id,
                     'wms_status' => $orderHeader->oracleBASCode_codename_c ?? '',
                     'logistic_id' => $logistic_id,
                     'shop_id' => $shop_id,
@@ -987,7 +961,7 @@ class OrderService
                     'wms_edittime' =>$orderHeader->edittime];
             }
         }
-        if(count($updateParams) > 0){
+        if(count($updateParams) > 1){
             $this->batchUpdate($updateParams);
         }
         $this->createByWmsOrder($orderHeaders);

+ 44 - 45
app/Services/OrderTrackingService.php

@@ -374,7 +374,6 @@ class OrderTrackingService
 
         $BasSKUs = app(OracleBasSkuService::class)->获取BasSKu_通过WMSOrderHeaders($orderHeaders);
         $BasSKUs_code_sku_map = $dataService->dataHeader(['customerid','sku'],$BasSKUs);
-
         $order_nos = data_get($orderHeaders,'*.orderno');
         $order_package_commodities  = OrderPackageCommodities::query()->with('package.order','commodity')
             ->whereHas('package.order',function($query) use ($order_nos){
@@ -409,8 +408,8 @@ class OrderTrackingService
                 if (strpos($notes, '[')) {
                     $arr= str_split($notes,strpos($notes,'['));
                     $client = $arr[0] ?? '';
-                    $order_remark = $arr[1] ?? '';
-                    $order_remark = str_replace(['[',']'],'',$order_remark);
+//                    $order_remark = $arr[1] ?? '';
+                    $order_remark = str_replace(['[',']'],'', $arr[1] ?? '');
                 }
             }
             $web_order_number = null;
@@ -420,10 +419,8 @@ class OrderTrackingService
 
             $owner = $dataService->getKeyValue(['id'=>$order->owner_id],$owner_id_map);
             $basSkU = $dataService->getKeyValue(['customerid'=>$owner->code,'sku'=>$item->commodity->sku],$BasSKUs_code_sku_map);
-
             $gross_weight = round($basSkU->grossweight * $item->amount, 3);
             $bulk = round($basSkU->cube * $item->amount, 3);
-
             $params[] =[
                 'order_package_commodity_id' => $item->id,
                 'owner_id' => $order->owner_id,
@@ -463,10 +460,7 @@ class OrderTrackingService
         foreach ($orderTrackings as $orderTracking) {
             $order_tracking_id_map[$orderTracking->order_package_commodity_id] = $orderTracking;
         }
-//        $is_exist_ids = data_get($orderTrackings,'*.order_package_commodity_id');
-//        $order_package_commodities = $order_package_commodities->filter(function($order_package_commodity) use($is_exist_ids){
-//           return !in_array($order_package_commodity->id,$is_exist_ids);
-//        });
+
         $order_package_commodity_order_code_map = [];
         $order_code_map = [];
         foreach ($order_package_commodities as $order_package_commodity) {
@@ -482,19 +476,8 @@ class OrderTrackingService
         $BasSKUs = app(OracleBasSkuService::class)->获取BasSKu_通过WMSOrderHeaders($orderHeaders);
         $BasSKUs_code_sku_map = $dataService->dataHeader(['customerid','sku'],$BasSKUs);
 
-//        $insert_params = [];
-//        foreach ($orderHeaders as $orderHeader) {
-//            $order_package_commodity_list = $order_package_commodity_order_code_map[$orderHeader->orderno] ?? false;
-//            if(!$order_package_commodity_list){continue;}
-//            $order = $order_code_map[$orderHeader->orderno];
-//            $params = $this->getParamsByOrderHeaderAndOrder($orderHeader,$order);
-//            foreach ($order_package_commodity_list as $item) {
-//                $params['order_package_commodity_id'] = $item->id;
-//                $insert_params = $params;
-//            }
-//        }
         $update_params = [];
-        $update_params[0] =['id','client','pick_up_at','order_remark'];
+        $update_params[0] =['id','client','pick_up_at','order_remark','gross_weight','bulk'];
         foreach ($orderHeaders as $orderHeader) {
             $order_package_commodity_list = $order_package_commodity_order_code_map[$orderHeader->orderno] ?? false;
 
@@ -507,13 +490,14 @@ class OrderTrackingService
                 $params = $this->getParamsByOrderHeaderAndOrder($orderHeader,$order);
                 $owner =  $dataService->getKeyValue(['code'=>$orderHeader->customerid],$owner_code_map);
                 $basSku = $dataService->getKeyValue(['customerid'=>$owner->code,'sku'=>$order_package_commodity->commodity->sku],$BasSKUs_code_sku_map);
-                $gross_weight = round($basSku->grossWeight * $order_package_commodity->amount,3) ;
-                $bulk = round($basSku->grossWeight * $order_package_commodity->amount,3) ;
+                $gross_weight = round($basSku->grossweight * $order_package_commodity->amount,2) ;
+                $bulk = round($basSku->cube * $order_package_commodity->amount,2) ;
                 if($order_tracking->owner_id != $params['owner_id'] ||
                     $order_tracking->client != $params['client'] ||
                     $order_tracking->order_remark != $params['order_remark'] ||
-                    $order_tracking->pick_up_at != $params['pick_up_at']){
-                    if($gross_weight == $order_tracking->gross_weight && $bulk== $order_tracking->bulk) continue;
+                    $order_tracking->pick_up_at != $params['pick_up_at'] ||
+                    $order_tracking->gross_weight != $gross_weight ||
+                    $order_tracking->bulk != $bulk){
                     $update_params[] = [
                         'id' => $order_tracking->id,
                         'client' => $params['client'],
@@ -526,32 +510,47 @@ class OrderTrackingService
                 }
             }
         }
-
         if(count($update_params) > 1){
             $this->batchUpdate($update_params);
         }
-
-        $is_exist_ids = data_get($orderTrackings,'*.order_package_commodity_id');
-        $order_package_commodities = $order_package_commodities->filter(function($order_package_commodity) use($is_exist_ids){
-            return !in_array($order_package_commodity->id,$is_exist_ids);
-        });
-        $order_package_commodity_order_code_map = [];
-        $order_code_map = [];
-        foreach ($order_package_commodities as $order_package_commodity) {
-            $order =$order_package_commodity->package->order;
-            if(!$order){continue;}
-            $order_code_map[$order->code] = $order;
-            $order_package_commodity_order_code_map[$order->code][] = $order_package_commodity;
-        }
         $insert_params = [];
         foreach ($orderHeaders as $orderHeader) {
-            $order_package_commodity_list = $order_package_commodity_order_code_map[$orderHeader->orderno] ?? false;
-            if(!$order_package_commodity_list){continue;}
-            $order = $order_code_map[$orderHeader->orderno];
-            $params = $this->getParamsByOrderHeaderAndOrder($orderHeader,$order);
+            $order_package_commodity_list=  $order_package_commodity_order_code_map[$orderHeader->orderno] ?? false;
+            if(!$order_package_commodity_list)continue;
             foreach ($order_package_commodity_list as $item) {
-                $params['order_package_commodity_id'] = $item->id;
-                $insert_params[] = $params;
+                $order_tracking =  $order_tracking_id_map[$item->id] ?? false;
+                if(!$order_tracking){
+                    $order = $order_code_map[$orderHeader->orderno] ?? false;
+                    if(!$order) continue;
+                    $client = null;
+                    $order_remark = null;
+                    if ($orderHeader['notes'] ?? false) {
+                        $notes = $orderHeader->notes;
+                        if (strpos($notes, '[')) {
+                            $arr= str_split($notes,strpos($notes,'['));
+                            $client = $arr[0] ?? '';
+                            $order_remark = str_replace(['[',']'],'', $arr[1] ?? '');
+                        }
+                    }
+                    $web_order_number = null;
+                    if(preg_match('/^O[\d]/',$orderHeader['soreference1'])){
+                        $web_order_number = $orderHeader['soreference1'];
+                    }
+                    $basSkU = $dataService->getKeyValue(['customerid'=>$orderHeader->customerid,'sku'=>$item->commodity->sku],$BasSKUs_code_sku_map);
+                    $gross_weight = round($basSkU->grossweight * $item->amount, 2);
+                    $bulk = round($basSkU->cube * $item->amount, 2);
+                    $insert_params[] =[
+                        'order_package_commodity_id' => $item->id,
+                        'owner_id' => $order->owner_id,
+                        'client' => $client,
+                        'created_at' => $order->created_at,
+                        'order_remark' => $order_remark,
+                        'pick_up_at' => $orderHeader->lastshipmenttime, // 提货时间,
+                        'web_order_number' => $web_order_number,
+                        'gross_weight' => $gross_weight,
+                        'bulk' => $bulk
+                    ];
+                }
             }
         }
         if(count($insert_params) > 0){

+ 1 - 1
package-lock.json

@@ -8763,7 +8763,7 @@
         },
         "socket.io-client": {
             "version": "2.3.0",
-            "resolved": "https://registry.npm.taobao.org/socket.io-client/download/socket.io-client-2.3.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsocket.io-client%2Fdownload%2Fsocket.io-client-2.3.0.tgz",
+            "resolved": "https://registry.npm.taobao.org/socket.io-client/download/socket.io-client-2.3.0.tgz",
             "integrity": "sha1-FNW6LgC5vNFFrkQ6uWs/hsvMG7Q=",
             "requires": {
                 "backo2": "1.0.2",