Browse Source

同步商品分批处理,增加sku条件

Zhouzhendong 5 years ago
parent
commit
ba98b0bcf6

+ 34 - 13
app/Http/Controllers/CommodityController.php

@@ -7,6 +7,7 @@ use App\Imports\CommodityImport;
 use App\Services\CommodityBarcodeService;
 use App\Services\CommodityService;
 use App\Services\LogService;
+use App\Services\OracleBasSkuService;
 use Exception;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Http\Request;
@@ -176,12 +177,28 @@ class CommodityController extends Controller
     }
 
 
-    public function syncOwnerCommodities($owner_id,$owner_code){
+    public function syncOwnerCommodities($owner_id,$owner_code,$sku = null){
+        ini_set('max_execution_time', '0');
+        $params = ['customerid' => $owner_code];
+        if ($sku) $params['sku'] = $sku;
+
+        /** @var OracleBasSkuService $oracleBasSkuService */
+        $oracleBasSkuService = app('oracleBasSkuService');
+        $amount = 1000;
+        $sum = $oracleBasSkuService->count($params);
+        $number = ceil($sum/$amount);
+        for ($i = 0;$i<$number; $i++){
+            $wmsCommodities = $oracleBasSkuService->getPiece($params,($i*$amount),$amount);
+            if (!$wmsCommodities)continue;
+            $this->execute($owner_id,$wmsCommodities);
+        }
+    }
+
+    private function execute($owner_id,array $wmsCommodities){
+        if (count($wmsCommodities) < 1)return;
         $today = date('Y-m-d H:i:s');
-        $codeColumn = ['alternate_sku1','alternate_sku2'];
         $map = [];
         $skus = [];
-        $wmsCommodities = app('oracleBasSkuService')->getOwnerCommodities(['code' => $owner_code]);
         foreach ($wmsCommodities as $index => $wmsCommodity){
             $map[$wmsCommodity->sku] = $index;
             $skus[] = $wmsCommodity->sku;
@@ -221,12 +238,15 @@ class CommodityController extends Controller
                     'volumn' => $wms->cube
                 ];
             }
-            foreach ($codeColumn as $column){
-                if ($wms[$column]){
-                    $wmsCode = rtrim($wms[$column],"*");
-                    $barcodeMap[$wmsCode] = $commodity->id;
-                    $barcodes[] = $wmsCode;
-                }
+            if ($wms->alternate_sku1){
+                $wmsCode = rtrim($wms->alternate_sku1,"*");
+                $barcodeMap[$wmsCode] = $commodity->id;
+                $barcodes[] = $wmsCode;
+            }
+            if ($wms->alternate_sku2){
+                $wmsCode = rtrim($wms->alternate_sku2,"*");
+                $barcodeMap[$wmsCode] = $commodity->id;
+                $barcodes[] = $wmsCode;
             }
             $commoditiesId[] = $commodity->id;
             unset($wmsCommodities[$map[$commodity->sku]]);
@@ -278,10 +298,11 @@ class CommodityController extends Controller
                 "created_at" => $today,
             ];
             $barcodeMap[$wms->sku] = [];
-            foreach ($codeColumn as $column){
-                if ($wms[$column]){
-                    $barcodeMap[$wms->sku][] = rtrim($wms[$column],"*");
-                }
+            if ($wms->alternate_sku1){
+                $barcodeMap[$wms->sku][] = rtrim($wms->alternate_sku1,"*");
+            }
+            if ($wms->alternate_sku2){
+                $barcodeMap[$wms->sku][] = rtrim($wms->alternate_sku2,"*");
             }
             $skus[] = $wms->sku;
             unset($wmsCommodities[$index]);

+ 5 - 1
app/Http/Controllers/StoreCheckingReceiveController.php

@@ -53,7 +53,11 @@ class StoreCheckingReceiveController extends Controller
 
         if ($storeCheckingReceive->owner ?? false){
             $commodityController = new CommodityController();
-            $commodityController->syncOwnerCommodities($storeCheckingReceive->owner->id, $storeCheckingReceive->owner->code);
+            $sku = [];
+            foreach ($storeCheckingReceive->storeCheckingReceiveItems as $item){
+                $sku[] = $item->commodity->sku;
+            }
+            $commodityController->syncOwnerCommodities($storeCheckingReceive->owner->id, $storeCheckingReceive->owner->code, $sku);
         }
 
         return view('store.checkingReceive.show',compact('storeCheckingReceive','is_show'));

+ 4 - 3
app/Http/Controllers/TestController.php

@@ -390,9 +390,10 @@ class TestController extends Controller
     }
 
     public function test2(){
-        $skus = ["a"=>1,"b"=>2,"c"=>3];
-        $skuArr = array_keys($skus);
-        dd($skuArr);
+        $wmsCommodities = app('oracleBasSkuService')->getPiece([],0,5000);
+        dd(count($wmsCommodities));
+        dd(json_encode($wmsCommodities,JSON_UNESCAPED_UNICODE));
+        //json_decode(json_encode($wmsCommodities,JSON_UNESCAPED_UNICODE),true);
     }
 
     /*1*/

+ 34 - 7
app/Services/OracleBasSkuService.php

@@ -3,18 +3,45 @@
 namespace App\Services; 
 
 use App\OracleBasSKU;
+use Illuminate\Support\Facades\DB;
 
 Class OracleBasSkuService
 { 
-    public function getOwnerCommodities(array $params){
+    public function get(array $params){
+        $query = $this->query($params);
+        return $query->get();
+    }
+
+    public function count(array $params){
+        $query = $this->query($params);
+        return $query->count();
+    }
+
+    private function query(array $params){
         $query = OracleBasSKU::query();
-        if ($params['code'] ?? false){
-            if (!is_array($params['code'])){
-                $params['code'] = [$params['code']];
-            }
-            $query->whereIn('customerid',$params['code']);
+        foreach ($params as $column => $value){
+            if (is_array($value))$query->whereIn($column,$value);
+            else $query->where($column,$value);
         }
-        return $query->get();
+        return $query;
     }
 
+    public function getPiece(array $params,int $start, int $amount){
+        $sql = "SELECT * FROM (SELECT ROWNUM rn,d.* FROM BAS_SKU d WHERE 1=1";
+        foreach ($params as $column => $value){
+            if (is_array($value)){
+                if (count($value) < 1)return null;
+                $sql .= " AND ".$column." IN (";
+                foreach ($value as $i => $v){
+                    if ($i != 0)$sql .= ",";
+                    $sql .= "'".$v."'";
+                }
+                $sql .= ")";
+                continue;
+            }
+            $sql .= " AND ".$column." = '".$value."'";
+        }
+        $sql .= " ORDER BY addtime)WHERE rn>".$start." AND rn <= ".($start+$amount);
+        return DB::connection('oracle')->select(DB::raw($sql));
+    }
 }