haozi 5 anni fa
parent
commit
8a16ec5cd2

+ 15 - 0
app/Http/Controllers/TestController.php

@@ -1257,4 +1257,19 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
         }
         dd($requests);
     }
+    public function testGetCommodity(){
+        /**
+         * @var CommodityService $commodityService
+         */
+//        $commodityService=app(CommodityService::class);
+//        dump('start'.(string)Carbon::now());
+//        $commodities=$commodityService->get_(['3','2']);
+//        dump($commodities);
+//        dump('end'.(string)Carbon::now());
+
+        $commodities=Commodity::query()->with(['barcodes','owner'])->where('owner_id',1)->paginate(10);
+        //dd($commodities);
+        dump($commodities->items());
+        dump($commodities->currentPage());
+    }
 }

+ 88 - 121
app/Services/CommodityService.php

@@ -15,17 +15,21 @@ use Carbon\Carbon;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Database\Eloquent\Collection;
 use Illuminate\Support\Facades\Cache;
+use function Symfony\Component\String\s;
 
 Class CommodityService
 {
     /** @var CacheService $cacheService */
     private $cacheService;
-    function __construct(){
-        $this->cacheService=app('CacheService');
+
+    function __construct()
+    {
+        $this->cacheService = app('CacheService');
     }
 
-    public function firstOrCreate($param,$column = null):Commodity{
-        if ($column) return Commodity::query()->firstOrCreate($param,$column);
+    public function firstOrCreate($param, $column = null): Commodity
+    {
+        if ($column) return Commodity::query()->firstOrCreate($param, $column);
         return Commodity::query()->firstOrCreate($param);
     }
 
@@ -368,48 +372,50 @@ Class CommodityService
         $ownerService = app('OwnerService');
         $oracleBasSkuService = app('OracleBasSkuService');
 
-        $commodities_map = (function()use($map){
+        $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){
+            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 = (function () use ($map) {
             $owner_codes = [];
-            if(count($map) == 0)return $owner_codes;
+            if (count($map) == 0) return $owner_codes;
             foreach ($map as $item) {
                 $owner_codes[$item['owner_code']] = $item['owner_code'];
             }
             return $owner_codes;
         })();
 
-        $owner_map = (function()use($ownerService,$owner_codes){
+        $owner_map = (function () use ($ownerService, $owner_codes) {
             $owners = $ownerService->getOwnerByCodes($owner_codes);
             $map = [];
-            $owners->each(function ($owner)use(&$map){
+            $owners->each(function ($owner) use (&$map) {
                 $map[$owner['code']] = $owner['id'];
             });
             return $map;
         })();
 
         $collect = collect();
-        if(count($map) == 0) return $collect;
-        $unexists = [];$sku = [];$owner_code = [];
+        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){
+            if ($owner) {
                 $collect->push($owner);
                 continue;
             }
-            $key = json_encode( ['owner_code' => $item['owner_code'], 'sku' => $item['sku']]);
-            if(!empty($commodities_map[json_encode($key)])){
-                 $commodities_map[$key];
+            $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;
@@ -417,26 +423,26 @@ Class CommodityService
             $owner_code[] = $item['owner_code'];
         }
 
-        if(count($unexists) == 0)return $collect;
-        $BasSKUs = $oracleBasSkuService->get( ['SKU'=>$sku,'CustomerID'=>$owner_code]);
-        $BasSKUs = $BasSKUs->filter(function($bas_sku)use($unexists,$commodities_map){
+        if (count($unexists) == 0) return $collect;
+        $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;
+            if (!empty($commodities_map($key))) return false;
             return $unexists[json_encode($arr)] ?? false;
         });
-        $inner_params = (function()use($BasSKUs,$owner_map){
+        $inner_params = (function () use ($BasSKUs, $owner_map) {
             $map = [];
             $date = Carbon::now();
-            $BasSKUs->each(function($basSku)use(&$map,$owner_map,$date){
+            $BasSKUs->each(function ($basSku) use (&$map, $owner_map, $date) {
                 $map[] = [
                     'owner_id' => $owner_map[$basSku['customerid']] ?? '',
                     'sku' => $basSku->sku,
-                    'name' =>$basSku->descr_c,
-                    'length' =>$basSku->skulength,
+                    'name' => $basSku->descr_c,
+                    'length' => $basSku->skulength,
                     'width' => $basSku->skuwidth,
                     'height' => $basSku->skuhigh,
                     'volumn' => $basSku->cube,
@@ -446,71 +452,23 @@ Class CommodityService
             });
             return $map;
         })();
-        if(count($inner_params)==0)return $collect;
-        foreach (array_chunk($inner_params,4000) as $item) {
+        if (count($inner_params) == 0) return $collect;
+        foreach (array_chunk($inner_params, 4000) as $item) {
             try {
                 $bool = Commodity::query()->insert($item);
-                if($bool){
-                    app('LogService')->log(__METHOD__,__FUNCTION__,"批量添加 Commodity Success ".count($inner_params).' || '.json_encode($inner_params));
-                    $commodities = Commodity::query()->with('owner')->whereIn('owner_id',data_get($item,'*.owner_id'))->whereIn('sku',data_get($item,'*.sku'))->get();
+                if ($bool) {
+                    app('LogService')->log(__METHOD__, __FUNCTION__, "批量添加 Commodity Success " . count($inner_params) . ' || ' . json_encode($inner_params));
+                    $commodities = Commodity::query()->with('owner')->whereIn('owner_id', data_get($item, '*.owner_id'))->whereIn('sku', data_get($item, '*.sku'))->get();
                     $this->pushToCache($commodities);
                     $collect = $collect->concat($commodities);
-                }
-                else app('LogService')->log(__METHOD__,__FUNCTION__,"批量添加 Commodity FAILED ".' || '.json_encode($inner_params));
+                } else app('LogService')->log(__METHOD__, __FUNCTION__, "批量添加 Commodity FAILED " . ' || ' . json_encode($inner_params));
             } catch (\Exception $e) {
-                app('LogService')->log(__METHOD__,__FUNCTION__,"批量添加 Commodity ERROR ".' || '.json_encode($inner_params).' || '.json_encode($e->getMessage()).' || '.json_encode($e->getTraceAsString()));
+                app('LogService')->log(__METHOD__, __FUNCTION__, "批量添加 Commodity ERROR " . ' || ' . json_encode($inner_params) . ' || ' . json_encode($e->getMessage()) . ' || ' . json_encode($e->getTraceAsString()));
             }
         }
         return $collect;
     }
 
-    private function pushToCache($commodities)
-    {
-        if (count($commodities) < 1) return null;
-        foreach ($commodities as $commodity) {
-            $commodity_key = "owner_code_{$commodity['owner']['code']}_sku_{$commodity['sku']}";
-            Cache::remember($commodity_key, config('cache.expirations.forever'), function () use ($commodity) {
-                return $commodity;
-            });
-        }
-    }
-
-
-    public function pushCommodityToCache()
-    {
-        $amount = 1000;
-        $commodity = Commodity::query()->orderByDesc('id')->first();
-        $sum = $commodity->id;
-        $number = ceil($sum / $amount);
-        for ($i = 0; $i < $number; $i++) {
-            if ($i < 41) continue;
-            $commodities = $this->getPiece(($i * $amount), $amount);
-            if (count($commodities) < 1) continue;
-            $this->pushToCache($commodities);
-        }
-    }
-
-    private function getPiece(int $start, int $amount)
-    {
-        $commodities = Commodity::query()->with(['owner', 'barcodes'])
-            ->where('id', '>=', $start)
-            ->where('id', '<', ($start + $amount))
-            ->get();
-        return $commodities;
-    }
-
-    private function pushToCache($commodities)
-    {
-        if (count($commodities) < 1) return null;
-        foreach ($commodities as $commodity) {
-            $commodity_key = "owner_code_{$commodity['owner']['code']}_sku_{$commodity['sku']}";
-            Cache::remember($commodity_key, config('cache.expirations.forever'), function () use ($commodity) {
-                return $commodity;
-            });
-        }
-    }
-
-
     public function syncCommodityCreated()
     {
         $created_at = config('sync.commodity_sync.created_at');
@@ -525,7 +483,6 @@ Class CommodityService
         $last_records = $basSkus->where('addtime', $last_time);
         if (!$basSkus) return;
         $addBasSkus = $this->getLastRecordsByRedis($create_set, $create_key, $basSkus);
-        //if (count($addBasSkus) > 0) $addBasSkus = $this->filterByCommodityCache($addBasSkus); //从缓存中过滤
         if (count($addBasSkus) > 0) {
             $this->syncCreateCommodity($addBasSkus);
             $this->deleteCacheKey($create_set, $create_keys);
@@ -548,7 +505,6 @@ Class CommodityService
         $last_records = $basSkus->where('edittime', $last_time);
         if (!$basSkus) return;
         $addBasSkus = $this->getLastRecordsByRedis($update_set, $update_key, $basSkus);
-        //if (count($addBasSkus) > 0) $addBasSkus = $this->filterByCommodityCache($addBasSkus); //从缓存中过滤
         if (count($addBasSkus) > 0) {
             $this->syncUpdateCommodity($addBasSkus);
             $this->deleteCacheKey($update_set, $update_keys);
@@ -557,23 +513,19 @@ Class CommodityService
         }
     }
 
-    // TODO
     public function syncCreateCommodity($addBasSkus)
     {
         if (count($addBasSkus) < 1) return null;
         $insert_params = $this->getParamsByBasSkus($addBasSkus);
         if (!$insert_params) return;
         $this->insertCommodities($insert_params);
-        /**
-         * @var CommodityBarcodeService $commodityBarcodeService
-         */
+        /** @var CommodityBarcodeService $commodityBarcodeService */
         $commodityBarcodeService = app(CommodityBarcodeService::class);
         $commodityBarcodeService->createBarcodeByWms($addBasSkus);
     }
 
     public function insertCommodities($insert_params)
     {
-
         foreach (array_chunk($insert_params, 1000) as $item) {
             try {
                 $bool = Commodity::query()->insert($item);
@@ -588,7 +540,6 @@ Class CommodityService
         }
     }
 
-    // TODO
     public function getParamsByBasSkus($addBasSkus)
     {
         $owner_sku_map = [];
@@ -677,7 +628,6 @@ Class CommodityService
         return $inner_params;
     }
 
-    // TODO
     public function syncUpdateCommodity($addBasSkus)
     {
         $owner_sku_map = [];
@@ -777,13 +727,22 @@ Class CommodityService
         if (count($updateParams) > 0) $this->batchUpdate($updateParams);
         $commodities = Commodity::query()->with('owner')->whereIn('owner_id', data_get($updateParams, '*.owner_id'))->whereIn('sku', data_get($updateParams, '*.sku'))->get();
         $this->pushToCache($commodities);
-        /**
-         * @var CommodityBarcodeService $commodityBarcodeService
-         */
+        /** @var CommodityBarcodeService $commodityBarcodeService */
         $commodityBarcodeService = app(CommodityBarcodeService::class);
         $commodityBarcodeService->updateBarcodeByWms($addBasSkus);
     }
 
+    private function pushToCache($commodities)
+    {
+        if (count($commodities) < 1) return null;
+        foreach ($commodities as $commodity) {
+            $commodity_key = "owner_code_{$commodity['owner']['code']}_sku_{$commodity['sku']}";
+            Cache::remember($commodity_key, config('cache.expirations.forever'), function () use ($commodity) {
+                return $commodity;
+            });
+        }
+    }
+
     public function getAsnLastSyncAt($key, $type)
     {
         $last_time = ValueStore::query()->where('name', $key)->value('value');
@@ -846,37 +805,45 @@ Class CommodityService
         Cache::put($set, true);
     }
 
-    public function filterByCommodityCache($basSkus)
-    {
-        if (count($basSkus) < 1) return null;
-        $addBasSkus = collect();
-        foreach ($basSkus as $basSku) {
-            if (Cache::get("owner_code_{$basSku['customerid']}_sku_{$basSku['sku']}")) continue;
-            $addBasSkus->add($basSku);
-        }
-        return $addBasSkus;
-    }
-
-//    function get_($paginate = 100, $page = 1, $ownerIds, $skus, $barcodes)
-//    {
-        //$paginate小于100,或取余数100不为0,异常 //取余函数fmod()
-//        for (; $page <= $paginate / 100; $page++) {
-//            switch () {
-//                case 只有货主条件:
-//                    sort($ownerIds);
-//                    $md5 = md5(json_encode([$ownerIds, $paginate, $page]));
-//                    return Cache::remember('commodity_' . $md5)
-//            case 有SKU:
-//                $md5 = md5(json_encode([$skus, $paginate, $page]));
+    function update(){
+        //Cache
+        //Commodity
+    }
+    function updateMany(){
+        //Cache
+        //Commodity
+    }
+
+    function get_($ownerIds = null, $skus = null, $barcodes = null,$paginate = 100, $page = 1,$isSyncWms = false)
+    {
+        if ($paginate < 100 || fmod($paginate, 100) != 0) return null; //$paginate小于100,或取余数100不为0,异常 //取余函数fmod()
+        $status = null;
+        if ($ownerIds && !$skus && !$barcodes) $status = '只有货主条件';
+        if ($skus) $status = '有SKU';
+        if ($barcodes && !$skus) $status = '有条码没SKU';
+        if (!$status)return null;
+        for (; $page <= $paginate / 100; $page++) {
+            switch ($status) {
+                case $status = '只有货主条件':
+                    sort($ownerIds);
+                    $md5 = md5(json_encode([$ownerIds, $paginate, $page]));
+//                    Cache::get('commodity_ownerId_'.$ownerId);
+                    Cache::put('commodity_ownerIds_');
+                    return Cache::remember('commodity_' . $md5,config('cache.expirations.forever'),function ()use($ownerIds,$paginate,$page){
+                        return Commodity::query()->with('barcodes')->whereIn('owner_id',$ownerIds)->paginate($paginate,'[*]','page',$page);
+                    });
+                case $status = '有SKU':
+                    sort($skus);
+                    $md5 = md5(json_encode([$skus]));
 //                return Cache::remember('commodity_' . $md5, 'time', function () {
 //                    在取出的记录用 $ownerIds和$barcodes筛选
 //                })
-//            case 有条码没SKU:
-//                $md5 = md5(json_encode([$barcodes, $paginate, $page]));
+                case $status = '有条码没SKU':
+                    $md5 = md5(json_encode([$barcodes]));
 //                return Cache::remember('commodity_' . $md5, 'time', function () {
 //                    在取出的记录用 $ownerIds
 //                })
-//            }
-//        }
-//    }
+            }
+        }
+    }
 }

+ 1 - 1
database/migrations/2020_10_27_142647_create_owner_storage_price_model_table.php → database/migrations/2020_10_27_142647_create_owner_storage_price_models_table.php

@@ -4,7 +4,7 @@ use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
 use Illuminate\Support\Facades\Schema;
 
-class CreateOwnerStoragePriceModelTable extends Migration
+class CreateOwnerStoragePriceModelsTable extends Migration
 {
     /**
      * Run the migrations.