Kaynağa Gözat

Merge branch 'master' into LD

# Conflicts:
#	app/Http/Controllers/TestController.php
LD 5 yıl önce
ebeveyn
işleme
ea78efe547

+ 2 - 1
app/Console/Commands/SyncWMSOrderTask.php

@@ -14,7 +14,7 @@ class SyncWMSOrderTask extends Command
      *
      * @var string
      */
-    protected $signature = 'SyncWMSOrderTask';
+    protected $signature = 'sync:order';
 
     /**
      * The console command description.
@@ -39,6 +39,7 @@ class SyncWMSOrderTask extends Command
     public function handle()
     {
         $is_enabled= config('sync.order_sync.cache_prefix.enabled');
+        sleep(rand(5,10));
         if($is_enabled=='false')return;
         $this->syncCreatedOrder();
         $this->syncUpdatedOrder();

+ 3 - 0
app/Console/Kernel.php

@@ -3,6 +3,7 @@
 namespace App\Console;
 
 use App\Console\Commands\SyncBatchTask;
+use App\Console\Commands\SyncWMSOrderTask;
 use Illuminate\Console\Scheduling\Schedule;
 use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
 
@@ -23,6 +24,7 @@ class Kernel extends ConsoleKernel
         \App\Console\Commands\SyncUserVisitMenuLogsCacheTask::class,
         \App\Console\Commands\TestTemp::class,
         SyncBatchTask::class,
+        SyncWMSOrderTask::class,
     ];
 
     /**
@@ -42,6 +44,7 @@ class Kernel extends ConsoleKernel
         $schedule->command('createOwnerBillReport')->monthlyOn(1);
         $schedule->command('createOwnerAreaReport')->monthlyOn(25);
         $schedule->command('sync:batch')->everyMinute();
+        $schedule->command('sync:order')->everyMinute();
     }
 
     /**

+ 14 - 8
app/Http/Controllers/OrderIssueController.php

@@ -624,16 +624,16 @@ class OrderIssueController extends Controller
         $row = [
             '登记日期','创建日期','客户','客户订单号','原始承运商','收货人','收货电话','省','市','区','收货人地址',
             '原始运单号','原始商品','原始商品名称','原始商品数量',
-            '退单备注','退单商品名','退单商品条码','退单商品数量','退单状态',
+            '退回单号', '退单商品名','退单商品条码','退单商品数量','是否正品','退单状态','退单备注',
             '操作类型','说明','操作者','情况说明','问题类别',
             '二次订单号','二次承运商','二次运单号','二次商品条码','二次商品名','二次商品数量',
             '最终状态', '承运商赔偿金额', '承运商快递减免', '宝时赔偿金额', '宝时快递减免','事故责任方'
         ];
         foreach ($order_Issues as $order_issue){
             $order =  $order_issue->order;
-            $orderPacakges = $order_issue->order->packages ?? collect();
+            $orderPackages = $order_issue->order->packages ?? collect();
             $logistic_numbers = '';$order_sku  = '';$order_sku_name  = '';$order_sku_amount  = '';
-            $orderPacakges->each(function($package,$index)use(&$logistic_numbers,&$order_sku,&$order_sku_name,&$order_sku_amount){
+            $orderPackages->each(function($package,$index)use(&$logistic_numbers,&$order_sku,&$order_sku_name,&$order_sku_amount){
                 if(!str_starts_with('null',$package->logistic_number))$logistic_numbers.=$package->logistic_number.",\r\n";
                 $package->commodities->each(function($commodities)use(&$order_sku,&$order_sku_name,&$order_sku_amount){
                     $commodity = $commodities->commodity ?? '';
@@ -642,16 +642,19 @@ class OrderIssueController extends Controller
                     $order_sku_amount.= ($commodities->amount ?? '').",\r\n";
                 });
             });
-            $rejected_Bill_remark = $order_issue->rejectedBill->remark ?? '';
+            $rejected_logistic_number = $order_issue->rejectedBill->logistic_number_return ?? '';
+            $rejected_Bill_remark = '';
+            $rejected_is_checked = '';
             $rejected_name = ''; $rejected_barcode = '';$rejected_amount = '';
             if($order_issue->rejectedBill){
-                $order_issue->rejectedBill->items(function($item)use(&$rejected_name,&$rejected_barcode, &$rejected_amount){
+                $order_issue->rejectedBill->items->each(function($item)use(&$rejected_name,&$rejected_barcode, &$rejected_amount,&$rejected_Bill_remark,&$rejected_is_checked){
                     $rejected_name.= $item->name_goods.",\r\n";
                     $rejected_barcode.= $item->barcode_goods.",\r\n";
                     $rejected_amount.= $item->amount.",\r\n";
+                    $rejected_Bill_remark.= $item->remark.",\r\n";
+                    $rejected_is_checked.= $item->quality->name.",\r\n";
                 });
             }
-
             $log_type = ''; $log_content = '';$log_user = '';
             $order_issue->logs->each(function($log)use(&$log_type, &$log_content,&$log_user){
                 $log_type.=$log->type.",\r\n";
@@ -688,11 +691,14 @@ class OrderIssueController extends Controller
                 rtrim($order_sku_name,",\r\n"),                //原始商品名称
                 rtrim($order_sku_amount,",\r\n"),              //原始商品数量
 
-                //'退单备注','退单商品名','退单商品条码','退单商品数量','退单状态',
-                rtrim($rejected_Bill_remark,",\r\n"),                                          // 退单备注
+                //,'退单商品名','退单商品条码','退单商品数量','退单状态','退单备注'
+                $rejected_logistic_number,                      //退回单号
                 rtrim($rejected_name,",\r\n"),        // 退单商品名
                 rtrim($rejected_barcode,",\r\n") ,    // 退单商品条码
                 rtrim($rejected_amount,",\r\n"),      // 退单商品数量
+                rtrim($rejected_is_checked,",\r\n"),  // 是否正品
+                rtrim($rejected_Bill_remark,",\r\n"),   // 退单备注
+
                 $order_issue->rejecting_status ,                                // 退单状态
 
                 // '操作类型','情况说明','问题类别',

+ 29 - 108
app/Http/Controllers/TestController.php

@@ -19,11 +19,13 @@ use App\OracleActAllocationDetails;
 use App\OracleDOCOrderHeader;
 use App\OracleDocOrderPackingSummary;
 use App\OracleDOCWaveDetails;
+use App\OracleDOCWaveHeader;
 use App\Order;
 use App\OrderBin;
 use App\OrderCommodity;
 use App\OrderIssue;
 use App\OrderPackage;
+use App\OrderPackageCommodities;
 use App\Owner;
 use App\Package;
 use App\Process;
@@ -140,17 +142,6 @@ class TestController extends Controller
             ]);
         }
     }
-
-    public function test4(){
-        $arr=[['id'=>3],['id'=>33],];
-        dd(data_get($arr,'*.id'));
-    }
-    public function t($a)
-    {
-        $r = new \ReflectionClass('App\Http\Controllers\UnitsController');
-        dd($r->getMethods(),$r->getConstants());
-    }
-
     public function updateLaborRemark(){
         $laborReports=LaborReport::query()->with(['remarks'=>function($query){
             return $query->whereNotNull('mark');
@@ -172,9 +163,6 @@ class TestController extends Controller
             app(BatchUpdateService::class)->batchUpdate('labor_reports',$updateParams);
         }
     }
-    public function test2(){
-    }
-
     function packageFromLog(Request $request)
     { //x        $packagesBatch=Package::where('batch_number',$batch_number)->first();
         ini_set('max_execution_time', 2500);
@@ -201,14 +189,6 @@ class TestController extends Controller
         });
         dd($uploaded . '/' . $count);
     }
-
-    function wmsSql()
-    {
-        $owner=Owner::first();
-//        $owner['phone_number'] ?? $owner['phone_number'] = '31115';
-//        $owner->update();
-        dd($owner);
-    }
     function issues()
     {
         /** @var OrderPackageService $orderPackageService */
@@ -221,18 +201,6 @@ class TestController extends Controller
             $orderPackageService->createdByOrder($item);
         }
     }
-
-    function t2(Request $request)
-    { //x        $packagesBatch=Package::where('batch_number',$batch_number)->first();
-
-
-        $inventoryCompareService = new InventoryCompareService();
-        echo ($inventoryCompareService)->getCreatingMissionCode('安桥主品');
-        echo ($inventoryCompareService)->getCreatingMissionCode('安桥主品');
-        echo ($inventoryCompareService)->getCreatingMissionCode('安桥主品');
-        echo ($inventoryCompareService)->getCreatingMissionCode('安桥主品');
-    }
-
     function tlog(Request $request)
     {
         app('LogService')->log(__METHOD__,'cczdelme'.__FUNCTION__,json_encode($request->all()),null);
@@ -243,7 +211,6 @@ class TestController extends Controller
         Cache::put('storedTest', $today);
         return "cacheing:'$today'<script>localStorage.setItem('storedTest','{$today}')</script>";
     }
-
     function getCache(Request $request)
     {
         $cache = Cache::get('storedTest');
@@ -274,13 +241,8 @@ class TestController extends Controller
             oci_bind_by_name($stmt, ':IN_UserID', $IN_UserID);
             oci_bind_by_name($stmt, ':OUT_Return_Code', $OUT_Return_Code);
             return oci_execute($stmt);
-
         }
-
-
     }
-
-
     function packageT(Request $request)
     {
         $package = Package::where('created_at', '<', '2020-07-08')->whereNotNull('logistic_number')->first();
@@ -323,7 +285,6 @@ class TestController extends Controller
         }
     }
 
-
     public function mergerPackageData()
     {
         ini_set('max_execution_time', 36000);
@@ -751,7 +712,6 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
 
         Commodity::destroy($deleteCommodities);
     }
-
     /*1*/
     function socket(Request $request)
     {/**/
@@ -809,28 +769,6 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
     }
 
 
-
-
-    public function test11()
-    {
-        $rejectedBills = RejectedBill::query()
-            ->where('created_at','>=','2020-11-10 18:00:22')
-            ->where('created_at','<=','2020-11-11 00:00:00')
-            ->get();
-        $update = [['id','logistic_number']];
-        $rejectedBills->each(function ($rejectedBill)use(&$update){
-            if($rejectedBill->logistic_number == '原单退回'){
-                $details = OracleActAllocationDetails::query()->with('oracleDocOrderHeader')->whereHas('oracleDocOrderHeader',function($query)use($rejectedBill){
-                    $query->where('SOReference1',$rejectedBill->order_number);
-                })->get()->groupBy('picktotraceid');
-                if($details->count() == 1){
-                    $update[] = ['id'=> $rejectedBill->id ,'logistic_number'=>$rejectedBill->logistic_number_return];
-                }
-            }
-        });
-        app('RejectedBillService')->batchUpdate($update);
-    }
-
     public function output()
     {
         /** @var CacheService $cacheService */
@@ -958,10 +896,6 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
         app(StoreService::class)->insertStore($param);
         var_dump('end',Carbon::now());
     }
-    public  function  testSyncAsn(){
-        $startDate=Carbon::parse('2020-11-12 17:48:00')->subSeconds(65)->format('Y-m-d H:i:s');
-        app(StoreService::class)->syncWmsAsnData($startDate);
-    }
 
     public function changeOrder()
     {
@@ -1067,16 +1001,6 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
         echo $i;
     }
 
-    public function orderTrackingImportTest(Request $request)
-    {
-        $file = $request->file('file');
-        ini_set('max_execution_time',4000);
-        ini_set('memory_limit', '1024M');
-        $extension = $request->file()['file']->getClientOriginalExtension();
-        $extension[0] = strtoupper($extension[0]);
-        Excel::import(new OrderTrackingImport(), $request->file('file')->path(), null, $extension);
-    }
-
     public function testImp()
     {
         $client_no = null;
@@ -1134,36 +1058,6 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
 //
 //    }
 
-    public function testSyncOrder()
-     {
-        $carbon =Carbon::now()->subHours(1);
-        $date = '2020-05-18 18:13:50';
-        $orderHeader = 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.addTime','>=',$startDate)
-//            ->where('orderno','SO201112029795')
-            ->where('DOC_Order_Header.addTime','>=',$carbon)
-            ->get();
-        /** @var OrderService $service */
-        $service = app('OrderService');
-        $service->syncOrder($orderHeader);
-    }
-
-    public function OrderSync(){
-        dump(Carbon::now());
-        $tack = new SyncWMSOrderTask();
-        $tack->handle();
-        dump(Carbon::now());
-    }
-
     public function reNewBatches3()
     {
         $batches=Batch::query()->where('id','>',324)->get('code');
@@ -1225,4 +1119,31 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
         $orderTrackingService->createByWmsOrderHeader($orderHeaders);
     }
 
+    public function testSyncOrderTask(){
+        dump('hendle...');
+        dump((string)Carbon::now());
+        $task = new SyncWMSOrderTask();
+        $task->handle();
+        dump((string)Carbon::now());
+        dd('hendle...end');
+    }
+
+    public function testSyncWaveNo()
+    {
+        $waveHeader = OracleDOCWaveHeader::query()->where('waveno','W201209000024')->first();
+//        Batch::query()->create([
+//            'code' => $waveHeader->waveno,
+//            'wms_created_at' => $waveHeader->addtime,
+//            'remark' => $waveHeader->descr,
+//            'wms_status' => '99',
+//        ]);
+        $waveHeaderDetails = OracleDOCWaveDetails::query()->where('waveno',$waveHeader->waveno)->get();
+        $orderNos = $waveHeaderDetails->map(function($item){
+            return $item->orderno;
+        });
+        $orderHeaderService = new OracleDOCOrderHeaderService();
+        $orderHeaders = $orderHeaderService->getOrderInfoByOrderNos($orderNos);
+        $orderService = new OrderService();
+        $orderService->syncOrderByWMSOrderHeaders($orderHeaders);
+    }
 }

+ 2 - 0
app/Order.php

@@ -136,6 +136,7 @@ class Order extends Model
     {
         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'] &&
@@ -156,6 +157,7 @@ class Order extends Model
     public function assignValueByOrder($order)
     {
         $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'] ;

+ 7 - 0
app/Services/BatchService.php

@@ -57,6 +57,13 @@ Class BatchService
         //注册商品任务
         //注册料箱任务
         //注册总任务
+        //执行总任务
     }
 
+    public function getBatchByCodes($codes)
+    {
+        if(empty($codes))return collect();
+        if(count($codes) == 0)return collect();
+        return Batch::query()->whereIn('code',$codes)->get();
+    }
 }

+ 1 - 1
app/Services/CommodityService.php

@@ -360,7 +360,7 @@ Class CommodityService
 
     public function getCommodityByOwnerCodeAndSKU($ownerCode,$sku){
         $commodity_key = "owner_code_{$ownerCode}_sku_{$sku}";
-        return Cache::remember($commodity_key,300,function()use($ownerCode,$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();

+ 2 - 2
app/Services/LogisticService.php

@@ -101,10 +101,10 @@ Class LogisticService
     }
 
     public function getLogisticByCode($code){
-        return Cache::remember("getLogisticByCode_{$code}", config('database.cache.expirations.logistic'), function()use($code){
+        return Cache::remember("getLogisticByCode_{$code}", config('database.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']);
+            $baseCustomers = app('OracleBasCustomerService')->first(['Customer_Type'=>'CA','CustomerID'=>$code]);
             if(!$baseCustomers)return null;
             try {
                 $logistic = Logistic::query()->create(['name' => $baseCustomers['descr_c'], 'code' => $baseCustomers['customerid']]);

+ 31 - 29
app/Services/OracleDOCOrderHeaderService.php

@@ -2,11 +2,12 @@
 
 namespace App\Services;
 
+use App\OracleActAllocationDetails;
+use App\OracleBasCode;
+use App\OracleBasCustomer;
 use App\OracleDOCOrderDetail;
 use App\OracleDOCOrderHeader;
 use App\Owner;
-use Illuminate\Support\Arr;
-use Illuminate\Support\Str;
 
 Class OracleDOCOrderHeaderService
 {
@@ -20,9 +21,24 @@ Class OracleDOCOrderHeaderService
         'DOC_Order_Header.CarrierName', 'DOC_Order_Header.LastShipmentTime','DOC_Order_Header.EDISendFlag',
         'DOC_Order_Header.SOReference5', 'DOC_Order_Header.C_Tel2','DOC_Order_Header.Transportation',
         'DOC_Order_Header.WareHouseId','DOC_Order_Header.SOStatus','DOC_Order_Header.C_Tel1','DOC_Order_Header.C_District',
-        'DOC_Order_Header.IssuePartyName','DOC_Order_Header.OrderType'
+        'DOC_Order_Header.IssuePartyName','DOC_Order_Header.OrderType','DOC_Order_Header.WaveNo'
     ];
 
+    private function getQuery(){
+        return OracleDOCOrderHeader::query()->selectRaw(implode(',',self::$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,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');
+            },'oracleBASCode'=>function($query){
+                $query->selectRaw('BAS_Codes.CodeID,BAS_Codes.CodeName_C,BAS_Codes.Code');
+            },'orderType'=>function($query){
+                $query->selectRaw('BAS_Codes.CodeID,BAS_Codes.CodeName_C,BAS_Codes.Code');
+            }]);
+    }
+
     function first(array $params){
         $order = OracleDOCOrderHeader::query();
         foreach ($params as $column => $value){
@@ -67,40 +83,26 @@ Class OracleDOCOrderHeaderService
 
     public function getWMSOrderOnStartDate($startDate)
     {
-        return OracleDOCOrderHeader::query()->selectRaw(implode(',',self::$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,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');
-            },'oracleBASCode'=>function($query){
-                $query->selectRaw('BAS_Codes.CodeID,BAS_Codes.CodeName_C,BAS_Codes.Code');
-            },'orderType'=>function($query){
-                $query->selectRaw('BAS_Codes.CodeID,BAS_Codes.CodeName_C,BAS_Codes.Code');
-            }])
-            ->where('DOC_Order_Header.addTime','>=',$startDate)
+        return  $this->getQuery()->where('DOC_Order_Header.addTime','>=',$startDate)
             ->whereColumn('DOC_Order_Header.editTime','=','DOC_Order_Header.addTime')
             ->orderByDesc('DOC_Order_Header.addTime')
             ->get();
     }
 
     public function getWMSOrderOnEditDate($startDate){
-        return OracleDOCOrderHeader::query()->selectRaw(implode(',',self::$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,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');
-            },'oracleBASCode'=>function($query){
-                $query->selectRaw('BAS_Codes.CodeID,BAS_Codes.CodeName_C,BAS_Codes.Code');
-            },'orderType'=>function($query){
-                $query->selectRaw('BAS_Codes.CodeID,BAS_Codes.CodeName_C,BAS_Codes.Code');
-            }])
-            ->where('DOC_Order_Header.editTime','>=',$startDate)
+        return  $this->getQuery()->where('DOC_Order_Header.editTime','>=',$startDate)
             ->whereColumn('DOC_Order_Header.editTime','!=','DOC_Order_Header.addTime')
             ->orderByDesc('DOC_Order_Header.editTime')
             ->get();
     }
+
+    public function getOrderInfoByOrderNos($orderNos)
+    {
+        if(empty($orderNos))return collect();
+        if(count($orderNos) == 0)return collect();
+        return $this->getQuery()->whereIn('DOC_Order_Header.OrderNo',$orderNos)->get();
+    }
+
+
+
 }

+ 1 - 1
app/Services/OrderCommodityService.php

@@ -109,7 +109,7 @@ Class OrderCommodityService
                 'sku' => $orderCommodity['commodity']['sku'],
                 'owner_id' => $orderCommodity['order']['owner_id'],
                 'amount' => $orderCommodity['amount'],
-                'location' => $orderCommodity['location']
+                'location' => $orderCommodity['location'] ?? ''
             ];
         }
         return $map;

+ 1 - 1
app/Services/OrderIssueService.php

@@ -48,7 +48,7 @@ class OrderIssueService
                 $query->with('barcodes');
             }]);
         }, 'rejectedBill' => function ($query) {
-            $query->with(['items']);
+            $query->with(['items.quality']);
         }, 'secondOrder' => function ($query) {
             $query->with(['shop', 'logistic', 'owner', 'packages.commodities.commodity' => function ($query) {
                 $query->with('barcodes');

+ 3 - 4
app/Services/OrderPackageCommoditiesService.php

@@ -594,10 +594,9 @@ class OrderPackageCommoditiesService
     {
         if(!$ids)return;
         if(count($ids)==0)return;
-        OrderPackageCommodities::query()->whereHas('package',function($query)use($ids){
-            $query->whereIn('id',$ids);
-        })->delete();
-        app('LogService')->log(__METHOD__,__FUNCTION__,'删除 OrderPackageCommodities'.json_encode($ids));
+        $items = OrderPackageCommodities::query()->whereIn('order_package_id',$ids)->get();
+        OrderPackageCommodities::query()->whereIn('order_package_id',$ids)->delete();
+        app('LogService')->log(__METHOD__,__FUNCTION__,'删除 OrderPackageCommodities'.json_encode($items));
     }
     // TODO
     public function syncOrderPackageCommodities(&$orderHeaders)

+ 2 - 2
app/Services/OrderPackageService.php

@@ -420,8 +420,8 @@ class OrderPackageService
 
         $orderPackageCommodityService->deleteUnnecessaryOrderCommodities($del_ids);     // 删除 orderCommodity
 
-        $orderTracking = OrderTracking::query()->whereHas('commodities.package',function($query)use($del_ids){
-            $query->whereIn('id',$del_ids);
+        $orderTracking = OrderTracking::query()->whereHas('commodities',function($query)use($del_ids){
+            $query->whereIn('order_package_id',$del_ids);
         })->get();
         if($orderTracking->count()==0)return;
 

+ 92 - 20
app/Services/OrderService.php

@@ -2,6 +2,7 @@
 
 namespace App\Services;
 
+use App\Jobs\OrderCreateInstantBill;
 use App\Logistic;
 use App\OracleActAllocationDetails;
 use App\OracleDOCASNHeader;
@@ -27,6 +28,25 @@ use Illuminate\Support\Facades\Redis;
 
 class OrderService
 {
+    /**
+     * @var OracleDOCOrderHeaderService $oracleDOCOrderHeaderService
+     * @var OrderPackageService $packageService
+     * @var OrderCommodityService $orderCommodityService
+     * @var BatchService $batchService
+     */
+    private $oracleDOCOrderHeaderService;
+    private $packageService;
+    private $orderCommodityService;
+    private $batchService;
+
+    public function __construct()
+    {
+        $this->oracleDOCOrderHeaderService = app('OracleDocOrderHeaderService');
+        $this->packageService = app('OrderPackageService');
+        $this->orderCommodityService = app('OrderCommodityService');
+        $this->batchService = app('BatchService');
+    }
+
     public function batchUpdate($params){
         return app(BatchUpdateService::class)->batchUpdate('orders',$params);
     }
@@ -788,8 +808,19 @@ class OrderService
         $orderCommodityService->syncOrderCommodities($orderHeaders);
 
         $packageService->syncOrderPackage($orderHeaders);
+
+        $this->pushQueue($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;
@@ -803,8 +834,10 @@ class OrderService
         $logisticService = app("LogisticService");
         $shopService = app('ShopService');
         $warehouseService = app('WarehouseService');
-        $owner_codes = [];$logistic_codes = [];$warehouse_codes = [];$shop_names = [];
+        $owner_codes = [];$logistic_codes = [];$warehouse_codes = [];$shop_names = [];$batch_codes = [];
         foreach ($orderHeaders as $orderHeader) {
+            if(!empty($orderHeader['waveno']))
+                $batch_codes[$orderHeader['waveno']] = $orderHeader['waveno'];
             if(!empty($orderHeader['customerid']))
                 $owner_codes[$orderHeader['customerid']] = $orderHeader['customerid'];
             if(!empty($orderHeader['warehouseid']))
@@ -821,12 +854,13 @@ class OrderService
         $logistics = $logisticService->getLogisticByCodes($logistic_codes);
         $shops = $shopService->getShopByCodeMap($shop_names);
         $warehouses = $warehouseService->getWareHouseByCodes($warehouse_codes);
+        $batches = $this->batchService->getBatchByCodes($batch_codes);
 
         $orders = $this->getByWmsOrders($orderHeaders);
 
-        $created_params = $this->getCreateOrderModelsByWMSOrderHeaders($orderHeaders,$orders,$warehouses,$owners,$logistics,$shops); //3s
+        $created_params = $this->getCreateOrderModelsByWMSOrderHeaders($orderHeaders,$orders,$warehouses,$owners,$logistics,$shops,$batches); //3s
 
-        $update_order = $this->getUpdateOrderModelByWMSOrderHeaders($orderHeaders,$orders,$warehouses,$owners,$logistics,$shops);
+        $update_order = $this->getUpdateOrderModelByWMSOrderHeaders($orderHeaders,$orders,$warehouses,$owners,$logistics,$shops,$batches);
 
 
         // 转换插入 3s
@@ -836,7 +870,7 @@ class OrderService
             });
         }
         $update_params = [
-            ['id','code','warehouse_id','owner_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']
+            ['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']
         ];
 
         $update_order->each(function($item)use(&$update_params){
@@ -847,7 +881,7 @@ class OrderService
         $this->batchUpdate($update_params);
     }
 
-    public function getCreateOrderModelsByWMSOrderHeaders(&$orderHeaders,&$orders,&$warehouses,&$owners,&$logistics,&$shops)
+    public function getCreateOrderModelsByWMSOrderHeaders(&$orderHeaders,&$orders,&$warehouses,&$owners,&$logistics,&$shops,&$batches)
     {
         /** @var DataHandlerService $dataHandlerService */
         $dataHandlerService = app('DataHandlerService');
@@ -857,20 +891,20 @@ class OrderService
         $logistic_map = $dataHandlerService->dataHeader(['code'],$logistics);
         $shop_map = $dataHandlerService->dataHeader(['name','owner_id'],$shops);
         $order_map = $dataHandlerService->dataHeader(['code'],$orders);
-
+        $batch_map = $dataHandlerService->dataHeader(['code'],$batches);
         $inner_params  = [];
         $date = (string)Carbon::now();
         foreach ($orderHeaders as $orderHeader) {
             $order_no = $orderHeader->orderno;
             $order = $dataHandlerService->getKeyValue(['code'=>$order_no],$order_map);
             if(isset($order))continue;
-            $order_model = $this->getCreateOrderModels($orderHeader,$warehouse_map,$owner_map,$logistic_map,$shop_map,$date);
+            $order_model = $this->getCreateOrderModels($orderHeader,$warehouse_map,$owner_map,$logistic_map,$shop_map,$batch_map,$date);
             $inner_params[] = $order_model;
         }
         return $inner_params;
     }
 
-    public function getUpdateOrderModelByWMSOrderHeaders(&$orderHeaders,&$orders,&$warehouses,&$owners,&$logistics,&$shops)
+    public function getUpdateOrderModelByWMSOrderHeaders(&$orderHeaders,&$orders,&$warehouses,&$owners,&$logistics,&$shops,&$batches)
     {
         /**
          * @var DataHandlerService $dataHandlerService
@@ -882,12 +916,13 @@ class OrderService
         $owner_map = $dataHandlerService->dataHeader(['code'],$owners);
         $logistic_map = $dataHandlerService->dataHeader(['code'],$logistics);
         $shop_map = $dataHandlerService->dataHeader(['name','owner_id'],$shops);
+        $batch_map = $dataHandlerService->dataHeader(['code'],$batches);
         $collect = collect();
         $date = (string)Carbon::now();
         foreach ($orders as $order) {
             $orderHeader = $dataHandlerService->getKeyValue(['orderno'=>$order->code],$orderHeader_map);
             if(!$orderHeader)continue;
-            $order_model = $this->getCreateOrderModels($orderHeader,$warehouse_map,$owner_map,$logistic_map,$shop_map,$date);
+            $order_model = $this->getCreateOrderModels($orderHeader,$warehouse_map,$owner_map,$logistic_map,$shop_map,$batch_map,$date);
             if(!$order->isEquals($order_model)){
                 $order->assignValueByOrder($order_model);
                 $collect->push($order);
@@ -896,19 +931,21 @@ class OrderService
         return $collect;
     }
 
-    public function getCreateOrderModels(&$orderHeader,&$warehouse_map,&$owner_map,&$logistic_map,&$shop_map,$date)
+    public function getCreateOrderModels(&$orderHeader,&$warehouse_map,&$owner_map,&$logistic_map,&$shop_map,&$batch_map,$date)
     {
         /** @var DataHandlerService $dataHandlerService */
         $dataHandlerService = app('DataHandlerService');
         $warehouse = $dataHandlerService->getKeyValue(['code'=>$orderHeader->warehouseid],$warehouse_map);
         $owner = $dataHandlerService->getKeyValue(['code'=>$orderHeader->customerid],$owner_map);
         $logistic = $dataHandlerService->getKeyValue(['code'=>$orderHeader->userdefine1],$logistic_map);
+        $batch = $dataHandlerService->getKeyValue(['code'=>$orderHeader->waveno],$batch_map);
         $shop['id'] = null;
         if($orderHeader->issuepartyname != null && $orderHeader->issuepartyname != '' ){
             $shop = $dataHandlerService->getKeyValue(['name'=>$orderHeader->issuepartyname ?? '','owner_id'=>$owner->id??''],$shop_map);
         }
         return [
             'code'=>$orderHeader['orderno'],
+            'batch_id' =>$batch['id'] ?? null,
             'warehouse_id' => $warehouse['id'] ?? null,
             'owner_id' => $owner['id'] ?? null,
             'shop_id' => $shop['id'] ?? null,
@@ -1089,21 +1126,25 @@ class OrderService
         $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');
+        ini_set('memory_limit', '512M');
+        $orderService = app('OrderService');
+        $oracleDOCOrderHeaderService = app('OracleDocOrderHeaderService');
 
-        $last_date = $orderService->getOrderSyncAt($newest,'newest');                              // 获取时间点
-
-        $orderHeaders = $oracleDOCOrderHeaderService->getWmsOrderOnStartDateEdit($last_date);           // WMS订单
+        $last_date = $orderService->getOrderSyncAt($newest,'newest');                             // 获取时间点
 
+        $orderHeaders = $oracleDOCOrderHeaderService->getWMSOrderOnStartDate($last_date);               // WMS订单
+        if($orderHeaders->count()==0)return;
         $last_order = $orderHeaders->first();                                                           // 时间点靠后的
-        $renewal_orders = $orderHeaders->where('addTime',$last_order->addtime);
+        $newest_orders = $orderHeaders->where('addtime',$last_order->addtime);
 
         $orderHeaders = $orderService->filterOrderByCache($orderHeaders,$newest_list);                  // 对比缓存
 
-        if(count($orderHeaders)>0 && count($orderHeaders) >0){
+        if(count($newest_orders)>0 && count($orderHeaders) >0){
+
             $orderService->syncOrder($orderHeaders);                                                //  同步订单
             $orderService->cancelOrderCache($newest_list,$prefixKey);                                   //  清除缓存
-            $orderService->pushOrderCache($renewal_orders,$prefixKey,$hasKey,$newest_list);             //  添加缓存
-            $orderService->setOrderSyncAt($newest,$last_order->addTime,count($orderHeaders)>0);   //  更新时间
+            $orderService->pushOrderCache($newest_orders,$prefixKey,$hasKey,$newest_list);              //  添加缓存
+            $orderService->setOrderSyncAt($newest,$last_order->addtime,count($orderHeaders)>0);   //  更新时间
         }
     }
 
@@ -1116,24 +1157,54 @@ class OrderService
         $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');
+        ini_set('memory_limit', '512M');
+
+        $orderService = app('OrderService');
+        $oracleDOCOrderHeaderService = app('OracleDocOrderHeaderService');
 
         $last_date = $orderService->getOrderSyncAt($renewal,'renewal');                               // 获取时间点
 
-        $orderHeaders = $oracleDOCOrderHeaderService->getWMSOrderOnStartDate($last_date);                   // WMS订单
+        $orderHeaders = $oracleDOCOrderHeaderService->getWMSOrderOnEditDate($last_date);                   // WMS订单
 
+        if($orderHeaders->count()==0)return;
         $renewal_order = $orderHeaders->first();                                                            // 时间点靠后的
-        $renewal_orders =  $orderHeaders->where('addTime',$renewal_order->addtime);
+        $renewal_orders =  $orderHeaders->where('edittime',$renewal_order->edittime);
 
         $orderHeaders = $orderService->filterOrderByCache($orderHeaders,$renewal_list);                     // 对比缓存
 
         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->addTime,count($orderHeaders)>0);   // 更新时间
+            $orderService->setOrderSyncAt($renewal,$renewal_order->edittime,count($orderHeaders)>0);   // 更新时间
         }
     }
 
+    public function syncOrderByWmsOrderNos($orderNos)
+    {
+        if(empty($orderNos))return ;
+        if(count($orderNos)==0)return;
+        $orderHeaders = $this->oracleDOCOrderHeaderService->getOrderByOrderNos($orderNos);
+        $this->syncOrderByWMSOrderHeaders($orderHeaders);
+    }
+
+    public function syncOrderInfoByWmsOrderNos($orderNos)
+    {
+        if(empty($orderNos))return ;
+        if(count($orderNos)==0)return;
+        $orderHeaders = $this->oracleDOCOrderHeaderService->getOrderInfoByOrderNos($orderNos);
+        $this->syncOrderInfoByWMSOrderHeaders($orderHeaders);
+    }
+
+    public function syncOrderInfoByWMSOrderHeaders($orderHeaders){
+        if(empty($orderNos))return ;
+        if(count($orderNos)==0)return;
+        $this->syncOrderByWMSOrderHeaders($orderHeaders);
+        $this->orderCommodityService->syncOrderCommodities($orderHeaders);
+        $this->packageService->syncOrderPackage($orderHeaders);
+    }
+
     public function update(array $params, array $values)
     {
         $query = Order::query();
@@ -1218,4 +1289,5 @@ class OrderService
         ]))return true;
        return false;
     }
+
 }

+ 8 - 2
app/Services/OwnerService.php

@@ -122,7 +122,7 @@ Class OwnerService
         $customerIds = array_diff($customerIds,[null,'','*']);
         $owners = Owner::query()->whereIn('code',$customerIds)->get();
 
-         if($owners->count() < count($customerIds)){
+        if($owners->count() < count($customerIds)){
             $customerIds = array_diff($customerIds,data_get($owners,'*.code'));
             $owner_list = $this->createByWmsCustomerIds($customerIds);
             $owners=$owners->concat($owner_list);
@@ -229,7 +229,7 @@ Class OwnerService
     }
 
     public function getOwnerByCode($code){
-        return Cache::remember("getOwnerByCode_{$code}", config('database.cache.expirations.owner'), function ()use($code){
+        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]);
@@ -237,4 +237,10 @@ Class OwnerService
             return Owner::query()->create(['name'=>$basCustomer['descr_c'],'code'=>$basCustomer['customerid']]);
         });
     }
+    public function codeGetOwner($code)
+    {
+        return app(CacheService::class)->getOrExecute("owner_".$code,function ()use($code){
+            return Owner::query()->firstOrCreate(["code"=>$code],["code"=>$code,"name"=>$code]);
+        });
+    }
 }

+ 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']}", null, function()use($item,$owner_map){
+            $collect->push(Cache::remember("getShopByCodeMap_{$item['owner_code']}_{$item['issuepartyname']}", config('database.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;

+ 46 - 0
app/Services/StationRuleBatchService.php

@@ -0,0 +1,46 @@
+<?php
+
+
+namespace App\Services;
+
+
+use App\Batch;
+use App\StationRuleBatch;
+use App\StationType;
+use Illuminate\Support\Collection;
+use Illuminate\Support\Facades\Cache;
+
+class StationRuleBatchService
+{
+    function getByBatch(Batch $batch): StationRuleBatch
+    {
+        $batchType = $batch['type'] ?? 'null';
+        $ownerId = $batch['owner_id'] ?? 'null';
+        return Cache::remember('stationType_type_'.$batchType.'_ownerId_'.$ownerId, config('cache.expirations.rarelyChange'),function($batch){
+            return StationRuleBatch::query()->with('stationType')->where('batch_type',$batch['type'])
+                ->where('owner_id',$batch['owner_id'])
+                ->first();
+        });
+    }
+
+    function getStationType_toBeTask(Batch $batch): ?StationType{
+        $stationRuleBatch=$this->getByBatch($batch);
+        if(!$stationRuleBatch)return null;
+        return $stationRuleBatch['stationType'];
+    }
+
+    /**
+     * @param Batch[] $batches
+     * @return Collection
+     */
+    function getBatches_canProcess(array $batches): Collection
+    {
+        $batches_toProcess=collect();
+        foreach ($batches as $batch){
+            $stationRuleBatch=$this->getByBatch($batch);
+            if($stationRuleBatch)
+            $batches_toProcess->push($batch);
+        }
+        return $batches_toProcess;
+    }
+}

+ 1 - 1
app/Services/WarehouseService.php

@@ -116,7 +116,7 @@ Class WarehouseService
     }
 
     public function getWareHouseByCode($code){
-        return Cache::remember("WareHouse_{$code}",config('database.cache.expirations.warehouse'),function()use($code){
+        return Cache::remember("WareHouse_{$code}",config('database.cache.expirations.forever'),function()use($code){
             $wareHouse =  Warehouse::query()->where('code',$code)->first();
             if($wareHouse)return $wareHouse;
             $bas_customer = app('OracleBasCustomerService')->first(['CustomerId'=>$code,'Customer_Type'=>'WH']);

+ 10 - 1
database/factories/BatchFactory.php

@@ -6,7 +6,16 @@ use App\Batch;
 use Faker\Generator as Faker;
 
 $factory->define(Batch::class, function (Faker $faker) {
+    $status = ['未处理','已处理','取消','处理中','挂起','异常'];
+    $type = ['无'];
     return [
-        //
+        'code' => $faker->uuid,
+        'type' => '无',
+        'wms_type' =>$faker->name,
+        'status' => $status[rand(0,count($status)-1)],
+        'wms_status' =>$faker->name,
+        'wms_created_at'=> $faker->date(),
+        'remark' => $faker->text(20),
+        'owner_id' => 1,
     ];
 });

+ 1 - 0
database/factories/OrcaleDOCOrderHeaderFactory.php

@@ -9,6 +9,7 @@ $factory->define(OracleDOCOrderHeader::class, function (Faker $faker) {
     return [
         'orderno' => $faker->uuid,
         'customerid' => '',
+        'waveno' => '',
         'ordertime' =>$faker->time(),
         'soreference1' => $faker->uuid,
         'consigneeid' => '',

+ 14 - 0
database/factories/OrderPackageCommoditiesFactory.php

@@ -0,0 +1,14 @@
+<?php
+
+/** @var \Illuminate\Database\Eloquent\Factory $factory */
+
+use App\OrderPackageCommodities;
+use Faker\Generator as Faker;
+
+$factory->define(OrderPackageCommodities::class, function (Faker $faker) {
+    return [
+        'order_package_id' => 1,
+        'commodity_id' => 1,
+        'amount' => rand(1,100)
+    ];
+});

+ 47 - 0
tests/Services/BatchService/TestGetBatchByCodes.php

@@ -0,0 +1,47 @@
+<?php
+
+namespace Tests\Services\BatchService;
+
+use App\Batch;
+use App\Services\BatchService;
+use Illuminate\Foundation\Testing\RefreshDatabase;
+use Tests\TestCase;
+
+class TestGetBatchByCodes extends TestCase
+{
+//    use RefreshDatabase;
+
+    /** @var BatchService $service */
+    private $service;
+    private $data = [];
+
+    public function setUp(): void
+    {
+        parent::setUp(); // TODO: Change the autogenerated stub
+        $this->service = app('BatchService');
+        $batch = factory(Batch::class)->create();
+        $this->data['batch'] = $batch;
+    }
+
+    /**
+     * @test
+     */
+    public function getBatchByCodes()
+    {
+        $batch = $this->service->getBatchByCodes([$this->data['batch']['code']])->first();
+        $this->assertNotNull($batch);
+        $this->assertEquals($batch['code'],$this->data['batch']['code']);
+        $this->assertEquals($batch['type'],$this->data['batch']['type']);
+        $this->assertEquals($batch['wms_type'],$this->data['batch']['wms_type']);
+        $this->assertEquals($batch['status'],$this->data['batch']['status']);
+        $this->assertEquals($batch['wms_status'],$this->data['batch']['wms_status']);
+        $this->assertEquals($batch['remark'],$this->data['batch']['remark']);
+        $this->assertEquals($batch['owner_id'],$this->data['batch']['owner_id']);
+    }
+
+    public function tearDown(): void
+    {
+        $this->data['batch']->delete();
+        parent::tearDown(); // TODO: Change the autogenerated stub
+    }
+}

+ 66 - 47
tests/Services/OrderPackageCommoditiesService/RegroupOrderCommoditiesTest.php

@@ -2,10 +2,14 @@
 
 namespace Tests\Services\OrderPackageCommoditiesService\RegroupOrderCommoditiesTest;
 
+use App\Commodity;
+use App\OracleActAllocationDetails;
+use App\OracleBasSKU;
 use App\OracleDOCOrderHeader;
 use App\Order;
 use App\OrderPackage;
 use App\OrderPackageCommodities;
+use App\Owner;
 use App\Services\OracleDOCOrderHeaderService;
 use App\Services\OrderPackageCommoditiesService;
 use App\Services\OrderService;
@@ -20,66 +24,81 @@ class RegroupOrderCommoditiesTest extends TestCase
 
     /**
      * @var OrderPackageCommoditiesService $service
-     * @var OracleDOCOrderHeaderService $orderHeaderService
-     * @var OrderService $orderService
      */
     private $service;
-    private $orderHeaderService;
-    private $orderService;
+    private $data = [];
 
     public function setUp(): void
     {
         parent::setUp();
         $this->service = app('OrderPackageCommoditiesService');
-        $this->orderService = app('OrderService');
-        $this->orderHeaderService = app('OracleDocOrderHeaderService');
-    }
+        $order = factory(Order::class)->create();
+        $this->data['order'] = $order;
 
-    public function testRegroupOrderCommodities()
-    {
-        $orderHeader = OracleDOCOrderHeader::query()->where('sostatus',99)->orderByDesc('AddTime')->first();
-        if(!$orderHeader){
-            $this->assertNull($orderHeader);
-            return ;
+        $wmsOrderHeader = factory(OracleDOCOrderHeader::class)->make([
+            'customerid'=>'TEST_OW','sostatus'=>99,'userdefine1'=>'TEST_CA','warehouseid'=>'WH_TEST'
+        ]);
+        $this->data['orderHeader'] = $wmsOrderHeader;
+
+        $orderPackage = factory(OrderPackage::class)->create(['order_id'=>$order->id]);
+        $this->data['orderPackage'] = $orderPackage;
+
+        $basSKUs = collect();
+        for ($i = 0;$i<2;$i++){
+            $basSKUs->push(factory(OracleBasSKU::class)->make(['customerid' => 'TEST_OW']));
+        }
+
+        $owner =factory(Owner::class)->create(['code'=>'TEST_OW']);
+        $this->data['owner'] = $owner;
+
+
+        $this->data['commodities'] = collect();
+        foreach ($basSKUs as $item) {
+            $this->data['commodities']->push(factory(Commodity::class)->create(['owner_id'=>$owner->id,'sku'=>$item['sku']]));
         }
 
-        $orderHeaders = OracleDOCOrderHeader::query()->where('sostatus',99)
-            ->where('addtime','>=',$orderHeader->addtime)
-            ->get();
+        $OracleActAllocationDetails = collect();
+        foreach ($this->data['commodities'] as $commodity) {
+            $OracleActAllocationDetails->push(factory(OracleActAllocationDetails::class)->make(
+                ['orderno'=>$wmsOrderHeader->orderno,'customerid'=>'TEST_OW','sku'=>$commodity->sku,$orderPackage->logistic_number])
+            );
+        }
 
-        $this->orderService->syncOrder($orderHeaders);
-        $order_nos = data_get($orderHeaders,'*.orderno');
-        $order_commodities = OrderPackageCommodities::query()->with(['commodity','package.order'])->whereHas('package',function($query)use($order_nos){
-            $query->whereHas('order',function ($query)use($order_nos){
-                $query->whereIn('code',$order_nos);
-            });
+        $this->data['order_package_commodities'] = collect();
+        foreach ($OracleActAllocationDetails as $OracleActAllocationDetail) {
+            $commodity = $this->data['commodities']->where('sku',$OracleActAllocationDetail->sku)->first();
+            $this->data['order_package_commodities']->push(factory(OrderPackageCommodities::class)->create(
+                ['order_package_id'=>$orderPackage->id,'commodity_id'=>$commodity->id,'amount'=>$OracleActAllocationDetail->qty_each])
+            );
+        }
+        $wmsOrderHeader->setRelation('actAllocationDetails',$OracleActAllocationDetails);
+    }
+
+    /**
+     * @test
+     */
+    public function regroupOrderCommodities()
+    {
+        $order = $this->data['order'];
+        $opc = OrderPackageCommodities::query()->with('package.order')->whereHas('package.order',function ($query)use($order){
+            $query->where('code',$order->code);
         })->get();
+        $params = $this->service->regroupOrderCommodities($opc);
+        $this->assertNotNull($params);
 
-        $params = $this->service->regroupOrderCommodities($order_commodities);
-
-        $_params = [];
-
-        $orderHeaders->each(function($order_header)use(&$_params){
-            $order_header->actAllocationDetails->each(function($detail)use(&$_params){
-                $order_no = $detail->orderno;
-                $logistic_number = $detail->picktotraceid;
-                $sku = $detail->sku;
-                $key = ' orderno='.$order_no.' logsitic_number='.$logistic_number.' sku='.$sku.' ';
-                if(isset($_params[$key])){
-                    $_params[$key]['amount'] += $detail->qty_each;
-                }else{
-                    $_params[$key] = [
-                        'orderno'=>$order_no,
-                        'logistic_number'=>$logistic_number,
-                        'sku' => $sku,
-                        'amount' => $sku,
-                        'owner_code' => $detail->customerid
-                    ];
-                }
-            });
-        });
-        foreach ($_params as $key=>$param) {
-            $this->assertNotEmpty($params[$key]);
+    }
+
+    public function tearDown(): void
+    {
+        $this->data['order']->delete();
+        $this->data['orderHeader']->delete();
+        $this->data['owner']->delete();
+        foreach ($this->data['order_package_commodities'] as $order_package_commodity) {
+            $order_package_commodity->delete();
+        }
+        foreach ($this->data['commodities'] as $commodity) {
+            $commodity->delete();
         }
+        parent::tearDown(); // TODO: Change the autogenerated stub
     }
 }

+ 46 - 35
tests/Services/OrderPackageService/GetInnerParamsTest.php

@@ -2,16 +2,16 @@
 
 namespace Tests\Services\OrderPackageSerivce\GetInnerParamsTest;
 
-use App\Logistic;
+use App\Commodity;
+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\common\DataHandlerService;
 use App\Services\OrderPackageService;
-use App\Services\OrderService;
-use App\Shop;
 use Illuminate\Foundation\Testing\RefreshDatabase;
-use Illuminate\Foundation\Testing\WithFaker;
 use Tests\TestCase;
 
 class GetInnerParamsTest extends TestCase
@@ -19,19 +19,32 @@ class GetInnerParamsTest extends TestCase
     use RefreshDatabase;
     /**
      * @var OrderPackageService $service
-     * @var OracleDOCOrderHeaderService $orderHeaderService
-     * @var OrderService $orderService
      */
     public $service;
-    public $orderService;
-    public $orderHeaderService;
-
+    private $data = [];
     public function setUp(): void
     {
         parent::setUp();
         $this->service = app('OrderPackageService');
-        $this->orderService = app('OrderService');
-        $this->orderHeaderService = app('OracleDocOrderHeaderService');
+        $orderHeader = factory(OracleDOCOrderHeader::class)->make(['userdefine1' =>'TEST_OW' ]);
+        $this->data['orderHeader'] = $orderHeader;
+        $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;
     }
 
     /**
@@ -39,29 +52,27 @@ class GetInnerParamsTest extends TestCase
      */
     public function getInnerParamsTest()
     {
-        $orderHeader = OracleDOCOrderHeader::query()
-            ->with('actAllocationDetails')
-            ->where('sostatus',99)
-            ->orderByDesc('AddTime')->first();
-        Logistic::query()->firstOrCreate(['code'=>$orderHeader->userdefine1,'name'=>'']);
-        $owner = Owner::query()->firstOrCreate(['code'=>$orderHeader->customerid,'name'=>'']);
-        Shop::query()->firstOrCreate(['name'=>$orderHeader->issuepartyname ?? '','owner_id'=>$owner->id]);
-        app('WarehouseService')->firstOrCreate(["code"=>$orderHeader->warehouseid],["code"=>$orderHeader->warehouseid,"name"=>$orderHeader->warehouseid]);
-        $orderHeaders = collect();
-        $orderHeaders = $orderHeaders->push($orderHeader);
-        $this->orderService->syncOrder($orderHeaders);
-        $order = Order::query()->where('code',$orderHeader->orderno)->first();
-        $inner_params = $this->service->getInnerParams($orderHeader,$order,['mapkey'=>['logistic_number']]);
-        $this->assertNotEmpty($inner_params);
-        $actAllocationDetails = $orderHeader->actAllocationDetails;
-
-        foreach ($inner_params as $inner_param) {
-            $detail = $actAllocationDetails->where('picktotraceid',$inner_param['logistic_number'])->first();
-            $this->assertNotEmpty($detail);
-            $this->assertEquals($inner_param['order_id'],$order->id);
-            $this->assertEquals($inner_param['logistic_number'],$detail->picktotraceid);
-            $this->assertNotEmpty($inner_param['created_at']);
-            $this->assertNotEmpty($inner_param['updated_at']);
+        /** @var DataHandlerService $dataHandlerService */
+        $dataHandlerService = app(DataHandlerService::class);
+        $order  = $this->data['order'];
+        $orderPackage = OrderPackage::query()->whereHas('order',function($query)use($order){
+            $query->where('code',$order['code']);
+        })->get();
+        $map = $dataHandlerService->dataHeader(['logistic_number'],$orderPackage);
+        $params = $this->service->getInnerParams($this->data['orderHeader'],$this->data['order'],$map);
+        $orderPackages = collect($params);
+        dump($params,$this->data['actAllocationDetails']->toArray());
+        foreach ($this->data['actAllocationDetails'] as $actAllocationDetail) {
+            $orderPackage = $orderPackages->where('logistic_number',$actAllocationDetail['picktotraceid'])->first();
+            $this->assertNotNull($orderPackage);
         }
     }
+
+    public function tearDown(): void
+    {
+        $this->data['owner']->delete();
+        $this->data['commodity']->delete();
+        $this->data['order']->delete();
+        parent::tearDown(); // TODO: Change the autogenerated stub
+    }
 }

+ 27 - 27
tests/Services/OrderPackageService/SyncOrderPackageTest.php

@@ -2,7 +2,12 @@
 
 namespace Tests\Services\OrderPackageService\SyncOrderPackageTest;
 
+use App\Commodity;
+use App\OracleActAllocationDetails;
+use App\OracleBasSKU;
 use App\OracleDOCOrderHeader;
+use App\Order;
+use App\Owner;
 use App\Services\OracleDOCOrderHeaderService;
 use App\Services\OrderPackageService;
 use App\Services\OrderService;
@@ -23,6 +28,7 @@ class SyncOrderPackageTest extends TestCase
     public $service;
     public $orderService;
     public $orderHeaderService;
+    private $data = [];
 
     public function setUp(): void
     {
@@ -30,6 +36,26 @@ class SyncOrderPackageTest extends TestCase
         $this->service = app('OrderPackageService');
         $this->orderService = app('OrderService');
         $this->orderHeaderService = app('OracleDocOrderHeaderService');
+
+        $orderHeader = factory(OracleDOCOrderHeader::class)->make(['userdefine1' =>'TEST_OW' ]);
+        $this->data['orderHeader'] = $orderHeader;
+        $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;
     }
 
     /**
@@ -37,32 +63,6 @@ class SyncOrderPackageTest extends TestCase
      */
     public function syncOrderPackage()
     {
-        $orderHeader = OracleDOCOrderHeader::query()->orderByDesc('addTime')->first();
-        $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.addTime','>=',$orderHeader->addtime)
-            ->orderByDesc('DOC_Order_Header.addTime')
-            ->get();
-        $orders = $this->orderService->getByWmsOrders($orderHeaders);
-        $packages = $this->service->getByWmsOrders($orderHeaders);
-        $this->service->syncOrderPackage($orderHeaders,$orders,$packages);
-        $exits_packages  = $this->service->getByWmsOrders($orderHeaders);
-        $exits_count = $exits_packages->count();
-        $logistic_numbers = data_get($orderHeaders,'*.actAllocationDetails.*.picktotraceid');
-        $logistic_numbers = array_unique(array_diff($logistic_numbers,['',' ','*']));
-        $this->assertEquals(count($logistic_numbers),$exits_count);
-        foreach ($logistic_numbers as $logistic_number) {
-            $exits_package = $exits_packages->where('logistic_number',$logistic_number);
-            $this->assertEmpty($exits_package);
-            $this->assertEquals($exits_package->count(),1);
-        }
+
     }
 }

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

@@ -34,37 +34,6 @@ class SyncPackageByOrderHeadersTest extends TestCase
     }
     public function testSyncPackageByOrderHeaders()
     {
-        /**
-         * createOrDeletePackageByOrderHeader($orderHeaders)
-         */
-        $orderHeader = OracleDOCOrderHeader::query()
-            ->with('actAllocationDetails')
-            ->where('sostatus',99)
-            ->orderByDesc('AddTime')
-            ->first();
 
-        $orderHeaders = OracleDOCOrderHeader::query()
-            ->with('actAllocationDetails')
-            ->where('sostatus',99)
-            ->where('addtime','>=',$orderHeader->addtime)
-            ->orderByDesc('AddTime')
-            ->get();
-
-        if ($orderHeaders->count() == 0) {
-            $this->assertNull($orderHeaders);
-            return;
-        }
-
-        Logistic::query()->firstOrCreate(['code'=>$orderHeader->userdefine1,'name'=>'']);
-        $owner = Owner::query()->firstOrCreate(['code'=>$orderHeader->customerid,'name'=>'']);
-        Shop::query()->firstOrCreate(['name'=>$orderHeader->issuepartyname,'owner_id'=>$owner->id]);
-        app('WarehouseService')->firstOrCreate(["code"=>$orderHeader->warehouseid],["code"=>$orderHeader->warehouseid,"name"=>$orderHeader->warehouseid]);
-        $this->orderService->syncOrderByWMSOrderHeaders($orderHeaders);
-        $this->service->syncPackageByOrderHeaders($orderHeaders);
-        $packages = $this->service->getByWmsOrders($orderHeaders);
-        $order_nos = array_unique(data_get($orderHeaders, '*.actAllocationDetails.*.picktotraceid'));
-        foreach ($order_nos as $order_no) {
-            $this->assertNotEmpty($packages->where('logistic_number', $order_no));
-        }
     }
 }

+ 0 - 38
tests/Services/OrderTrackingService/CustomizedOperationTest.php

@@ -1,38 +0,0 @@
-<?php
-
-namespace Tests\Services\OrderTrakingSerive\CustomizedOperationTest;
-
-use App\OracleDOCOrderHeader;
-use App\Services\OrderTrackingService;
-use Carbon\Carbon;
-use Illuminate\Foundation\Testing\RefreshDatabase;
-use Illuminate\Foundation\Testing\WithFaker;
-use Illuminate\Support\Collection;
-use Tests\TestCase;
-
-class CustomizedOperationTest extends TestCase
-{
-    use RefreshDatabase;
-
-    /** @var OrderTrackingService $service */
-    public $service;
-
-    public function setUp(): void
-    {
-        $this->service=app(OrderTrackingService::class);
-        parent::setUp();
-    }
-
-    public function testCustomizedOperation()
-    {
-        $orderHeader = OracleDOCOrderHeader::query()->where('consigneeid',"ZT")->orderByDesc('AddTime')->first();
-        $orderHeaders = OracleDOCOrderHeader::query()->where('consigneeid',"ZT")->where('addtime','>=',$orderHeader->addtime)->get();
-        $ZT_Count = $orderHeaders->count();
-        /** @var Collection $orderHeader */
-        $this->service->customizedOperation($orderHeaders);
-        $XJ_Count  = $orderHeaders->filter(function($orderHeader){
-            return $orderHeader->userdefine1 == 'XJWL';
-        })->count();
-        $this->assertEquals($ZT_Count,$XJ_Count);
-    }
-}