Explorar o código

Merge branch 'zengjun' of ssh://was.baoshi56.com:10022/var/git/bswas

LD %!s(int64=5) %!d(string=hai) anos
pai
achega
a665f7c52d
Modificáronse 42 ficheiros con 1215 adicións e 654 borrados
  1. 65 57
      app/Console/Commands/SyncWMSOrderTask.php
  2. 2 2
      app/Http/Controllers/OrderIssueController.php
  3. 13 3
      app/Http/Controllers/TestController.php
  4. 1 18
      app/Order.php
  5. 0 25
      app/Services/CommodityService.php
  6. 1 1
      app/Services/LogisticService.php
  7. 1 1
      app/Services/OracleDOCOrderHeaderService.php
  8. 197 161
      app/Services/OrderCommodityService.php
  9. 51 30
      app/Services/OrderPackageCommoditiesService.php
  10. 23 77
      app/Services/OrderPackageService.php
  11. 46 24
      app/Services/OrderService.php
  12. 2 2
      app/Services/OwnerService.php
  13. 1 1
      app/Services/ShopService.php
  14. 7 1
      config/sync.php
  15. 4 4
      database/factories/OrcaleDOCOrderHeaderFactory.php
  16. 5 1
      database/factories/OrderCommodityFactory.php
  17. 67 0
      tests/Services/OrderCommodityService/GetReGroupActAllocationDetailsTest.php
  18. 0 65
      tests/Services/OrderCommodityService/SyncOrderCommoditiesTest.php
  19. 91 0
      tests/Services/OrderCommodityService/SyncOrderCommodityTest.php
  20. 0 1
      tests/Services/OrderPackageService/GetInnerParamsTest.php
  21. 64 11
      tests/Services/OrderPackageService/SyncOrderPackageTest.php
  22. 0 39
      tests/Services/OrderPackageService/SyncPackageByOrderHeadersTest.php
  23. 0 1
      tests/Services/OrderService/CreateOrFindOrderInfoTest.php
  24. 0 1
      tests/Services/OrderService/CreateOrFindOrderTest.php
  25. 0 2
      tests/Services/OrderService/FindOrCreateByClientCodeTest.php
  26. 53 0
      tests/Services/OrderService/GetByWmsOrdersTest.php
  27. 11 9
      tests/Services/OrderService/GetCreateOrderModelByWMSOrderHeadersTest.php
  28. 136 0
      tests/Services/OrderService/GetCreateOrderModelsTest.php
  29. 0 1
      tests/Services/OrderService/GetOrderSyncAtTest.php
  30. 0 1
      tests/Services/OrderService/GetParamByOrderHeaderTest.php
  31. 131 97
      tests/Services/OrderService/GetUpdateModelByWmsOrderHeadersTest.php
  32. 70 0
      tests/Services/OrderService/InsertTest.php
  33. 0 1
      tests/Services/OrderService/PushOrderCreatedCacheTest.php
  34. 0 2
      tests/Services/OrderService/PushOrderUpdateCacheTest.php
  35. 0 2
      tests/Services/OrderService/SetOrderSyncAtTest.php
  36. 164 0
      tests/Services/OrderService/SyncOrderByWMSOrderHeadersTest.php
  37. 9 2
      tests/Services/OrderTrackingService/FillInOrderTrackingTest.php
  38. 0 2
      tests/Services/OwnerService/GetOwnerByCodeTest.php
  39. 0 2
      tests/Services/OwnerService/GetOwnerByCodesTest.php
  40. 0 4
      tests/Services/ShopService/GetShopByCodeMapTest.php
  41. 0 2
      tests/Services/WarehouseService/GetWareHouseByCodeTest.php
  42. 0 1
      tests/Services/WarehouseService/GetWareHouseByCodesTest.php

+ 65 - 57
app/Console/Commands/SyncWMSOrderTask.php

@@ -4,78 +4,92 @@ namespace App\Console\Commands;
 
 use App\Services\OracleDOCOrderHeaderService;
 use App\Services\OrderService;
+use App\ValueStore;
 use Carbon\Carbon;
 use Illuminate\Console\Command;
+use Illuminate\Support\Facades\Cache;
 
 class SyncWMSOrderTask extends Command
 {
     /**
-     * The name and signature of the console command.
-     *
-     * @var string
+     * @var OrderService $service
      */
+    private $service;
     protected $signature = 'sync:order';
-
-    /**
-     * The console command description.
-     *
-     * @var string
-     */
+    private $last_start_key ;       // 上一次任务开始时间
+    private $last_end_key ;         // 上一次任务结束时间
+    private $last_err_key ;         // 上一次任务异常时间
+    private $restart;               // 重启时间
+    private $is_enabled;            // 是否开启
     protected $description = 'Command description';
-
-    /**
-     * Create a new command instance.
-     *
-     * @return void
-     */
     public function __construct()
     {
         parent::__construct();
+        $this->service = app('OrderService');
+    }
+    public function init()
+    {
+        $this->last_start_key = config('sync.order_sync.cache_prefix.last_start_at');
+        $this->last_end_key = config('sync.order_sync.cache_prefix.last_end_at');
+        $this->last_err_key = config('sync.order_sync.cache_prefix.last_err_at');
+        $this->restart = config('sync.order_sync.cache_prefix.restart');
+        $this->is_enabled= config('sync.order_sync.cache_prefix.enabled');
     }
-
-    /**
-     * Execute the console command.
-     */
     public function handle()
     {
-        $is_enabled= config('sync.order_sync.cache_prefix.enabled');
-        sleep(rand(5,10));
-        if($is_enabled=='false')return;
+        $this->init();
+        if($this->is_enabled=='false')return;
+        sleep(rand(2,3));
+        $start_time =  Cache::remember($this->last_start_key,null,function (){
+            return ValueStore::query()->firstOrCreate(['name'=>$this->last_start_key])->first()->value;
+        });
+        $end_time =  Cache::remember($this->last_end_key,null,function (){
+            return  ValueStore::query()->firstOrCreate(['name'=>$this->last_end_key])->first()->value;
+        });
+
+        $start = Carbon::now();
+        // 判断上一次任务异常了
+        // 第一次出现异常没有记录上任务结束时间
+        if(isset($start_time) && empty($end_time) && $start->diffInMinutes(Carbon::parse($start_time)) < $this->restart)return;
+        // 这次任务启动时间 距离上一次任务的一个启动时间 小于10
+        if(isset($start_time) && isset($end_time)
+            && Carbon::parse($end_time)->lt(Carbon::parse($start_time))
+            && $start->diffInMinutes(Carbon::parse($start_time)) < $this->restart)
+            return;
+
+        $start = (string)$start;
+        Cache::put($this->last_start_key,$start);
+        ValueStore::query()->where('name',$this->last_start_key)->update(['value'=>$start]);
         $this->syncCreatedOrder();
         $this->syncUpdatedOrder();
+        $end = (string)Carbon::now();
+        Cache::put($this->last_end_key,$end);
+        ValueStore::query()->where('name',$this->last_end_key)->update(['value'=>$end]);
     }
 
     public function syncCreatedOrder()
     {
         /**
-         * @var OracleDOCOrderHeaderService $oracleDOCOrderHeaderService
          * @var OrderService $orderService
          */
-        $newest         = config('sync.order_sync.cache_prefix.created_at');
-        $newest_list    = config('sync.order_sync.cache_prefix.newest_list');
+        $newest_key         = config('sync.order_sync.cache_prefix.created_at');
+        $newest_list_key    = config('sync.order_sync.cache_prefix.newest_list');
         $hasKey         = config('sync.order_sync.cache_prefix.newest_has');
         $prefixKey      = config('sync.order_sync.cache_prefix.newest');
         ini_set('memory_limit', '512M');
-        $orderService = app('OrderService');
-        $oracleDOCOrderHeaderService = app('OracleDocOrderHeaderService');
-
-        $last_date = $orderService->getOrderSyncAt($newest,'newest');                             // 获取时间点
-
-        $orderHeaders = $oracleDOCOrderHeaderService->getWMSOrderOnStartDate($last_date);               // WMS订单
+         $last_date = $this->service->getOrderSyncAt($newest_key,'newest');                             // 获取创建时间点
+        $orderHeaders =  app('OracleDocOrderHeaderService')->getWMSOrderOnStartDate($last_date);               // WMS订单
         if($orderHeaders->count()==0)return;
-        $last_order = $orderHeaders->first();                                                           // 时间点靠后的
+        $last_order = $orderHeaders->first();                                                               // 时间点靠后的
         $newest_orders = $orderHeaders->where('addtime',$last_order->addtime);
-
-        $orderHeaders = $orderService->filterOrderByCache($orderHeaders,$newest_list);                  // 对比缓存
-
+        $orderHeaders = $this->service->filterOrderByCache($orderHeaders,$newest_list_key);                  // 对比缓存
         if(count($newest_orders)>0 && count($orderHeaders) >0){
-
-            $orderService->syncOrder($orderHeaders);                                                //  同步订单
-            $orderService->cancelOrderCache($newest_list,$prefixKey);                                   //  清除缓存
-            $orderService->pushOrderCache($newest_orders,$prefixKey,$hasKey,$newest_list);              //  添加缓存
-            $orderService->setOrderSyncAt($newest,$last_order->addtime,count($orderHeaders)>0);   //  更新时间
+            $this->service->syncOrder($orderHeaders);                                                    //  同步订单
+            $this->service->cancelOrderCache($newest_list_key,$prefixKey);                                   //  清除缓存
+            $this->service->pushOrderCache($newest_orders,$prefixKey,$hasKey,$newest_list_key);              //  添加缓存
+            $this->service->setOrderSyncAt($newest_key,$last_order->addtime,count($orderHeaders)>0);   //  更新时间
         }
-
+        unset($orderHeaders,$newest_orders,$last_order);
     }
 
     public function syncUpdatedOrder()
@@ -84,31 +98,25 @@ class SyncWMSOrderTask extends Command
          * @var OracleDOCOrderHeaderService $oracleDOCOrderHeaderService
          * @var OrderService $orderService
          */
-        $renewal        = config('sync.order_sync.cache_prefix.updated_at');
-        $renewal_list   = config('sync.order_sync.cache_prefix.renewal_list');
+        $renewal_key        = config('sync.order_sync.cache_prefix.updated_at');
+        $renewal_list_key   = config('sync.order_sync.cache_prefix.renewal_list');
         $hasKey         = config('sync.order_sync.cache_prefix.renewal_has');
         $prefixKey      = config('sync.order_sync.cache_prefix.renewal');
         ini_set('memory_limit', '512M');
 
-        $orderService = app('OrderService');
-        $oracleDOCOrderHeaderService = app('OracleDocOrderHeaderService');
-
-        $last_date = $orderService->getOrderSyncAt($renewal,'renewal');                               // 获取时间点
-
-        $orderHeaders = $oracleDOCOrderHeaderService->getWMSOrderOnEditDate($last_date);                   // WMS订单
+        $last_date = $this->service->getOrderSyncAt($renewal_key,'renewal');                               // 获取更新时间点
+        $orderHeaders = app('OracleDocOrderHeaderService')->getWMSOrderOnEditDate($last_date);      // WMS订单
 
         if($orderHeaders->count()==0)return;
         $renewal_order = $orderHeaders->first();                                                            // 时间点靠后的
         $renewal_orders =  $orderHeaders->where('edittime',$renewal_order->edittime);
-
-        $orderHeaders = $orderService->filterOrderByCache($orderHeaders,$renewal_list);                     // 对比缓存
-
+        $orderHeaders = $this->service->filterOrderByCache($orderHeaders,$renewal_list_key);                     // 对比缓存
         if(count($renewal_orders)>0 && count($orderHeaders)>0){
-
-            $orderService->syncOrder($orderHeaders);                                                    // 同步订单
-            $orderService->cancelOrderCache($renewal_list,$prefixKey);                                      // 清除缓存
-            $orderService->pushOrderCache($renewal_orders,$prefixKey,$hasKey,$renewal_list);                // 添加缓存
-            $orderService->setOrderSyncAt($renewal,$renewal_order->edittime,count($orderHeaders)>0);   // 更新时间
+            $this->service->syncOrder($orderHeaders);                                                    // 同步订单
+            $this->service->cancelOrderCache($renewal_list_key,$prefixKey);                                      // 清除缓存
+            $this->service->pushOrderCache($renewal_orders,$prefixKey,$hasKey,$renewal_list_key);                // 添加缓存
+            $this->service->setOrderSyncAt($renewal_key,$renewal_order->edittime,count($orderHeaders)>0);   // 更新时间
         }
+        unset($orderHeaders,$renewal_orders,$renewal_order);
     }
 }

+ 2 - 2
app/Http/Controllers/OrderIssueController.php

@@ -330,8 +330,8 @@ class OrderIssueController extends Controller
         }
         $orderNos = $request->input('orderNos');
         $orderIssues =OrderIssue::query()->with('order')
-            ->whereHas('order',function($query) use ($orderNos){
-                $query->whereIn('code',$orderNos);
+            ->whereIn('order_id',function($query) use ($orderNos){
+                $query->from('orders')->select('id')->whereIn('code',$orderNos);
             })->get();
 
         if($orderIssues->count() == 0){

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

@@ -21,7 +21,6 @@ use App\OracleBasSKU;
 use App\OracleDOCOrderHeader;
 use App\OracleDocOrderPackingSummary;
 use App\OracleDOCWaveDetails;
-use App\OracleDOCWaveHeader;
 use App\Order;
 use App\OrderBin;
 use App\OrderCommodity;
@@ -47,6 +46,7 @@ use App\Services\LogisticService;
 use App\Services\LogService;
 use App\Services\OracleDocAsnHerderService;
 use App\Services\OracleDOCOrderHeaderService;
+use App\Services\OrderCommodityService;
 use App\Services\OrderPackageService;
 use App\Services\OrderService;
 use App\Services\OrderTrackingOwnerService;
@@ -73,6 +73,7 @@ use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Http;
 use Illuminate\Support\Str;
 use Maatwebsite\Excel\Facades\Excel;
+use PhpMyAdmin\Server\Status\Data;
 use Ramsey\Collection\Collection;
 use Zttp\Zttp;
 
@@ -1089,12 +1090,15 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
     public function testSyncOrderTask(){
         dump('hendle...');
         dump((string)Carbon::now());
+        dump(memory_get_usage()/1024/1024);
         $task = new SyncWMSOrderTask();
         $task->handle();
         dump((string)Carbon::now());
-        dd('hendle...end');
+        dump('hendle...end');
+        dump(memory_get_usage()/1024/1024);
+        dump(memory_get_peak_usage()/1024/1024);
+        return view('test');
     }
-
     public function testSyncWaveNo()
     {
         $waveHeader = OracleDOCWaveHeader::query()->where('waveno','W201209000024')->first();
@@ -1270,4 +1274,10 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
         $commodities = $commodityService->get_($ownerIds, $skus,[],true);
         dump('end' . (string)Carbon::now());
     }
+
+    public function editOrderSyncAt()
+    {
+        ValueStore::query()->where('name','order_last_created_sync_at')->update(['value'=>'2020-12-20 09:00:00']);
+        ValueStore::query()->where('name','order_last_updated_sync_at')->update(['value'=>'2020-12-20 09:00:00']);
+    }
 }

+ 1 - 18
app/Order.php

@@ -134,24 +134,7 @@ class Order extends Model
 
     public function isEquals($order)
     {
-        return
-            $this['code'] == $order['code'] &&
-            $this['batch_id'] == $order['batch_id'] &&
-            $this['warehouse_id'] == $order['warehouse_id'] &&
-            $this['owner_id'] == $order['owner_id'] &&
-            $this['shop_id'] == $order['shop_id'] &&
-            $this['logistic_id'] == $order['logistic_id'] &&
-            $this['consignee_name'] == $order['consignee_name'] &&
-            $this['consignee_phone'] == $order['consignee_phone'] &&
-            $this['province'] == $order['province'] &&
-            $this['city'] == $order['city'] &&
-            $this['district'] == $order['district'] &&
-            $this['address'] == $order['address'] &&
-            $this['client_code'] = $order['client_code'] &&
-            $this['wms_status'] == $order['wms_status'] &&
-            $this['wms_edittime'] == $order['wms_edittime'] &&
-            $this['order_type'] == $order['order_type'] &&
-            (string)$this['created_at'] == (string)$order['created_at'];
+        return $this['wms_edittime'] == $order['wms_edittime'];
     }
 
     public function assignValueByOrder($order)

+ 0 - 25
app/Services/CommodityService.php

@@ -258,7 +258,6 @@ Class CommodityService
         return Commodity::query()->create($params);
     }
 
-
     public function syncBarcodes($barcodesStr, $ownerId, $sku): Commodity
     {
         $barcodes = (function () use ($barcodesStr) {
@@ -379,30 +378,6 @@ Class CommodityService
         return false;
     }
 
-    public function getCommoditiesByMap($map)
-    {
-        $collect = collect();
-        if (count($map) == 0) return $collect;
-        foreach ($map as $item) {
-            $commodity = $this->getCommodityByOwnerCodeAndSKU($item['owner_code'], $item['sku']);
-            $collect->push($commodity);
-        }
-        return $collect;
-    }
-
-    public function getCommodityByOwnerCodeAndSKU($ownerCode, $sku)
-    {
-        $commodity_key = "owner_code_{$ownerCode}_sku_{$sku}";
-        return Cache::remember($commodity_key, config('cache.expirations.forever'), function () use ($ownerCode, $sku) {
-            $commodity = Commodity::query()->where('sku', $sku)->whereHas('owner', function ($query) use ($ownerCode) {
-                $query->where('code', $ownerCode);
-            })->first();
-            if (isset($commodity)) return $commodity;
-            $basSKu = app('OracleBasSkuService')->first(['sku' => $sku, 'customerid' => $ownerCode]);
-            return Commodity::query()->create($this->getParamsByBasSku($basSKu));
-        });
-    }
-
     public function getParamsByBasSku($basSku, $owner = null)
     {
         if (empty($owner)) {

+ 1 - 1
app/Services/LogisticService.php

@@ -101,7 +101,7 @@ Class LogisticService
     }
 
     public function getLogisticByCode($code){
-        return Cache::remember("getLogisticByCode_{$code}", config('database.cache.expirations.rarelyChange'), function()use($code){
+        return Cache::remember("getLogisticByCode_{$code}", config('cache.expirations.rarelyChange'), function()use($code){
             $logistic = Logistic::query()->where('code',$code)->first();
             if($logistic)return $logistic;
             $baseCustomers = app('OracleBasCustomerService')->first(['Customer_Type'=>'CA','CustomerID'=>$code]);

+ 1 - 1
app/Services/OracleDOCOrderHeaderService.php

@@ -31,7 +31,7 @@ Class OracleDOCOrderHeaderService
             },'oracleDOCOrderDetails'=>function($query){
                 $query->selectRaw('doc_order_details.orderNo,doc_order_details.customerid,doc_order_details.sku,doc_order_details.QtyOrdered,doc_order_details.Location');
             }, 'actAllocationDetails'=>function($query){
-                $query->selectRaw('ACT_Allocation_Details.AllocationDetailsID,ACT_Allocation_Details.OrderNo,ACT_Allocation_Details.Qty_Each,ACT_Allocation_Details.PickToTraceID,ACT_Allocation_Details.CustomerID,ACT_Allocation_Details.Sku');
+                $query->selectRaw('ACT_Allocation_Details.AllocationDetailsID,ACT_Allocation_Details.OrderNo,ACT_Allocation_Details.Qty_Each,ACT_Allocation_Details.PickToTraceID,ACT_Allocation_Details.CustomerID,ACT_Allocation_Details.Sku,ACT_Allocation_Details.Location');
             },'oracleBASCode'=>function($query){
                 $query->selectRaw('BAS_Codes.CodeID,BAS_Codes.CodeName_C,BAS_Codes.Code');
             },'orderType'=>function($query){

+ 197 - 161
app/Services/OrderCommodityService.php

@@ -4,209 +4,245 @@ namespace App\Services;
 
 use App\Order;
 use App\OrderCommodity;
+use App\Services\common\BatchUpdateService;
+use App\Services\common\DataHandlerService;
 use Carbon\Carbon;
 
 Class OrderCommodityService
 {
-    public function syncOrderCommodities(&$orderHeaders)
+
+    public function insert($innerParams){
+        if(!$innerParams)return false;
+        if(count($innerParams)==0)return false;
+        try {
+            $bool = OrderCommodity::query()->insert($innerParams);
+            if ($bool) app('LogService')->log(__METHOD__, __FUNCTION__, '批量添加 OrderCommodities SUCCESS' . ' || ' . count($innerParams) . ' || ' . json_encode($innerParams));
+            else app('LogService')->log(__METHOD__, __FUNCTION__, '批量添加 OrderCommodities FAULT' . ' || ' . count($innerParams) . ' || ' . json_encode($innerParams));
+            return $bool;
+        } catch (\Exception $e) {
+            app('LogService')->log(__METHOD__, __FUNCTION__, '批量添加 OrderCommodities ERROR'. ' || ' . count($innerParams) . ' || ' . json_encode($innerParams).' || '.json_encode($e->getMessage()).' || '.json_encode($e->getTraceAsString()));
+            return false;
+        }
+    }
+
+    public function batchUpdate($updateParams){
+        return app(BatchUpdateService::class)->batchUpdate('order_commodities',$updateParams);
+    }
+
+    public function syncOrderCommodity(&$orderHeaders)
     {
         /**
-         * @var CommodityService $commodityService
          * @var OwnerService $ownerService
+         * @var CommodityService $commodityService
+         * @var DataHandlerService $dataHandlerService
          */
-        $commodityService = app('CommodityService');
         $ownerService = app('OwnerService');
-        if(count($orderHeaders) == 0)return ;
-        $order_nos = array_unique(data_get($orderHeaders,'*.orderno'));
-        $commodities_map = [];$owners_id_maps = [];
-        $owner_code_maps = (function()use(&$ownerService,&$orderHeaders,&$owners_id_maps){
-            $customer_ids= array_unique(data_get($orderHeaders,'*.customerid'));
-            $owners = $ownerService->getOwnerByCodes($customer_ids);
-            $owner_code_maps = [];
-            if(count($owners) == 0)return $owner_code_maps;
-            foreach ($owners as $owner) {
-                $owner_code_maps[$owner['code']]= $owner['id'];
-                $owners_id_maps[$owner['id']] =  $owner['code'];
-            }
-            return $owner_code_maps;
-        })();
-        // 重组OrderDetails
-        $orderDetails_map = (function()use(&$orderHeaders,&$owner_code_maps,&$commodities_map){
-            $map = [];
-            if(count($orderHeaders)==0)return $map;
-            foreach ($orderHeaders as $orderHeader) {
-                $Order_Details = $orderHeader->oracleDOCOrderDetails;
-                $Order_Details->each(function($item)use(&$map,&$owner_code_maps,&$commodities_map){
-                    if(!empty($item['customerid']) && !empty($item['sku'])){
-                        $key = "owner_code_{$item['customerid']}_sku_{$item['sku']}";
-                        $commodities_map[$key] =  ['owner_code'=>$item['customerid'],'sku'=>$item['sku']];
-                    }
-                    $key = "orderno_{$item['orderno']}_sku{$item['sku']}_each_{$item['qtyordered']}_location_{$item['location']}";
-                    if(empty($map[$key]))$map[$key]=[];
-                    $map[$key][] = [
-                        'code' => $item['orderno'],
-                        'sku' => $item['sku'],
-                        'owner_id'=>$owner_code_maps[$item['customerid']],
-                        'amount' => $item['qtyordered'],
-                        'location' => $item['location']
-                    ];
-                });
-            }
-            return $map;
-        })();
-        $commodities = $commodityService->getCommoditiesByMap($commodities_map);
-        $commodities_maps = (function()use($commodities,$owners_id_maps){
-            $map = [];
-            if(count($commodities) == 0)return $map;
-            foreach ($commodities as $commodity) {
-                $owner_code = $owners_id_maps[$commodity['owner_id']];
-                $key ="owner_code_{$owner_code}_sku_{$commodity['sku']}";
-                $map[$key] = $commodity;
+        $commodityService = app('CommodityService');
+        $dataHandlerService = app('DataHandlerService');
+        $orderNos = data_get($orderHeaders,'*.orderno');
+        $owner_codes = [];$sku_codes = [];
+        $map = [];
+        foreach ($orderHeaders as $orderHeader) {
+            $actAllocationDetails  = $orderHeader->actAllocationDetails;
+            foreach ($actAllocationDetails as $actAllocationDetail) {
+                $owner_codes[$actAllocationDetail['customerid']] = $actAllocationDetail['customerid'];
+                $sku_codes[$actAllocationDetail['sku']] = $actAllocationDetail['sku'];
+                $value = [
+                    'owner_code'=> $actAllocationDetail['customerid'],
+                    'sku' => $actAllocationDetail['sku']
+                ];
+                $key = json_encode($value);
+                $map[$key] = $value;
             }
-            return $map;
-        })();
-        $order_id_map = [];
-        $orders_map = (function()use($order_nos,&$order_id_map){
-            $map = [];
-            if(count($order_nos)==0)return $map;
-            $orders = Order::query()->whereIn('code',$order_nos)->get();
-            $orders->each(function($item)use(&$map,&$order_id_map){
-                $map[$item['code']] = ['id'=>  $item['id'], 'owner_id' =>  $item['owner_id']];
-                $order_id_map[$item['id']] = ['code'=>  $item['code'], 'owner_id' =>  $item['owner_id']];
-            });
-            return $map;
-        })();
-        $orderCommodities = OrderCommodity::query()->with('commodity','order')->whereHas('order',function($query)use($order_nos){
-            $query->whereIn('code',$order_nos);
+        }
+        if(count($sku_codes) ==0)return;
+        $owners = $ownerService->getOwnerByCodes($owner_codes);
+        $owner_id_maps = $dataHandlerService->dataHeader(['id'],$owners);
+//        $commodities = $commodityService->get_(data_get($owners,'*.id'),$sku_codes,[],true);
+        $commodities = $commodityService->getCommoditiesByMaps($map);
+        unset($owner_codes,$sku_codes);
+        $commodity_map = [];
+        foreach ($commodities as $commodity) {
+            $owner = $dataHandlerService->getKeyValue(['id'=>$commodity->owner_id],$owner_id_maps);
+            $key = "_owner_code_{$owner['code']}_sku_{$commodity['sku']}";
+            $commodity_map[$key] = $commodity;
+        }
+
+        $orderCommodities = OrderCommodity::query()->with(['order','commodity'])->whereIn('order_id',function ($query)use($orderNos){
+            $query->from('orders')->select('id')->whereIn('code',$orderNos);
         })->get();
+        $orders = Order::query()->with('packages.commodities')->whereIn('code',$orderNos)->get();
+        $order_code_map = $dataHandlerService->dataHeader(['code'],$orders);
+        $ActAllocationDetail_maps =  $this->getRegroupActAllocationDetails($orderHeaders);
+        $orderCommodity_maps = $this->getRegroupOrderCommodities($orderCommodities,$owner_id_maps);
+        unset($orderCommodities,$owner_id_maps,$owners,$orderNos);
+        $this->filterHasExist($ActAllocationDetail_maps,$orderCommodity_maps);
+        $delete_ids =  $this->getDeleteIds($ActAllocationDetail_maps,$orderCommodity_maps);
+        $create_params = $this->getCreateParams($ActAllocationDetail_maps,$orderCommodity_maps);
+        unset($orderCommodity_maps,$ActAllocationDetail_maps);
+
+        $inner_params = $this->getInnerParamsByParams($create_params,$order_code_map,$commodity_map);
+        unset($create_params,$order_code_map,$orders,$commodity_map);
+
+//        $update_params = $this->getUpdateParamsByParamsAndDeleteIds($inner_params,$delete_ids);
+//        if(count($update_params)>0)$this->batchUpdate($update_params);
+//        unset($update_params);
 
-        $orderCommodities_map = $this->regroupOrderCommodities($orderCommodities);              // 重组orderCommodities
-        $inner_params = $this->filterInnerParams($orderDetails_map,$orderCommodities_map);
-        $del_ids = $this->filterDeleteParams($orderDetails_map,$orderCommodities_map);
         if(count($inner_params)>0){
-            $inner_arr = array_chunk($inner_params,4000);
-            foreach ($inner_arr as $item) {
-                $created_params = $this->createByInnerParams($item,$orders_map,$commodities_maps,$owners_id_maps);
-                $this->insert($created_params);
-            }
+            $inner_params = array_chunk($inner_params,4000);
+            foreach ($inner_params as $inner_param) {$this->insert($inner_param);}
+            unset($inner_params);
         }
-        if(count($del_ids)>0){
-            $orderCommodities = OrderCommodity::query()->whereIn('id',$del_ids)->get();
-            $this->batchDelete($orderCommodities);
+
+        if(count($delete_ids)==0)return;
+        OrderCommodity::query()->whereIn('id',$delete_ids)->delete();
+        app('LogService')->log(__METHOD__,__FUNCTION__,"delete OrderCommodity ".json_encode($delete_ids));
+        unset($delete_ids);
+    }
+
+    public function getRegroupActAllocationDetails(&$orderHeaders)
+    {
+        $map = [];
+        if($orderHeaders->count()==0) return $map;
+        $orderHeaders->each(function($orderHeader)use(&$map){
+            $orderHeader->actAllocationDetails->each(function ($details)use(&$map){
+                $key = "order_{$details['orderno']}_owner_code_{$details['customerid']}_sku_{$details['sku']}_location_{$details['location']}_amount_{$details['qty_each']}";
+                if(empty($map[$key]))$map[$key]=[];
+                $map[$key][] = [
+                    'code' => $details['orderno'],
+                    'sku' => $details['sku'],
+                    'owner_code'=> $details['customerid'],
+                    'amount' => $details['qty_each'],
+                    'location' => $details['location']
+                ];
+            });
+        });
+        return $map;
+    }
+
+    public function filterHasExist(&$ActAllocationDetail_maps,&$orderCommodity_maps)
+    {
+        foreach ($ActAllocationDetail_maps as $key=>$actAllocationDetail_map) {
+            $orderCommodity_map = $orderCommodity_maps[$key] ?? null;
+            if($orderCommodity_map == null)continue;
+            foreach ($actAllocationDetail_map as $index=>$item) {
+                if(count($orderCommodity_map)==0)break;
+                array_shift($orderCommodity_map);
+                unset($actAllocationDetail_map[$index]);
+            }
         }
     }
 
-    private function regroupOrderCommodities(&$orderCommodities)
+    public function getRegroupOrderCommodities(&$orderCommodities,$owner_id_maps)
     {
+        /** @var DataHandlerService  $dataHandlerService */
+        $dataHandlerService = app(DataHandlerService::class);
         $map = [];
-        if(count($orderCommodities)==0)return $map;
-        foreach ($orderCommodities as $orderCommodity) {
-            $key = "orderno_{$orderCommodity['order']['code']}_sku{$orderCommodity['commodity']['sku']}_each_{$orderCommodity['amount']}_location_{$orderCommodity['location']}";
-            if(empty($map[$key]))$map[$key] =[];
-            $map[$key][] = [
-                'id' =>$orderCommodity['id'],
-                'code' => $orderCommodity['order']['orderno'],
-                'sku' => $orderCommodity['commodity']['sku'],
-                'owner_id' => $orderCommodity['order']['owner_id'],
-                'amount' => $orderCommodity['amount'],
-                'location' => $orderCommodity['location'] ?? ''
+        if($orderCommodities->count() == 0)return $map;
+        $orderCommodities->each(function($orderCommodity)use(&$map,$owner_id_maps,$dataHandlerService){
+            $order = $orderCommodity->order;
+            $owner  = $dataHandlerService->getKeyValue(['id'=>$order->owner_id ?? ''],$owner_id_maps);
+            $sku =  $orderCommodity->commodity->sku ?? '';
+            $key = "order_{$order->code}_owner_code_{$owner['code']}_sku_{ $sku}_location_{$orderCommodity->location}_amount_{$orderCommodity->amount}";
+            if(empty($map[$key]))$map[$key]=[];
+            $map[$key][]  =[
+                'id' => $orderCommodity->id,
+                'code' => $orderCommodity->order->code ?? '',
+                'sku' => $sku,
+                'owner_code' => $owner->code ?? '',
+                'amount' => $orderCommodity->amount,
+                'location' => $orderCommodity->location,
             ];
-        }
+        });
         return $map;
     }
 
-    private function filterInnerParams(&$orderDetails_map,&$orderCommodities_map)
+    public function getDeleteIds(&$ActAllocationDetail_maps,&$orderCommodity_maps)
     {
-        $inner_params = [];
-        if(count($orderDetails_map) == 0)return $inner_params;
-        foreach ($orderDetails_map as $key=>&$map) {
-            if(empty($orderCommodities_map[$key])){
-                foreach ($map as &$item) {
-                    $inner_params[] = $item;
+        $ids = [];
+        if(count($orderCommodity_maps)==0)return $ids;
+        foreach ($orderCommodity_maps as $key=>$orderCommodity_map) {
+            $ActAllocationDetail_map = $ActAllocationDetail_maps[$key]  ?? null;
+            if($ActAllocationDetail_map==null){
+                foreach ($orderCommodity_map as $index=>$orderCommodity) {
+                    $ids[] =$orderCommodity['id'];
+                    unset($orderCommodity_map[$index]);
                 }
-            }elseif(count($map)>count($orderCommodities_map[$key])){
-                foreach ($map as &$obj) {
-                    if($orderCommodities_map[$key]>0)array_shift($orderCommodities_map[$key]);
-                    elseif($orderCommodities_map[$key]==0)$inner_params[] = $obj;
+                continue;
+            }
+            if(count($ActAllocationDetail_map) == count($orderCommodity_map))continue;
+            if(count($ActAllocationDetail_map) < count($orderCommodity_map)){
+                foreach ($orderCommodity_map as $index=>$item) {
+                    if(count($ActAllocationDetail_map) == 0)$ids[] =$item['id'];
+                    array_shift($ActAllocationDetail_map);
+                    unset($orderCommodity_map[$index]);
                 }
-            } elseif(count($map)==count($orderCommodities_map[$key]))continue;
-            unset($orderDetails_map[$key]);
-            $map = null;
+            }
         }
-        return $inner_params;
+        return $ids;
     }
-    private function filterDeleteParams(&$orderDetails_map,&$orderCommodities_map)
+
+    public function getCreateParams(&$ActAllocationDetail_maps,&$orderCommodity_maps)
     {
-        $del_ids = [];
-        if(count($orderDetails_map) == 0)return $del_ids;
-        foreach ($orderCommodities_map as $key=>$map) {
-            if(empty($orderDetails_map[$key])){
-                foreach ($map as &$item) {
-                    $del_ids[] = $item['id'];
+        $params = [];
+        foreach ($ActAllocationDetail_maps as $key=>$actAllocationDetail_map) {
+            $orderCommodity_map = $orderCommodity_maps[$key] ?? null;
+            if($orderCommodity_map == null){
+                foreach ($actAllocationDetail_map as $index=>$actAllocationDetail) {
+                    $params[]  = $actAllocationDetail;
+                    unset($actAllocationDetail_map[$key]);
                 }
-            }elseif(count($map)>count($orderDetails_map[$key])){
-                foreach ($map as $key1=>&$obj) {
-                    if(count($orderDetails_map[$key]) == 0){
-                        $del_ids [] = $obj['id'];
-                        unset($map[$key1]);
-                    } else{
-                        array_shift($orderDetails_map[$key]);
-                    }
+                continue;
+            }elseif(count($actAllocationDetail_map) == count($orderCommodity_map)){
+                continue;
+            }elseif(count($actAllocationDetail_map) > count($orderCommodity_map)){
+                foreach ($actAllocationDetail_map as $index=>$item) {
+                    if(count($orderCommodity_map) == 0)$params[] = $item;
+                    array_shift($orderCommodity_map);
+                    unset($actAllocationDetail_map[$key]);
                 }
             }
         }
-        return $del_ids;
+        return $params;
     }
 
-    private function createByInnerParams(&$inner_params,&$orders_map,&$commodities_maps,&$owner_id_maps)
+    public function getInnerParamsByParams(&$create_params,&$order_code_map,&$commodity_map)
     {
-        $created_params = [];
-        if(count($inner_params) == 0)return $created_params;
-        $data = Carbon::now();
-        foreach ($inner_params as &$item) {
-            $order = $orders_map[$item['code']] ?? false;
-            if(!$order)continue;
-            $owner_code = $owner_id_maps[$item['owner_id']];
-            $key = "owner_code_{$owner_code}_sku_{$item['sku']}";
-            $commodity = $commodities_maps[$key];
-            $created_params[] = [
-                'order_id' =>$order['id'],
-                'commodity_id' =>$commodity['id'],
-                'amount' =>$item['amount'],
-                'location' =>$item['location'],
-                'created_at' =>$data,
-                'updated_at' => $data
+        /** @var DataHandlerService  $dataHandlerService */
+        $dataHandlerService = app(DataHandlerService::class);
+        $inner_params = [];
+        $date = (string) Carbon::now();
+        foreach ($create_params as $item) {
+            $order = $dataHandlerService->getKeyValue(['code'=>$item['code']],$order_code_map);
+            $key = "_owner_code_{$item['owner_code']}_sku_{$item['sku']}";
+            $commodity = $commodity_map[$key] ?? null;
+            $inner_params[] = [
+                'order_id' => $order['id'] ?? '',
+                'commodity_id' => $commodity['id'] ?? '',
+                'amount' => $item['amount'],
+                'location' => $item['location'],
+                'created_at' => $date,
+                'updated_at' => $date
             ];
         }
-        return $created_params;
+        return $inner_params;
     }
 
-    public function batchDelete($orderCommodities)
+    // TODO 更新后续添加进更新逻辑
+    public function getUpdateParamsByParamsAndDeleteIds(&$inner_params,&$ids)
     {
-        if(count($orderCommodities) == 0)return true;
-        try {
-            $bool =  OrderCommodity::destroy(data_get($orderCommodities, '*.id'));
-            if($bool)app('LogService')->log(__METHOD__,__FUNCTION__,'批量删除 OrderCommodities'.' || '.count($orderCommodities).' || '.json_encode($orderCommodities));
-            else app('LogService')->log(__METHOD__,__FUNCTION__,'批量删除 OrderCommodities FAULT'.' || '.count($orderCommodities).' || '.json_encode($orderCommodities).' || ');
-            return $bool;
-        } catch (\Exception $e) {
-            app('LogService')->log(__METHOD__,__FUNCTION__,'批量删除 OrderCommodities ERROR'.' || '.count($orderCommodities).' || '.json_encode($orderCommodities).' || '.json_encode($e->getMessage()).' || '.json_encode($e->getTraceAsString()));
-            return false;
-        }
-    }
-
-    public function insert($innerParams){
-        if(!$innerParams)return false;
-        if(count($innerParams)==0)return false;
-        try {
-            $bool = OrderCommodity::query()->insert($innerParams);
-            if ($bool) app('LogService')->log(__METHOD__, __FUNCTION__, '批量添加 OrderCommodities SUCCESS' . ' || ' . count($innerParams) . ' || ' . json_encode($innerParams));
-            else app('LogService')->log(__METHOD__, __FUNCTION__, '批量添加 OrderCommodities FAULT' . ' || ' . count($innerParams) . ' || ' . json_encode($innerParams));
-            return $bool;
-        } catch (\Exception $e) {
-            app('LogService')->log(__METHOD__, __FUNCTION__, '批量添加 OrderCommodities ERROR'. ' || ' . count($innerParams) . ' || ' . json_encode($innerParams).' || '.json_encode($e->getMessage()).' || '.json_encode($e->getTraceAsString()));
-            return false;
+        $update_params = [['id','order_id', 'commodity_id', 'amount', 'location', 'created_at', 'updated_at']];
+        if(count($inner_params)==0)return $update_params;
+        $date = (string)Carbon::now();
+        foreach ($inner_params as $key=>$inner_param) {
+            if(count($ids)==0)break;
+            $inner_param['id'] = array_shift($ids);
+            $inner_param['updated_at'] = $date;
+            $inner_param['created_at'] = $date;
+            $update_params[] = $inner_param;
+            unset($inner_params[$key]);
         }
+        return $update_params;
     }
 }
 

+ 51 - 30
app/Services/OrderPackageCommoditiesService.php

@@ -207,8 +207,10 @@ class OrderPackageCommoditiesService
         $order_no =  data_get($orderHeaders,'*.orderno');
         return OrderPackageCommodities::query()
             ->with('package.order','commodity')
-            ->whereHas('package.order',function($query) use ($order_no){
-                $query->whereIn('code',$order_no);
+            ->whereIn('order_package_id',function($query) use ($order_no){
+                $query->from('order_packages')->select('id')->whereIn('order_id',function($query)use($order_no){
+                    $query->from('orders')->select('id')->whereIn('code',$order_no);
+                });
             })->get();
     }
 
@@ -223,9 +225,11 @@ class OrderPackageCommoditiesService
      */
     public function 删除包裹商品信息_根据快递单号($logistic_numbers)
     {
-        $orderPackageCommodities = OrderPackageCommodities::query()->with('package')->whereHas('package',function($query)use($logistic_numbers){
-            $query->whereIn('logistic_number',$logistic_numbers);
-        })->get();
+        $orderPackageCommodities = OrderPackageCommodities::query()
+            ->with('package')
+            ->whereIn('order_package_id',function($query)use($logistic_numbers){
+                $query->from('order_packages')->select('id')->whereIn('logistic_number',$logistic_numbers);
+            })->get();
         $ids = data_get($orderPackageCommodities, '*.id');
         if(count($ids) == 0){return [];}
         try {
@@ -245,8 +249,10 @@ class OrderPackageCommoditiesService
     public function getByOrderNos($orderNos)
     {
         return OrderPackageCommodities::query()->with('package.order','commodity')
-            ->whereHas('package.order',function($query) use ($orderNos){
-                $query->whereIn('code',$orderNos);
+            ->whereIn('order_package_id',function($query) use ($orderNos){
+                $query->from('order_packages')->select('id')->whereIn('order_id',function($query)use($orderNos){
+                    $query->from('orders')->select('id')->whereIn('code',$orderNos);
+                });
             })->get();
     }
 
@@ -589,6 +595,11 @@ class OrderPackageCommoditiesService
         return $commodity_map;
     }
 
+    public function syncOrderPackageCommodities($orderHeaders)
+    {
+        $this->syncOrderPackageCommoditiesByOrderHeaders($orderHeaders);
+    }
+
     // TODO
     public function deleteUnnecessaryOrderCommodities($ids)
     {
@@ -599,7 +610,7 @@ class OrderPackageCommoditiesService
         app('LogService')->log(__METHOD__,__FUNCTION__,'删除 OrderPackageCommodities'.json_encode($items));
     }
     // TODO
-    public function syncOrderPackageCommodities(&$orderHeaders)
+    public function syncOrderPackageCommoditiesByOrderHeaders(&$orderHeaders)
     {
         /**
          * @var DataHandlerService $dataHandService
@@ -613,49 +624,56 @@ class OrderPackageCommoditiesService
         $ownerService  = app( 'OwnerService');
         if(!$orderHeaders)return ;
 
-        $map = [];
+        $owner_codes = [];$sku_codes = [];$map = [];
         foreach ($orderHeaders as $orderHeader) {
             $Order_Details = $orderHeader->oracleDOCOrderDetails;
-            $Order_Details->each(function($item)use(&$map){
-                if(!empty($item['customerid']) && !empty($item['sku'])){
-                    $key = "owner_code_{$item['customerid']}_sku_{$item['sku']}";
-                    $map[$key] =  ['owner_code'=>$item['customerid'],'sku'=>$item['sku']];  // 货主编码 sku编码
-                }
+            $Order_Details->each(function($item)use(&$owner_codes,&$sku_codes,&$map){
+                $owner_codes[$item['customerid']] = $item['customerid'];
+                $sku_codes[$item['sku']] = $item['sku'];
+                $value = [
+                    'owner_code'=> $item['customerid'],
+                    'sku' => $item['sku']
+                ];
+                $key = json_encode($value);
+                $map[$key] = $value;
             });
         }
-        $commodities = $commodityService->getCommoditiesByMap($map);   // 预先处理     3s
+        if(count($owner_codes) ==0 || count($sku_codes) == 0)return ;
+        $owners = $ownerService->getOwnerByCodes($owner_codes);
+//        $commodities = $commodityService->get_(data_get($owners,'*.id'),$sku_codes,[],true);   // 预先处理     3s
+        $commodities = $commodityService->getCommoditiesByMaps($map);   // 预先处理     3s
         $orderPackages = $orderPackageService->getByWmsOrders($orderHeaders);
         $orderCommodities = $this->getByWmsOrder($orderHeaders);
-        $owner_code_map = [];
-        $owner_id_map = (function()use(&$orderHeaders,&$ownerService,&$owner_code_map){
-            $owner_id_map = [];
-            $owners = $ownerService->getOwnerByCodes(array_unique(data_get($orderHeaders,'*.customerid')));
-            if(count($owners) == 0) return $owner_id_map;
-            foreach ($owners as $owner) {
-                $owner_id_map[$owner['id']] = $owner;
-                $owner_code_map[$owner['code']]  = $owner;
-            }
-            return $owner_id_map;
-        })();
+        $owner_id_map=[];
+        foreach ($owners as $owner) {
+            $owner_id_map[$owner['id']] = $owner;
+        }
 
         $package_map = $dataHandService->dataHeader(['logistic_number'],$orderPackages);
+
         $orderCommodities = $this->regroupOrderCommodities($orderCommodities);
+
         $orderAllocationDetails = $this->regroupWmsOrderAllocationDetails($orderHeaders);
         $del_orderCommodities  =[];
+
         $update_params =$this->filterUpdateParams($orderAllocationDetails,$orderCommodities,$del_orderCommodities);                  // 修改
+
         $inner_params = $this->filterInnerParams($orderAllocationDetails,$orderCommodities);                                            // 创建
+
         $delete_params = $this->filterDeleteParams($orderAllocationDetails,$orderCommodities);                                           // 删除
+        unset($orderAllocationDetails,$orderCommodities);
         if(count($inner_params)>0)
             $this->createOrderCommodities($inner_params,$package_map,$commodities,$owner_id_map);  // 创建 3s
-
+        unset($inner_params,$package_map,$commodities,$owner_id_map);
         if(count($update_params)>0)
             $this->updateOrderCommodities($update_params);              // 更新
-
+        unset($update_params);
         if(count($delete_params)>0)
             $this->deleteOrderCommodities($delete_params);              // 删除
-
+        unset($delete_params);
         if(count($del_orderCommodities)>0)
             $this->deleteOrderCommodities($del_orderCommodities);       // 删除
+        unset($del_orderCommodities);
     }
     // TODO 重组已有的OrderCommodities
     public function regroupOrderCommodities(&$orderCommodities)
@@ -808,6 +826,7 @@ class OrderPackageCommoditiesService
                 }
             }
         }
+        unset($create_params,$commodity_map);
     }
     // TODO
     public function updateOrderCommodities(&$orderCommodities)
@@ -826,6 +845,8 @@ class OrderPackageCommoditiesService
         }
         if(count($update_params)>1)
             $this->batchUpdate($update_params);
+
+        unset($update_params);
     }
     // TODO 删除
     public function deleteOrderCommodities(&$orderCommodities){
@@ -840,6 +861,6 @@ class OrderPackageCommoditiesService
         } catch (\Exception $e) {
             LogService::log(__METHOD__, __FUNCTION__.' error', '批量删除 OrderCommodity Error' . ' || ' . json_encode($e->getMessage()) . ' || ' . json_encode($e->getTraceAsString()));
         }
-
+        unset($orderCommodities);
     }
 }

+ 23 - 77
app/Services/OrderPackageService.php

@@ -301,8 +301,8 @@ class OrderPackageService
     public function getByWmsOrders($orderHeaders){
         $order_nos = data_get($orderHeaders,'*.orderno');
         return OrderPackage::query()->with('order')
-            ->whereHas('order',function($query) use ($order_nos){
-                $query->whereIn('code',$order_nos);
+            ->whereIn('order_id',function($query) use ($order_nos){
+                $query->from('orders')->select('id')->whereIn('code',$order_nos);
             })->get();
     }
 
@@ -352,8 +352,8 @@ class OrderPackageService
     public function getByOrderNos($orderNos)
     {
         return OrderPackage::query()->with('order')
-            ->whereHas('order',function($query)use($orderNos){
-                $query->whereIn('code',$orderNos);
+            ->whereIn('order_id',function($query)use($orderNos){
+                $query->from('orders')->select('id')->whereIn('code',$orderNos);
             })->get();
     }
 
@@ -385,19 +385,11 @@ class OrderPackageService
         return  compact('orderPackage','order');
     }
 
-    // TODO
     public function syncOrderPackage(&$orderHeaders)
     {
-        /**
-         * @var OrderPackageCommoditiesService $OrderPackageCommoditiesService
-         */
-        $OrderPackageCommoditiesService = app('OrderPackageCommoditiesService');
-
         $this->syncPackageByOrderHeaders($orderHeaders);
-
-        $OrderPackageCommoditiesService->syncOrderPackageCommodities($orderHeaders);
     }
-    // TODO
+
     public function syncPackageByOrderHeaders(&$orderHeaders)
     {
         /**
@@ -407,7 +399,7 @@ class OrderPackageService
          */
         $orderService = app('OrderService');
         $orderPackageCommodityService= app('OrderPackageCommoditiesService');
-        $orderTrackingService = app('OrderTrackingService');
+//        $orderTrackingService = app('OrderTrackingService');
         if(!$orderHeaders)return;
 
         $orders = $orderService->getByWmsOrders($orderHeaders);
@@ -415,19 +407,21 @@ class OrderPackageService
         $packages = $this->getByOrderNos(data_get($orderHeaders,'*.orderno'));          // 已有
 
         $this->createOrderPackage($orderHeaders,$orders,$packages);                     // 创建package
-
         $del_ids = $this->deleteUnnecessaryPackage($orderHeaders,$packages);     // 删除package
-
+        unset($orders,$packages);       // 手动清除
+        if(count($del_ids)==0)return;
+        OrderPackageCommodities::query()->whereIn('order_package_id',$del_ids)->delete();
         $orderPackageCommodityService->deleteUnnecessaryOrderCommodities($del_ids);     // 删除 orderCommodity
-
-        $orderTracking = OrderTracking::query()->whereHas('commodities',function($query)use($del_ids){
-            $query->whereIn('order_package_id',$del_ids);
-        })->get();
-        if($orderTracking->count()==0)return;
-
-        $orderTrackingService->deleteOrderTracings($orderTracking);                     // 删除追踪件
+        unset($del_ids);
+//        $orderTracking = OrderTracking::query()->whereIn('order_package_commodity_id',function($query)use($del_ids){
+//            $query->from('order_package_commodities')->select('order_package_commodities.id')->whereIn('order_package_id',$del_ids);
+//        })->get();
+//        if($orderTracking->count()==0)return;
+//
+//        $orderTrackingService->deleteOrderTracings($orderTracking);                     // 删除追踪件+
+//        unset($orderTracking);      // 手动清除
     }
-    // TODO
+
     public function createOrderPackage($orderHeaders,$orders,$packages)
     {
         if(!$orderHeaders)return;
@@ -457,7 +451,7 @@ class OrderPackageService
             }
         }
     }
-    // TODO
+
     public function getInnerParams($orderHeader,$order,$packages_maps)
     {
         /**
@@ -480,7 +474,7 @@ class OrderPackageService
         }
         return $inner_params;
     }
-    // TODO
+
     public function deleteUnnecessaryPackage($orderHeaders,$packages)
     {
         /**
@@ -493,13 +487,13 @@ class OrderPackageService
 
         $packages_maps = $dataHandlerService->dataHeader(['logistic_number'],$packages);
         $exits_number = data_get($packages,'*.logistic_number');
-        $packages = collect();
+        $packages = [];
         $diff_number = array_diff($exits_number,$logistic_numbers);
         foreach ($diff_number as $number) {
             $package = $dataHandlerService->getKeyValue(['logistic_number'=>$number],$packages_maps);
-            if($package ?? false)$packages->push($package->id);
+            if($package ?? false)$packages[]=$package->id;
         }
-        if($packages->isEmpty())return $packages;
+        if(count($packages)==0)return $packages;
         try {
             $bool = OrderPackage::query()->whereIn('id', $packages)->delete();
             $bool ? LogService::log(__METHOD__,__FUNCTION__,'删除多余包裹 ids:'.json_encode($packages)) : null;
@@ -509,52 +503,4 @@ class OrderPackageService
             return collect();
         }
     }
-    // TODO
-    public function createPackagesFromBatchCode($batchCode,$weight)
-    {
-        /**
-         * @var OrderService $orderService
-         */
-        $now = Carbon::now();
-        $orderService = app('OrderService');
-        $orderHeaders = OracleDOCOrderHeader::query()->selectRaw(implode(',',OracleDOCOrderHeaderService::$columns))
-            ->with(['oracleBASCustomer'=>function($query){
-                $query->selectRaw('BAS_CUSTOMER.CustomerID,BAS_CUSTOMER.Customer_Type,BAS_CUSTOMER.Descr_C,BAS_CUSTOMER.Active_Flag');
-            },'oracleDOCOrderDetails'=>function($query){
-                $query->selectRaw('doc_order_details.orderNo,doc_order_details.CustomerId,doc_order_details.sku,doc_order_details.QtyOrdered');
-            }, 'actAllocationDetails'=>function($query){
-                $query->selectRaw('ACT_Allocation_Details.AllocationDetailsID,ACT_Allocation_Details.OrderNo,ACT_Allocation_Details.Qty_Each,ACT_Allocation_Details.PickToTraceID,ACT_Allocation_Details.CustomerID,ACT_Allocation_Details.Sku');
-            },'oracleBASCode'=>function($query){
-                $query->selectRaw('BAS_Codes.CodeID,BAS_Codes.CodeName_C,BAS_Codes.Code');
-            }])
-            ->where('Doc_Order_Header.WaveNo',$batchCode)
-            ->get();
-        $orderService->syncOrderByWMSOrderHeaders($orderHeaders);
-        $this->syncPackageByOrderHeaders($orderHeaders);
-        $orders = Order::query()->with('packages')->whereIn('code',data_get($orderHeaders,'*.orderno'))->get();
-        $update_params = [[
-            'id','weight','weighed_at','status','batch_number'
-        ]];
-        foreach ($orderHeaders as $orderHeader) {
-            $order = $orders->where('code',$orderHeader->orderno)->first();
-            if(!$order){
-                app('LogService')->log(__METHOD__,"此包裹在WMS未找到order",json_encode($orderHeader),Auth::user()['id']);
-                continue;
-            }
-            $order->packages->each(function($package)use(&$update_params,$weight,$batchCode,$now){
-                $update_params[] = [
-                    'id' => $package->id,
-                    'weight' =>$weight,
-                    'weighed_at'=>$now,
-                    'status' =>"已上传",
-                    'batch_number' => $batchCode
-                ];
-            });
-        }
-        if(count($update_params)==1)return;
-        DB::transaction(function ()use($update_params){
-                $this->batchUpdate($update_params);
-        });
-        app('LogService')->log(__METHOD__,"批量录入包裹成功",json_encode($update_params),Auth::user()['id']);
-    }
 }

+ 46 - 24
app/Services/OrderService.php

@@ -361,7 +361,7 @@ class OrderService
         $orderPackageService = app('OrderPackageService');
         $order = Order::query()->where('client_code', $clientCode)->first();
 
-        $orderHeader = OracleDOCOrderHeader::query()->where('SOReference1', $clientCode)->first();
+        $orderHeader = app('OracleDocOrderHeaderService')->first(['SOReference1'=> $clientCode]);
 
         if ($orderHeader == null) {
             return null;
@@ -713,8 +713,8 @@ class OrderService
         if(!isset($orders)){return [];}
         $orderNo =  data_get($orders,'*.orderno');
         $orderIssues = OrderIssue::query()->with('order')
-            ->whereHas('order',function($query)use($orderNo){
-                $query->whereIn('code',$orderNo);
+            ->whereIn('order_id',function($query)use($orderNo){
+                $query->from('orders')->select('id')->whereIn('code',$orderNo);
             })->get();
 
         return $orderIssues->map(function($orderIssue){
@@ -800,31 +800,21 @@ class OrderService
 
     public function syncOrder(&$orderHeaders)
     {
-        /**
-         * @var OrderPackageService $packageService
-         * @var OrderCommodityService $orderCommodityService
-         */
-        $packageService = app("OrderPackageService");
-        $orderCommodityService = app("OrderCommodityService");
-
         $this->syncOrderByWMSOrderHeaders($orderHeaders);
-
-        $orderCommodityService->syncOrderCommodities($orderHeaders);
-
-        $packageService->syncOrderPackage($orderHeaders);
-
-        $this->pushQueue($orderHeaders);
+        app("OrderCommodityService")->syncOrderCommodity($orderHeaders);
+        app('OrderPackageService')->syncOrderPackage($orderHeaders);
+        app("OrderPackageCommoditiesService")->syncOrderPackageCommodities($orderHeaders);
+//        $this->pushQueue($orderHeaders);
+        unset($orderHeaders);
     }
 
     public function pushQueue($orderHeaders){
         $orders = Order::query()->with(["logistic","packages.commodities.commodity"])->where('wms_status','订单完成')->whereIn('code',data_get($orderHeaders,'*.code'))->get();
-
         $orders->each(function($order){
             dispatch(new OrderCreateInstantBill($order));
         });
     }
 
-
     public function syncOrderByWMSOrderHeaders(&$orderHeaders)
     {
         if($orderHeaders->isEmpty())return;
@@ -857,21 +847,25 @@ class OrderService
         $owners = $ownerService->getOwnerByCodes($owner_codes);
         $logistics = $logisticService->getLogisticByCodes($logistic_codes);
         $shops = $shopService->getShopByCodeMap($shop_names);
-        $warehouses = $warehouseService->getWareHouseByCode($warehouse_codes);
+        $warehouses = $warehouseService->getWareHouseByCodes($warehouse_codes);
         $batches = $this->batchService->getBatchByCodes($batch_codes);
 
+        unset($owner_codes,$logistic_codes,$shop_names,$warehouse_codes,$batch_codes);
+
         $orders = $this->getByWmsOrders($orderHeaders);
 
         $created_params = $this->getCreateOrderModelsByWMSOrderHeaders($orderHeaders,$orders,$warehouses,$owners,$logistics,$shops,$batches); //3s
 
         $update_order = $this->getUpdateOrderModelByWMSOrderHeaders($orderHeaders,$orders,$warehouses,$owners,$logistics,$shops,$batches);
 
+        unset($owners,$logistics,$shops,$warehouses,$batches);
 
         // 转换插入 3s
         if(count($created_params) > 0){
             collect($created_params)->chunk(3500)->each(function($inner_params){
                 $this->insert($inner_params->toArray());
             });
+            unset($created_params);
         }
         $update_params = [
             ['id','code','warehouse_id','owner_id','batch_id','shop_id','logistic_id','consignee_name','consignee_phone','province','city','district','address','client_code','wms_status','created_at','updated_at','wms_edittime','order_type']
@@ -880,9 +874,10 @@ class OrderService
         $update_order->each(function($item)use(&$update_params){
             $update_params[] = $item->toArray();
         });
-        if(count($update_order)==0)return;
-
+        unset($update_order);
+        if(count($update_params)==0)return;
         $this->batchUpdate($update_params);
+        unset($update_params);
     }
 
     public function getCreateOrderModelsByWMSOrderHeaders(&$orderHeaders,&$orders,&$warehouses,&$owners,&$logistics,&$shops,&$batches)
@@ -905,6 +900,7 @@ class OrderService
             $order_model = $this->getCreateOrderModels($orderHeader,$warehouse_map,$owner_map,$logistic_map,$shop_map,$batch_map,$date);
             $inner_params[] = $order_model;
         }
+        unset($warehouse_map,$owner_map,$logistic_map,$shop_map,$order_map,$batch_map);
         return $inner_params;
     }
 
@@ -932,6 +928,7 @@ class OrderService
                 $collect->push($order);
             }
         }
+        unset($orderHeader_map,$warehouse_map,$owner_map,$logistic_map,$shop_map,$batch_map);
         return $collect;
     }
 
@@ -1076,7 +1073,7 @@ class OrderService
     public function pushOrderCache($orderHeaders,$prefixKey,$hasKey,$list_key){
         $list = [];
         try {
-            Redis::LLEN($list_key);
+            Cache::get($hasKey);
             collect($orderHeaders)->each(function($item)use(&$list,$prefixKey){
                 $list[] =$item->orderno;
                 Cache::put($prefixKey.$item->orderno,true);
@@ -1098,7 +1095,7 @@ class OrderService
         if(!$orderHeaders)return $orderHeaders;
         if(!$key)return $orderHeaders;
         try {
-            Redis::LLEN($key);
+            Cache::get($key);
             return array_filter($orderHeaders,function($item)use($key){
                 $bool = Cache::get($key.$item->orderno);
                 return !$bool;
@@ -1111,7 +1108,7 @@ class OrderService
     public function cancelOrderCache($key,string $prefix)
     {
         try {
-            Redis::LLEN($key);
+            Cache::get($prefix);
             $list = Cache::get($key);
             collect($list)->each(function ($item)use($prefix) {
                 Cache::forget($prefix.$item);
@@ -1127,9 +1124,17 @@ class OrderService
          * @var OrderService $orderService
          */
         $newest         = config('sync.order_sync.cache_prefix.created_at');
+        $have_task_is_running_key  = config('sync.order_sync.cache_prefix.newest_is_running');
         $newest_list    = config('sync.order_sync.cache_prefix.newest_list');
         $hasKey         = config('sync.order_sync.cache_prefix.newest_has');
         $prefixKey      = config('sync.order_sync.cache_prefix.newest');
+
+        $have_task_is_running = Cache::get($have_task_is_running_key);
+        if($have_task_is_running)return;
+        Cache::remember($have_task_is_running_key,config('cache.expirations.forever'),function (){
+            return true;
+        });
+
         ini_set('memory_limit', '512M');
         $orderService = app('OrderService');
         $oracleDOCOrderHeaderService = app('OracleDocOrderHeaderService');
@@ -1150,6 +1155,10 @@ class OrderService
             $orderService->pushOrderCache($newest_orders,$prefixKey,$hasKey,$newest_list);              //  添加缓存
             $orderService->setOrderSyncAt($newest,$last_order->addtime,count($orderHeaders)>0);   //  更新时间
         }
+
+        Cache::remember($have_task_is_running_key,config('cache.expirations.forever'),function (){
+            return false;
+        });
     }
 
     public function syncUpdatedOrder(){
@@ -1158,9 +1167,17 @@ class OrderService
          * @var OrderService $orderService
          */
         $renewal        = config('sync.order_sync.cache_prefix.updated_at');
+        $have_task_is_running_key  = config('sync.order_sync.cache_prefix.renewal_is_running');
         $renewal_list   = config('sync.order_sync.cache_prefix.renewal_list');
         $hasKey         = config('sync.order_sync.cache_prefix.renewal_has');
         $prefixKey      = config('sync.order_sync.cache_prefix.renewal');
+
+        $have_task_is_running = Cache::get($have_task_is_running_key);
+        if($have_task_is_running)return;
+        Cache::remember($have_task_is_running_key,config('cache.expirations.forever'),function (){
+            return true;
+        });
+
         ini_set('memory_limit', '512M');
 
         $orderService = app('OrderService');
@@ -1168,6 +1185,7 @@ class OrderService
 
         $last_date = $orderService->getOrderSyncAt($renewal,'renewal');                               // 获取时间点
 
+
         $orderHeaders = $oracleDOCOrderHeaderService->getWMSOrderOnEditDate($last_date);                   // WMS订单
 
         if($orderHeaders->count()==0)return;
@@ -1183,6 +1201,10 @@ class OrderService
             $orderService->pushOrderCache($renewal_orders,$prefixKey,$hasKey,$renewal_list);                // 添加缓存
             $orderService->setOrderSyncAt($renewal,$renewal_order->edittime,count($orderHeaders)>0);   // 更新时间
         }
+
+        Cache::remember($have_task_is_running_key,config('cache.expirations.forever'),function (){
+            return false;
+        });
     }
 
     public function syncOrderByWmsOrderNos($orderNos)

+ 2 - 2
app/Services/OwnerService.php

@@ -224,7 +224,7 @@ Class OwnerService
         $collect = collect();
         if(count($codes) == 0)return $collect;
         foreach ($codes as $code) {
-            $collect->push($this->getOwnerByCode($code));
+            $collect = $collect->push($this->getOwnerByCode($code));
         }
         return $collect;
     }
@@ -233,7 +233,7 @@ Class OwnerService
         return Cache::remember("getOwnerByCode_{$code}", config('cache.expirations.owners'), function ()use($code){
             $owner = Owner::query()->where('code',$code)->first();
             if($owner) return $owner;
-            $basCustomer = app('OracleBasCustomerService')->first(['Customer_Type'=>'OW','CustomerID'=>$code]);
+             $basCustomer = app('OracleBasCustomerService')->first(['Customer_Type'=>'OW','CustomerID'=>$code]);
             if(!$basCustomer)return null;
             return Owner::query()->create(['name'=>$basCustomer['descr_c'],'code'=>$basCustomer['customerid']]);
         });

+ 1 - 1
app/Services/ShopService.php

@@ -110,7 +110,7 @@ class ShopService
         $collect = collect();
         if(count($map)==0)return $collect;
         foreach ($map as $item) {
-            $collect->push(Cache::remember("getShopByCodeMap_{$item['owner_code']}_{$item['issuepartyname']}", config('database.cache.expirations.rarelyChange'), function()use($item,$owner_map){
+            $collect->push(Cache::remember("getShopByCodeMap_{$item['owner_code']}_{$item['issuepartyname']}", config('cache.expirations.rarelyChange'), function()use($item,$owner_map){
                 $owner = $owner_map[$item['owner_code']] ;
                 $shop = Shop::query()->where('owner_id',$owner['id'])->where('name',$item['issuepartyname'])->first();
                 if($shop)return $shop;

+ 7 - 1
config/sync.php

@@ -37,6 +37,10 @@ return [
         'interval' => 1,   // 时间以分为单位
         'start_at'=> '',    // 开始同步WMS的时间  时间格式: yyyy-MM-dd HH:mm:ss 如 2020-09-05 13:15:16
         'cache_prefix' => [
+            'restart' => 10,  // 重新启动时间 已分钟为单位
+            'last_start_at' => 'last_order_sync_task_start_at' ,
+            'last_end_at' => 'last_order_sync_task_end_at' ,
+            'last_err_at' => 'last_order_sync_task_error_at' ,
             'newest' =>'order_newest_',
             'renewal' =>'order_renewal_',
             'newest_has' => 'order_newest_has_set',             // 创建标记
@@ -44,7 +48,9 @@ return [
             'created_at' => 'order_last_created_sync_at',       // 最后创建时间
             'updated_at' => 'order_last_updated_sync_at',       // 最后更新时间
             'newest_list' => 'order_newest_cache_keys',               // 新增保存记录
-            'renewal_list' => 'order_renewal_cache_keys'              // 创建保存记录
+            'renewal_list' => 'order_renewal_cache_keys',              // 创建保存记录
+            'newest_is_running' =>  'order_newest_task_is_running',     // 同步创建任务是否在进行 true 为正在进行
+            'renewal_is_running' =>  'order_renewal_task_is_running',     // 同步更新任务是否在进行 true 为正在进行
         ]
     ]
 ];

+ 4 - 4
database/factories/OrcaleDOCOrderHeaderFactory.php

@@ -8,11 +8,11 @@ use Faker\Generator as Faker;
 $factory->define(OracleDOCOrderHeader::class, function (Faker $faker) {
     return [
         'orderno' => $faker->uuid,
-        'customerid' => '',
-        'waveno' => '',
+        'customerid' => $faker->name,
+        'waveno' => $faker->name,
         'ordertime' =>$faker->time(),
         'soreference1' => $faker->uuid,
-        'consigneeid' => '',
+        'consigneeid' => $faker->name,
         'c_contact' =>$faker->title(10),
         'consigneename' => $faker->title(11),
         'c_address1' => $faker->address,
@@ -27,7 +27,7 @@ $factory->define(OracleDOCOrderHeader::class, function (Faker $faker) {
         'soreference5' => $faker->uuid,
         'c_tel2' => $faker->phoneNumber,
         'transportation' => $faker->phoneNumber,
-        'warehouseid' => '',
+        'warehouseid' => $faker->name,
         'sostatus' => '99',
         'c_tel1' => $faker->phoneNumber,
         'c_district' => $faker->city,

+ 5 - 1
database/factories/OrderCommodityFactory.php

@@ -7,6 +7,10 @@ use Faker\Generator as Faker;
 
 $factory->define(OrderCommodity::class, function (Faker $faker) {
     return [
-        //
+        'order_id' => 1,
+        'commodity_id' => 1,
+        'amount' => rand(1,100),
+        'wms_ptltaskid' => $faker->name,
+        'location' => $faker->name
     ];
 });

+ 67 - 0
tests/Services/OrderCommodityService/GetReGroupActAllocationDetailsTest.php

@@ -0,0 +1,67 @@
+<?php
+
+namespace Tests\Services\OrderCommodityService;
+
+use App\OracleActAllocationDetails;
+use App\OracleDOCOrderHeader;
+use App\Owner;
+use App\Services\OrderCommodityService;
+use Illuminate\Foundation\Testing\RefreshDatabase;
+use Illuminate\Foundation\Testing\WithFaker;
+use Tests\TestCase;
+
+class GetReGroupActAllocationDetailsTest extends TestCase
+{
+//    use RefreshDatabase;
+
+    /** @var OrderCommodityService  $service */
+    private $service;
+    private $data;
+
+    public function setUp(): void
+    {
+        parent::setUp(); // TODO: Change the autogenerated stub
+        $this->service = app('OrderCommodityService');
+//        $owner = factory(Owner::class)->create();
+        $orderHeaders  = collect();
+        $orderHeader = factory(OracleDOCOrderHeader::class)->make();
+        $oracleActAllocationDetails = collect();
+        for ($i=0;$i<=10;$i++){
+            $oracleActAllocationDetails->push( factory(OracleActAllocationDetails::class)->make(['orderno'=>$orderHeader['orderno'],'customerid' => $orderHeader['customerid']]));
+        }
+        $orderHeader->setRelation('actAllocationDetails',$oracleActAllocationDetails);
+        $orderHeaders->push($orderHeader);
+        $this->data['orderHeaders'] = $orderHeaders;
+    }
+
+    /**
+     * @test
+     */
+    public function getRegroupActAllocationDetails()
+    {
+        $orderHeaders = $this->data['orderHeaders'];
+        $oracleActAllocationDetails = $orderHeaders->first()->actAllocationDetails;
+
+        $regroupActAllocationDetails = $this->service->getRegroupActAllocationDetails($orderHeaders);
+
+        $this->assertNotNull($oracleActAllocationDetails);
+        $this->assertNotNull($regroupActAllocationDetails);
+
+        $this->assertEquals(count($orderHeaders),$this->count($regroupActAllocationDetails));
+        foreach ($regroupActAllocationDetails as $items) {
+            foreach ($items as $item) {
+                $details = $oracleActAllocationDetails
+                    ->where('location',$item['location'])
+                    ->where('customerid',$item['owner_code'])
+                    ->where('sku',$item['sku']);
+                $this->assertNotEmpty($details);
+                $this->assertEquals(1, $details->count());
+            }
+        }
+    }
+
+    public function tearDown(): void
+    {
+        parent::tearDown(); // TODO: Change the autogenerated stub
+    }
+}

+ 0 - 65
tests/Services/OrderCommodityService/SyncOrderCommoditiesTest.php

@@ -1,65 +0,0 @@
-<?php
-
-
-namespace Tests\Services\OrderCommodityService;
-
-use Carbon\Carbon;
-use Tests\TestCase;
-use App\OracleDOCOrderHeader;
-use App\Order;
-use App\OrderCommodity;
-use App\Services\OrderCommodityService;
-use App\Services\OrderService;
-use Illuminate\Foundation\Testing\RefreshDatabase;
-
-class SyncOrderCommoditiesTest extends TestCase
-{
-    use RefreshDatabase;
-
-    /**
-     * @var OrderService $orderService
-     * @var OrderCommodityService $service
-     */
-    private $service;
-    private $orderService;
-    private $data = [];
-
-    public function setUp(): void
-    {
-        parent::setUp();
-        $this->service = app('OrderCommodityService');
-        $this->orderService = app('OrderService');
-    }
-
-    /**
-     * @test
-     */
-    public function syncOrderCommodities()
-    {
-        $orderHeader  = OracleDOCOrderHeader::query()->with('oracleDOCOrderDetails')->where('sostatus','99')->orderByDesc('addTime')->first();
-        $orderHeaders = collect();
-        $orderHeaders->push($orderHeader);
-
-        $this->orderService->syncOrderByWMSOrderHeaders($orderHeaders);
-        $this->service->syncOrderCommodities($orderHeaders);
-
-        $order = Order::query()->where('code',$orderHeader->orderno)->first();
-        $orderCommodities = OrderCommodity::query()->with('commodity')->where('order_id',$order['id'])->get();
-        $oracleDOCOrderDetails =  $orderHeader->oracleDOCOrderDetails;
-        $oracleDOCOrderDetails->each(function($detail)use($orderCommodities){
-            $orderCommodity = $orderCommodities->where('commodity.sku',$detail['sku'])->where('amount',$detail['qtyordered'])->first();
-            $this->assertNotNull($orderCommodity);
-        });
-
-        $orderCommodities->each(function($orderCommodity)use($oracleDOCOrderDetails){
-            $detail = $oracleDOCOrderDetails->where('sku',$orderCommodity->commodity->sku)->where('qtyordered',$orderCommodity->amount)->first();
-            $this->assertNotNull($detail);
-        });
-    }
-
-    public function tearDown(): void
-    {
-        cache()->flush();
-        parent::tearDown(); // TODO: Change the autogenerated stub
-    }
-}

+ 91 - 0
tests/Services/OrderCommodityService/SyncOrderCommodityTest.php

@@ -0,0 +1,91 @@
+<?php
+
+namespace Tests\Services\OrderCommodityService;
+
+use App\Commodity;
+use App\OracleActAllocationDetails;
+use App\OracleDOCOrderHeader;
+use App\Order;
+use App\OrderCommodity;
+use App\Owner;
+use App\Services\CommodityService;
+use App\Services\OrderCommodityService;
+use Carbon\Carbon;
+use Illuminate\Foundation\Testing\RefreshDatabase;
+use Illuminate\Foundation\Testing\WithFaker;
+use Tests\TestCase;
+
+class SyncOrderCommodityTest extends TestCase
+{
+//    use RefreshDatabase;
+
+    /** @var OrderCommodityService $service */
+    private $service;
+    private $data = [];
+    public function setUp(): void
+    {
+        parent::setUp(); // TODO: Change the autogenerated stub
+        $this->service = app('OrderCommodityService');
+
+        $owners = factory(Owner::class)->times(5)->create();
+        $this->data['owners'] = $owners;
+        $commodities = collect();
+        foreach ($owners as $owner) {
+            $commodities = $commodities->concat(factory(Commodity::class)->times(rand(5,20))->create(['owner_id'=>$owner->id]));
+        }
+        $this->data['commodities'] = $commodities;
+
+        $orderHeaders = collect();$orders = collect();
+        for ($i=0;$i<2000;$i++) {
+            $owner = $owners->random();
+            $commodity_list = $commodities->where('owner_id',$owner->id);
+            $order = factory(Order::class)->create(['owner_id'=>$owner->id]);
+            $orderHeader = factory(OracleDOCOrderHeader::class)->make(['orderno' => $order->code, 'customerid' => $owner->code]);
+            $oracleActAllocationDetails = collect();
+            for($count=1;$count<=4;$count++){
+                $commodity = $commodity_list->random();
+                $oracleActAllocationDetail  = factory(OracleActAllocationDetails::class)->make([
+                    'orderno'=>$orderHeader['orderno'],
+                    'customerid' => $orderHeader['customerid'],
+                    'sku' => $commodity->sku
+                    ]);
+                $oracleActAllocationDetails->push($oracleActAllocationDetail);
+            }
+            $orderHeader->setRelation('actAllocationDetails',$oracleActAllocationDetails);
+            $orderHeaders->push($orderHeader);
+            $orders->push($order);
+        }
+        $this->data['orders'] = $orders;
+        $this->data['orderHeaders'] = $orderHeaders;
+
+        $this->mock(CommodityService::class,function($mock)use($commodities){
+            $mock->shouldReceive('get_')->andReturn($commodities);
+        });
+    }
+
+    /**
+     * @test
+     */
+    public function syncOrderCommodity()
+    {
+        for ($i = 0 ;$i<4; $i++) {
+            $this->service->syncOrderCommodity($this->data['orderHeaders']);
+        }
+        $counts = OrderCommodity::query()->whereIn('order_id',data_get($this->data['orders'],'*.id'))->get()->count();
+        $actAllocationDetailsCounts  = 0;
+         foreach ($this->data['orderHeaders'] as $orderHeader) {
+            $actAllocationDetails = $orderHeader->actAllocationDetails;
+            $actAllocationDetailsCounts  += $actAllocationDetails->count();
+        }
+        $this->assertEquals($counts,$actAllocationDetailsCounts);
+     }
+
+    public function tearDown(): void
+    {
+        cache()->flush();
+        Order::query()->whereIn('id',data_get($this->data['orders'],'*.id'))->delete();
+        Owner::query()->whereIn('id',data_get($this->data['owners'],'*.id'))->delete();
+        Commodity::query()->whereIn('id',data_get($this->data['commodities'],'*.id'))->delete();
+        parent::tearDown(); // TODO: Change the autogenerated stub
+    }
+}

+ 0 - 1
tests/Services/OrderPackageService/GetInnerParamsTest.php

@@ -16,7 +16,6 @@ use Tests\TestCase;
 
 class GetInnerParamsTest extends TestCase
 {
-    use RefreshDatabase;
     /**
      * @var OrderPackageService $service
      */

+ 64 - 11
tests/Services/OrderPackageService/SyncOrderPackageTest.php

@@ -7,6 +7,7 @@ use App\OracleActAllocationDetails;
 use App\OracleBasSKU;
 use App\OracleDOCOrderHeader;
 use App\Order;
+use App\OrderPackage;
 use App\Owner;
 use App\Services\OracleDOCOrderHeaderService;
 use App\Services\OrderPackageService;
@@ -14,11 +15,11 @@ use App\Services\OrderService;
 use Carbon\Carbon;
 use Illuminate\Foundation\Testing\RefreshDatabase;
 use Illuminate\Foundation\Testing\WithFaker;
+use Illuminate\Support\Str;
 use Tests\TestCase;
 
 class SyncOrderPackageTest extends TestCase
 {
-    use RefreshDatabase;
 
     /**
      * @var OrderPackageService $service
@@ -38,24 +39,25 @@ class SyncOrderPackageTest extends TestCase
         $this->orderHeaderService = app('OracleDocOrderHeaderService');
 
         $orderHeader = factory(OracleDOCOrderHeader::class)->make(['userdefine1' =>'TEST_OW' ]);
-        $this->data['orderHeader'] = $orderHeader;
-        $order = factory(Order::class)->create([
-            'code'=>$orderHeader['orderno'],
-        ]);
-
+        $order = factory(Order::class)->create(['code'=>$orderHeader['orderno'],]);
         $basSku = factory(OracleBasSKU::class)->make(['customerid' => 'TEST_OW']);
-        $this->data['sku'] = $basSku;
         $OracleActAllocationDetail1 = factory(OracleActAllocationDetails::class)->make(['orderno'=>$orderHeader->orderno,'customerid'=>'TEST_OW','sku'=>$basSku->sku]);
         $OracleActAllocationDetail2 = factory(OracleActAllocationDetails::class)->make(['orderno'=>$orderHeader->orderno,'customerid'=>'TEST_OW','sku'=>$basSku->sku]);
         $OracleActAllocationDetail3 = factory(OracleActAllocationDetails::class)->make(['orderno'=>$orderHeader->orderno,'customerid'=>'TEST_OW','sku'=>$basSku->sku]);
         $OracleActAllocationDetails = collect([$OracleActAllocationDetail1,$OracleActAllocationDetail2,$OracleActAllocationDetail3]);
         $orderHeader->setRelation('actAllocationDetails',$OracleActAllocationDetails);
-        $this->data['actAllocationDetails'] = $OracleActAllocationDetails;
+
         $owner = factory(Owner::class)->create(['code'=>'TEST_OW']);
         $commodity = factory(Commodity::class)->create(['sku'=>$basSku['sku'],'owner_id' => $owner]);
-        $this->data['owner'] = $owner;
-        $this->data['commodity'] = $commodity;
-        $this->data['order'] = $order;
+        $this->data = [
+            'owner' => $owner,
+            'commodity' => $commodity,
+            'order' => $order,
+            'orderHeader' =>  $orderHeader,
+            'sku' => $basSku,
+            'actAllocationDetails' => $OracleActAllocationDetails,
+        ];
+
     }
 
     /**
@@ -63,6 +65,57 @@ class SyncOrderPackageTest extends TestCase
      */
     public function syncOrderPackage()
     {
+        $orderHeaders = collect([$this->data['orderHeader']]);
+        $this->service->syncOrderPackage($orderHeaders);
+        $orderPackages = OrderPackage::query()->where('order_id',$this->data['order']['id'])->get();
+        $this->assertEquals($orderPackages->count(),count($this->data['orderHeader']->actAllocationDetails));
+    }
 
+    /**
+     * @test
+     */
+    public function orderPackageUnnecessary()
+    {
+        OrderPackage::query()->create(['order_id'=>$this->data['order']['id'],'logistic_number'=>Str::uuid()]);
+        OrderPackage::query()->create(['order_id'=>$this->data['order']['id'],'logistic_number'=>Str::uuid()]);
+        $orderHeaders = collect([$this->data['orderHeader']]);
+        $this->service->syncOrderPackage($orderHeaders);
+        $orderPackages = OrderPackage::query()->where('order_id',$this->data['order']['id'])->get();
+        $this->assertEquals($orderPackages->count(),count($this->data['orderHeader']->actAllocationDetails));
     }
+
+    /**
+     * @test
+     */
+    public function orderPackagesLack()
+    {
+        $orderHeaders = collect([$this->data['orderHeader']]);
+        $this->service->syncOrderPackage($orderHeaders);
+        $actAllocationDetails = $this->data['actAllocationDetails']->random(2);
+        $this->data['orderHeader']->setRelation('actAllocationDetails', $actAllocationDetails);
+        $orderHeaders = collect([$this->data['orderHeader']]);
+        $this->service->syncOrderPackage($orderHeaders);
+        $orderPackages = OrderPackage::query()->where('order_id',$this->data['order']['id'])->get();
+        $this->assertEquals($orderPackages->count(),count($this->data['orderHeader']->actAllocationDetails));
+        $this->assertOrderPackage($orderHeaders,$orderPackages);
+    }
+
+    public function assertOrderPackage($orderHeaders,$orderPackages)
+    {
+        foreach ($orderHeaders->first()->actAllocationDetails as $actAllocationDetail) {
+            $orderPackage = $orderPackages->where('logistic_number',$actAllocationDetail->picktotraceid)->first();
+            $this->assertNotEmpty($orderPackage);
+        }
+    }
+
+    protected function tearDown(): void
+    {
+        $this->data['owner']->delete();
+        $this->data['commodity']->delete();
+        $this->data['order']->delete();
+
+        parent::tearDown(); // TODO: Change the autogenerated stub
+    }
+
+
 }

+ 0 - 39
tests/Services/OrderPackageService/SyncPackageByOrderHeadersTest.php

@@ -1,39 +0,0 @@
-<?php
-
-namespace Tests\Services\OrderPackageService\SyncPackageByOrderHeadersTest;
-
-use App\Logistic;
-use App\OracleDOCOrderHeader;
-use App\Owner;
-use App\Services\OracleDOCOrderHeaderService;
-use App\Services\OrderPackageService;
-use App\Services\OrderService;
-use App\Shop;
-use Illuminate\Foundation\Testing\RefreshDatabase;
-use Tests\TestCase;
-
-class SyncPackageByOrderHeadersTest extends TestCase
-{
-    use RefreshDatabase;
-
-    /**
-     * @var OrderPackageService $service
-     * @var OracleDOCOrderHeaderService $orderHeaderService
-     * @var OrderService $orderService
-     */
-    public $service;
-    public $orderService;
-    public $orderHeaderService;
-
-    public function setUp(): void
-    {
-        parent::setUp();
-        $this->service = app('OrderPackageService');
-        $this->orderService = app('OrderService');
-        $this->orderHeaderService = app('OracleDocOrderHeaderService');
-    }
-    public function testSyncPackageByOrderHeaders()
-    {
-
-    }
-}

+ 0 - 1
tests/Services/OrderService/CreateOrFindOrderInfoTest.php

@@ -22,7 +22,6 @@ use Tests\TestCase;
 
 class CreateOrFindOrderInfoTest extends TestCase
 {
-    use RefreshDatabase;
 
     /**
      * @var OrderService $orderService

+ 0 - 1
tests/Services/OrderService/CreateOrFindOrderTest.php

@@ -19,7 +19,6 @@ use Tests\TestCase;
 
 class CreateOrFindOrderTest extends TestCase
 {
-    use RefreshDatabase;
     /**
      * @var OrderService $orderService
      */

+ 0 - 2
tests/Services/OrderService/FindOrCreateByClientCodeTest.php

@@ -18,8 +18,6 @@ use Tests\TestCase;
 
 class FindOrCreateByClientCodeTest extends TestCase
 {
-    use RefreshDatabase;
-
     /** @var OrderService $service */
     public $service;
     private $data;

+ 53 - 0
tests/Services/OrderService/GetByWmsOrdersTest.php

@@ -0,0 +1,53 @@
+<?php
+
+namespace Tests\Services\OrderService;
+
+use App\OracleDOCOrderHeader;
+use App\Order;
+use App\Services\OrderService;
+use Illuminate\Foundation\Testing\RefreshDatabase;
+use Illuminate\Foundation\Testing\WithFaker;
+use Tests\TestCase;
+
+class GetByWmsOrdersTest extends TestCase
+{
+    /**
+     * @var OrderService $service
+     */
+    private $service;
+    private $data = [];
+
+    protected function setUp(): void
+    {
+        parent::setUp(); // TODO: Change the autogenerated
+        $this->service = app('OrderService');
+        $orders = factory(Order::class)->times(1000)->create();
+        $orderHeaders = collect();
+        foreach ($orders as $order) {
+            $orderHeader = factory(OracleDOCOrderHeader::class)->make(['orderno'=>$order->code]);
+            $orderHeaders->push($orderHeader);
+        }
+        $this->data =[
+            'orders' => $orders,
+            'orderHeaders' => $orderHeaders
+        ];
+    }
+
+    /**
+     * @test
+     */
+    public function getByWmsOrders()
+    {
+        $orders = $this->service->getByWmsOrders($this->data['orderHeaders']);
+        $this->assertNotEmpty($orders);
+        $this->assertEquals(count($this->data['orders']),$orders->count());
+    }
+
+    protected function tearDown(): void
+    {
+        Order::query()->whereIn('id',data_get($this->data['orders'],'*.id'))->delete();
+        parent::tearDown(); // TODO: Change the autogenerated stub
+    }
+
+
+}

+ 11 - 9
tests/Services/OrderService/GetCreateOrderModelByWMSOrderHeadersTest.php

@@ -29,7 +29,7 @@ use Tests\TestCase;
 class GetCreateOrderModelByWMSOrderHeadersTest extends TestCase
 {
 
-    use  RefreshDatabase;
+//    use  RefreshDatabase;
 
     /**
      * @var OrderService $service
@@ -75,7 +75,6 @@ class GetCreateOrderModelByWMSOrderHeadersTest extends TestCase
         $wmsOrderHeader->setRelation('oracleBASCode',$code_BasCode);
         $this->data['orderHeader'] = $wmsOrderHeader;
 
-
     }
 
     /**
@@ -86,12 +85,15 @@ class GetCreateOrderModelByWMSOrderHeadersTest extends TestCase
 
         $orderHeaders = collect([$this->data['orderHeader']]);
         $warehouses = $this->getWareHouses($orderHeaders);
+
         $owners = $this->getOwners($orderHeaders);
         $logistics = $this->getLogistics($orderHeaders);
         $shops = $this->getShops($orderHeaders);
-
+        $batches = [];
         $orders = $this->service->getByWmsOrders($orderHeaders);
-        $crate_orders = $this->service->getCreateOrderModelsByWMSOrderHeaders($orderHeaders,$orders,$warehouses,$owners,$logistics,$shops);
+
+        $crate_orders = $this->service->getCreateOrderModelsByWMSOrderHeaders($orderHeaders, $orders, $warehouses, $owners, $logistics, $shops, $batches);
+
         if($orders->count() == $orderHeaders->count() ){
             $this->assertEquals($orders->count(),$orderHeaders->count());
         }
@@ -124,10 +126,10 @@ class GetCreateOrderModelByWMSOrderHeadersTest extends TestCase
             $this->assertEquals($order->client_code ,$orderHeader->soreference1);
             $this->assertEquals($order->wms_edittime ,(string)$orderHeader->edittime);
             $this->assertEquals($order->wms_status ,$orderHeader->oracleBASCode_codename_c);
-//            $this->assertEquals((string)$order->created_at ,(string)$orderHeader->addtime);
         }
     }
 
+
     public function getWareHouses($orderHeaders)
     {
         return $this->warehouseService->getByWmsOrders($orderHeaders);
@@ -151,10 +153,10 @@ class GetCreateOrderModelByWMSOrderHeadersTest extends TestCase
         cache()->forget("getOwnerByCode_{$this->data['owner']}");
         cache()->forget("getShopByCodeMap_{$this->data['shop']}");
         cache()->forget("WareHouse_{$this->data['warehouse']}");
-        $this->data['warehouse']->delte();
-        $this->data['logistic']->delte();
-        $this->data['owner']->delte();
-        $this->data['shop']->delte();
+        $this->data['warehouse']->delete();
+        $this->data['logistic']->delete();
+        $this->data['owner']->delete();
+        $this->data['shop']->delete();
         parent::tearDown(); // TODO: Change the autogenerated stub
     }
 

+ 136 - 0
tests/Services/OrderService/GetCreateOrderModelsTest.php

@@ -0,0 +1,136 @@
+<?php
+
+namespace Tests\Services\OrderService;
+
+use App\Batch;
+use App\Logistic;
+use App\OracleBasCode;
+use App\OracleDOCOrderHeader;
+use App\Order;
+use App\Owner;
+use App\Services\common\DataHandlerService;
+use App\Services\OrderService;
+use App\Shop;
+use App\Warehouse;
+use Carbon\Carbon;
+use Illuminate\Foundation\Testing\RefreshDatabase;
+use Illuminate\Foundation\Testing\WithFaker;
+use Tests\TestCase;
+
+class GetCreateOrderModelsTest extends TestCase
+{
+
+    /**
+     * @var OrderService $service
+     * @var DataHandlerService $dataHandlerService
+     */
+    private $service;
+    private $dataHandlerService;
+    private $data = [];
+
+    public function setUp(): void
+    {
+        parent::setUp(); // TODO: Change the autogenerated stub
+        $this->service = app('OrderService');
+        $this->dataHandlerService = app('DataHandlerService');
+
+        $owners = factory(Owner::class)->times(20)->create();
+        $this->data['owners'] = $owners;
+        $logistics = factory(Logistic::class)->times(30)->create();
+        $wareHouses = factory(Warehouse::class)->times(2)->create();
+        $batches = factory(Batch::class)->times(10)->create();
+        $this->data['logistics'] = $logistics;
+        $this->data['wareHouses'] = $wareHouses;
+        $shops = collect();
+        foreach ($owners as $owner) {
+            $shops = $shops->concat(factory(Shop::class)->times(rand(1,11))->create(['owner_id'=>$owner->id]));
+        }
+        $this->data['shops'] = $shops;
+        $orderHeaders = collect();
+
+        $basBack = factory(OracleBasCode::class)->times(5)->make();
+
+        for ($i=0;$i<= 30;$i++) {
+            $owner = $owners->random();
+            $shop = $shops->where('owner_id',$owner->id)->random();
+            $logistic = $logistics->random();
+            $wareHouse = $wareHouses->random();
+            $batch = $batches->random();
+            $orderHeader = factory(OracleDOCOrderHeader::class)->make();
+            $orderHeader->customerid = $owner->code;
+            $orderHeader->waveno = $batch->code;
+            $orderHeader->warehouseid = $wareHouse->code;
+            $orderHeader->userdefine1 = $logistic->code;
+            $orderHeader->issuepartyname =  $shop->code;
+            $orderType = $basBack->random();
+            $oracleBASCode = $basBack->random();
+            $orderHeader->setRelation('orderType',$orderType);
+            $orderHeader->setRelation('oracleBASCode',$oracleBASCode);
+            $orderHeaders->push($orderHeader);
+        }
+        $this->data = [
+            'owners'  => $owners,
+            'logistics' => $logistics,
+            'wareHouses' => $wareHouses,
+            'shops' => $shops,
+            'orderHeaders' => $orderHeaders,
+            'batches' => $batches,
+        ];
+    }
+
+    /**
+     * @test
+     */
+    public function getCreateOrderModels()
+    {
+        // is progressing
+        // Mission in progress
+        $orderHeader_map =$this->data['orderHeaders'];
+        $warehouse_map = $this->dataHandlerService->dataHeader(['code'],$this->data['wareHouses']);
+        $owner_map = $this->dataHandlerService->dataHeader(['code'],$this->data['owners']);
+        $logistic_map = $this->dataHandlerService->dataHeader(['code'],$this->data['logistics']);
+        $shop_map = $this->dataHandlerService->dataHeader(['name','owner_id'],$this->data['shops']);
+        $batch_map =  $this->dataHandlerService->dataHeader(['code'],$this->data['batches']);
+        $date = (string)Carbon::now();
+        foreach ($orderHeader_map as $orderHeader) {
+            $param = $this->service->getCreateOrderModels($orderHeader,$warehouse_map,$owner_map,$logistic_map,$shop_map,$batch_map,$date);
+            $warehouse = $this->dataHandlerService->getKeyValue(['code'=>$orderHeader->warehouseid],$warehouse_map);
+            $owner = $this->dataHandlerService->getKeyValue(['code'=>$orderHeader->customerid],$owner_map);
+            $logistic = $this->dataHandlerService->getKeyValue(['code'=>$orderHeader->userdefine1],$logistic_map);
+            $batch = $this->dataHandlerService->getKeyValue(['code'=>$orderHeader->waveno],$batch_map);
+            $shop['id'] = null;
+            if($orderHeader->issuepartyname != null && $orderHeader->issuepartyname != '' ){
+                $shop = $this->dataHandlerService->getKeyValue(['name'=>$orderHeader->issuepartyname ?? '','owner_id'=>$owner->id??''],$shop_map);
+            }
+
+            $this->assertEquals($param['code'],$orderHeader['orderno']);
+            $this->assertEquals($param['batch_id'],$batch['id'] ?? null);
+            $this->assertEquals($param['warehouse_id'],$warehouse['id'] ?? null);
+            $this->assertEquals($param['owner_id'],$owner['id'] ?? null);
+            $this->assertEquals($param['shop_id'],$shop['id'] ?? null);
+            $this->assertEquals($param['logistic_id'],$logistic['id'] ?? null);
+            $this->assertEquals($param['consignee_name'],  $orderHeader['c_contact']);
+            $this->assertEquals($param['consignee_phone'],$orderHeader['c_tel2'] ?? $orderHeader['c_tel1']);
+            $this->assertEquals($param['city'],$orderHeader['c_city']);
+            $this->assertEquals($param['district'],$orderHeader['c_district']);
+            $this->assertEquals($param['address'],$orderHeader['c_address1']);
+            $this->assertEquals($param['client_code'],$orderHeader['soreference1']);
+            $this->assertEquals($param['wms_edittime'], $orderHeader['edittime']);
+            $this->assertEquals($param['wms_status'],$orderHeader->oracleBASCode->codename_c??'');
+            $this->assertEquals($param['order_type'],$orderHeader->orderType->codename_c??'');
+        }
+    }
+
+    public function tearDown(): void
+    {
+        Order::query()->whereIn('code',data_get($this->data['orderHeaders'],'*.orderno'));
+
+        Warehouse::query()->whereIn('id',data_get($this->data['wareHouses'],'*.id'));
+        Owner::query()->whereIn('id',data_get($this->data['owners'],'*.id'));
+        Logistic::query()->whereIn('id',data_get($this->data['logistics'],'*.id'));
+        Shop::query()->whereIn('id',data_get($this->data['shops'],'*.id'));
+        Batch::query()->whereIn('id',data_get($this->data['batches'],'*.id'));
+
+        parent::tearDown(); // TODO: Change the autogenerated stub
+    }
+}

+ 0 - 1
tests/Services/OrderService/GetOrderSyncAtTest.php

@@ -8,7 +8,6 @@ use Tests\TestCase;
 
 class GetOrderSyncAtTest extends TestCase
 {
-    use RefreshDatabase;
     /**
      * @var OrderService $service
      */

+ 0 - 1
tests/Services/OrderService/GetParamByOrderHeaderTest.php

@@ -23,7 +23,6 @@ use Tests\TestCase;
 
 class GetParamByOrderHeaderTest extends TestCase
 {
-    use RefreshDatabase;
 
     /** @var OrderService $service */
     private $service;

+ 131 - 97
tests/Services/OrderService/GetUpdateModelByWmsOrderHeadersTest.php

@@ -2,132 +2,166 @@
 
 namespace Tests\Services\OrderService\GetUpdateOrderModelByWMSOrderHeadersTest;
 
+use App\Batch;
 use App\Logistic;
 use App\OracleBasCode;
 use App\OracleDOCOrderHeader;
 use App\Order;
 use App\Owner;
-use App\Services\LogisticService;
-use App\Services\OracleDOCOrderHeaderService;
 use App\Services\OrderService;
-use App\Services\OwnerService;
-use App\Services\ShopService;
-use App\Services\WarehouseService;
 use App\Shop;
 use App\Warehouse;
-use Carbon\Carbon;
-use Illuminate\Foundation\Testing\RefreshDatabase;
-use Illuminate\Foundation\Testing\WithFaker;
-use Illuminate\Support\Str;
 use Tests\TestCase;
 
 class GetUpdateModelByWmsOrderHeadersTest extends TestCase
 {
-    use RefreshDatabase;
     /**
      * @var OrderService $service
-     * @var OracleDOCOrderHeaderService $orderHeaderService
      */
-    public $service;
-    public $orderHeaderService;
+    private $service;
     private $data = [];
 
     public function setUp(): void
     {
         parent::setUp();
         $this->service = app('OrderService');
-        $this->orderHeaderService = app('OracleDocOrderHeaderService');
-
-        $wmsOrderHeader = factory(OracleDOCOrderHeader::class)->make([
-            'customerid'=>'TEST_OW','sostatus'=>99,'userdefine1'=>'TEST_CA','warehouseid'=>'WH_TEST'
-        ]);
-
-        $orderType = factory(OracleBasCode::class)->make(['code'=>'sysy', 'codeid'=>'SO_TYP', 'codename_c'=>'测试状态']);
-        $wmsOrderHeader->setRelation('orderType',$orderType);
-
-        $code_BasCode  = factory(OracleBasCode::class)->make(['codeid'=>'OW','code'=>'99','descr_c'=>'订单完成']);
-        $wmsOrderHeader->setRelation('oracleBASCode',$code_BasCode);
-
-        $this->data['warehouse']    = factory(Warehouse::class)->create(['code'=>'WH_TEST']);
-        $this->data['logistic']     = factory(Logistic::class)->create(['code'=>'TEST_CA','name'=>'测试承运商']);
-        $this->data['owner']        = factory(Owner::class)->create(['code'=>'TEST_OW','name'=>'测试货主']);
-        $this->data['shop']         = factory(Shop::class)->create(['owner_id'=>$this->data['owner']['id']]);
-
-        $this->data['orderHeader'] = $wmsOrderHeader;
+        $owners = factory(Owner::class)->times(10)->create();
+        $logistics = factory(Logistic::class)->times(20)->create();
+        $wareHouses = factory(Warehouse::class)->times(3)->create();
+        $shops = collect();
+        foreach ($owners as $owner) {
+            $shops = $shops->concat(factory(Shop::class)->times(rand(3,5))->create(['owner_id'=>$owner->id]));
+        }
+        $batches = factory(Batch::class)->times(10)->create();
+        $orders = collect();
+        $orderHeaders = collect();
+        foreach ($owners as $owner) {
+            $count = rand(2,10);
+            for ($i =0 ;$i<=$count;$i++){
+                $shop = $shops->where('owner_id',$owner->id)->random();
+                $warehouse = $wareHouses->random();
+                $logistic = $logistics->random();
+                $batch = $batches->random();
+
+                $orderHeader = factory(OracleDOCOrderHeader::class)->make([
+                        'warehouseid'=>$warehouse->code,
+                        'waveno'=>$batch->code,
+                        'customerid'=>$owner->code,
+                        'userdefine1'=>$logistic->code,
+                        'issuepartyname' => $shop->name,
+                    ]);
+                $oracleBASCode = factory(OracleBasCode::class)->make();
+                $orderType = factory(OracleBasCode::class)->make();
+                $orderHeader->setRelation('oracleBASCode',$oracleBASCode);
+                $orderHeader->setRelation('orderType',$orderType);
+                $orderHeaders = $orderHeaders->push($orderHeader);
+
+                $order = factory(Order::class)->create([
+                    'code' => $orderHeader->orderno,
+                    'batch_id' =>$batch->id,
+                    'warehouse_id' => $warehouse->id,
+                    'logistic_id' => $logistic->id,
+                    'shop_id' => $shop->id,
+                    'owner_id' => $owner->id
+                ]);
+                $orders->push($order);
+            }
+        }
+        $this->data = [
+            'warehouses' => $wareHouses,
+            'batches' => $batches,
+            'owners' => $owners,
+            'logistics' => $logistics,
+            'shops' => $shops,
+            'orders' => $orders,
+            'orderHeaders' => $orderHeaders
+        ];
     }
 
     /**
-     * @test
+     * @test 测试
      */
-    public function getUpdateOrderModelByWMSOrderHeaders()
+    public function getUpdateModelByWmsOrderHeader()
     {
+        $update_models = $this->service->getUpdateOrderModelByWMSOrderHeaders(
+            $this->data['orderHeaders'],
+            $this->data['orders'],
+            $this->data['warehouses'],
+            $this->data['owners'],
+            $this->data['logistics'],
+            $this->data['shops'],
+            $this->data['batches']
+        );
+        $this->assertEquals($update_models->count(),count($this->data['orders']));
+        $this->assertEquals(count($this->data['orders']),count($update_models));
+    }
 
-        $orderHeaders = collect([$this->data['orderHeader']]);
-        /**
-         * @var OwnerService $ownerService
-         * @var LogisticService $logisticService
-         * @var ShopService $shopService
-         * @var WarehouseService $warehouseService
-         * @var OrderService $orderService
-         */
-        $ownerService = app("OwnerService");
-        $logisticService = app("LogisticService");
-        $shopService = app('ShopService');
-        $warehouseService = app('WarehouseService');
-        $orderService = app('OrderService');
-        $owners = $ownerService->getByWmsOrders($orderHeaders);
-        $logistics = $logisticService->getByWmsOrders($orderHeaders);
-        $shops = $shopService->getByWmsOrders($orderHeaders);
-        $warehouses = $warehouseService->getByWmsOrders($orderHeaders);
-        $orderService->syncOrderByWMSOrderHeaders($orderHeaders);
-
-        $orders = Order::query()->whereIn('code',data_get($orderHeaders,'*.orderno'))->get();
-        $orders->each(function(&$item){
-            $item->warehouse_id = 1;
-            $item->owner_id = 1;
-            $item->shop_id = 1;
-            $item->logistic_id = 1;
-            $item->consignee_name = Str::random(50);
-            $item->consignee_phone = Str::random(50);
-            $item->province = Str::random(50);
-            $item->city = Str::random(50);
-            $item->district = Str::random(50);
-            $item->address = Str::random(50);
-            $item->client_code = Str::random(52);
-            $item->wms_edittime = Carbon::now();
-            $item->wms_status = Str::random(10);
-            $item->updated_at = Carbon::now();
-            $item->created_at = Carbon::now();
-        });
-        $update_orders = $this->service->getUpdateOrderModelByWMSOrderHeaders($orderHeaders,$orders,$warehouses,$owners,$logistics,$shops);
+    /**
+     * @test 部分Order与OrderHeaders相同
+     */
+    public function orderPortionIsEquals()
+    {
+        $orders  = $this->data['orders']->random(10);
+        foreach ($orders as $order) {
+            $orderHeader = $this->data['orderHeaders']->where('orderno',$order->code)->first();
+            $orderHeader->oracleBASCode->codename_c = '订单完成';
+            $order->update([
+                'consignee_name' => $orderHeader['c_contact'],
+                'consignee_phone' =>$orderHeader['c_tel2'] ?? $orderHeader['c_tel1'] ,
+                'province' =>$orderHeader['c_province'] ,
+                'city' =>$orderHeader['c_city'] ,
+                'district' =>$orderHeader['c_district'] ,
+                'address' => $orderHeader['c_address1'],
+                'client_code' =>$orderHeader['soreference1'] ,
+                'wms_edittime' => $orderHeader['edittime'] ,
+                'wms_status' =>$orderHeader->oracleBASCode->codename_c?? "",
+                'order_type' =>$orderHeader->orderType->codename_c?? "",
+                'created_at' =>  $orderHeader['addtime'],
+            ]);
+        }
+        $orders = Order::query()->whereIn('code',data_get($this->data['orderHeaders'],'*.orderno'))->get();
+        $update_params = $this->service->getUpdateOrderModelByWMSOrderHeaders(
+            $this->data['orderHeaders'],
+            $orders,
+            $this->data['warehouses'],
+            $this->data['owners'],
+            $this->data['logistics'],
+            $this->data['shops'],
+            $this->data['batches']
+        );
+        $this->assertEquals($update_params->count(),$orders->count());
+        $this->assertOrderHeadersAndUpdateParams($this->data['orderHeaders'],$update_params);
+    }
 
-        foreach ($orderHeaders as $orderHeader) {
-            $order = $update_orders->where('code',$orderHeader->orderno)->first();
-            $this->assertNotNull($order);
+    public function assertOrderHeadersAndUpdateParams($orderHeaders,$update_params){
+        foreach ($update_params as $update_param) {
+            $warehouse = Warehouse::find($update_param['warehouse_id']);
+            $batch = Batch::find($update_param['batch_id']);
+            $owner = Owner::find($update_param['owner_id']);
+            $logistic = Logistic::find($update_param['logistic_id']);
+            $shop = Shop::find($update_param['shop_id']);
+            $orderHeader = $orderHeaders->where('orderno',$update_param['code'])->first();
+            $this->assertNotEmpty($orderHeader);
+            $this->assertEquals($orderHeader['warehouseid'], $warehouse->code);
+            $this->assertEquals($orderHeader['waveno'],$batch->code);
+            $this->assertEquals($orderHeader['customerid'],$owner->code);
+            $this->assertEquals($orderHeader['userdefine1'],$logistic->code);
+            $this->assertEquals($orderHeader['issuepartyname'],$shop->name);
+            $this->assertEquals($orderHeader->oracleBASCode->codename_c ?? '',$update_param['wms_status']);
+            $this->assertEquals($orderHeader->orderType->codename_c ?? '',$update_param['order_type']);
+        }
+    }
 
-            $warehouse = Warehouse::query()->where('code',$orderHeader->warehouseid)->first();
-            if($orderHeader->warehouseid ?? false)
-                $this->assertEquals($warehouse->id ?? '',$order->warehouse_id ?? '');
+    protected function tearDown(): void
+    {
+        Order::query()->whereIn('code',data_get($this->data['orderHeaders'],'*.orderno'))->delete();
+        Warehouse::destroy(data_get($this->data['warehouses'],'*.id'));
+        Batch::destroy(data_get($this->data['batches'],'*.id'));
+        Owner::destroy(data_get($this->data['owners'],'*.id'));
+        Logistic::destroy(data_get($this->data['logistics'],'*.id'));
+        Shop::destroy(data_get($this->data['shops'],'*.id'));
+        parent::tearDown(); // TODO: Change the autogenerated stub
+    }
 
-            $owner = Owner::query()->where('code',$orderHeader->customerid)->first();
-            if($orderHeader->customerid ?? false)
-                $this->assertEquals($order->owner_id ?? '',$owner->id??'');
 
-            $logistic = Logistic::query()->where('code',$orderHeader->userdefine1??'')->first();
-            if($orderHeader->userdefine1 ?? false)
-                $this->assertEquals($logistic->id ?? '',$logistic->id ?? '');
-            $shop = Shop::query()->where('name',$orderHeader->issuepartyname)->where('owner_id',$owner->id)->first();
-            if($orderHeader->issuepartyname ?? false)
-                $this->assertEquals($shop->name,$orderHeader->issuepartyname);
-            $this->assertEquals($order->consignee_name ,$orderHeader->c_contact);
-            $this->assertEquals($order->consignee_phone ,empty($orderHeader->c_tel2)?$orderHeader->c_tel1:$orderHeader->c_tel2);
-            $this->assertEquals($order->province ,$orderHeader->c_province);
-            $this->assertEquals($order->city ,$orderHeader->c_city);
-            $this->assertEquals($order->district ,$orderHeader->c_district);
-            $this->assertEquals($order->client_code ,$orderHeader->soreference1);
-            $this->assertEquals($order->wms_edittime ,(string)$orderHeader->edittime);
-            $this->assertEquals($order->wms_status ,$orderHeader->oracleBASCode_codename_c);
-//            $this->assertEquals((string)$order->created_at ,(string)$orderHeader->addtime);
-        }
-    }
 }

+ 70 - 0
tests/Services/OrderService/InsertTest.php

@@ -0,0 +1,70 @@
+<?php
+
+namespace Tests\Services\OrderService;
+
+use App\Order;
+use App\Services\OrderService;
+use Carbon\Carbon;
+use Illuminate\Foundation\Testing\RefreshDatabase;
+use Illuminate\Foundation\Testing\WithFaker;
+use Tests\TestCase;
+
+class InsertTest extends TestCase
+{
+
+    /** @var OrderService $service */
+    private $service;
+    private $data = [];
+
+    protected function setUp(): void
+    {
+        parent::setUp(); // TODO: Change the autogenerated stub
+        $this->service = app('OrderService');
+        $orders = factory(Order::class)->times(3000)->make();
+        $this->data['orders'] = $orders->map(function ($item){
+            return [
+            'batch_id' =>$item->batch_id,
+            'owner_id' =>$item->owner_id,
+            'status' =>$item->status,
+            'created_at' =>$item->created_at,
+            'code' =>$item->code,
+            'shop_id' =>$item->shop_id,
+            'client_code' =>$item->client_code,
+            'logistic_id' =>$item->logistic_id,
+            'consignee_name' =>$item->consignee_name,
+            'consignee_phone' =>$item->consignee_phone,
+            'province' =>$item->province,
+            'city' =>$item->city,
+            'district' =>$item->district,
+            'address' =>$item->address,
+            'warehouse_id' =>$item->warehouse_id,
+            'wms_edittime' =>$item->wms_edittime,
+            'wms_status' =>$item->wms_status,
+            'order_type' =>$item->order_type,
+            ];
+        })->toArray();
+    }
+
+    /**
+     * @test
+     */
+    public function insert()
+    {
+        $insert_params = array_chunk($this->data['orders'],1000);
+        foreach ($insert_params as $insert_param){
+            $this->service->insert($insert_param);
+        }
+        $this->data['order_codes'] = data_get($this->data['orders'],'*.code');
+
+        $orders = Order::query()->whereIn('code',$this->data['order_codes'])->get();
+        $this->assertEquals($orders->count(),count($this->data['orders']));
+    }
+
+    protected function tearDown(): void
+    {
+        Order::query()->whereIn('code',$this->data['order_codes'])->delete();
+        parent::tearDown(); // TODO: Change the autogenerated stub
+
+    }
+
+}

+ 0 - 1
tests/Services/OrderService/PushOrderCreatedCacheTest.php

@@ -12,7 +12,6 @@ use Tests\TestCase;
 
 class PushOrderCreatedCacheTest extends TestCase
 {
-    use RefreshDatabase;
     /** @var OrderService $service */
     public $service;
     public $data = [];

+ 0 - 2
tests/Services/OrderService/PushOrderUpdateCacheTest.php

@@ -11,8 +11,6 @@ use Tests\TestCase;
 
 class PushOrderUpdateCacheTest extends TestCase
 {
-    use RefreshDatabase;
-
     /** @var OrderService $service */
     public $service;
     public $data;

+ 0 - 2
tests/Services/OrderService/SetOrderSyncAtTest.php

@@ -12,8 +12,6 @@ use Tests\TestCase;
 
 class SetOrderSyncAtTest extends TestCase
 {
-    use RefreshDatabase;
-
     /** @var OrderService $service */
     private $service;
     private $data = [];

+ 164 - 0
tests/Services/OrderService/SyncOrderByWMSOrderHeadersTest.php

@@ -0,0 +1,164 @@
+<?php
+
+namespace Tests\Services\OrderService;
+
+use App\Batch;
+use App\Logistic;
+use App\OracleBasCode;
+use App\OracleDOCOrderHeader;
+use App\Order;
+use App\Owner;
+use App\Services\OrderService;
+use App\Shop;
+use App\Warehouse;
+use Tests\TestCase;
+
+class SyncOrderByWMSOrderHeadersTest extends TestCase
+{
+
+    /** @var OrderService $service */
+    private $service;
+    private $data = [];
+
+    protected function setUp(): void
+    {
+        parent::setUp(); // TODO: Change the autogenerated stub
+        $this->service = app('OrderService');
+        $owners = factory(Owner::class)->times(10)->create();
+        $logistics = factory(Logistic::class)->times(20)->create();
+        $wareHouses = factory(Warehouse::class)->times(3)->create();
+        $shops = collect();
+        foreach ($owners as $owner) {
+            $shops = $shops->concat(factory(Shop::class)->times(rand(3,5))->create(['owner_id'=>$owner->id]));
+        }
+        $batches = factory(Batch::class)->times(10)->create();
+        $orderHeaders = collect();
+        foreach ($owners as $owner) {
+            $count = rand(1,10);
+            for ($i=0;$i<=$count;$i++) {
+                $shop = $shops->where('owner_id',$owner->id)->random();
+                $warehouse = $wareHouses->random();
+                $logistic = $logistics->random();
+                $batch = $batches->random();
+                $orderHeader = factory(OracleDOCOrderHeader::class)->make([
+                    'warehouseid'=>$warehouse->code,
+                    'waveno'=>$batch->code,
+                    'customerid'=>$owner->code,
+                    'userdefine1'=>$logistic->code,
+                    'issuepartyname' => $shop->name,
+                ]);
+                $oracleBASCode = factory(OracleBasCode::class)->make();
+                $orderType = factory(OracleBasCode::class)->make();
+                $orderHeader->setRelation('oracleBASCode',$oracleBASCode);
+                $orderHeader->setRelation('orderType',$orderType);
+                $orderHeaders = $orderHeaders->push($orderHeader);
+            }
+        }
+        $this->data = [
+            'warehouses' => $wareHouses,
+            'batches' => $batches,
+            'owners' => $owners,
+            'logistics' => $logistics,
+            'shops' => $shops,
+            'orderHeaders' => $orderHeaders
+        ];
+    }
+
+    /**
+     * @test
+     */
+    public function syncOrderByWMSOrderHeaders()
+    {
+        $this->service->syncOrderByWMSOrderHeaders($this->data['orderHeaders']);
+        $orders = Order::query()->whereIn('code',data_get($this->data['orderHeaders'],'*.orderno'))->get();
+        $this->data['orders'] = $orders;
+        $this->assertEquals(count($orders),count($this->data['orderHeaders']));
+        $this->assertOrderHeadersAndOrder($this->data['orderHeaders'],$orders);
+
+    }
+
+    /**
+     * @test 订单已存在
+     */
+    public function orderExisting()
+    {
+
+        $this->service->syncOrderByWMSOrderHeaders($this->data['orderHeaders']);
+        $this->service->syncOrderByWMSOrderHeaders($this->data['orderHeaders']);
+        $orders = Order::query()->whereIn('code',data_get($this->data['orderHeaders'],'*.orderno'))->get();
+        $this->data['orders'] = $orders;
+        $this->assertEquals(count($orders),count($this->data['orderHeaders']));
+        $this->assertOrderHeadersAndOrder($this->data['orderHeaders'],$orders);
+    }
+
+    /**
+     * @test 订单部分存在
+     */
+    public function orderPortionExisting()
+    {
+        $orderHeaders = $this->data['orderHeaders']->random(30);
+        $this->service->syncOrderByWMSOrderHeaders($orderHeaders);
+        $this->service->syncOrderByWMSOrderHeaders($this->data['orderHeaders']);
+        $orders = Order::query()->whereIn('code',data_get($this->data['orderHeaders'],'*.orderno'))->get();
+        $this->data['orders'] = $orders;
+        $this->assertEquals(count($orders),count($this->data['orderHeaders']));
+        $this->assertOrderHeadersAndOrder($this->data['orderHeaders'],$orders);
+    }
+
+    /**
+     * @test 订单部分在且有修改
+     */
+    public function orderPortingExistingAndModified()
+    {
+        $orderHeaders = $this->data['orderHeaders']->random(20);
+        foreach ($orderHeaders as $orderHeader) {
+            $owner = $this->data['owners']->random();
+            $shop = $this->data['shops']->where('owner_id',$owner->id)->random();
+            $warehouse = $this->data['warehouses']->random();
+            $logistic = $this->data['logistics']->random();
+            $batch = $this->data['batches']->random();
+            $orderHeader['warehouseid']=$warehouse->code;
+            $orderHeader['waveno']=$batch->code;
+            $orderHeader['customerid']=$owner->code;
+            $orderHeader['userdefine1']=$logistic->code;
+            $orderHeader['issuepartyname'] = $shop->name;
+        }
+        $this->service->syncOrderByWMSOrderHeaders($orderHeaders);
+        $this->service->syncOrderByWMSOrderHeaders($this->data['orderHeaders']);
+        $orders = Order::query()->whereIn('code',data_get($this->data['orderHeaders'],'*.orderno'))->get();
+        $this->data['orders'] = $orders;
+        $this->assertEquals(count($orders),count($this->data['orderHeaders']));
+        $this->assertOrderHeadersAndOrder($this->data['orderHeaders'],$orders);
+    }
+
+    public function assertOrderHeadersAndOrder($orderHeaders,$orders){
+        foreach ($orderHeaders as $orderHeader) {
+            $warehouse = Warehouse::query()->where('code',$orderHeader['warehouseid'])->first();
+            $batch = Batch::query()->where('code',$orderHeader['waveno'])->first();
+            $owner = Owner::query()->where('code',$orderHeader['customerid'])->first();
+            $logistic = Logistic::query()->where('code',$orderHeader['userdefine1'])->first();
+            $shop = Shop::query()->where('name',$orderHeader['issuepartyname'])->first();
+            $order = $orders->where('code',$orderHeader['orderno'])->first();
+            $this->assertNotEmpty($order);
+            $this->assertEquals($order->warehouse_id, $warehouse->id);
+            $this->assertEquals($order->batch_id,$batch->id);
+            $this->assertEquals($order->owner_id,$owner->id);
+            $this->assertEquals($order->logistic_id,$logistic->id);
+            $this->assertEquals($order->shop_id,$shop->id);
+            $this->assertEquals($order->wms_status,$orderHeader->oracleBASCode->codename_c ?? '');
+            $this->assertEquals($order->order_type,$orderHeader->orderType->codename_c ?? '');
+        }
+    }
+
+
+    protected function tearDown(): void
+    {
+        Warehouse::destroy(data_get($this->data['warehouses'],'*.id'));
+        Batch::destroy(data_get($this->data['batches'],'*.id'));
+        Owner::destroy(data_get($this->data['owners'],'*.id'));
+        Logistic::destroy(data_get($this->data['logistics'],'*.id'));
+        Shop::destroy(data_get($this->data['shops'],'*.id'));
+        Order::destroy(data_get($this->data['orders'],'*.id'));
+        parent::tearDown(); // TODO: Change the autogenerated stub
+    }
+}

+ 9 - 2
tests/Services/OrderTrackingService/FillInOrderTrackingTest.php

@@ -11,10 +11,10 @@ use Tests\TestCase;
 
 class FillInOrderTrackingTest extends TestCase
 {
-    use RefreshDatabase;
 
     /** @var OrderTrackingService $service */
     public $service;
+    private $data = [];
     public function setUp(): void
     {
         parent::setUp(); // TODO: Change the autogenerated stub
@@ -35,8 +35,15 @@ class FillInOrderTrackingTest extends TestCase
             if ($item->created_at != '0000-00-00 00:00:00' &&
                 $item->planning_sent_at !== '0000-00-00 00:00:00' &&
                 $item->planning_sent_at < $data) {
-                $this->assertEquals($tracking->planning_sent_at, $item->signed_at);
+                $this->assertEquals(date_format($tracking->planning_sent_at,"Y-m-d H:i:s"), (string)$item->signed_at);
             }
         });
+        $this->data['orderTrackings'] = $orderTracking;
+    }
+
+    public function tearDown(): void
+    {
+        OrderTracking::query()->where('id',data_get($this->data['orderTrackings'],'*.id'))->delete();
+        parent::tearDown(); // TODO: Change the autogenerated stub
     }
 }

+ 0 - 2
tests/Services/OwnerService/GetOwnerByCodeTest.php

@@ -11,8 +11,6 @@ use Tests\TestCase;
 
 class GetOwnerByCodeTest extends TestCase
 {
-    use RefreshDatabase;
-
     /** @var OwnerService $service */
     private $service;
     private $data = [];

+ 0 - 2
tests/Services/OwnerService/GetOwnerByCodesTest.php

@@ -11,8 +11,6 @@ use Tests\TestCase;
 
 class GetOwnerByCodesTest extends TestCase
 {
-    use RefreshDatabase;
-
     /** @var OwnerService $service */
     private $service;
     private $data;

+ 0 - 4
tests/Services/ShopService/GetShopByCodeMapTest.php

@@ -13,8 +13,6 @@ use Tests\TestCase;
 
 class GetShopByCodeMapTest extends TestCase
 {
-    use RefreshDatabase;
-
     /** @var OwnerService $service */
     private $service;
     private $data;
@@ -40,8 +38,6 @@ class GetShopByCodeMapTest extends TestCase
         ];
     }
 
-
-
     /**
      * @test
      */

+ 0 - 2
tests/Services/WarehouseService/GetWareHouseByCodeTest.php

@@ -11,8 +11,6 @@ use Tests\TestCase;
 
 class GetWareHouseByCodeTest extends TestCase
 {
-    use RefreshDatabase;
-
     /** @var WarehouseService $service */
     private $service;
     private $data;

+ 0 - 1
tests/Services/WarehouseService/GetWareHouseByCodesTest.php

@@ -13,7 +13,6 @@ use Tests\TestCase;
 
 class GetWareHouseByCodesTest extends TestCase
 {
-    use RefreshDatabase;
     /** @var WarehouseService $service */
     private $service;
     private $data = [];