Просмотр исходного кода

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

LD 5 лет назад
Родитель
Сommit
41470f72ad

+ 42 - 5
app/Services/OrderPackageService.php

@@ -2,6 +2,7 @@
 
 namespace App\Services;
 
+use App\Logistic;
 use App\OracleActAllocationDetails;
 use App\OracleDOCOrderDetail;
 use App\OracleDOCOrderHeader;
@@ -125,18 +126,25 @@ class OrderPackageService
         if(!$orderHeaders)return;
         /**
          * @var DataHandlerService $dataHandlerService
+         * @var LogisticService $logsitcService
          */
+        $logisticService = app(LogisticService::class);
         $dataHandlerService = app(DataHandlerService::class);
         $orderHeaders_map = $dataHandlerService->dataHeader(['orderno'],$orderHeaders);
         $packages_maps = $dataHandlerService->dataHeader(['logistic_number'],$packages);
         $inner_params = [];
+
+        /** 定制京东快递的订单 */
+        $logistic = $logisticService->getLogisticByCodes(['JDKD']);
         foreach ($orders as $order){
             $orderHeader = $dataHandlerService->getKeyValue(['orderno'=>$order->code],$orderHeaders_map);
             if(!$orderHeader)continue;
             if($orderHeader->sotatus == 90)continue;
-            $params = $this->getInnerParams($orderHeader,$order,$packages_maps);
+            $params = $this->getInnerParams($orderHeader,$order,$packages_maps,$logistic);
             $inner_params = array_merge($inner_params,$params);
         }
+
+        /** 批量添加 */
         if(count($inner_params)>0){
             try {
                 $inner_array = array_chunk($inner_params,5000);
@@ -150,31 +158,43 @@ class OrderPackageService
         }
     }
 
-    public function getInnerParams($orderHeader,$order,$packages_maps)
+    public function getInnerParams($orderHeader,$order,$packages_maps,$logistic): array
     {
         /**
         * @var DataHandlerService $dataHandlerService
         */
         $dataHandlerService = app('DataHandlerService');
         $logistic_numbers = array_diff(array_unique(data_get($orderHeader->actAllocationDetails,'*.picktotraceid')),['','*']);
+        $date = Carbon::now()->format('Y-m-d H:i:s');
         $inner_params = [];
+        $sentAtMap = [];
+
         if($orderHeader['sostatus'] == '90'){
             if($orderHeader['soreference5']=='')$logistic_numbers = [$orderHeader['orderno']];
             else $logistic_numbers = [$orderHeader['soreference5']];
         }
-        $date = Carbon::now()->format('Y-m-d H:i:s');
-        $sentAtMap = [];
+
+        /** sent_at checktime */
         foreach ($orderHeader->actAllocationDetails as $item){
             $sentAtMap[$item->picktotraceid] = $item;
         }
+
+        /** 承运商是京东时的定制操作 */
+        if($order['id'] == $logistic['id'] && count($logistic_numbers) == 1){
+            $logistic_numbers = [$orderHeader['soreference5']];
+            $sentAtMap[$orderHeader['soreference5']] = $orderHeader->actAllocationDetails->first() ?? null;
+        }
+
         foreach ($logistic_numbers as $logistic_number){
             $package = $dataHandlerService->getKeyValue(['logistic_number'=>$logistic_number],$packages_maps);
+
             if(isset($package))continue;
             try {
                 $data = $sentAtMap[$logistic_number];
             } catch (\Exception $e) {
                 $data = null;
             }
+
             $inner_params[] = [
                 'order_id' => $order->id,
                 'logistic_number' => $logistic_number,
@@ -188,6 +208,7 @@ class OrderPackageService
         return $inner_params;
     }
 
+
     public function deleteUnnecessaryPackage($orderHeaders,$packages)
     {
         /**
@@ -197,23 +218,39 @@ class OrderPackageService
          */
         $dataHandlerService = app(DataHandlerService::class);
         $orderPackageCommoditiesService = app('OrderPackageCommoditiesService');
-        $logistic_numbers = data_get($orderHeaders,'*.actAllocationDetails.*.picktotraceid');     // 获取picktotraceid (运单的快递单号)
+
+        /** 获取所有的 picktotraceid WMS快递单号*/
+        $logistic_numbers = data_get($orderHeaders,'*.actAllocationDetails.*.picktotraceid');
+
+         /** WMS定制化操作 订单取消 和 京东快递*/
         foreach ($orderHeaders as $orderHeader) {
             if($orderHeader['sostatus'] == '90'){
                 if($orderHeader['soreference5']=='')$logistic_numbers[] =$orderHeader['orderno'];
                 else $logistic_numbers[] = $orderHeader['soreference5'];
             }
+            if($orderHeader['userdefine1'] == 'JDKD'){
+                $logistic_numbers[] = $orderHeader['soreference5'];
+            }
         }
+
+        /** WMS快递单号唯一化 剔除 '',' ','*'*/
         $logistic_numbers = array_unique(array_values($logistic_numbers));
         $logistic_numbers = array_diff($logistic_numbers,['',' ','*']);
+
+        /** WAS数据库中已有的快递单号*/
         $packages_maps = $dataHandlerService->dataHeader(['logistic_number'],$packages);
         $exits_number = data_get($packages,'*.logistic_number');
+
+        /** WMS快递单号 和 WAS的快递单号 的差集*/
         $packages = [];
         $diff_number = array_diff($exits_number,$logistic_numbers);
+        /** 记录差集对应的OrderPackage的id*/
         foreach ($diff_number as $number) {
             $package = $dataHandlerService->getKeyValue(['logistic_number'=>$number],$packages_maps);
             if($package ?? false)$packages[]=$package->id;
         }
+
+        /** 删除 OrderPackage 和 OrderPackageCommodities*/
         if(count($packages)==0)return;
         try {
             $bool = OrderPackage::query()->whereIn('id', $packages)->delete();

+ 2 - 0
app/Services/OrderService.php

@@ -619,6 +619,7 @@ class OrderService
         $logisticService = app("LogisticService");
         $shopService = app('ShopService');
         $warehouseService = app('WarehouseService');
+
         $owner_codes = [];$logistic_codes = [];$warehouse_codes = [];$shop_names = [];$batch_codes = [];
         foreach ($orderHeaders as $orderHeader) {
             if(!empty($orderHeader['waveno']))
@@ -635,6 +636,7 @@ class OrderService
                 $shop_names[$key] = $value;
             }
         }
+
         $owners = $ownerService->getOwnerByCodes($owner_codes);
         $logistics = $logisticService->getLogisticByCodes($logistic_codes);
         $shops = $shopService->getShopByCodeMap($shop_names);

+ 1 - 1
resources/views/personnel/discharge/task/_table.blade.php

@@ -106,7 +106,7 @@
     </template>
     <template v-else>
         <tr>
-            <td colspan="13">
+            <td colspan="15">
                 <div class="alert alert-info text-lg-center">卸货任务数据为空</div>
             </td>
         </tr>