Pārlūkot izejas kodu

CommodityService getCommoditiesByMap方法修改

ajun 5 gadi atpakaļ
vecāks
revīzija
104eedbef2
1 mainītis faili ar 28 papildinājumiem un 8 dzēšanām
  1. 28 8
      app/Services/CommodityService.php

+ 28 - 8
app/Services/CommodityService.php

@@ -343,8 +343,23 @@ Class CommodityService
 
     public function getCommoditiesByMap($map)
     {
-        /** @var OwnerService $ownerService */
+        /**
+         * @var OwnerService $ownerService
+         * @var OracleBasSkuService $oracleBasSkuService
+         */
         $ownerService = app('OwnerService');
+        $oracleBasSkuService = app('OracleBasSkuService');
+
+        $commodities_map = (function()use($map){
+            $commodities_map = [];
+            if(count($map)==0)return $commodities_map;
+            Commodity::query()->with("owner")->whereIn('sku',array_unique(data_get($map,'*.sku')))->whereHas('owner',function($query)use($map){
+                $query->whereIn('code',array_unique(data_get($map,'*.owner_code')));
+            })->get()->each(function($commodity)use(&$commodities_map){
+                $commodities_map[json_encode(['owner_code' => $commodity['owner']['code'], 'sku' => $commodity['sku']])] = $commodity;
+            });
+            return $commodities_map;
+        })();
 
         $owner_codes = (function()use($map){
             $owner_codes = [];
@@ -367,27 +382,32 @@ Class CommodityService
         $collect = collect();
         if(count($map) == 0) return $collect;
         $unexists = [];$sku = [];$owner_code = [];
+
         foreach ($map as $item) {
             $owner = Cache::get("owner_code_{$item['owner_code']}_sku_{$item['sku']}");
             if($owner){
                 $collect->push($owner);
                 continue;
             }
-            $items = [
-                'owner_code' => $item['owner_code'],
-                'sku' => $item['sku']
-            ];
-            $unexists[json_encode($items)] = true;
+            $key = json_encode( ['owner_code' => $item['owner_code'], 'sku' => $item['sku']]);
+            if(!empty($commodities_map[json_encode($key)])){
+                 $commodities_map[$key];
+                continue;
+            }
+            $unexists[json_encode($key)] = true;
             $sku[] = $item['sku'];
             $owner_code[] = $item['owner_code'];
         }
+
         if(count($unexists) == 0)return $collect;
-        $BasSKUs = OracleBasSKU::query()->whereIn('SKU',$sku)->whereIn('CustomerID',$owner_code)->get();
-        $BasSKUs = $BasSKUs->filter(function($bas_sku)use($unexists){
+        $BasSKUs = $oracleBasSkuService->get( ['SKU'=>$sku,'CustomerID'=>$owner_code]);
+        $BasSKUs = $BasSKUs->filter(function($bas_sku)use($unexists,$commodities_map){
             $arr = [
                 'owner_code' => $bas_sku['customerid'],
                 'sku' => $bas_sku['sku']
             ];
+            $key = json_encode($arr);
+            if(!empty($commodities_map($key)))return false;
             return $unexists[json_encode($arr)] ?? false;
         });
         $inner_params = (function()use($BasSKUs,$owner_map){