LD 5 лет назад
Родитель
Сommit
9a2dd49771
3 измененных файлов с 30 добавлено и 7 удалено
  1. 26 7
      app/OrderPackage.php
  2. 2 0
      app/Providers/AppServiceProvider.php
  3. 2 0
      app/Services/OrderService.php

+ 26 - 7
app/OrderPackage.php

@@ -99,12 +99,15 @@ class OrderPackage extends Model
         $queryBuilder=OracleDOCOrderHeader::query()->select(self::$oracleOrderHeaderFields);
         $queryBuilder->where('doc_order_header.waveno',$batchCode);
         $queryBuilder->leftJoin('act_allocation_details','act_allocation_details.orderno','doc_order_header.orderno');
-        $resultOracleObjs=$queryBuilder->leftJoin('doc_wave_header','doc_wave_header.waveno','doc_order_header.waveno')->get();
+        $queryBuilder->leftJoin('doc_wave_header','doc_wave_header.waveno','doc_order_header.waveno');
+        $resultOracleObjs=$queryBuilder->get();
+        $resultOracleObjs_grouped=$resultOracleObjs->groupBy('soreference5');
         $packages = [];
         $now = Carbon::now();
-        foreach($resultOracleObjs as $resultOracleObj){
+        foreach($resultOracleObjs_grouped as $resultOracleObj_grouped){
+            $resultOracleObj = $resultOracleObj_grouped[0];
             /** @var OrderService */
-            $order = app('orderService')->logisticNumberCreateOrder($resultOracleObj['SOReference5']);
+            $order = app('orderService')->logisticNumberCreateOrder($resultOracleObj['soreference5']);
             if (!$order){
                 LogService::log(__METHOD__,"此包裹在WMS未找到order",json_encode($resultOracleObj),Auth::user()['id']);
                 continue;
@@ -113,16 +116,32 @@ class OrderPackage extends Model
                 'batch_number'=>$batchCode??'',
                 /** @var OrderPackageService */
                 'order_id' => $order->id,
-                'logistic_number'=>$resultOracleObj['SOReference5']??'',
+                'logistic_number'=>$resultOracleObj['soreference5']??'',
                 'weight'=>$weight,
                 'weighed_at'=> $now,
                 'status'=>"已上传",
                 "created_at"=>$now,
             ]);
         }
-//        OrderPackage::whereIn('logistic_number',$packages)
-        DB::transaction(function ()use($packages){
-            OrderPackage::query()->insert($packages);
+        $packagesLogisticNumbers = array_map(function ($orderPackage) {
+            return $orderPackage['logistic_number'];
+        } ,$packages);
+        $existingOrderPackages=OrderPackage::whereIn('logistic_number', $packagesLogisticNumbers)->get();
+        $existingLogisticNumbers=$existingOrderPackages->map(function($orderPackage){
+            return $orderPackage['logistic_number'];
+        })->toArray();
+        OrderPackage::whereIn('logistic_number', $existingLogisticNumbers)->update([
+            'batch_number'=>$batchCode??'',
+            'weight'=>$weight,
+            'weighed_at'=> $now,
+            'status'=>"已上传",]);
+        $newPackages=$packages;
+        if($existingOrderPackages->isNotEmpty())
+            $newPackages=array_filter($packages,function ($package)use($existingLogisticNumbers){
+                return array_search($package['logistic_number'],$existingLogisticNumbers)===false;
+            });
+        DB::transaction(function ()use($newPackages){
+            OrderPackage::query()->insert($newPackages);
         });
         LogService::log(__METHOD__,"批量录入包裹成功",json_encode($packages),Auth::user()['id']);
     }

+ 2 - 0
app/Providers/AppServiceProvider.php

@@ -12,6 +12,7 @@ use App\Services\LogisticService;
 use App\Services\OracleActAllocationDetailService;
 use App\Services\OrderIssueService;
 use App\Services\OrderPackageService;
+use App\Services\OrderService;
 use App\Services\OwnerService;
 use App\Services\PackageStatisticsService;
 use App\Services\ProcessMethodService;
@@ -87,5 +88,6 @@ class AppServiceProvider extends ServiceProvider
         app()->singleton('shopService',ShopService::class);
         app()->singleton('orderPackageService',OrderPackageService::class);
         app()->singleton('orderIssueService',OrderIssueService::class);
+        app()->singleton('orderService',OrderService::class);
     }
 }

+ 2 - 0
app/Services/OrderService.php

@@ -116,6 +116,8 @@ class OrderService
          * @var OracleActAllocationDetails $actAllocationDetail
          */
         $actAllocationDetail = app('oracleActAllocationDetailService')->first(['picktotraceid' => $logistic_number]);
+
+//        if(!$actAllocationDetail)return dd($logistic_number,$actAllocationDetail);;
         $order = $this->first(['code' => $actAllocationDetail->orderno]);
         if ($order) return $order;