ajun 5 лет назад
Родитель
Сommit
781f7af18a
2 измененных файлов с 25 добавлено и 39 удалено
  1. 1 1
      app/Services/OracleDOCOrderHeaderService.php
  2. 24 38
      app/Services/OrderCommodityService.php

+ 1 - 1
app/Services/OracleDOCOrderHeaderService.php

@@ -88,7 +88,7 @@ Class OracleDOCOrderHeaderService
             ->with(['oracleBASCustomer'=>function($query){
                 $query->selectRaw('BAS_CUSTOMER.CustomerID,BAS_CUSTOMER.Customer_Type,BAS_CUSTOMER.Descr_C,BAS_CUSTOMER.Active_Flag');
             },'oracleDOCOrderDetails'=>function($query){
-                $query->selectRaw('doc_order_details.orderNo,doc_order_details.customerid,doc_order_details.sku,doc_order_details.QtyOrdered');
+                $query->selectRaw('doc_order_details.orderNo,doc_order_details.customerid,doc_order_details.sku,doc_order_details.QtyOrdered,doc_order_details.Location');
             }, '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,ACT_Allocation_Details.Sku');
             },'oracleBASCode'=>function($query){

+ 24 - 38
app/Services/OrderCommodityService.php

@@ -18,7 +18,7 @@ Class OrderCommodityService
         $ownerService = app('OwnerService');
         if(count($orderHeaders) == 0)return ;
         $order_nos = array_unique(data_get($orderHeaders,'*.orderno'));
-        $commodities_map = [];$orderDetails_map = [];$owners_id_maps = [];
+        $commodities_map = [];$owners_id_maps = [];
         $owner_code_maps = (function()use(&$ownerService,&$orderHeaders,&$owners_id_maps){
             $customer_ids= array_unique(data_get($orderHeaders,'*.customerid'));
             $owners = $ownerService->getOwnerByCodes($customer_ids);
@@ -30,19 +30,19 @@ Class OrderCommodityService
             }
             return $owner_code_maps;
         })();
-
-        $orderDetails_map = (function()use(&$orderHeaders,&$map,&$orderDetails_map,&$owner_code_maps,&$commodities_map){
+        // 重组OrderDetails
+        $orderDetails_map = (function()use(&$orderHeaders,&$owner_code_maps,&$commodities_map){
             $map = [];
             if(count($orderHeaders)==0)return $map;
             foreach ($orderHeaders as $orderHeader) {
                 $Order_Details = $orderHeader->oracleDOCOrderDetails;
-                $Order_Details->each(function($item)use(&$map,&$orderDetails_map,&$owner_code_maps,&$commodities_map){
+                $Order_Details->each(function($item)use(&$map,&$owner_code_maps,&$commodities_map){
                     if(!empty($item['customerid']) && !empty($item['sku'])){
                         $key = "owner_code_{$item['customerid']}_sku_{$item['sku']}";
                         $commodities_map[$key] =  ['owner_code'=>$item['customerid'],'sku'=>$item['sku']];
                     }
                     $key = "orderno_{$item['orderno']}_sku{$item['sku']}_each_{$item['qtyordered']}_location_{$item['location']}";
-                    if(empty($orderDetails_map[$key]))$orderDetails_map[$key]=[];
+                    if(empty($map[$key]))$map[$key]=[];
                     $map[$key][] = [
                         'code' => $item['orderno'],
                         'sku' => $item['sku'],
@@ -71,35 +71,18 @@ Class OrderCommodityService
             if(count($order_nos)==0)return $map;
             $orders = Order::query()->whereIn('code',$order_nos)->get();
             $orders->each(function($item)use(&$map,&$order_id_map){
-                $map[$item['code']] = [
-                    'id'=>  $item['id'],
-                    'owner_id' =>  $item['owner_id']
-                ];;
-                $order_id_map[$item['id']] = [
-                    'code'=>  $item['code'],
-                    'owner_id' =>  $item['owner_id']
-                ];
+                $map[$item['code']] = ['id'=>  $item['id'], 'owner_id' =>  $item['owner_id']];
+                $order_id_map[$item['id']] = ['code'=>  $item['code'], 'owner_id' =>  $item['owner_id']];
             });
             return $map;
         })();
-        $order_commodities_maps = (function()use($order_nos,$owner_code_maps,&$owners_id_maps,$orders_map,&$order_id_map){
-            $orderCommodities = OrderCommodity::query()->with('commodity','order')->whereHas('order',function($query)use($order_nos){
-                $query->whereIn('code',$order_nos);
-            })->get();
-            $map = [];
-            if(count($orderCommodities)==0)return $map;
-            foreach ($orderCommodities as $commodity) {
-                $order = $order_id_map[$commodity['order_id']];
-                $owner_code = $owners_id_maps[$order['owner_id']];
-                $key = "owner_code_{$owner_code}_sku_{$commodity['sku']}";
-                $map[$key] = $commodity;
-            }
-            return $map;
-        })();
-        $orderCommodities_map = $this->regroupOrderCommodities($order_commodities_maps);
+        $orderCommodities = OrderCommodity::query()->with('commodity','order')->whereHas('order',function($query)use($order_nos){
+            $query->whereIn('code',$order_nos);
+        })->get();
+
+        $orderCommodities_map = $this->regroupOrderCommodities($orderCommodities);              // 重组orderCommodities
         $inner_params = $this->filterInnerParams($orderDetails_map,$orderCommodities_map);
         $del_ids = $this->filterDeleteParams($orderDetails_map,$orderCommodities_map);
-
         if(count($inner_params)>0){
             $inner_arr = array_chunk($inner_params,4000);
             foreach ($inner_arr as $item) {
@@ -118,9 +101,9 @@ Class OrderCommodityService
         $map = [];
         if(count($orderCommodities)==0)return $map;
         foreach ($orderCommodities as $orderCommodity) {
-            $key = "orderno_{$orderCommodity['order']['orderno']}_sku{$orderCommodity['commodity']['sku']}_each_{$orderCommodity['amount']}_location_{$orderCommodity['location']}";
-            if(empty($map[$key]))continue;
-            $map[$key] = [
+            $key = "orderno_{$orderCommodity['order']['code']}_sku{$orderCommodity['commodity']['sku']}_each_{$orderCommodity['amount']}_location_{$orderCommodity['location']}";
+            if(empty($map[$key]))$map[$key] =[];
+            $map[$key][] = [
                 'id' =>$orderCommodity['id'],
                 'code' => $orderCommodity['order']['orderno'],
                 'sku' => $orderCommodity['commodity']['sku'],
@@ -157,15 +140,18 @@ Class OrderCommodityService
         $del_ids = [];
         if(count($orderDetails_map) == 0)return $del_ids;
         foreach ($orderCommodities_map as $key=>$map) {
-            if(count($map)==count($orderDetails_map[$key]))continue;
             if(empty($orderDetails_map[$key])){
                 foreach ($map as &$item) {
                     $del_ids[] = $item['id'];
                 }
             }elseif(count($map)>count($orderDetails_map[$key])){
-                foreach ($map as &$obj) {
-                    if(count($orderDetails_map[$key]) == 0)$del_ids[] = array_shift($orderCommodities_map[$map])['id'];
-                    else array_shift($orderDetails_map[$key]);
+                foreach ($map as $key1=>&$obj) {
+                    if(count($orderDetails_map[$key]) == 0){
+                        $del_ids [] = $obj['id'];
+                        unset($map[$key1]);
+                    } else{
+                        array_shift($orderDetails_map[$key]);
+                    }
                 }
             }
         }
@@ -174,8 +160,8 @@ Class OrderCommodityService
 
     private function createByInnerParams(&$inner_params,&$orders_map,&$commodities_maps,&$owner_id_maps)
     {
-      if(count($inner_params) == 0)return;
         $created_params = [];
+        if(count($inner_params) == 0)return $created_params;
         $data = Carbon::now();
         foreach ($inner_params as &$item) {
             $order = $orders_map[$item['code']];
@@ -199,7 +185,7 @@ Class OrderCommodityService
     {
         if(count($orderCommodities) == 0)return true;
         try {
-            $bool =  OrderCommodity::query()->where('id', data_get($orderCommodities, '*.id'))->delete();
+            $bool =  OrderCommodity::destroy(data_get($orderCommodities, '*.id'));
             if($bool)app('LogService')->log(__METHOD__,__FUNCTION__,'批量删除 OrderCommodities'.' || '.count($orderCommodities).' || '.json_encode($orderCommodities));
             else app('LogService')->log(__METHOD__,__FUNCTION__,'批量删除 OrderCommodities FAULT'.' || '.count($orderCommodities).' || '.json_encode($orderCommodities).' || ');
             return $bool;