Pārlūkot izejas kodu

asn同步修改对比货主和仓库

haozi 5 gadi atpakaļ
vecāks
revīzija
d69a86a5c3

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

@@ -1208,8 +1208,10 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
     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(){
         /**

+ 17 - 0
app/Services/OwnerService.php

@@ -9,6 +9,7 @@ use Carbon\Carbon;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Support\Collection;
 use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\Cache;
 
 Class OwnerService
 {
@@ -216,4 +217,20 @@ Class OwnerService
         return $builder;
     }
 
+    public function getOwnerByCodes($codes)
+    {
+        $collect = collect();
+        if(count($codes) == 0)return $collect;
+        foreach ($codes as $code) {
+            $collect->push(Cache::remember("getOwnerByCodes_{$code}", null, function ()use($code){
+                $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();
     }
 }

+ 43 - 20
app/Services/StoreService.php

@@ -51,15 +51,15 @@ Class StoreService
         $oracleDocAsnHerderService = app(OracleDocAsnHerderService::class);
         $last_time = $this->getAsnLastSyncAt($created_at, 'create');
         $asnHerders = $oracleDocAsnHerderService->getWmsAsnOnStartDateCreate($last_time);
-        $last_time=$asnHerders->first()['addtime'];
+        $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);
+            $this->setLastRecordsByRedis($create_key, $create_set, $create_keys, $last_records);
+            $this->setAsnLastSyncAt($created_at, $last_time);
         }
     }
 
@@ -74,7 +74,7 @@ Class StoreService
         $oracleDocAsnHerderService = app(OracleDocAsnHerderService::class);
         $last_time = $this->getAsnLastSyncAt($updated_at, 'update');
         $asnHerders = $oracleDocAsnHerderService->getWmsAsnOnStartDateEdit($last_time);
-        $last_time=$asnHerders->first()['edittime'];
+        $last_time = $asnHerders->first()['edittime'];
         $last_records = $asnHerders->where('edittime', $last_time);
         if (!$asnHerders) return;
         $addAsnHerders = $this->getLastRecordsByRedis($update_set, $update_key, $asnHerders);
@@ -82,8 +82,8 @@ Class StoreService
             $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);
+            $this->setLastRecordsByRedis($update_key, $update_set, $update_keys, $last_records);
+            $this->setAsnLastSyncAt($updated_at, $last_time);
         }
     }
 
@@ -95,9 +95,19 @@ Class StoreService
          * @var WarehouseService $wareHouseService
          */
         $ownerService = app(OwnerService::class);
-        $owners = $ownerService->getByWmsOrders($asnHerders);
         $wareHouseService = app(WarehouseService::class);
-        $warehouses = $wareHouseService->getByWmsOrders($asnHerders);
+//        $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;
         }
@@ -149,23 +159,38 @@ Class StoreService
         try {
             $this->insert($params);
             LogService::log(__METHOD__, __FUNCTION__, '批量创建 store success' . count($params) . json_encode($params));
-        } catch (\Exception $e) {dd($e->getMessage());
-            LogService::log(__METHOD__, __FUNCTION__, '批量创建 store error' . json_encode($params) . '||' .json_encode($e->getMessage())  . '||' . $e->getTraceAsString());
+        } catch (\Exception $e) {
+            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 */
+        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_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 = app(WarehouseService::class)->getByWmsOrders($asnHerders);
         $warehouses_map = $dataHandlerService->dataHeader(['code'], $warehouses);
         $updateParams = [[
             'id', 'asn_code', 'warehouse_id', 'owner_id', 'stored_method', 'status', 'remark', 'updated_at'
@@ -241,7 +266,7 @@ Class StoreService
         return Carbon::now()->subSeconds(65);
     }
 
-    public function setAsnLastSyncAt($key,$last_time)
+    public function setAsnLastSyncAt($key, $last_time)
     {
         $asnLastSyncAt = ValueStore::query()->updateOrCreate([
             'name' => $key,
@@ -278,9 +303,8 @@ Class StoreService
         }
     }
 
-    public function setLastRecordsByRedis($prefixKey,$set,$keys,$last_records)
+    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->asnno, true);
@@ -288,6 +312,5 @@ Class StoreService
             }
             Cache::put($keys, $cacheKeys);
             Cache::put($set, true);
-        }
     }
 }

+ 17 - 1
app/Services/WarehouseService.php

@@ -7,10 +7,10 @@ use App\Owner;
 use App\Warehouse;
 use Illuminate\Support\Collection;
 use Carbon\Carbon;
+use Illuminate\Support\Facades\Cache;
 
 Class WarehouseService
 {
-
     public function firstOrCreate(array $params, array $values = null)
     {
         if ($values) return Warehouse::query()->firstOrCreate($params, $values);
@@ -57,4 +57,20 @@ Class WarehouseService
         return Warehouse::query()->insert($fillables);
     }
 
+    public function getWareHouseByCode($codes)
+    {
+
+        $collect = collect();
+        if(count($codes)==0)return $collect;
+        foreach ($codes as $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']]);
+            }));
+        }
+        return $collect;
+    }
 }

+ 9 - 2
tests/Services/RejectedBillService/SyncLoadedStatusByAsnHeaderTest.php

@@ -35,10 +35,17 @@ 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()){
             $this->assertEmpty($rejectedBills);

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

@@ -45,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
     }
 }

+ 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
+    }
+}

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

@@ -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
     }
 }