Просмотр исходного кода

Merge branch 'Haozi' of ssh://47.103.131.176:10022/var/git/bswas into haozi_test

 Conflicts:
	app/Http/Controllers/TestController.php
	app/Services/CommodityService.php
	app/Services/OrderService.php
	app/Services/OwnerService.php
	app/Services/WarehouseService.php
	config/cache.php
ajun 5 лет назад
Родитель
Сommit
07f05b0ba7
33 измененных файлов с 1448 добавлено и 863 удалено
  1. 0 2
      .gitlab-ci.yml
  2. 50 0
      app/Console/Commands/SyncWmsCommoditiesInformation.php
  3. 4 20
      app/Console/Commands/WasSyncWmsAsnInformation.php
  4. 16 6
      app/Http/Controllers/TestController.php
  5. 1 0
      app/Services/CacheService.php
  6. 277 192
      app/Services/CommodityService.php
  7. 1 1
      app/Services/LogisticService.php
  8. 20 0
      app/Services/OracleBasSkuService.php
  9. 2 0
      app/Services/OracleDocAsnHerderService.php
  10. 359 350
      app/Services/OrderService.php
  11. 2 1
      app/Services/OwnerService.php
  12. 88 70
      app/Services/RejectedBillService.php
  13. 10 7
      app/Services/StoreItemService.php
  14. 210 80
      app/Services/StoreService.php
  15. 5 44
      app/Services/WarehouseService.php
  16. 1 1
      config/cache.php
  17. 24 0
      config/sync.php
  18. 2 2
      package-lock.json
  19. 2 2
      phpunit.xml
  20. 2 2
      tests/Services/RejectedBillService/GetLogisticNumberTest.php
  21. 4 4
      tests/Services/RejectedBillService/GetUpdateCollectTest.php
  22. 13 3
      tests/Services/RejectedBillService/SyncLoadedStatusByAsnHeaderTest.php
  23. 4 1
      tests/Services/StoreService/CreateStoreTest.php
  24. 41 0
      tests/Services/StoreService/GetAsnSyncAtTest.php
  25. 1 1
      tests/Services/StoreService/GetParamsByAsnHeaderTest.php
  26. 1 2
      tests/Services/StoreService/InsertStoreTest.php
  27. 52 0
      tests/Services/StoreService/SetAsnSyncAtTest.php
  28. 91 0
      tests/Services/StoreService/SetLastRecordsByRedisTest.php
  29. 81 0
      tests/Services/StoreService/SyncStoreCreateByWmsTest.php
  30. 82 0
      tests/Services/StoreService/SyncStoreUpdateByWmsTest.php
  31. 0 69
      tests/Services/StoreService/SyncWmsAsnDataTest.php
  32. 2 1
      tests/Services/StoreService/UpdateStoreTest.php
  33. 0 2
      tests/Unit/EchoTest.php

+ 0 - 2
.gitlab-ci.yml

@@ -12,8 +12,6 @@ before_script:
   - sudo bash ci/installEnv.sh
 
 
-
-
 build:
   stage: build
   tags:

+ 50 - 0
app/Console/Commands/SyncWmsCommoditiesInformation.php

@@ -0,0 +1,50 @@
+<?php
+
+namespace App\Console\Commands;
+
+
+use App\Services\CommodityService;
+use Illuminate\Console\Command;
+
+class SyncWmsCommoditiesInformation extends Command
+{
+
+    /**
+     * The name and signature of the console command.
+     *
+     * @var string
+     */
+    protected $signature = 'SyncWmsCommoditiesInformation';
+
+    /**
+     * The console command description.
+     *
+     * @var string
+     */
+    protected $description = '同步WMS的商品信息';
+
+    /**
+     * Create a new command instance.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        parent::__construct();
+    }
+
+    /**
+     * Execute the console command.
+     *
+     * @return int
+     */
+    public function handle()
+    {
+        $this->SyncWmsCommoditiesInformation();
+    }
+
+    public function SyncWmsCommoditiesInformation(){
+        /** @var CommodityService $commodityService */
+        $commodityService  = app(CommodityService::class);
+    }
+}

+ 4 - 20
app/Console/Commands/WasSyncWmsAsnInformation.php

@@ -2,12 +2,9 @@
 
 namespace App\Console\Commands;
 
-use App\Services\LogService;
-use App\Services\OrderTrackingService;
+
 use App\Services\StoreService;
 use Illuminate\Console\Command;
-use Illuminate\Support\Carbon;
-use Illuminate\Support\Facades\Auth;
 
 class WasSyncWmsAsnInformation extends Command
 {
@@ -47,22 +44,9 @@ class WasSyncWmsAsnInformation extends Command
     }
 
     public function WasSyncWmsAsn(){
-
         /** @var StoreService $storeService */
-        $storeService  = app('storeService');
-
-        $dataInterval = intval(data_get(config('sync'), 'asn_sync.interval')) * 60 + 5;
-
-        $startDate = Carbon::now()->subSeconds($dataInterval);
-
-        $syncStartDate = data_get(config('sync'), 'asn_sync.start_at');
-
-        if($syncStartDate ?? false){
-            $syncStartDate = Carbon::parse($syncStartDate);
-            if ($startDate->lt($syncStartDate)) {
-                $startDate = $syncStartDate;
-            }
-        }
-        //$storeService->syncWmsAsnData($startDate);
+        $storeService  = app(StoreService::class);
+        $storeService->storeCreateByWms();
+        $storeService->storeUpdateByWms();
     }
 }

+ 16 - 6
app/Http/Controllers/TestController.php

@@ -31,6 +31,7 @@ use App\ProcessStatistic;
 use App\RejectedBill;
 use App\RejectedBillItem;
 use App\Services\CacheService;
+use App\Services\CommodityService;
 use App\Services\common\BatchUpdateService;
 use App\Services\common\DataHandlerService;
 use App\Services\DocWaveHeaderService;
@@ -1006,11 +1007,6 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
         app(StoreService::class)->insertStore($param);
         var_dump('end',Carbon::now());
     }
-    public  function  testSyncAsn(){
-        $startDate=Carbon::parse('2020-11-12 17:48:00')->subSeconds(65)->format('Y-m-d H:i:s');
-        app(StoreService::class)->syncWmsAsnData($startDate);
-    }
-
     public function changeOrder()
     {
         /**
@@ -1211,5 +1207,19 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
         $tack->handle();
         dump(Carbon::now());
     }
-
+    public  function  testSyncAsn(){
+        /** @var StoreService $storeService */
+        $storeService  = app(StoreService::class);
+        dump('start',Carbon::now());
+        $storeService->storeCreateByWms();
+        $storeService->storeUpdateByWms();
+        dump('end',Carbon::now());
+    }
+    public function testCommodity(){
+        /**
+         * @var CommodityService $commodityService
+         */
+        $commodityService=app(CommodityService::class);
+        $commodityService->pushCommodityToCache();
+    }
 }

+ 1 - 0
app/Services/CacheService.php

@@ -9,6 +9,7 @@ use Illuminate\Support\Facades\Cache;
 class CacheService
 {
     function getOrExecute(String $key, $func, $expiration=null){
+        if(!$expiration) $expiration=config('cache.expirations.default');
         return Cache::remember($key, $expiration, $func);
 //        $results = Cache::get($key);
 //        if(!$results){

+ 277 - 192
app/Services/CommodityService.php

@@ -8,7 +8,7 @@ use App\CommodityBarcode;
 use App\OracleBasSKU;
 use App\Owner;
 use App\Services\common\BatchUpdateService;
-use App\Shop;
+use App\ValueStore;
 use Carbon\Carbon;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Database\Eloquent\Collection;
@@ -16,94 +16,102 @@ use Illuminate\Support\Facades\Cache;
 
 Class CommodityService
 {
-    /** @var CacheService $cacheService */
-    private $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);
     }
-    public function updateOrCreate($param,$column = null){
-        if ($column) return Commodity::query()->updateOrCreate($param,$column);
+
+    public function updateOrCreate($param, $column = null)
+    {
+        if ($column) return Commodity::query()->updateOrCreate($param, $column);
         return Commodity::query()->updateOrCreate($param);
     }
 
-    public function first(array $params, $with = null){
+    public function first(array $params, $with = null)
+    {
         $commodity = Commodity::query();
-        if ($with)$commodity->with($with);
-        foreach ($params as $column => $value){
-            if (!is_array($value))$commodity->where($column,$value);
-            else $commodity->whereIn($column,$value);
+        if ($with) $commodity->with($with);
+        foreach ($params as $column => $value) {
+            if (!is_array($value)) $commodity->where($column, $value);
+            else $commodity->whereIn($column, $value);
         }
         return $commodity->first();
     }
 
-    public function get(array $params){
+    public function get(array $params)
+    {
         $query = Commodity::query()->with('barcodes');
-        if ($params["owner_id"] ?? false){
+        if ($params["owner_id"] ?? false) {
             $query->where("owner_id", $params["owner_id"]);
         }
-        if ($params["sku"] ?? false){
-            if (!is_array($params["sku"]))$params["sku"] = [$params["sku"]];
+        if ($params["sku"] ?? false) {
+            if (!is_array($params["sku"])) $params["sku"] = [$params["sku"]];
             $query->whereIn('sku', $params["sku"]);
         }
         return $query->get();
     }
 
-    public function insert(array $params){
+    public function insert(array $params)
+    {
         return Commodity::query()->insert($params);
     }
 
 
-    public function getOwnerCommodities(array $params){
+    public function getOwnerCommodities(array $params)
+    {
         $query = Commodity::query();
-        foreach ($params as $column => $value){
-            if (!is_array($value)) $query->where($column,$value);
-            else $query->whereIn($column,$value);
+        foreach ($params as $column => $value) {
+            if (!is_array($value)) $query->where($column, $value);
+            else $query->whereIn($column, $value);
         }
         return $query->get();
     }
 
     /* 批量更新 */
-    public function batchUpdate(array $params){
+    public function batchUpdate(array $params)
+    {
         return app(BatchUpdateService::class)->batchUpdate('commodities', $params);
     }
 
     /* 根据货主条形码查找商品 */
-    private function ownerBarcodeSeekCommodityQuery(Builder $query, array $ownerParam, $barcode){
-        $query->whereHas('owner',function ($builder)use($ownerParam){
-            foreach ($ownerParam as $column => $param){
+    private function ownerBarcodeSeekCommodityQuery(Builder $query, array $ownerParam, $barcode)
+    {
+        $query->whereHas('owner', function ($builder) use ($ownerParam) {
+            foreach ($ownerParam as $column => $param) {
                 $builder->where($column, $param);
             }
         });
-        $query->whereHas('barcodes',function ($builder)use($barcode){
-            if (is_array($barcode))$builder->whereIn('code',$barcode);
-            else $builder->where('code',$barcode);
+        $query->whereHas('barcodes', function ($builder) use ($barcode) {
+            if (is_array($barcode)) $builder->whereIn('code', $barcode);
+            else $builder->where('code', $barcode);
         });
         return $query;
     }
-    public function ownerBarcodeSeekCommodityFirst(array $ownerParam, $barcode, $with = null){
+
+    public function ownerBarcodeSeekCommodityFirst(array $ownerParam, $barcode, $with = null)
+    {
         $commodity = Commodity::query();
         if ($with) $commodity->with($with);
         $commodity = $this->ownerBarcodeSeekCommodityQuery($commodity, $ownerParam, $barcode);
         return $commodity->first();
     }
-    public function ownerBarcodeSeekCommodityGet(array $ownerParam, $barcode, $isNullSku = false){
+
+    public function ownerBarcodeSeekCommodityGet(array $ownerParam, $barcode, $isNullSku = false)
+    {
         $commodities = Commodity::query()->with('barcodes');
-        if ($isNullSku)$commodities->whereNull('sku');
+        if ($isNullSku) $commodities->whereNull('sku');
         $commodities = $this->ownerBarcodeSeekCommodityQuery($commodities, $ownerParam, $barcode);
         return $commodities->get();
     }
 
     /* 通过货主代码与条形码寻找FLUX商品补充至WMS 单条*/
-    public function ownerAndBarcodeFirstOrCreate(Owner $owner,$barcode){
-        $wmsCommodity = app('OracleBasSkuService')->first(['customerid'=>$owner->code, 'barcode'=>$barcode]);
+    public function ownerAndBarcodeFirstOrCreate(Owner $owner, $barcode)
+    {
+        $wmsCommodity = app('OracleBasSkuService')->first(['customerid' => $owner->code, 'barcode' => $barcode]);
         if (!$wmsCommodity) return null;
 
-        $commodity = $this->firstOrCreate(['owner_id'=>$owner->id, 'sku'=>$wmsCommodity->sku],[
+        $commodity = $this->firstOrCreate(['owner_id' => $owner->id, 'sku' => $wmsCommodity->sku], [
             "name" => $wmsCommodity->descr_c,
             "sku" => $wmsCommodity->sku,
             "owner_id" => $owner->id,
@@ -112,41 +120,43 @@ Class CommodityService
             "height" => $wmsCommodity->skuhigh,
             "volumn" => $wmsCommodity->cube,
         ]);
-        if ($wmsCommodity->alternate_sku1)app('CommodityBarcodeService')->first([
+        if ($wmsCommodity->alternate_sku1) app('CommodityBarcodeService')->first([
             'commodity_id' => $commodity->id,
             'code' => $wmsCommodity->alternate_sku1,
         ]);
-        if ($wmsCommodity->alternate_sku2)app('CommodityBarcodeService')->first([
+        if ($wmsCommodity->alternate_sku2) app('CommodityBarcodeService')->first([
             'commodity_id' => $commodity->id,
             'code' => $wmsCommodity->alternate_sku2,
         ]);
         return $commodity;
     }
 
-    public function create(array $params){
+    public function create(array $params)
+    {
         return Commodity::query()->create($params);
     }
 
-    public function getByWmsOrders($orderHeaders){
-        if(!$orderHeaders) return null;
+    public function getByWmsOrders($orderHeaders)
+    {
+        if (!$orderHeaders) return null;
         $customerId_sku_map = [];
         foreach ($orderHeaders as $orderHeader) {
             $oracleDOCOrderDetails = $orderHeader->oracleDOCOrderDetails;
             foreach ($oracleDOCOrderDetails as $oracleDOCOrderDetail) {
                 $value = [
                     'owner_code' => $oracleDOCOrderDetail->customerid,
-                    'sku'=> $oracleDOCOrderDetail->sku
+                    'sku' => $oracleDOCOrderDetail->sku
                 ];
-                if(!in_array($value,$customerId_sku_map)){
+                if (!in_array($value, $customerId_sku_map)) {
                     $customerId_sku_map[] = $value;
                 }
             }
         }
 
-        $owner_codes = array_diff(array_unique(data_get($customerId_sku_map,'*.owner_code')),['','*',null]) ;
-        if(!$owner_codes) return null;
+        $owner_codes = array_diff(array_unique(data_get($customerId_sku_map, '*.owner_code')), ['', '*', null]);
+        if (!$owner_codes) return null;
 
-        $owners = Owner::query()->whereIn('code',$owner_codes)->get();
+        $owners = Owner::query()->whereIn('code', $owner_codes)->get();
 
         $owners_code_map = [];
         $owners_id_map = [];
@@ -154,70 +164,70 @@ Class CommodityService
             $owners_code_map[$owner->code] = $owner;
             $owners_id_map[$owner->id] = $owner;
         }
-        $orderHeader_sku = array_diff(array_unique(data_get($customerId_sku_map,'*.sku')),['','*',null]) ;
+        $orderHeader_sku = array_diff(array_unique(data_get($customerId_sku_map, '*.sku')), ['', '*', null]);
         $commodities = Commodity::query()
-            ->whereIn('owner_id',data_get($owners,'*.id'))
-            ->whereIn('sku',$orderHeader_sku)
-            ->groupBy('owner_id','sku')  //*!!!!!!!!
+            ->whereIn('owner_id', data_get($owners, '*.id'))
+            ->whereIn('sku', $orderHeader_sku)
+            ->groupBy('owner_id', 'sku')  //*!!!!!!!!
             ->get();
 
-        if($commodities->count() < count($customerId_sku_map)){
+        if ($commodities->count() < count($customerId_sku_map)) {
             $commoditiesInWAS索引_sku = [];
             foreach ($commodities as $commodityInWms) {
                 $owner = $owners_id_map[$commodityInWms->owner_id] ?? '';
-                if(!$owner)continue;
-                $key ='owner_cod='.$owner['code'].' sku='.$commodityInWms->sku;
-                $commoditiesInWAS索引_sku[$key]=$commodityInWms;
+                if (!$owner) continue;
+                $key = 'owner_cod=' . $owner['code'] . ' sku=' . $commodityInWms->sku;
+                $commoditiesInWAS索引_sku[$key] = $commodityInWms;
             }
-            $commodities需要新增=[];
+            $commodities需要新增 = [];
             foreach ($customerId_sku_map as $commodityInWms) {
-                $key ='owner_cod='.$commodityInWms['owner_code'].' sku='.$commodityInWms['sku'];
-                if($commoditiesInWAS索引_sku[$key] ?? false) continue;
+                $key = 'owner_cod=' . $commodityInWms['owner_code'] . ' sku=' . $commodityInWms['sku'];
+                if ($commoditiesInWAS索引_sku[$key] ?? false) continue;
                 $commodities需要新增[$key] = $commodityInWms;
             }
-            $commodity_set = $this->createCommodities($commodities需要新增,$owners_code_map);
+            $commodity_set = $this->createCommodities($commodities需要新增, $owners_code_map);
             $commodities = $commodities->concat($commodity_set);
         }
-        return  $commodities;
+        return $commodities;
     }
 
-    public function createCommodities($params,$owners_code_map)
+    public function createCommodities($params, $owners_code_map)
     {
-        if(!$params) return [];
+        if (!$params) return [];
         $bas_sku_arr = OracleBasSKU::query()
             ->selectRaw('customerid,sku,descr_c,skulength,skuwidth,skuhigh,cube')
-            ->whereIn('CustomerID',data_get($params,'*.owner_code'))
-            ->whereIn('Sku',data_get($params,'*.sku'))
+            ->whereIn('CustomerID', data_get($params, '*.owner_code'))
+            ->whereIn('Sku', data_get($params, '*.sku'))
             ->get();
         $insert_params = [];
         $created_at = Carbon::now()->format('Y-m-d H:i:s');
         foreach ($bas_sku_arr as $bas_sku) {
             $owner = $owners_code_map[$bas_sku->customerid] ?? '';
-            if(!$owner)continue;
-            if($bas_sku->sku==null)continue;
-            if($bas_sku->descr_c=='')continue;
+            if (!$owner) continue;
+            if ($bas_sku->sku == null) continue;
+            if ($bas_sku->descr_c == '') continue;
             $insert_params[] = [
                 'owner_id' => $owner->id,
                 'sku' => $bas_sku->sku,
-                'name' =>$bas_sku->descr_c,
+                'name' => $bas_sku->descr_c,
                 'created_at' => $created_at,
-                'length' =>$bas_sku->skulength,
+                'length' => $bas_sku->skulength,
                 'width' => $bas_sku->skuwidth,
                 'height' => $bas_sku->skuhigh,
                 'volumn' => $bas_sku->cube
             ];
         }
-        if(count($insert_params) > 0){
+        if (count($insert_params) > 0) {
             try {
                 $this->insert($insert_params);
-                app('LogService')->log(__METHOD__,__FUNCTION__,'批量添加 commodity ' . count($insert_params) .json_encode($insert_params) );
+                app('LogService')->log(__METHOD__, __FUNCTION__, '批量添加 commodity ' . count($insert_params) . json_encode($insert_params));
             } catch (\Exception $e) {
-                app('LogService')->log(__METHOD__,__FUNCTION__,'批量添加 commodity error' .json_encode($insert_params) ."||".$e->getMessage().'||'.$e->getTraceAsString());
+                app('LogService')->log(__METHOD__, __FUNCTION__, '批量添加 commodity error' . json_encode($insert_params) . "||" . $e->getMessage() . '||' . $e->getTraceAsString());
             }
         }
         return Commodity::query()
-            ->whereIn('owner_id',data_get($owners_code_map,'*.id'))
-            ->whereIn('sku',data_get($params,'*.sku'))
+            ->whereIn('owner_id', data_get($owners_code_map, '*.id'))
+            ->whereIn('sku', data_get($params, '*.sku'))
             ->get();
     }
 
@@ -228,93 +238,94 @@ Class CommodityService
     }
 
 
-
-    public function syncBarcodes($barcodesStr,$ownerId,$sku):Commodity
+    public function syncBarcodes($barcodesStr, $ownerId, $sku): Commodity
     {
-        $barcodes=(function()use($barcodesStr){
-            $barcodes=rtrim($barcodesStr,',');
-            $barcodes=explode(',',$barcodes);
-            foreach ($barcodes as $k=>$barcode){
-                if(!trim($barcode)) unset($barcodes[$k]);
+        $barcodes = (function () use ($barcodesStr) {
+            $barcodes = rtrim($barcodesStr, ',');
+            $barcodes = explode(',', $barcodes);
+            foreach ($barcodes as $k => $barcode) {
+                if (!trim($barcode)) unset($barcodes[$k]);
             }
             return $barcodes;
         })();
-        $commodity=$this->firstOrCreate(['owner_id'=>$ownerId,'sku'=>$sku]);
-        $commodityBarcodes=$commodity['barcodes']??new Collection();
+        $commodity = $this->firstOrCreate(['owner_id' => $ownerId, 'sku' => $sku]);
+        $commodityBarcodes = $commodity['barcodes'] ?? new Collection();
 
 
         /** @var CommodityBarcodeService $commodityBarcodeService */
-        $commodityBarcodeService=app('CommodityBarcodeService');
-        $redundantCommodityBarcodes=new Collection();
-        foreach($commodityBarcodes as $commodityBarcode){//清除数组中 已经在商品有的条码,清除商品条码中,不在数组中的条码
-            $hasMatch=false;
-            foreach($barcodes as $key=>$barcode){
-                if($barcodes[$key]==$commodityBarcode['code']){
-                    $hasMatch=true;
+        $commodityBarcodeService = app('CommodityBarcodeService');
+        $redundantCommodityBarcodes = new Collection();
+        foreach ($commodityBarcodes as $commodityBarcode) {//清除数组中 已经在商品有的条码,清除商品条码中,不在数组中的条码
+            $hasMatch = false;
+            foreach ($barcodes as $key => $barcode) {
+                if ($barcodes[$key] == $commodityBarcode['code']) {
+                    $hasMatch = true;
                     unset($barcodes[$key]);
                     break;
                 }
             }
-            if(!$hasMatch){
+            if (!$hasMatch) {
                 $redundantCommodityBarcodes->push($commodityBarcode);
             }
         }
-        if(!empty($redundantCommodityBarcodes)){
+        if (!empty($redundantCommodityBarcodes)) {
             $commodityBarcodeService->destroyCollections($redundantCommodityBarcodes);
         }
-        if(!empty($barcodes)){
-            $commodityBarcodeService->insertMany_onCommodities([['commodity_id'=>$commodity['id'],'barcodes'=>$barcodes]]);
+        if (!empty($barcodes)) {
+            $commodityBarcodeService->insertMany_onCommodities([['commodity_id' => $commodity['id'], 'barcodes' => $barcodes]]);
         }
         return $commodity;
     }
+
     public function destroyWithOffspring(Commodity $commodity)
     {
-        $barcodesIds=$commodity->barcodes->map(function ($barcode){
+        $barcodesIds = $commodity->barcodes->map(function ($barcode) {
             return $barcode['id'];
         });
         CommodityBarcode::destroy($barcodesIds);
         $commodity->delete();
     }
 
-    public function syncWMSOrderCode($owner,$skus)
+    public function syncWMSOrderCode($owner, $skus)
     {
-        $basSku = OracleBasSKU::query()->whereIn('SKU',$skus)->where('CustomerID',$owner->code)->get();
+        $basSku = OracleBasSKU::query()->whereIn('SKU', $skus)->where('CustomerID', $owner->code)->get();
         $inner_params = [];
         $created_at = new Carbon();
-        $basSku->each(function($bas_sku)use(&$inner_params,$owner,$created_at){
+        $basSku->each(function ($bas_sku) use (&$inner_params, $owner, $created_at) {
             $inner_params = [
                 'owner_id' => $owner->id,
                 'sku' => $bas_sku->sku,
-                'name' =>$bas_sku->descr_c,
+                'name' => $bas_sku->descr_c,
                 'created_at' => $created_at,
-                'length' =>$bas_sku->skulength,
+                'length' => $bas_sku->skulength,
                 'width' => $bas_sku->skuwidth,
                 'height' => $bas_sku->skuhigh,
                 'volumn' => $bas_sku->cube
             ];
         });
-        if(count($inner_params) > 0){
+        if (count($inner_params) > 0) {
             try {
                 $this->insert($inner_params);
                 app('LogService')->log(__METHOD__, __FUNCTION__, json_encode($inner_params));
             } catch (\Exception $e) {
-                app('LogService')->log(__METHOD__, 'Error '.__FUNCTION__, json_encode($inner_params).' || '.$e->getMessage());
+                app('LogService')->log(__METHOD__, 'Error ' . __FUNCTION__, json_encode($inner_params) . ' || ' . $e->getMessage());
             }
         }
     }
+
     //获取箱规
     public function getPack($owner_id, $sku)
     {
         $that = $this;
-        return app("CacheService")->getOrExecute("pack_{$owner_id}_{$sku}",function ()use($owner_id,$sku,$that){
+        return app("CacheService")->getOrExecute("pack_{$owner_id}_{$sku}", function () use ($owner_id, $sku, $that) {
             $commodity = $that->first([
                 "owner_id" => $owner_id,
                 "sku" => $sku
             ]);
-            if (!$commodity || $commodity->pack_spec === null){
+            if (!$commodity || $commodity->pack_spec === null) {
                 $owner = app("OwnerService")->find($owner_id);
                 $action = new CommodityController();
-                $action->syncOwnerCommodities($owner->id,$owner->code,$sku);
+                $action->syncOwnerCommodities($owner->id, $owner->code, $sku);
             }
             return $that->first([
                 "owner_id" => $owner_id,
@@ -328,102 +339,40 @@ Class CommodityService
     {
         $query = Commodity::query();
         if ($params["barcode"] ?? false) {
-            $query->whereHas("barcodes",function ($query)use($params){
+            $query->whereHas("barcodes", function ($query) use ($params) {
                 /** @var Builder $query */
-                $query->where("code",$params["barcode"]);
+                $query->where("code", $params["barcode"]);
             });
             unset($params["barcode"]);
         }
-        foreach ($params as $column => $param){
-            $query->where($column,$param);
+        foreach ($params as $column => $param) {
+            $query->where($column, $param);
         }
-        if ($query->count() > 0)return true;
+        if ($query->count() > 0) return true;
         return false;
     }
 
-    public function getCommoditiesByMap($map)
+    public function pushCommodityToCache()
     {
-        /** @var OwnerService $ownerService */
-        $ownerService = app('OwnerService');
-
-        $owner_codes = (function()use($map){
-            $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){
-            $owners = $ownerService->getOwnerByCodes($owner_codes);
-            $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 = [];
-        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;
-            $sku[] = $item['sku'];
-            $owner_code[] = $item['owner_code'];
+        $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);
         }
-        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){
-            $arr = [
-                'owner_code' => $bas_sku['customerid'],
-                'sku' => $bas_sku['sku']
-            ];
-            return $unexists[json_encode($arr)] ?? false;
-        });
-        $inner_params = (function()use($BasSKUs,$owner_map){
-            $map = [];
-            $date = Carbon::now();
-            $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,
-                    'width' => $basSku->skuwidth,
-                    'height' => $basSku->skuhigh,
-                    'volumn' => $basSku->cube,
-                    'created_at' => $date,
-                    'updated_at' => $date,
-                ];
-            });
-            return $map;
-        })();
-        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();
-                    $this->pushToCache($commodities);
-                    $collect = $collect->concat($commodities);
-                }
-                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()));
-            }
-        }
-        return $collect;
+    }
+
+    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)
@@ -436,4 +385,140 @@ Class CommodityService
             });
         }
     }
+
+    public function syncCommodityCreated()
+    {
+        $created_at = config('sync.commodity_sync.created_at');
+        $create_set = config('sync.commodity_sync.cache_prefix.create_set');
+        $create_keys = config('sync.commodity_sync.cache_prefix.create_keys');
+        $create_key = config('sync.commodity_sync.cache_prefix.create');
+        /** @var OracleBasSkuService $oracleBasSkuService */
+        $oracleBasSkuService = app(OracleBasSkuService::class);
+        $last_time = $this->getAsnLastSyncAt($created_at, 'create');
+        $basSkus = $oracleBasSkuService->getWmsCreatedCommodities($last_time);
+        $last_time=$basSkus->first()['addtime'];
+        $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);
+            $this->setLastRecordsByRedis($create_key,$create_set,$create_keys,$last_records);
+            $this->setAsnLastSyncAt($created_at,$last_time);
+        }
+    }
+
+    public function syncCommodityUpdated()
+    {
+
+    }
+    // TODO
+    public function syncCreateCommodity($addBasSkus)
+    {
+        $owner_codes = array_diff(array_unique(data_get($addBasSkus, '*.customerid')), ['', '*', null]);
+        if (count($owner_codes)<1) return null;
+        $owners = Owner::query()->whereIn('code', $owner_codes)->get();
+        $owners_code_map = [];
+        foreach ($owners as $owner) {
+            $owners_code_map[$owner->code] = $owner;
+        }
+    }
+    // TODO
+    public function getParamsByBasSku($addBasSkus, $owners_code_map)
+    {
+        $params = [];
+        $commodities = Commodity::query()->with(['owner' => function ($query) use ($addBasSkus) {
+            return $query->whereIn('code', data_get($addBasSkus, '*.customerid'));
+        }])
+            ->whereIn('sku', data_get($addBasSkus, '*.sku'))
+            ->get();
+        $commodity_map = [];
+        foreach ($commodities as $commodity) {
+            $commodity_map[$commodity['owner']['code'].$commodity['sku']] = $commodity;
+        }
+        foreach ($addBasSkus as $addBasSku) {
+            if ($store_asn_code_map[$addBasSku->customerid.$addBasSku->sku] ?? false) continue;
+            $owner = $owners_code_map[$addBasSku->customerid] ?? null;
+
+            $params[] = [
+
+            ];
+        }
+        return $params;
+    }
+    public function getAsnLastSyncAt($key, $type)
+    {
+        $last_time = ValueStore::query()->where('name', $key)->value('value');
+        if ($last_time) return $last_time;
+        if ($type == 'create') {
+            $store = Commodity::query()->orderByDesc('created_at')->first();
+            if ($store) return $store->created_at;
+        } else {
+            $store = Commodity::query()->orderByDesc('updated_at')->first();
+            if ($store) return $store->updated_at;
+        }
+        return Carbon::now()->subSeconds(65);
+    }
+
+    public function setAsnLastSyncAt($key, $last_time)
+    {
+        $asnLastSyncAt = ValueStore::query()->updateOrCreate([
+            'name' => $key,
+        ], [
+            'name' => $key,
+            'value' => $last_time,
+        ]);
+        LogService::log(__METHOD__, __FUNCTION__, '修改或更新' . $key . json_encode($asnLastSyncAt));
+        return $asnLastSyncAt;
+    }
+
+    public function getLastRecordsByRedis($set, $prefixKey, $basSkus)
+    {
+        if (Cache::get($set)) {
+            $addBasSkus = collect();
+            foreach ($basSkus as $basSku) {
+                if (Cache::get($prefixKey . $basSkus->customerid . '_' . $basSkus->sku)) continue;
+                $addBasSkus->add($basSku);
+            }
+            return $addBasSkus;
+        }
+        return $basSkus;
+    }
+
+    public function deleteCacheKey($set, $keys)
+    {
+        if (Cache::get($set)) {
+            $cacheKeys = Cache::get($keys);
+            if (!$cacheKeys) return;
+            foreach ($cacheKeys as $cacheKey) {
+                Cache::forget($cacheKey);
+            }
+            Cache::forget($keys);
+        }
+    }
+
+    public function setLastRecordsByRedis($prefixKey, $set, $keys, $last_records)
+    {
+        if (Cache::get($set)) {
+            $cacheKeys = [];
+            foreach ($last_records as $last_record) {
+                Cache::put($prefixKey . $last_record->customerid . '_' . $last_record->sku, true);
+                array_push($cacheKeys, $prefixKey . $last_record->customerid . '_' . $last_record->sku);
+            }
+            Cache::put($keys, $cacheKeys);
+            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;
+    }
+
 }

+ 1 - 1
app/Services/LogisticService.php

@@ -26,7 +26,7 @@ Class LogisticService
                 $query->where("type",$type)->orWhere("type","全部");
             });
             return $query->get();
-        },config('cache.expirations.persistent'));
+        },config('cache.expirations.rarelyChange'));
     }
 
     public function firstOrCreate(array $params, array $values = null){

+ 20 - 0
app/Services/OracleBasSkuService.php

@@ -71,4 +71,24 @@ Class OracleBasSkuService
         if(!$customer_Ids || !$sku_s){return null;}
         return OracleBasSKU::query()->whereIn('customerid',$customer_Ids)->whereIn('sku',$sku_s)->get();
     }
+    public function getWmsCreatedCommodities($startDate)
+    {
+        if (!$startDate) return null;
+        return OracleBasSKU::query()
+            ->select('customerid','sku','descr_c','alternate_sku1','alternate_sku2','alternate_sku3','skulength','skuwidth','skuhigh','cube','packid','addtime','edittime')
+            ->where('addTime', '>=', $startDate)
+            ->orderByDesc('addtime')
+            ->get();
+    }
+
+    public function getWmsUpdatedCommodities($startDate)
+    {
+        if (!$startDate) return null;
+        return OracleBasSKU::query()
+            ->select('customerid','sku','descr_c','alternate_sku1','alternate_sku2','alternate_sku3','skulength','skuwidth','skuhigh','cube','packid','addtime','edittime')
+            ->where('EditTime', '>=', $startDate)
+            ->whereColumn('EditTime', '<>', 'addTime')
+            ->orderByDesc('EditTime')
+            ->get();
+    }
 }

+ 2 - 0
app/Services/OracleDocAsnHerderService.php

@@ -15,6 +15,7 @@ Class OracleDocAsnHerderService
             }])
             ->select('asnno','asnstatus','asntype','addtime','edittime','customerid','notes','warehouseid','asnreference3')
             ->where('addTime', '>=', $startDate)
+            ->orderByDesc('addtime')
             ->get();
     }
 
@@ -28,6 +29,7 @@ Class OracleDocAsnHerderService
             ->select('asnno','asnstatus','asntype','addtime','edittime','customerid','notes','warehouseid','asnreference3')
             ->where('EditTime', '>=', $startDate)
             ->whereColumn('EditTime', '<>', 'addTime')
+            ->orderByDesc('EditTime')
             ->get();
         return $oracleDocAsnHerder;
     }

Разница между файлами не показана из-за своего большого размера
+ 359 - 350
app/Services/OrderService.php


+ 2 - 1
app/Services/OwnerService.php

@@ -9,7 +9,6 @@ use Carbon\Carbon;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Support\Collection;
 use Illuminate\Support\Facades\Auth;
-use Illuminate\Support\Facades\Cache;
 
 Class OwnerService
 {
@@ -226,9 +225,11 @@ Class OwnerService
                 $owner = Owner::query()->where('code',$code)->first();
                 if($owner) return $owner;
                 $basCustomer = OracleBasCustomer::query()->where('Customer_Type','OW')->where('CustomerID', $code)->first();
+                if (!$basCustomer) return null;
                 return Owner::query()->create(['name'=>$basCustomer['descr_c'],'code'=>$basCustomer['customerid']]);
             }));
         }
         return $collect;
     }
+
 }

+ 88 - 70
app/Services/RejectedBillService.php

@@ -11,19 +11,22 @@ use Carbon\Carbon;
 
 Class RejectedBillService
 {
-    private function conditionQuery(array $params){
+    private function conditionQuery(array $params)
+    {
         $query = RejectedBill::query();
-        if ($params['order_number'] ?? false){
-            $query->whereIn('order_number',$params['order_number']);
+        if ($params['order_number'] ?? false) {
+            $query->whereIn('order_number', $params['order_number']);
         }
         return $query;
     }
 
-    public function get(array $params){
+    public function get(array $params)
+    {
         return $this->conditionQuery($params)->get();
     }
 
-    public function create(array $params){
+    public function create(array $params)
+    {
         return RejectedBill::query()->create($params);
     }
 
@@ -33,108 +36,123 @@ Class RejectedBillService
          * @var OrderIssue $orderIssue
          */
         $orderIssue = $rejectedBill->orderIssue()->first();
-        if(!$orderIssue && $rejectedBill['logistic_number'] === '原单退回'){   // 原单退回
-            $orderIssue = OrderIssue::query()->with('order')->whereHas('order',function($query)use($rejectedBill){
-                $query->where('client_code',$rejectedBill['order_number']);
+        if (!$orderIssue && $rejectedBill['logistic_number'] === '原单退回') {   // 原单退回
+            $orderIssue = OrderIssue::query()->with('order')->whereHas('order', function ($query) use ($rejectedBill) {
+                $query->where('client_code', $rejectedBill['order_number']);
             })->first();
-        }else if(!$orderIssue  && isset($rejectedBill->logistic_number_return)){
-            $orderIssue = OrderIssue::query()->with('order.packages')->whereHas('order.packages',function($query)use($rejectedBill){
-                $query->where('logistic_number',$rejectedBill->logistic_number_return);
+        } else if (!$orderIssue && isset($rejectedBill->logistic_number_return)) {
+            $orderIssue = OrderIssue::query()->with('order.packages')->whereHas('order.packages', function ($query) use ($rejectedBill) {
+                $query->where('logistic_number', $rejectedBill->logistic_number_return);
             })->first();
         }
-        if(!isset($orderIssue)){ // 没有对应的问题发货订单
-            $orderHeader = OracleDOCOrderHeader::query()->where('soreference1',function($query)use($rejectedBill){
-                $query->select('asnreference2')->from('DOC_ASN_HEADER')->where('asnreference3',$rejectedBill->logistic_number_return)->first();
+        if (!isset($orderIssue)) { // 没有对应的问题发货订单
+            $orderHeader = OracleDOCOrderHeader::query()->where('soreference1', function ($query) use ($rejectedBill) {
+                $query->select('asnreference2')->from('DOC_ASN_HEADER')->where('asnreference3', $rejectedBill->logistic_number_return)->first();
             })->first();
 //                $orderHeader = OracleDOCOrderHeader::query()->where('soreference1',function($query)use($rejectedBill){
 //                    $query->select('asnreference2')->from('DOC_ASN_HEADER')->where('asnreference3',$rejectedBill->logistic_number_return)->first();
 //                })->first();
-            if(!isset($orderHeader))return;
-            $orderIssue = OrderIssue::query()->with('order')->whereHas('order',function($query)use($orderHeader){
-                $query->where('code',$orderHeader->orderno);
+            if (!isset($orderHeader)) return;
+            $orderIssue = OrderIssue::query()->with('order')->whereHas('order', function ($query) use ($orderHeader) {
+                $query->where('code', $orderHeader->orderno);
             })->first();
         }
-        if(isset($orderIssue)){
+        if (isset($orderIssue)) {
             // 更新问题件的退回单号
-            if($orderIssue['logistic_number_return']!=$rejectedBill['logistic_number_return'])
-                $orderIssue->update(['logistic_number_return'=>$rejectedBill['logistic_number_return']]);
+            if ($orderIssue['logistic_number_return'] != $rejectedBill['logistic_number_return'])
+                $orderIssue->update(['logistic_number_return' => $rejectedBill['logistic_number_return']]);
             //确认问题件有的时候需要更新状态和提示
             $orderIssue->同步退单状态();
             $orderIssue->update(['is_new_rejecting' => '有']);
-            app('LogService')->log(__METHOD__,__FUNCTION__,'退回单同步问题件'.json_encode($rejectedBill).json_encode($orderIssue));
+            app('LogService')->log(__METHOD__, __FUNCTION__, '退回单同步问题件' . json_encode($rejectedBill) . json_encode($orderIssue));
         }
     }
-    public function syncLoadedStatusByAsnHerder($asnHerders){
-        if ($asnHerders->isEmpty())return null;
-        $updateCollect=$this->getUpdateCollect($asnHerders);
-        if ($updateCollect->isEmpty())return null;
-        $logisticNumberReturn=$this->getLogisticNumberReturn($updateCollect);
-        $rejectedBills=$this->getRejectedBills($logisticNumberReturn);
-        if ($rejectedBills->isEmpty())return null;
+
+    public function syncLoadedStatusByAsnHerder($asnHerders)
+    {
+        if ($asnHerders->isEmpty()) return null;
+        $updateCollect = $this->getUpdateCollect($asnHerders);
+        if ($updateCollect->isEmpty()) return null;
+        $logisticNumberReturn = $this->getLogisticNumberReturn($updateCollect);
+        $rejectedBills = $this->getRejectedBills($logisticNumberReturn);
+        if ($rejectedBills->isEmpty()) return null;
         $updateParams = [[
-            'logistic_number_return','is_loaded','updated_at'
+            'logistic_number_return', 'is_loaded', 'updated_at'
         ]];
-        $updated_at=Carbon::now()->toDateTimeString();
+        $updated_at = Carbon::now()->toDateTimeString();
         /** @var DataHandlerService $dataHandlerService */
-        $dataHandlerService =  app(DataHandlerService::class);
-        $rejectedBills_map =  $dataHandlerService->dataHeader(['logistic_number_return'],$rejectedBills);
-        foreach ($updateCollect as $data){
-            if(!$data->asnreference3&&!$data->notes){continue;}
-            $result=[];
-            if ($data->asnreference3){
-                $rejectedBill=$dataHandlerService->getKeyValue(['logistic_number_return'=>$data->asnreference3],$rejectedBills_map);
-                if ($rejectedBill&&$rejectedBill->is_loaded!=1) $updateParams[] = [
-                    'logistic_number_return'=>$data->asnreference3,
+        $dataHandlerService = app(DataHandlerService::class);
+        $rejectedBills_map = $dataHandlerService->dataHeader(['logistic_number_return'], $rejectedBills);
+        foreach ($updateCollect as $data) {
+            if (!$data->asnreference3 && !$data->notes) {
+                continue;
+            }
+            $result = [];
+            if ($data->asnreference3) {
+                $rejectedBill = $dataHandlerService->getKeyValue(['logistic_number_return' => $data->asnreference3], $rejectedBills_map);
+                if ($rejectedBill && $rejectedBill->is_loaded != 1) $updateParams[] = [
+                    'logistic_number_return' => $data->asnreference3,
                     'is_loaded' => 1,
-                    'updated_at' =>$updated_at,
+                    'updated_at' => $updated_at,
                 ];
-            }else{
-                preg_match("/[a-zA-Z]{0,5}\d{6,20}/",$data->notes, $result);
-                $rejectedBill=$dataHandlerService->getKeyValue(['logistic_number_return'=>$result[0]],$rejectedBills_map);
-                if ($rejectedBill&&$rejectedBill->is_loaded!=1) $updateParams[] = [
-                    'logistic_number_return'=>$result[0],
+            } else {
+                preg_match("/[a-zA-Z]{0,5}\d{6,20}/", $data->notes, $result);
+                $rejectedBill = $dataHandlerService->getKeyValue(['logistic_number_return' => $result[0]], $rejectedBills_map);
+                if ($rejectedBill && $rejectedBill->is_loaded != 1) $updateParams[] = [
+                    'logistic_number_return' => $result[0],
                     'is_loaded' => 1,
-                    'updated_at' =>$updated_at,
+                    'updated_at' => $updated_at,
                 ];
-                $result=[];
+                $result = [];
             }
         }
-        if(count($updateParams) > 1){
+        if (count($updateParams) > 1) {
             $this->batchUpdate($updateParams);
         }
     }
-    public function getUpdateCollect($asnHerders){
-        $updateCollect=collect();
-        foreach ($asnHerders as $asnHerder){
-            if (($asnHerder->asnType->codename_c=='退货入库'
-                    || $asnHerder->asnType->codename_c=='其他入库')
-                &&$asnHerder->asnStatus->codename_c=='完全收货'){
+
+    public function getUpdateCollect($asnHerders)
+    {
+        $updateCollect = collect();
+        foreach ($asnHerders as $asnHerder) {
+            if (($asnHerder->asnType->codename_c == '退货入库'
+                    || $asnHerder->asnType->codename_c == '其他入库')
+                && $asnHerder->asnStatus->codename_c == '完全收货') {
                 $updateCollect->add($asnHerder);
             }
         }
         return $updateCollect;
     }
-    public function getLogisticNumberReturn($updateCollect){
-        $logisticNumberReturn=[];
-        foreach ($updateCollect as $data){
-            if(!$data->asnreference3&&!$data->notes){continue;}
-            $result=[];
-            if ($data->asnreference3){
-                array_push($logisticNumberReturn,$data->asnreference3);
-            }else{
-                preg_match("/[a-zA-Z]{0,5}\d{6,20}/",$data->notes, $result);
-                if (count($result)>0)array_push($logisticNumberReturn,$result[0]);
-                $result=[];
+
+    public function getLogisticNumberReturn($updateCollect)
+    {
+        $logisticNumberReturn = [];
+        foreach ($updateCollect as $data) {
+            if (!$data->asnreference3 && !$data->notes) {
+                continue;
+            }
+            $result = [];
+            if ($data->asnreference3) {
+                array_push($logisticNumberReturn, $data->asnreference3);
+            } else {
+                preg_match("/[a-zA-Z]{0,5}\d{6,20}/", $data->notes, $result);
+                if (count($result) > 0) array_push($logisticNumberReturn, $result[0]);
+                $result = [];
             }
         }
         return $logisticNumberReturn;
     }
 
-    public function batchUpdate($params){
-        return app(BatchUpdateService::class)->batchUpdate('rejected_bills',$params);
+    public function batchUpdate($params)
+    {
+        return app(BatchUpdateService::class)->batchUpdate('rejected_bills', $params);
     }
-    public function getRejectedBills(array $logisticNumberReturn){
-        if(count($logisticNumberReturn)<1){return null;}
-        return RejectedBill::query()->whereIn('logistic_number_return',$logisticNumberReturn)->get();
+
+    public function getRejectedBills(array $logisticNumberReturn)
+    {
+        if (count($logisticNumberReturn) < 1) {
+            return null;
+        }
+        return RejectedBill::query()->whereIn('logistic_number_return', $logisticNumberReturn)->get();
     }
 }

+ 10 - 7
app/Services/StoreItemService.php

@@ -18,14 +18,14 @@ Class StoreItemService
 
     public function storeItemCreateByWms($asnHerders)
     {
-        if ($asnHerders->isEmpty()) return null;
+        if (!$asnHerders) return null;
         $asnDetails = $this->getAsnDetailsByAsnHerder($asnHerders);
         $this->createStoreItem($asnDetails);
     }
 
     public function storeItemUpdateByWms($asnHerders)
     {
-        if ($asnHerders->isEmpty()) return null;
+        if (!$asnHerders) return null;
         $asnDetails = $this->getAsnDetailsByAsnHerder($asnHerders);
         $this->updateStoreItem($asnDetails);
     }
@@ -43,16 +43,18 @@ Class StoreItemService
 
     public function createStoreItem($asnDetails)
     {
+
         if ($asnDetails->isEmpty()) return null;
         ini_set('memory_limit','512M');
         $stores = Store::query()->whereIn('asn_code', array_unique(data_get($asnDetails, '*.asnno')))->get();
         $store_asn_code_map = [];
+
         foreach ($stores as $store) {
             $store_asn_code_map[$store->asn_code] = $store;
         }
         $params = $this->getParamsByAsnDetails($asnDetails, $store_asn_code_map);
         if (count($params) > 0) {
-                $this->insertStoreItem($params);
+            $this->insertStoreItem($params);
         }
     }
 
@@ -67,9 +69,10 @@ Class StoreItemService
             $storeItem = $dataHandlerService
                 ->getKeyValue(['store_asn_code' => $asnDetail->asnno, 'asn_line_code' => $asnDetail->asnlineno, 'sku' => $asnDetail->sku], $storeItem_map);
             if ($storeItem ?? false) continue;
+            //if (empty($store_asn_code_map[$asnDetail->asnno])) continue;
             $params[] = [
                 'store_id' => $store_asn_code_map[$asnDetail->asnno]['id'],
-                'asn_line_code' => $asnDetail->asnlineno,
+                'asn_line_code' => (string)$asnDetail->asnlineno,
                 'name' => $asnDetail->skudescrc,
                 'sku' => $asnDetail->sku,
                 'barcode' => $asnDetail->basSku ? $asnDetail->basSku->alternate_sku1 : '',
@@ -104,7 +107,7 @@ Class StoreItemService
         $storeItems = $this->getByWms($asnDetails);
         $asnDetails_map = $dataHandlerService->dataHeader(['asnno', 'asnlineno', 'sku'], $asnDetails);
         $updateParams = [[
-           /* 'id',*/ 'store_id', 'asn_line_code', 'name', 'sku', 'barcode', 'amount', 'quality', 'status', 'created_at', 'updated_at'
+            'id', 'store_id', 'asn_line_code', 'name', 'sku', 'barcode', 'amount', 'quality', 'status', 'created_at', 'updated_at'
         ]];
         $delete_storeItems = [];
         foreach ($storeItems as $storeItem) {
@@ -124,9 +127,9 @@ Class StoreItemService
                 $storeItem->created_at != $asnDetail['addtime'] ||
                 $storeItem->updated_at != $asnDetail['edittime']) {
                 $updateParams[] = [
-                   /* 'id' => $storeItem->id,*/
+                    'id' => $storeItem->id,
                     'store_id' => $storeItem->store->id,
-                    'asn_line_code' => $asnDetail['asnlineno'],
+                    'asn_line_code' => (string)$asnDetail['asnlineno'],
                     'name' => $asnDetail['skudescrc'],
                     'sku' => $asnDetail['sku'],
                     'barcode' => $asnDetail['basSku'] ? $asnDetail['basSku']['alternate_sku1'] : '',

+ 210 - 80
app/Services/StoreService.php

@@ -6,27 +6,32 @@ use App\Services\common\BatchUpdateService;
 use App\Services\common\DataHandlerService;
 use App\Services\common\QueryService;
 use App\Store;
+use App\ValueStore;
 use Carbon\Carbon;
+use Illuminate\Support\Facades\Cache;
 
 
 Class StoreService
 {
-    private function conditionQuery(array $params){
-        $stores=Store::query()->with(['storeItems.store','warehouse','owner'])->whereNotIn('stored_method',['快速入库','正常'])->orderBy('id','DESC');
-        $columnQueryRules=[
+    private function conditionQuery(array $params)
+    {
+        $stores = Store::query()->with(['storeItems.store', 'warehouse', 'owner'])->whereNotIn('stored_method', ['快速入库', '正常'])->orderBy('id', 'DESC');
+        $columnQueryRules = [
             'asn_code' => ['like' => ''],
-            'created_at_start' => ['alias' => 'created_at' , 'startDate' => ' 00:00:00'],
-            'created_at_end' => ['alias' => 'created_at' , 'endDate' => ' 23:59:59'],
+            'created_at_start' => ['alias' => 'created_at', 'startDate' => ' 00:00:00'],
+            'created_at_end' => ['alias' => 'created_at', 'endDate' => ' 23:59:59'],
             'owner_id' => ['multi' => ','],
             'warehouse_id' => ['multi' => ','],
             'status' => ['multi' => ','],
             'stored_method' => ['multi' => ','],
             'id' => ['multi' => ',']
         ];
-        $stores = app(QueryService::class)->query($params,$stores,$columnQueryRules,'stores');
+        $stores = app(QueryService::class)->query($params, $stores, $columnQueryRules, 'stores');
         return $stores;
     }
-    public function paginate(array $params){
+
+    public function paginate(array $params)
+    {
         return $this->conditionQuery($params)->paginate($params['paginate'] ?? 50);
     }
 
@@ -35,152 +40,277 @@ Class StoreService
         return Store::query()->create($params);
     }
 
-    public function syncWmsAsnData($startDate)
+    public function storeCreateByWms()
     {
-        $this->storeCreateByWms($startDate);
-        $this->storeUpdateByWms($startDate);
-    }
+        $created_at = config('sync.asn_sync.created_at');
+        $create_set = config('sync.asn_sync.cache_prefix.create_set');
+        $create_keys = config('sync.asn_sync.cache_prefix.create_keys');
+        $create_key = config('sync.asn_sync.cache_prefix.create');
 
-    public function storeCreateByWms($startDate)
-    {
         /** @var OracleDocAsnHerderService $oracleDocAsnHerderService */
         $oracleDocAsnHerderService = app(OracleDocAsnHerderService::class);
-        $asnHerders = $oracleDocAsnHerderService->getWmsAsnOnStartDateCreate($startDate);
-        $this->createStore($asnHerders);
+        $last_time = $this->getAsnLastSyncAt($created_at, 'create');
+        $asnHerders = $oracleDocAsnHerderService->getWmsAsnOnStartDateCreate($last_time);
+        $last_time = $asnHerders->first()['addtime'];
+        $last_records = $asnHerders->where('addtime', $last_time);
+        if (!$asnHerders) return;
+        $addAsnHerders = $this->getLastRecordsByRedis($create_set, $create_key, $asnHerders);
+        if (count($addAsnHerders) > 0) {
+            $this->createStore($addAsnHerders);
+            $this->deleteCacheKey($create_set, $create_keys);
+            $this->setLastRecordsByRedis($create_key, $create_set, $create_keys, $last_records);
+            $this->setAsnLastSyncAt($created_at, $last_time);
+        }
     }
 
-    public function storeUpdateByWms($startDate)
+    public function storeUpdateByWms()
     {
+        $updated_at = config('sync.asn_sync.updated_at');
+        $update_set = config('sync.asn_sync.cache_prefix.update_set');
+        $update_keys = config('sync.asn_sync.cache_prefix.update_keys');
+        $update_key = config('sync.asn_sync.cache_prefix.update');
+
         /** @var OracleDocAsnHerderService $oracleDocAsnHerderService */
         $oracleDocAsnHerderService = app(OracleDocAsnHerderService::class);
-        $asnHerders = $oracleDocAsnHerderService->getWmsAsnOnStartDateEdit($startDate);
-        $this->updateStore($asnHerders);
+        $last_time = $this->getAsnLastSyncAt($updated_at, 'update');
+        $asnHerders = $oracleDocAsnHerderService->getWmsAsnOnStartDateEdit($last_time);
+        $last_time = $asnHerders->first()['edittime'];
+        $last_records = $asnHerders->where('edittime', $last_time);
+        if (!$asnHerders) return;
+        $addAsnHerders = $this->getLastRecordsByRedis($update_set, $update_key, $asnHerders);
+        if (count($addAsnHerders) > 0) {
+            $this->createStore($addAsnHerders);
+            $this->updateStore($addAsnHerders);
+            $this->deleteCacheKey($update_set, $update_keys);
+            $this->setLastRecordsByRedis($update_key, $update_set, $update_keys, $last_records);
+            $this->setAsnLastSyncAt($updated_at, $last_time);
+        }
     }
 
     public function createStore($asnHerders)
     {
-        if ($asnHerders->isEmpty())return null;
+        if (!$asnHerders) return null;
         /**
          * @var OwnerService $ownerService
          * @var WarehouseService $wareHouseService
          */
         $ownerService = app(OwnerService::class);
-        $owners=$ownerService->getByWmsOrders($asnHerders);
-        $wareHouseService=app(WarehouseService::class);
-        $warehouses=$wareHouseService->getByWms($asnHerders);
+        $wareHouseService = app(WarehouseService::class);
+//        $owners = $ownerService->getByWmsOrders($asnHerders);
+//        $warehouses = $wareHouseService->getByWmsOrders($asnHerders);
+        $owner_codes = [];
+        $warehouse_codes = [];
+        foreach ($asnHerders as $asnHerder) {
+            if (!empty($asnHerder['customerid']))
+                $owner_codes[$asnHerder['customerid']] = $asnHerder['customerid'];
+            if (!empty($asnHerder['warehouseid']))
+                $warehouse_codes[$asnHerder['warehouseid']] = $asnHerder['warehouseid'];
+        }
+        $owners = $ownerService->getOwnerByCodes($owner_codes);
+        $warehouses = $wareHouseService->getWareHouseByCode($warehouse_codes);
         foreach ($owners as $owner) {
             $owners_code_map[$owner->code] = $owner;
         }
         foreach ($warehouses as $warehouse) {
             $warehouses_code_map[$warehouse->code] = $warehouse;
         }
-
-        $params=$this->getParamsByAsnHeader($asnHerders,$owners_code_map,$warehouses_code_map);
-        if(count($params)> 0){
+        $params = $this->getParamsByAsnHeader($asnHerders, $owners_code_map, $warehouses_code_map);
+        if (count($params) > 0) {
             $this->insertStore($params);
         }
         /** @var StoreItemService $storeItemService */
         $storeItemService = app(StoreItemService::class);
         $storeItemService->storeItemCreateByWms($asnHerders);
         /** @var RejectedBillService $rejectedBillService */
-        $rejectedBillService=app(RejectedBillService::class);
+        $rejectedBillService = app(RejectedBillService::class);
         $rejectedBillService->syncLoadedStatusByAsnHerder($asnHerders);
-        unset($asnHerders,$owners_code_map,$warehouses_code_map);
+        unset($asnHerders, $owners_code_map, $warehouses_code_map);
     }
-    public function getParamsByAsnHeader($asnHerders,$owners_code_map,$warehouses_code_map)
+
+    public function getParamsByAsnHeader($asnHerders, $owners_code_map, $warehouses_code_map)
     {
         $params = [];
-        $stores = Store::query()->whereIn('asn_code',data_get($asnHerders,'*.asnno'))->get();
+        $stores = Store::query()->whereIn('asn_code', data_get($asnHerders, '*.asnno'))->get();
         $store_asn_code_map = [];
         foreach ($stores as $store) {
-            $store_asn_code_map[$store->asn_code]= $store;
+            $store_asn_code_map[$store->asn_code] = $store;
         }
         foreach ($asnHerders as $asnHerder) {
-            if($store_asn_code_map[$asnHerder->asnno] ?? false)continue;
+            if ($store_asn_code_map[$asnHerder->asnno] ?? false) continue;
             $owner = $owners_code_map[$asnHerder->customerid] ?? null;
-            $warehouse=$warehouses_code_map[$asnHerder->warehouseid] ?? null;
+            $warehouse = $warehouses_code_map[$asnHerder->warehouseid] ?? null;
             $params[] = [
                 'asn_code' => $asnHerder->asnno,
-                'warehouse_id' =>$warehouse->id??null,
-                'owner_id' => $owner->id??null,
-                'stored_method' =>$asnHerder->asnType?$asnHerder->asnType->codename_c:'',
-                'status' =>$asnHerder->asnStatus?$asnHerder->asnStatus->codename_c:'',
-                'remark' => $asnHerder->notes??null,
-                'created_at'=>$asnHerder->addtime??null,
-                'updated_at'=>$asnHerder->edittime??null,
+                'warehouse_id' => $warehouse->id ?? null,
+                'owner_id' => $owner->id ?? null,
+                'stored_method' => $asnHerder->asnType ? $asnHerder->asnType->codename_c : '',
+                'status' => $asnHerder->asnStatus ? $asnHerder->asnStatus->codename_c : '',
+                'remark' => $asnHerder->notes ?? '1111',
+                'created_at' => $asnHerder->addtime ?? null,
+                'updated_at' => $asnHerder->edittime ?? null,
             ];
         }
         return $params;
     }
-    public function insertStore(array $params){
-        if(count($params) === 0) return [];
+
+    public function insertStore(array $params)
+    {
+        if (count($params) === 0) return [];
         try {
             $this->insert($params);
-            LogService::log(__METHOD__,__FUNCTION__,'批量创建 store success'.count($params).json_encode($params));
+            LogService::log(__METHOD__, __FUNCTION__, '批量创建 store success' . count($params) . json_encode($params));
         } catch (\Exception $e) {
-            LogService::log(__METHOD__,__FUNCTION__,'批量创建 store error'.json_encode($params).'||'.$e->getMessage().'||'.$e->getTraceAsString());
+            dd($e->getMessage());
+            LogService::log(__METHOD__, __FUNCTION__, '批量创建 store error' . json_encode($params) . '||' . json_encode($e->getMessage()) . '||' . $e->getTraceAsString());
         }
     }
 
     public function updateStore($asnHerders)
     {
-        if(!$asnHerders || $asnHerders->count() == 0){return null;}
-        /** @var DataHandlerService $dataHandlerService */
-        $dataHandlerService =  app(DataHandlerService::class);
+        if (!$asnHerders || $asnHerders->count() == 0) return null;
+        /**
+         * @var DataHandlerService $dataHandlerService
+         * @var OwnerService $ownerService
+         * @var WarehouseService $wareHouseService
+         */
+        $ownerService = app(OwnerService::class);
+        $wareHouseService = app(WarehouseService::class);
+        $dataHandlerService = app(DataHandlerService::class);
         $stores = $this->getByWms($asnHerders);
-        $store_asn_code_map =  $dataHandlerService->dataHeader(['asn_code'],$stores);
-        $owners = app(OwnerService::class)->getByWmsOrders($asnHerders);
-        $owner_code_map = $dataHandlerService->dataHeader(['code'],$owners);
-        $warehouses = app(WarehouseService::class)->getByWms($asnHerders);
-        $warehouses_map = $dataHandlerService->dataHeader(['code'],$warehouses);
+        $store_asn_code_map = $dataHandlerService->dataHeader(['asn_code'], $stores);
+        $owner_codes = [];
+        $warehouse_codes = [];
+        foreach ($asnHerders as $asnHerder) {
+            if (!empty($asnHerder['customerid']))
+                $owner_codes[$asnHerder['customerid']] = $asnHerder['customerid'];
+            if (!empty($asnHerder['warehouseid']))
+                $warehouse_codes[$asnHerder['warehouseid']] = $asnHerder['warehouseid'];
+        }
+        $owners = $ownerService->getOwnerByCodes($owner_codes);
+        $warehouses = $wareHouseService->getWareHouseByCode($warehouse_codes);
+//        $owners = app(OwnerService::class)->getByWmsOrders($asnHerders);
+//        $warehouses = app(WarehouseService::class)->getByWmsOrders($asnHerders);
+        $owner_code_map = $dataHandlerService->dataHeader(['code'], $owners);
+        $warehouses_map = $dataHandlerService->dataHeader(['code'], $warehouses);
         $updateParams = [[
-            'id','asn_code','warehouse_id','owner_id','stored_method','status','remark','updated_at'
+            'id', 'asn_code', 'warehouse_id', 'owner_id', 'stored_method', 'status', 'remark', 'updated_at'
         ]];
         foreach ($asnHerders as $asnHerder) {
-            $store =$dataHandlerService->getKeyValue(['asn_code'=>$asnHerder->asnno],$store_asn_code_map);
-            if(!$store){continue;}
-            $owner = $dataHandlerService->getKeyValue(['code'=>$asnHerder->customerid] ,$owner_code_map);
-            $warehouse=$dataHandlerService->getKeyValue(['code'=>$asnHerder->warehouseid],$warehouses_map);
+            $store = $dataHandlerService->getKeyValue(['asn_code' => $asnHerder->asnno], $store_asn_code_map);
+            if (!$store) {
+                continue;
+            }
+            $owner = $dataHandlerService->getKeyValue(['code' => $asnHerder->customerid], $owner_code_map);
+            $warehouse = $dataHandlerService->getKeyValue(['code' => $asnHerder->warehouseid], $warehouses_map);
             $owner_id = $owner->id ?? null;
-            $warehouse_id=$warehouse->id??null;
+            $warehouse_id = $warehouse->id ?? null;
 
-            if( $store->asn_code != $asnHerder->asnno ||
-                $store->warehouse_id!=$warehouse_id ||
+            if ($store->asn_code != $asnHerder->asnno ||
+                $store->warehouse_id != $warehouse_id ||
                 $store->owner_id != $owner_id ||
-                $store->stored_method != $asnHerder->asnType->codename_c||
-                $store->status !=$asnHerder->asnStatus->codename_c||
-                $store->remark != $asnHerder->notes){
+                $store->stored_method != $asnHerder->asnType->codename_c ||
+                $store->status != $asnHerder->asnStatus->codename_c ||
+                $store->remark != $asnHerder->notes) {
                 $updateParams[] = [
-                    'id'=>$store->id,
-                    'asn_code'=>$asnHerder->asnno,
-                    'warehouse_id'=>$warehouse_id,
+                    'id' => $store->id,
+                    'asn_code' => $asnHerder->asnno,
+                    'warehouse_id' => $warehouse_id,
                     'owner_id' => $owner_id,
-                    'stored_method' =>$asnHerder->asnType?$asnHerder->asnType->codename_c:'',
-                    'status' =>$asnHerder->asnStatus?$asnHerder->asnStatus->codename_c:'',
+                    'stored_method' => $asnHerder->asnType ? $asnHerder->asnType->codename_c : '',
+                    'status' => $asnHerder->asnStatus ? $asnHerder->asnStatus->codename_c : '',
                     'remark' => $asnHerder->notes,
-                    'updated_at' =>$asnHerder->edittime,
-                    ];
+                    'updated_at' => $asnHerder->edittime,
+                ];
             }
         }
-        if(count($updateParams) > 1) $this->batchUpdate($updateParams);
-        $this->createStore($asnHerders);
+        if (count($updateParams) > 1) $this->batchUpdate($updateParams);
         /** @var StoreItemService $storeItemService */
         $storeItemService = app(StoreItemService::class);
         $storeItemService->storeItemUpdateByWms($asnHerders);
         /** @var RejectedBillService $rejectedBillService */
-        $rejectedBillService=app(RejectedBillService::class);
+        $rejectedBillService = app(RejectedBillService::class);
         $rejectedBillService->syncLoadedStatusByAsnHerder($asnHerders);
-        unset($updateParams,$asnHerders);
+        unset($updateParams, $asnHerders);
     }
-    public function insert($params){
+
+    public function insert($params)
+    {
         return Store::query()->insert($params);
     }
-    public function batchUpdate($params){
-        return app(BatchUpdateService::class)->batchUpdate('stores',$params);
+
+    public function batchUpdate($params)
+    {
+        return app(BatchUpdateService::class)->batchUpdate('stores', $params);
+    }
+
+    public function getByWms($asnHerders)
+    {
+        if (!$asnHerders) {
+            return null;
+        }
+        $asn_nos = array_unique(data_get($asnHerders, '*.asnno'));
+        return Store::query()->whereIn('asn_code', $asn_nos)->get();
     }
-    public function getByWms($asnHerders){
-        if(!$asnHerders){return null;}
-        $asn_nos = array_unique(data_get($asnHerders,'*.asnno'));
-        return Store::query()->whereIn('asn_code',$asn_nos)->get();
+
+    public function getAsnLastSyncAt($key, $type)
+    {
+        $last_time = ValueStore::query()->where('name', $key)->value('value');
+        if ($last_time) return $last_time;
+        if ($type == 'create') {
+            $store = Store::query()->orderByDesc('created_at')->first();
+            if ($store) return $store->created_at;
+        } else {
+            $store = Store::query()->orderByDesc('updated_at')->first();
+            if ($store) return $store->updated_at;
+        }
+        return Carbon::now()->subSeconds(65);
+    }
+
+    public function setAsnLastSyncAt($key, $last_time)
+    {
+        $asnLastSyncAt = ValueStore::query()->updateOrCreate([
+            'name' => $key,
+        ], [
+            'name' => $key,
+            'value' => $last_time,
+        ]);
+        LogService::log(__METHOD__, __FUNCTION__, '修改或更新' . $key . json_encode($asnLastSyncAt));
+        return $asnLastSyncAt;
+    }
+
+    public function getLastRecordsByRedis($set, $prefixKey, $asnHerders)
+    {
+        if (Cache::get($set)) {
+            $addAsnHerders = collect();
+            foreach ($asnHerders as $asnHerder) {
+                if (Cache::get($prefixKey . $asnHerder->customerid . '_' . $asnHerder->asnno)) continue;
+                $addAsnHerders->add($asnHerder);
+            }
+            return $addAsnHerders;
+        }
+        return $asnHerders;
+    }
+
+    public function deleteCacheKey($set, $keys)
+    {
+        if (Cache::get($set)) {
+            $cacheKeys = Cache::get($keys);
+            if (!$cacheKeys) return;
+            foreach ($cacheKeys as $cacheKey) {
+                Cache::forget($cacheKey);
+            }
+            Cache::forget($keys);
+        }
+    }
+
+    public function setLastRecordsByRedis($prefixKey, $set, $keys, $last_records)
+    {
+            $cacheKeys = [];
+            foreach ($last_records as $last_record) {
+                Cache::put($prefixKey . $last_record->customerid . '_' . $last_record->asnno, true);
+                array_push($cacheKeys, $prefixKey . $last_record->customerid . '_' . $last_record->asnno);
+            }
+            Cache::put($keys, $cacheKeys);
+            Cache::put($set, true);
     }
 }

+ 5 - 44
app/Services/WarehouseService.php

@@ -7,15 +7,10 @@ use App\Owner;
 use App\Warehouse;
 use Illuminate\Support\Collection;
 use Carbon\Carbon;
+use Illuminate\Support\Facades\Cache;
 
 Class WarehouseService
 {
-    /** @var CacheService $cacheService */
-    private $cacheService;
-    function __construct(){
-        $this->cacheService=app('CacheService');
-    }
-
     public function firstOrCreate(array $params, array $values = null)
     {
         if ($values) return Warehouse::query()->firstOrCreate($params, $values);
@@ -64,57 +59,23 @@ Class WarehouseService
         }
         return  $collet;
     }
-    public function getByWms($asnHerders)
-    {
-        $warehouseids = array_unique(data_get($asnHerders, '*.warehouseid'));
-        $warehouseids = array_diff($warehouseids, [null, '', '*']);
-        $warehouses = Warehouse::query()->whereIn('code', $warehouseids)->get();
-        if ($warehouses->count() < count($warehouseids)) {
-            $warehouseids = array_diff($warehouseids, data_get($warehouses, '*.code'));
-            $warehouse_list = $this->createWarehouseByWms($warehouseids);
-            $warehouses=$warehouses->concat($warehouse_list);
-        }
-        return $warehouses;
-    }
-
-    public function createWarehouseByWms($codes)
-    {
-        if(!$codes) {return [];}
-        $insert_params = [];
-        $created_at = Carbon::now()->format('Y-m-d H:i:s');
-        foreach ($codes as $item) {
-            $insert_params[] = [
-                'code' => $item,
-                'name' => $item,
-                'created_at' => $created_at,
-            ];
-        }
-        try {
-            if (count($insert_params) > 0) {
-                $this->insert($insert_params);
-                LogService::log(__METHOD__, __FUNCTION__, '批量创建 warehouse success' . count($insert_params) . json_encode($insert_params) );
-            }
-        } catch (\Exception $e) {
-            LogService::log(__METHOD__, __FUNCTION__, '批量创建 warehouse error' . json_encode($insert_params) . '||' . $e->getMessage() . '||' . $e->getTraceAsString());
-        } finally {
-            return Warehouse::query()->whereIn('code', $codes)->get();
-        }
-    }
     public function insert($fillables){
         return Warehouse::query()->insert($fillables);
     }
 
     public function getWareHouseByCode($codes)
     {
+
         $collect = collect();
         if(count($codes)==0)return $collect;
         foreach ($codes as $code) {
-            $collect->push($this->cacheService->getOrExecute("WareHouse_{$code}",function()use($code){
+            $collect->push(Cache::remember("WareHouse_{$code}",null,function ()use($code){
                 $wareHouse =  Warehouse::query()->where('code',$code)->first();
                 if($wareHouse)return $wareHouse;
                 $bas_customer = OracleBasCustomer::query()->selectRaw('Customer_Type,CustomerId,Descr_C')->where('CustomerId',$code)->where('Customer_Type','WH')->first();
+                if (!$bas_customer) return null;
                 return Warehouse::query()->create(['name'=>$bas_customer['descr_c'],'code'=>$bas_customer['customerid']]);
-            }),config('cache.expirations.forever'));
+            }));
         }
         return $collect;
     }

+ 1 - 1
config/cache.php

@@ -10,7 +10,7 @@ return [
         'rarelyChange'=>60,
         'commonFrequent'=>20,
         'owners'=>20,
-        'forever' =>null
+        'forever'=>null,
     ],
     /*
     |--------------------------------------------------------------------------

+ 24 - 0
config/sync.php

@@ -7,6 +7,30 @@ return [
     'asn_sync' => [
         'interval' => 1,   // 时间以分为单位
         'start_at'=> '',    // 开始同步WMS的时间  时间格式: yyyy-MM-dd HH:mm:ss 如 2020-09-05 13:15:16
+        'created_at'=>'asn_last_created_sync_at',
+        'updated_at'=>'asn_last_updated_sync_at',
+        'cache_prefix'=>[
+            'create_set'=>'asn_create_has_set',
+            'create_keys'=>'asn_create_keys',
+            'create'=>'asn_create_',
+            'update_set'=>'asn_update_has_set',
+            'update_keys'=>'asn_update_keys',
+            'update'=>'asn_update_',
+        ]
+    ],
+    'commodity_sync' => [
+        'interval' => 1,   // 时间以分为单位
+        'start_at'=> '',    // 开始同步WMS的时间  时间格式: yyyy-MM-dd HH:mm:ss
+        'created_at'=>'commodity_last_created_sync_at',
+        'updated_at'=>'commodity_last_updated_sync_at',
+        'cache_prefix'=>[
+            'create_set'=>'commodity_create_has_set',
+            'create_keys'=>'commodity_create_keys',
+            'create'=>'commodity_create_',
+            'update_set'=>'commodity_update_has_set',
+            'update_keys'=>'commodity_update_keys',
+            'update'=>'commodity_update_',
+        ]
     ],
     'order_sync' => [
         'enabled' => true,

+ 2 - 2
package-lock.json

@@ -6254,7 +6254,7 @@
         },
         "minimist": {
             "version": "1.2.0",
-            "resolved": "https://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz",
+            "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
             "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
             "dev": true
         },
@@ -8840,7 +8840,7 @@
         },
         "socket.io-client": {
             "version": "2.3.0",
-            "resolved": "https://registry.npm.taobao.org/socket.io-client/download/socket.io-client-2.3.0.tgz",
+            "resolved": "https://registry.npm.taobao.org/socket.io-client/download/socket.io-client-2.3.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsocket.io-client%2Fdownload%2Fsocket.io-client-2.3.0.tgz",
             "integrity": "sha1-FNW6LgC5vNFFrkQ6uWs/hsvMG7Q=",
             "requires": {
                 "backo2": "1.0.2",

+ 2 - 2
phpunit.xml

@@ -34,8 +34,8 @@
         <server name="APP_ENV" value="testing"/>
         <server name="BCRYPT_ROUNDS" value="4"/>
         <server name="CACHE_DRIVER" value="redis"/>
-        <server name="DB_CONNECTION" value="sqlite"/>
-        <server name="DB_DATABASE" value=":memory:"/>
+<!--        <server name="DB_CONNECTION" value="sqlite"/>-->
+<!--        <server name="DB_DATABASE" value=":memory:"/>-->
         <server name="MAIL_DRIVER" value="array"/>
         <server name="QUEUE_CONNECTION" value="sync"/>
         <server name="SESSION_DRIVER" value="array"/>

+ 2 - 2
tests/Services/RejectedBillService/GetLogisticNumberTest.php

@@ -50,13 +50,13 @@ class GetLogisticNumberTest extends TestCase
         $addUpdateCollect=$this->service->getUpdateCollect($this->asnHeaders);
         if ($addUpdateCollect){
             $addLogisticNumber=$this->service->getLogisticNumberReturn($addUpdateCollect);
-            $this->assertNotEmpty($addLogisticNumber);
+            $this->assertNotNull($addLogisticNumber);
         }
         if (empty($this->asnHeadersEdit))return null;
         $editUpdateCollect=$this->service->getUpdateCollect($this->asnHeadersEdit);
         if ($editUpdateCollect){
             $editLogisticNumber=$this->service->getLogisticNumberReturn($editUpdateCollect);
-            $this->assertNotEmpty($editLogisticNumber);
+            $this->assertNotNull($editLogisticNumber);
         }
     }
 }

+ 4 - 4
tests/Services/RejectedBillService/GetUpdateCollectTest.php

@@ -49,16 +49,16 @@ class GetUpdateCollectTest extends TestCase
         if (empty($this->asnHeaders))return null;
         $addUpdateCollect=$this->service->getUpdateCollect($this->asnHeaders);
         if ($addUpdateCollect){
-            $this->assertNotEmpty($addUpdateCollect);
+            $this->assertNotNull($addUpdateCollect);
         }else{
-            $this->assertEmpty($addUpdateCollect);
+            $this->assertNull($addUpdateCollect);
         }
         if (empty($this->asnHeadersEdit))return null;
         $editUpdateCollect=$this->service->getUpdateCollect($this->asnHeadersEdit);
         if ($editUpdateCollect){
-            $this->assertNotEmpty($editUpdateCollect);
+            $this->assertNotNull($editUpdateCollect);
         }else{
-            $this->assertEmpty($editUpdateCollect);
+            $this->assertNull($editUpdateCollect);
         }
     }
 }

+ 13 - 3
tests/Services/RejectedBillService/SyncLoadedStatusByAsnHeaderTest.php

@@ -35,12 +35,22 @@ class SyncLoadedStatusByAsnHeaderTest extends TestCase
             ->get();
     }
     public function testSyncLoadedStatusByAsnHeaderTest(){
-        if (empty($this->asnHeaders))return null;
+        if (empty($this->asnHeaders)){
+            $this->assertNull($this->asnHeaders);
+            return;
+        }
         $updateCollect=$this->service->getUpdateCollect($this->asnHeaders);
-        if ($updateCollect->isEmpty())return null;
+        if ($updateCollect->isEmpty()){
+            $this->assertEmpty($updateCollect);
+            return;
+        }
         $logisticNumberReturn=$this->service->getLogisticNumberReturn($updateCollect);
+        if (count($logisticNumberReturn)==0) return;
         $rejectedBills=$this->service->getRejectedBills($logisticNumberReturn);
-        if ($rejectedBills->isEmpty())return null;
+        if ($rejectedBills->isEmpty()){
+            $this->assertEmpty($rejectedBills);
+            return null;
+        }
         $this->assertNull($rejectedBills);
         $this->service->syncLoadedStatusByAsnHerder($this->asnHeaders);
         $this->assertNull($logisticNumberReturn);

+ 4 - 1
tests/Services/StoreService/CreateStoreTest.php

@@ -7,11 +7,13 @@ namespace Tests\Services\StoreService;
 use App\OracleDOCASNHeader;
 use App\Services\StoreService;
 use Carbon\Carbon;
+use Illuminate\Foundation\Testing\RefreshDatabase;
 use Illuminate\Support\Facades\DB;
 use Tests\TestCase;
 
 class CreateStoreTest extends TestCase
 {
+//    use RefreshDatabase;
     /** @var StoreService $service */
     public $service;
     public $asnHeaders;
@@ -32,7 +34,7 @@ class CreateStoreTest extends TestCase
         if (!$this->asnHeaders) return null;
         $this->service->createStore($this->asnHeaders);
         $this->stores=$this->service->getByWms($this->asnHeaders);
-        $this->assertNotEmpty($this->stores);
+        $this->assertNotnull($this->stores);
         $this->assertNotNull($this->asnHeaders);
     }
     public function tearDown(): void
@@ -43,6 +45,7 @@ class CreateStoreTest extends TestCase
         }
         DB::table('stores')->whereIn('asn_code',data_get($this->asnHeaders,'*.asnno'))->delete();
         DB::table('store_items')->whereIn('store_id',$storeIds)->delete();
+        cache()->flush();
         parent::tearDown(); // TODO: Change the autogenerated stub
     }
 }

+ 41 - 0
tests/Services/StoreService/GetAsnSyncAtTest.php

@@ -0,0 +1,41 @@
+<?php
+
+namespace Tests\Services\OrderService;
+
+use App\Services\OrderService;
+use App\Services\StoreService;
+use Illuminate\Foundation\Testing\RefreshDatabase;
+use Tests\TestCase;
+
+class GetAsnSyncAtTest extends TestCase
+{
+    /**
+     * @var StoreService $service
+     */
+    private $service;
+    public function setUp(): void
+    {
+        parent::setUp(); // TODO: Change the autogenerated stub
+        $this->service = app(StoreService::class);
+    }
+
+    /**
+     * @test
+     */
+    public function getCreatedAsnSyncAt()
+    {
+        $key = config('sync.asn_sync.created_at');
+        $data = $this->service->getAsnLastSyncAt($key,'create');
+        $this->assertNotEmpty($data);
+    }
+
+    /**
+     * @test
+     */
+    public function getUpdatedAsnSyncAt()
+    {
+        $key = config('sync.asn_sync.updated_at');
+        $data = $this->service->getAsnLastSyncAt($key,'update');
+        $this->assertNotEmpty($data);
+    }
+}

+ 1 - 1
tests/Services/StoreService/GetParamsByAsnHeaderTest.php

@@ -42,7 +42,7 @@ class GetParamsByAsnHeaderTest extends TestCase
         if (empty($this->asnHeaders))return null;
         $stores = Store::query()->whereIn('asn_code',data_get($this->asnHeaders,'*.asnno'))->get();
         $owners=$this->ownerService->getByWmsOrders($this->asnHeaders);
-        $warehouses=$this->warehouseService->getByWms($this->asnHeaders);
+        $warehouses=$this->warehouseService->getByWmsOrders($this->asnHeaders);
         $this->assertNotEmpty($this->asnHeaders);
         $this->assertNotEmpty($owners);
         $this->assertNotEmpty($warehouses);

+ 1 - 2
tests/Services/StoreService/InsertStoreTest.php

@@ -41,8 +41,7 @@ class InsertStoreTest extends TestCase
         array_push($this->params,$data2);
     }
     public  function testInsertStore(){
-        $stores=$this->service->insertStore($this->params);
-        $this->assertNotEmpty($stores);
+        $this->service->insertStore($this->params);
         $this->assertDatabaseHas('stores',$this->params[0]);
     }
      public function tearDown(): void

+ 52 - 0
tests/Services/StoreService/SetAsnSyncAtTest.php

@@ -0,0 +1,52 @@
+<?php
+
+namespace Tests\Services\OrderService;
+
+use App\Services\OrderService;
+use App\Services\StoreService;
+use App\ValueStore;
+use Carbon\Carbon;
+use Illuminate\Foundation\Testing\RefreshDatabase;
+use Illuminate\Foundation\Testing\WithFaker;
+use Illuminate\Support\Str;
+use Tests\TestCase;
+
+class SetAsnSyncAtTest extends TestCase
+{
+    /** @var StoreService $service */
+    private $service;
+    private $created_at;
+    private $original_value;
+    public function setUp(): void
+    {
+        parent::setUp(); // TODO: Change the autogenerated stub
+        $this->service = app(StoreService::class);
+        $this->created_at = config('sync.asn_sync.created_at');
+    }
+
+    /**
+     * @test
+     */
+    public function testSetAsnSyncAt()
+    {
+        /** @var Carbon $time */
+
+        $data = Carbon::now();
+        $this->original_value=ValueStore::query()->where('name',$this->created_at)->value('value');
+
+        $this->service->setAsnLastSyncAt($this->created_at,$data);
+        $value=ValueStore::query()->where('name',$this->created_at)->value('value');
+        $this->assertEquals((string)$data,(string)$value);
+    }
+
+    public function tearDown(): void
+    {
+        ValueStore::query()->updateOrCreate([
+            'name' => $this->created_at,
+        ], [
+            'name' => $this->created_at,
+            'value' => $this->original_value,
+        ]);
+        parent::tearDown(); // TODO: Change the autogenerated stub
+    }
+}

+ 91 - 0
tests/Services/StoreService/SetLastRecordsByRedisTest.php

@@ -0,0 +1,91 @@
+<?php
+
+namespace Tests\Services\OrderService;
+
+use App\OracleDOCASNHeader;
+use App\Services\StoreService;
+use Illuminate\Support\Facades\Cache;
+use Tests\TestCase;
+
+class SetLastRecordsByRedisTest extends TestCase
+{
+    /** @var StoreService $service */
+    public $service;
+    public $data;
+    public $create_set;
+    public $create_keys;
+    public $create_key;
+    public $update_set;
+    public $update_keys;
+    public $update_key;
+    public $createRecord;
+    public $updateRecord;
+    public function setUp(): void
+    {
+        parent::setUp(); // TODO: Change the autogenerated stub
+        $this->service = app(StoreService::class);
+        $this->create_set = config('sync.asn_sync.cache_prefix.create_set');
+        $this->create_keys = config('sync.asn_sync.cache_prefix.create_keys');
+        $this->create_key = config('sync.asn_sync.cache_prefix.create');
+        $this->update_set = config('sync.asn_sync.cache_prefix.update_set');
+        $this->update_keys = config('sync.asn_sync.cache_prefix.update_keys');
+        $this->update_key = config('sync.asn_sync.cache_prefix.update');
+    }
+    /**
+     * @test
+     */
+    public function testSetLastRecordsByRedisCreated()
+    {
+        $this->createRecord=collect();
+        $last_record=OracleDOCASNHeader::query()->orderByDesc('addtime')->first();
+        $this->createRecord->add($last_record);
+        if (!Cache::get($this->create_set)){
+            $this->assertNull(Cache::get($this->create_set));
+            $this->assertNotNull($this->createRecord);
+            return;
+        }
+        $this->service->setLastRecordsByRedis($this->create_key,$this->create_set,$this->create_keys,$this->createRecord);
+        $this->assertNotNull($this->createRecord);
+        $this->assertEquals(true,Cache::get($this->create_set));
+        $this->assertNotNull(Cache::get($this->create_keys));
+    }
+
+    /**
+     * @test
+     */
+    public function testSetLastRecordsByRedisUpdated()
+    {
+        $this->updateRecord=collect();
+        $last_record=OracleDOCASNHeader::query()->orderByDesc('edittime')->first();
+        $this->updateRecord->add($last_record);
+        if (!Cache::get($this->update_set)){
+            $this->assertNull(Cache::get($this->update_set));
+            $this->assertNotNull($this->updateRecord);
+            return;
+        }
+        $this->service->setLastRecordsByRedis($this->update_key,$this->update_set,$this->update_keys,$this->updateRecord);
+        $this->assertNotNull($this->updateRecord);
+        $this->assertEquals(true,Cache::get($this->update_set));
+        $this->assertNotNull(Cache::get($this->update_keys));
+    }
+
+    public function tearDown(): void
+    {
+        if (!Cache::get($this->create_set)) return;
+        $cacheKeys = Cache::get($this->create_keys);
+        if (!$cacheKeys) return;
+        foreach ($cacheKeys as $cacheKey) {
+            Cache::forget($cacheKey);
+        }
+        Cache::forget($this->create_keys);
+
+        if (!Cache::get($this->update_set)) return;
+        $cacheKeys = Cache::get($this->update_keys);
+        if (!$cacheKeys) return;
+        foreach ($cacheKeys as $cacheKey) {
+            Cache::forget($cacheKey);
+        }
+        Cache::forget($this->update_keys);
+        parent::tearDown(); // TODO: Change the autogenerated stub
+    }
+}

+ 81 - 0
tests/Services/StoreService/SyncStoreCreateByWmsTest.php

@@ -0,0 +1,81 @@
+<?php
+
+namespace Tests\Services\OrderService\SyncOrderTest;
+
+use App\Logistic;
+use App\OracleDOCASNHeader;
+use App\Owner;
+use App\Services\common\DataHandlerService;
+use App\Services\LogisticService;
+use App\OracleDOCOrderHeader;
+use App\Services\OracleDOCOrderHeaderService;
+use App\Services\OrderService;
+use App\Services\OwnerService;
+use App\Services\ShopService;
+use App\Services\StoreService;
+use App\Services\WarehouseService;
+use App\Shop;
+use App\ValueStore;
+use App\Warehouse;
+use Carbon\Carbon;
+use Illuminate\Foundation\Testing\RefreshDatabase;
+use Illuminate\Foundation\Testing\WithFaker;
+use Illuminate\Support\Facades\DB;
+use Tests\TestCase;
+
+class SyncStoreCreateByWmsTest extends TestCase
+{
+    /**
+     * @var StoreService $service
+     */
+    public $service;
+    public $stores;
+    public $asnHeaders;
+    public $created_at;
+    public $last_time;
+    public function setUp(): void
+    {
+        parent::setUp();
+        $this->service=app(StoreService::class);
+    }
+
+    /**
+     * @test
+     */
+    public function testStoreCreateByWms()
+    {
+        $this->created_at = config('sync.asn_sync.created_at');
+        $this->last_time = ValueStore::query()->where('name',$this->created_at)->value('value');
+        if (!$this->last_time) $time=Carbon::now()->subSeconds(65);
+        $this->asnHeaders=OracleDOCASNHeader::query()
+            ->with(['asnType', 'asnStatus', 'asnDetails' => function ($query) {
+                $query->with(['lineStatus', 'qualityStatus','basSku']);
+            }])
+            ->select('asnno','asnstatus','asntype','addtime','edittime','customerid','notes','warehouseid','asnreference3')
+            ->where('addTime', '>=',  $this->last_time??$time)
+            ->orderByDesc('addtime')
+            ->get();
+        $this->service->storeCreateByWms();
+        $this->stores = $this->service->getByWms($this->asnHeaders);
+        $this->assertNotNull($this->stores);
+        $this->assertEquals(count($this->asnHeaders),count($this->stores));
+    }
+
+    public function tearDown(): void
+    {
+        ValueStore::query()->updateOrCreate([
+            'name' => $this->created_at,
+        ], [
+            'name' => $this->created_at,
+            'value' => $this->last_time,
+        ]);
+        $storeIds=[];
+        foreach ($this->stores as $store){
+            array_push($storeIds,$store->id);
+        }
+        DB::table('stores')->whereIn('asn_code',data_get($this->asnHeaders,'*.asnno'))->delete();
+        DB::table('store_items')->whereIn('store_id',$storeIds)->delete();
+        cache()->flush();
+        parent::tearDown(); // TODO: Change the autogenerated stub
+    }
+}

+ 82 - 0
tests/Services/StoreService/SyncStoreUpdateByWmsTest.php

@@ -0,0 +1,82 @@
+<?php
+
+namespace Tests\Services\OrderService\SyncOrderTest;
+
+use App\Logistic;
+use App\OracleDOCASNHeader;
+use App\Owner;
+use App\Services\common\DataHandlerService;
+use App\Services\LogisticService;
+use App\OracleDOCOrderHeader;
+use App\Services\OracleDOCOrderHeaderService;
+use App\Services\OrderService;
+use App\Services\OwnerService;
+use App\Services\ShopService;
+use App\Services\StoreService;
+use App\Services\WarehouseService;
+use App\Shop;
+use App\ValueStore;
+use App\Warehouse;
+use Carbon\Carbon;
+use Illuminate\Foundation\Testing\RefreshDatabase;
+use Illuminate\Foundation\Testing\WithFaker;
+use Illuminate\Support\Facades\DB;
+use Tests\TestCase;
+
+class SyncStoreUpdateByWmsTest extends TestCase
+{
+    /**
+     * @var StoreService $service
+     */
+    public $service;
+    public $stores;
+    public $asnHeaders;
+    public $update_at;
+    public $last_time;
+    public function setUp(): void
+    {
+        parent::setUp();
+        $this->service=app(StoreService::class);
+    }
+
+    /**
+     * @test
+     */
+    public function testStoreUpdateByWms()
+    {
+        $this->update_at = config('sync.asn_sync.updated_at');
+        $this->last_time = ValueStore::query()->where('name',$this->update_at)->value('value');
+        if (!$this->last_time) $time=Carbon::now()->subSeconds(65);
+        $this->asnHeaders=OracleDOCASNHeader::query()
+            ->with(['asnType', 'asnStatus', 'asnDetails' => function ($query) {
+                $query->with(['lineStatus', 'qualityStatus','basSku']);
+            }])
+            ->select('asnno','asnstatus','asntype','addtime','edittime','customerid','notes','warehouseid','asnreference3')
+            ->where('EditTime', '>=', $this->last_time ?? $time)
+            ->whereColumn('EditTime', '<>', 'addTime')
+            ->orderByDesc('EditTime')
+            ->get();
+        $this->service->storeUpdateByWms();
+        $this->stores = $this->service->getByWms($this->asnHeaders);
+        $this->assertNotNull($this->stores);
+        $this->assertEquals(count($this->asnHeaders),count($this->stores));
+    }
+
+    public function tearDown(): void
+    {
+        ValueStore::query()->updateOrCreate([
+            'name' => $this->update_at,
+        ], [
+            'name' => $this->update_at,
+            'value' => $this->last_time,
+        ]);
+        $storeIds=[];
+        foreach ($this->stores as $store){
+            array_push($storeIds,$store->id);
+        }
+        DB::table('stores')->whereIn('asn_code',data_get($this->asnHeaders,'*.asnno'))->delete();
+        DB::table('store_items')->whereIn('store_id',$storeIds)->delete();
+        cache()->flush();
+        parent::tearDown(); // TODO: Change the autogenerated stub
+    }
+}

+ 0 - 69
tests/Services/StoreService/SyncWmsAsnDataTest.php

@@ -1,69 +0,0 @@
-<?php
-
-
-namespace Tests\AsnSync\Services;
-
-
-use App\OracleDOCASNHeader;
-use App\Services\StoreService;
-use Illuminate\Support\Facades\DB;
-use Tests\TestCase;
-
-class SyncWmsAsnDataTest extends TestCase
-{
-    /** @var StoreService $service */
-    public $service;
-    public $asnHeaders;
-    public $asnHeadersEdit;
-    public $asnHeadersTotal;
-    public $startDate;
-    public $stores;
-    public function setUp(): void
-    {
-
-        parent::setUp(); // TODO: Change the autogenerated stub
-        $this->startDate = \Illuminate\Support\Carbon::now()->subSeconds(300);
-        $this->service = app(StoreService::class);
-        $this->asnHeaders = OracleDOCASNHeader::query()
-            ->with(['asnType', 'asnStatus', 'asnDetails' => function ($query) {
-                $query->with(['lineStatus', 'qualityStatus', 'basSku']);
-            }])
-            ->where('addTime', '>=', $this->startDate)
-            ->get();
-        $this->asnHeadersEdit = OracleDOCASNHeader::query()
-            ->with(['asnType', 'asnStatus', 'asnDetails' => function ($query) {
-                $query->with(['lineStatus', 'qualityStatus', 'basSku']);
-            }])
-            ->where('EditTime', '>=', $this->startDate)
-            ->whereColumn('EditTime', '<>', 'addTime')
-            ->get();
-    }
-
-
-    public function testSyncWmsAsnData()
-    {
-          if (!$this->asnHeaders && !$this->asnHeadersEdit) return null;
-        if (!empty($this->asnHeadersEdit)){
-            foreach ($this->asnHeadersEdit as $asnHerder)
-                $this->asnHeaders->add($asnHerder);
-        }
-        if ($this->asnHeaders) {
-            $this->service->syncWmsAsnData($this->startDate);
-            $this->stores = $this->service->getByWms($this->asnHeaders);
-            $this->assertNotEmpty($this->stores);
-        } else {
-            $this->assertNull($this->asnHeaders);
-        }
-    }
-
-    public function tearDown(): void
-    {
-        $storeIds = [];
-        foreach ($this->stores as $store) {
-            array_push($storeIds, $store->id);
-        }
-        DB::table('stores')->whereIn('asn_code', data_get($this->asnHeaders, '*.asnno'))->delete();
-        DB::table('store_items')->whereIn('store_id', $storeIds)->delete();
-        parent::tearDown(); // TODO: Change the autogenerated stub
-    }
-}

+ 2 - 1
tests/Services/StoreService/UpdateStoreTest.php

@@ -35,7 +35,7 @@ class UpdateStoreTest extends TestCase
         }else{
             $this->service->updateStore($this->asnHeaders);
             $this->stores=$this->service->getByWms($this->asnHeaders);
-            $this->assertNotEmpty($this->stores);
+            $this->assertNotNull($this->stores);
         }
     }
     public function tearDown(): void
@@ -46,6 +46,7 @@ class UpdateStoreTest extends TestCase
         }
         DB::table('stores')->whereIn('asn_code',data_get($this->asnHeaders,'*.asnno'))->delete();
         DB::table('store_items')->whereIn('store_id',$storeIds)->delete();
+        cache()->flush();
         parent::tearDown(); // TODO: Change the autogenerated stub
     }
 }

+ 0 - 2
tests/Unit/EchoTest.php

@@ -2,8 +2,6 @@
 
 namespace Tests\Unit;
 
-use App\Services\CacheService;
-use Illuminate\Support\Facades\Cache;
 use Tests\TestCase;
 
 class EchoTest extends TestCase

Некоторые файлы не были показаны из-за большого количества измененных файлов