فهرست منبع

修改 部分wherein

ajun 4 سال پیش
والد
کامیت
b1b6967a56
3فایلهای تغییر یافته به همراه100 افزوده شده و 49 حذف شده
  1. 18 22
      app/Http/Controllers/TestController.php
  2. 46 12
      app/Services/OrderPackageCommoditiesService.php
  3. 36 15
      app/Services/OrderPackageService.php

+ 18 - 22
app/Http/Controllers/TestController.php

@@ -58,6 +58,7 @@ use App\Services\CacheShelfService;
 use App\Services\ForeignHaiRoboticsService;
 use App\Services\NotificationService;
 use App\Services\OracleDOCOrderHeaderService;
+use App\Services\OrderPackageCommoditiesService;
 use App\Services\OrderPackageReceivedSyncService;
 use App\Services\OrderPackageService;
 use App\Services\OrderService;
@@ -583,46 +584,40 @@ sql;
 
     public function syncOrders()
     {
-        $last_start_key = config('sync.order_sync.cache_prefix.last_start_at');
         $last_end_key = config('sync.order_sync.cache_prefix.last_end_at');
+        $renewal_key        = config('sync.order_sync.cache_prefix.updated_at');
+        $dates = [];
         ini_set('max_execution_time',2500);
         ini_set('memory_limit','1526M');
         $service = new OracleDOCOrderHeaderService();
         $orderService = new OrderService();
-        $start_data = Carbon::make('2021-10-12 06:23:37');
+        $start_data = Carbon::make('2021-10-12 19:37:02');
         for ($i = 0;$i < 7;$i++){
-            $last_start_data=  Carbon::now();
+            $dates[] = $start_data;
             $end_data = Carbon::parse($start_data)->addHours(1);
-            $editHeaders =  $service->getQuery()->where('DOC_Order_Header.EditTime','>=',$start_data)
-                ->where('DOC_Order_Header.EditTime',"<=",$end_data)
-                ->orderByDesc('DOC_Order_Header.EditTime')
+            $editHeaders =  $service->getQuery()->where('DOC_Order_Header.edittime','>=',$start_data)
+                ->where('DOC_Order_Header.edittime',"<=",$end_data)
+                ->orderByDesc('DOC_Order_Header.edittime')
                 ->get();
-            $editHeaderArray = $editHeaders->chunk(200);
-            foreach ($editHeaderArray as &$array){
-                $orderService->syncOrder($array);
+            if(count($editHeaders) == 0){
+                $start_data = $end_data;
+                continue;
             }
-            $addHeaders =  $service->getQuery()->where('DOC_Order_Header.addTime','>=',$start_data)
-                ->where('DOC_Order_Header.addTime',"<=",$end_data)
-                ->orderByDesc('DOC_Order_Header.addTime')
-                ->get();
-
-            $addHeadersArray = $addHeaders->chunk(200);
-            foreach ($addHeadersArray as &$array){
+            $editHeaderArray = $editHeaders->chunk(500);
+            foreach ($editHeaderArray as &$array){
+                $array  = $service->loadMissing($array);
                 $orderService->syncOrder($array);
             }
-
             $start_data = $end_data;
             $last_end_data  = Carbon::now();
-
-            Cache::put($last_start_key,$last_start_data);
-            ValueStore::query()->where('name','order_last_created_sync_at')->update(['value' => $addHeaders->first()->time]);
-            ValueStore::query()->where('name','last_order_sync_task_start_at')->update(['value' => $last_start_data]);
             Cache::put($last_end_key,$last_end_data);
+            Cache::put($renewal_key,$end_data);
             ValueStore::query()->where('name','order_last_updated_sync_at')->update(['value' => $editHeaders->first()->edittime]);
             ValueStore::query()->where('name','last_order_sync_task_end_at')->update(['value' => $last_end_data]);
             unset($editHeaderArray,$editHeaders);
             unset($addHeadersArray,$addHeaders);
         }
+        dd("同步完成",$dates);
     }
 
     public function syncOrder()
@@ -631,7 +626,8 @@ sql;
         $service = new OracleDOCOrderHeaderService();
         $orderService = new OrderService();
         $orderHeaders = $service->getQuery()->where('DOC_Order_Header.WaveNo',$code)->get();
-        $orderService->syncOrder($orderHeaders);
+        $orderService->syncOrderByWMSOrderHeaders($orderHeaders);
+        app("OrderCommodityService")->syncOrderCommodity($orderHeaders);
         dd('同步完成');
     }
 }

+ 46 - 12
app/Services/OrderPackageCommoditiesService.php

@@ -47,13 +47,14 @@ class OrderPackageCommoditiesService
 
     public function getByWmsOrder($orderHeaders){
         $order_no =  data_get($orderHeaders,'*.orderno');
-        return OrderPackageCommodities::query()
-            ->with('package.order','commodity')
-            ->whereIn('order_package_id',function($query) use ($order_no){
-                $query->from('order_packages')->select('id')->whereIn('order_id',function($query)use($order_no){
-                    $query->from('orders')->select('id')->whereIn('code',$order_no);
-                });
-            })->get();
+        return $this->getByOrderNos($order_no);
+//        return OrderPackageCommodities::query()
+//            ->with('package.order','commodity')
+//            ->whereIn('order_package_id',function($query) use ($order_no){
+//                $query->from('order_packages')->select('id')->whereIn('order_id',function($query)use($order_no){
+//                    $query->from('orders')->select('id')->whereIn('code',$order_no);
+//                });
+//            })->get();
     }
 
     public function batchUpdateItself($column, array $params)
@@ -63,10 +64,41 @@ class OrderPackageCommoditiesService
 
     public function getByOrderNos($orderNos)
     {
-        $orderQuery = Order::query()->select('id')->whereIn('code',$orderNos);
-        $orderPackageIds = OrderPackage::query()->select('id')->whereIn('order_id',$orderQuery)->get()->toArray();
-        return OrderPackageCommodities::query()->with('package.order','commodity')
-            ->whereIn('order_package_id',$orderPackageIds)->get();
+        $orderIds = [];
+        $order_chunks = array_chunk($orderNos,100);
+        foreach ($order_chunks as $order_chunk) {
+            $ids = Order::query()->select('id')->whereIn('code',$order_chunk)->get()->map(function ($order){
+                return $order->id;
+            })->toArray();
+            $orderIds = array_merge($orderIds,$ids);
+        }
+        $orderPackageIds = null;
+        $orderId_chunks = array_chunk($orderIds,150);
+        foreach ($orderId_chunks as $orderId_chunk){
+            $items= OrderPackage::query()->select('id')->whereIn('order_id',$orderId_chunk)->get()->map(function ($orderPackage){
+                return $orderPackage->id;
+            })->toArray();
+            if ($orderPackageIds == null){
+                $orderPackageIds =$items;
+            }else{
+                $orderPackageIds =  array_merge($orderPackageIds,$items);
+            }
+        }
+        $order_package_commodities = null;
+        $orderPackageId_chunks = array_chunk($orderPackageIds,150);
+        foreach ($orderPackageId_chunks as $orderPackageId_chunk){
+            $items = OrderPackageCommodities::query()->with('package.order','commodity')->whereIn('order_package_id',$orderPackageId_chunk)->get();
+            if ($order_package_commodities == null){
+                $order_package_commodities=  $items;
+            }else{
+                $order_package_commodities = $order_package_commodities->concat($items);
+            }
+        }
+        return $order_package_commodities;
+//        $orderQuery = Order::query()->select('id')->whereIn('code',$orderNos);
+//        $orderPackageIds = OrderPackage::query()->select('id')->whereIn('order_id',$orderQuery)->get()->toArray();
+//        return OrderPackageCommodities::query()->with('package.order','commodity')
+//            ->whereIn('order_package_id',$orderPackageIds)->get();
     }
 
     /**
@@ -462,6 +494,7 @@ class OrderPackageCommoditiesService
         $inner_params = $this->filterInnerParams($orderAllocationDetails,$orderCommodities);                                            // 创建
 
         $delete_params = $this->filterDeleteParams($orderAllocationDetails,$orderCommodities);                                           // 删除
+
         unset($orderAllocationDetails,$orderCommodities);
         if(count($inner_params)>0)
             $this->createOrderCommodities($inner_params,$package_map,$commodities,$owner_id_map);  // 创建 3s
@@ -480,6 +513,7 @@ class OrderPackageCommoditiesService
     public function regroupOrderCommodities(&$orderCommodities):array
     {
         $params = [];
+        if ($orderCommodities == null || count($orderCommodities) == 0) return $params;
         $orderCommodities->each(function($orderCommodity)use(&$params){
             $order_no = $orderCommodity->package->order->code ?? '';
             $logistic_number = $orderCommodity->package->logistic_number ?? '';
@@ -624,7 +658,7 @@ class OrderPackageCommoditiesService
             ];
         }
         if(count($create_params)>0){
-            $inner_array = array_chunk($create_params,5000);
+            $inner_array = array_chunk($create_params,1000);
             foreach ($inner_array as $item) {
                 try {
                     $bool = $this->insert($item);

+ 36 - 15
app/Services/OrderPackageService.php

@@ -76,10 +76,11 @@ class OrderPackageService
     public function getByWmsOrders($orderHeaders)
     {
         $order_nos = data_get($orderHeaders, '*.orderno');
-        return OrderPackage::query()->with('order')
-            ->whereIn('order_id', function ($query) use ($order_nos) {
-                $query->from('orders')->select('id')->whereIn('code', $order_nos);
-            })->get();
+        return $this->getByOrderNos($order_nos);
+//        return OrderPackage::query()->with('order')
+//            ->whereIn('order_id', function ($query) use ($order_nos) {
+//                $query->from('orders')->select('id')->whereIn('code', $order_nos);
+//            })->get();
     }
 
     public function create(array $params)
@@ -99,10 +100,29 @@ class OrderPackageService
 
     public function getByOrderNos($orderNos)
     {
-        return OrderPackage::query()->with('order.logistic')
-            ->whereIn('order_id', function ($query) use ($orderNos) {
-                $query->from('orders')->select('id')->whereIn('code', $orderNos);
-            })->get();
+        $orderIds = [];
+        $order_chunks = array_chunk($orderNos,150);
+        foreach ($order_chunks as $order_chunk) {
+            $ids = Order::query()->select('id')->whereIn('code',$order_chunk)->get()->map(function($order){
+                return $order->id;
+            })->toArray();
+            $orderIds = array_merge($orderIds,$ids);
+        }
+        $orderPackages = null;
+        $orderId_chunks = array_chunk($orderIds,150);
+        foreach ($orderId_chunks as $orderId_chunk){
+            $items = OrderPackage::query()->whereIn('order_id',$orderId_chunk)->get();
+            if ($orderPackages == null){
+                $orderPackages = $items;
+            }else{
+                $orderPackages = $orderPackages->concat($items);
+            }
+        }
+        return $orderPackages;
+//        return OrderPackage::query()->with('order.logistic')
+//            ->whereIn('order_id', function ($query) use ($orderNos) {
+//                $query->from('orders')->select('id')->whereIn('code', $orderNos);
+//            })->get();
     }
 
     public function update($orderClientNo, $logisticNumber)
@@ -360,19 +380,20 @@ class OrderPackageService
             return $orderHeader->sostatus == '90';
         });
 
-        $orderPackages = OrderPackage::query()->whereIn('order_id', function ($query) use ($cancelOrder) {
-            /** @var Builder $query */
-            $query->from((new Order())->getTable())->selectRaw('id')->whereIn('code', data_get($cancelOrder, '*.orderno'));
-        })->get();
+        $orderPackages = $this->getByWmsOrders($cancelOrder);
+//        $orderPackages = OrderPackage::query()->whereIn('order_id', function ($query) use ($cancelOrder) {
+//            /** @var Builder $query */
+//            $query->from((new Order())->getTable())->selectRaw('id')->whereIn('code', data_get($cancelOrder, '*.orderno'));
+//        })->get();
 
-        if ($orderPackages->count() == 0) return;
+        if ($orderPackages == null ||  count($orderPackages) == 0) return;
 
         $orderPackage_list = $orderPackages->chunk(200);
         foreach ($orderPackage_list as $orderPackageSet) {
             OrderPackage::query()->whereIn('id', data_get($orderPackageSet, '*.id'))->delete();
-            $items = OrderTracking::query()->whereIn('order_package_commodity_id', function ($query) use ($orderPackages) {
+            $items = OrderTracking::query()->whereIn('order_package_commodity_id', function ($query) use ($orderPackageSet) {
                 /** @var Builder $query */
-                $query->from((new OrderPackageCommodities)->getTable())->selectRaw('id')->whereIn('order_package_id', data_get($orderPackages, '*.id'));
+                $query->from((new OrderPackageCommodities)->getTable())->selectRaw('id')->whereIn('order_package_id', data_get($orderPackageSet, '*.id'));
             })->get();
             $this->orderTrackingService->deleteOrderTracings($items);
         }