Ver código fonte

OrderPackages logistic_number 唯一化处理

ajun 4 anos atrás
pai
commit
c08232195e

+ 46 - 22
app/Http/Controllers/TestController.php

@@ -1476,30 +1476,37 @@ TEXT;
 
     public function orderPackageUnique()
     {
-        // select logistic_number,count(1) counts from order_packages where id >= 1590001   GROUP BY logistic_number HAVING counts > 1;
-        $orderPackages = OrderPackage::query()->selectRaw('count(1) counts,logistic_number')->where('id','>=','1590000')->groupBy('logistic_number')->having('counts','>','1')->get();
-        dd($orderPackages);
+        $logistic_numbers = [
+            '73228304758416','73228442802297','75432924540039','75432988921246','EA470967879CN','EA470967896CN','SF1801569733319','SF1889450021688','YT3153735030684'
+        ];
+
+        $orderPackages = OrderPackage::query()->selectRaw('count(1) counts,logistic_number')->whereIn('logistic_number',$logistic_numbers)->groupBy('logistic_number')->having('counts','>','1')->get();
         foreach ($orderPackages as $orderPackage) {
-            $items = OrderPackage::query()->where('logistic_number',$orderPackage['logistic_number'])->get();
-            $orderPackage = $items->first();
+            $items = OrderPackage::query()->where('logistic_number',$orderPackage['logistic_number'])->with('order')->get();
+            if($order = Order::query()->whereIn('id',data_get($items,'*.id'))->where('wms_status','!=','订单取消')->first()){
+                $saveOrderPackage = OrderPackage::query()->where('order_id',$order['id'])->where('logistic_number',$orderPackage['logistic_number'])->first();
+            }else{
+                $saveOrderPackage = $items->first();
+            }
+
             foreach ($items as $item) {
-                $orderPackage['batch_number'] = $item['batch_number'] ?? $orderPackage['batch_number'];
-                $orderPackage['batch_rule'] = $item['batch_rule'] ?? $orderPackage['batch_rule'];
-                $orderPackage['bulk'] = $item['bulk'] ?? $orderPackage['bulk'];
-                $orderPackage['weight'] = $item['weight'] ?? $orderPackage['weight'];
-                $orderPackage['length'] = $item['length'] ?? $orderPackage['length'];
-                $orderPackage['width'] = $item['width'] ?? $orderPackage['width'];
-                $orderPackage['height'] = $item['height'] ?? $orderPackage['height'];
-                $orderPackage['measuring_machine_id'] = $item['measuring_machine_id'] ?? $orderPackage['measuring_machine_id'];
-                $orderPackage['weighed_at'] = $item['weighed_at'] ?? $orderPackage['weighed_at'];
-                $orderPackage['owner_id'] = $item['owner_id'] ?? $orderPackage['owner_id'];
-                $orderPackage['received_at'] = $item['received_at'] ?? $orderPackage['received_at'];
-                $orderPackage['transfer_status'] = $item['transfer_status'] ?? $orderPackage['transfer_status'];
-                $orderPackage['status'] = $item['status'] != '无' ? $item['status'] : $orderPackage['transfer_status'];
-                $orderPackage['uploaded_to_wms'] = $item['uploaded_to_wms'] != '否' ? $item['uploaded_to_wms'] : $orderPackage['transfer_status'];
+                $saveOrderPackage['batch_number'] = $item['batch_number'] ?? $saveOrderPackage['batch_number'];
+                $saveOrderPackage['batch_rule'] = $item['batch_rule'] ?? $saveOrderPackage['batch_rule'];
+                $saveOrderPackage['bulk'] = $item['bulk'] ?? $saveOrderPackage['bulk'];
+                $saveOrderPackage['weight'] = $item['weight'] ?? $saveOrderPackage['weight'];
+                $saveOrderPackage['weighed_at'] = $item['weighed_at'] ?? $saveOrderPackage['weighed_at'];
+                $saveOrderPackage['length'] = $item['length'] ?? $saveOrderPackage['length'];
+                $saveOrderPackage['width'] = $item['width'] ?? $saveOrderPackage['width'];
+                $saveOrderPackage['height'] = $item['height'] ?? $saveOrderPackage['height'];
+                $saveOrderPackage['measuring_machine_id'] = $item['measuring_machine_id'] ?? $saveOrderPackage['measuring_machine_id'];
+                $saveOrderPackage['owner_id'] = $item['owner_id'] ?? $saveOrderPackage['owner_id'];
+                $saveOrderPackage['received_at'] = $item['received_at'] ?? $saveOrderPackage['received_at'];
+                $saveOrderPackage['transfer_status'] = $item['transfer_status'] ?? $saveOrderPackage['transfer_status'];
+                $saveOrderPackage['status'] = $item['status'] != '无' ? $item['status'] : $saveOrderPackage['transfer_status'];
+                $saveOrderPackage['uploaded_to_wms'] = $item['uploaded_to_wms'] != '否' ? $item['uploaded_to_wms'] : $saveOrderPackage['uploaded_to_wms'];
             }
-            $orderPackages_filter = $items->filter(function($item)use($orderPackage){
-                if($orderPackage['id'] === $item['id'])return false;
+            $orderPackages_filter = $items->filter(function($item)use($saveOrderPackage){
+                if($saveOrderPackage['id'] === $item['id'])return false;
                 return true;
             });
             $ids = $orderPackages_filter->map(function($item){
@@ -1507,7 +1514,24 @@ TEXT;
             });
             LogService::log('order_packages','order_packages_logistic_number_unique_delete',json_encode($orderPackages_filter));
             OrderPackage::query()->whereIn('id',$ids)->delete();
-            $orderPackage->save();
+            $saveOrderPackage->save();
+        }
+    }
+
+    public function syncOrderPackages()
+    {
+        /** @var OracleDOCOrderHeaderService $docOrderHeaderService */
+        $docOrderHeaderService = app(OracleDOCOrderHeaderService::class);
+        /** @var OrderService $orderService */
+        $orderService = app(OrderService::class);
+        $orderPackages = OrderPackage::query()->whereNotNull('weight')->whereIn('order_id',function($query){
+            /** @var Builder $query */
+            $query->from((new Order())->getTable())->selectRaw('id')->where('wms_status','订单取消');
+        })->get();
+        foreach ($orderPackages as $orderPackage) {
+            $actAllocationDetails = OracleActAllocationDetails::query()->selectRaw('orderno')->where('PickToTraceID',$orderPackage['logistic_number'])->get();
+            $docOrderHeaders = $docOrderHeaderService->getQuery()->whereIn('DOC_Order_Header.OrderNo',data_get($actAllocationDetails,data_get($actAllocationDetails,'*.orderno')));
+            $orderService->syncOrder($docOrderHeaders);
         }
     }
 

+ 34 - 0
app/Services/OrderPackageService.php

@@ -14,6 +14,7 @@ use App\Services\common\BatchUpdateService;
 use App\Services\common\DataHandlerService;
 use Carbon\Carbon;
 use App\Traits\ServiceAppAop;
+use Illuminate\Database\Eloquent\Builder;
 
 
 class OrderPackageService
@@ -114,6 +115,7 @@ class OrderPackageService
         $orderService = app('OrderService');
         if(!$orderHeaders)return;
         $orders = $orderService->getByWmsOrders($orderHeaders);
+        $this->processCancelOrderPackages($orderHeaders);                           // 取消订单操作 及 过滤
         $packages = $this->getByOrderNos(data_get($orderHeaders,'*.orderno'));          // 已有
         $this->createOrderPackage($orderHeaders,$orders,$packages);                     // 创建package
         $this->updatePackage($orderHeaders,$packages);
@@ -304,4 +306,36 @@ class OrderPackageService
         return $map;
     }
 
+    public function processCancelOrderPackages(&$orderHeaders)
+    {
+        $cancelOrder = $orderHeaders->filter(function($orderHeader){
+            return $orderHeader->wms_status == '订单取消';
+        });
+
+        $orderPackages = OrderPackage::query()->whereIn('order_id',function($query)use($cancelOrder){
+            /** @var Builder $query */
+            $query->from((new Order())->getTable())->where('code',data_get($cancelOrder,'*.orderno'));
+        })->get();
+
+        if($orderPackages->count() == 0)return ;
+
+        $updateParams = [['id','logistic_number']];
+        foreach ($orderPackages as $orderPackage) {
+            if(strstr($orderPackage['logistic_number'],'cancel'))continue;
+            $updateParams[] = ['id'=>$orderPackage['id'],'logistic_number' => $orderPackage['logistic_number'].'_cancel'];
+        }
+
+        if(count($updateParams)>0)$this->batchUpdate($updateParams);
+
+        $orderHeaders = $orderHeaders->filter(function($orderHeader){
+            return $orderHeader->wms_status != '订单取消';
+        });
+
+        $items = OrderTracking::query()->whereIn('order_package_commodity_id',function($query)use($orderPackages){
+            /** @var Builder $query */
+            $query->from((new OrderPackageCommodities)->getTable())->selectRaw('id')->whereIn('order_package_id',data_get($orderPackages,'*.id'));
+        })->get();
+
+        app(OrderTrackingService::class)->deleteOrderTracings($items);
+    }
 }

+ 34 - 0
database/migrations/2021_05_21_131520_add_order_packages_logistic_number_unique.php

@@ -0,0 +1,34 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class AddOrderPackagesLogisticNumberUnique extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('order_packages', function (Blueprint $table) {
+            //
+            $table->string('logistic_number')->unique()->change();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('order_packages', function (Blueprint $table) {
+            //
+            $table->dropUnique(['logistic_number']);
+        });
+    }
+}