ANG YU 4 سال پیش
والد
کامیت
cd6df00738

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

@@ -485,8 +485,8 @@ sql;
         /** @var OrderPackageService $service */
         $service = app('OrderPackageService');
        return $service->collectUpload([
-            '75803656098638',
-            '75803656098612'
+            '75810646867541',
+            '75810646197516'
         ]);
     }
 

+ 5 - 4
app/OrderPackage.php

@@ -39,10 +39,11 @@ class OrderPackage extends Model
         'transfer_status',
         'owner_id',
         'uploaded_to_wms',
-        'sync_routes_flag',
-        'is_manual_update',
-        'exception_status',
-        'is_delay_deliver',
+        'sync_routes_flag',//同步物流信息标记
+        'is_manual_update',//是否手动更新状态
+        'exception_status',//异常状态
+        'is_delay_deliver',//是否延时发货
+        'collecting_status',//手动揽收状态
     ];
 
     protected $casts = [

+ 25 - 28
app/Services/OrderPackageService.php

@@ -371,23 +371,7 @@ class OrderPackageService
                 'message' => '输入快递单号为空',
             ];
         }
-//        $orderPackageCount = OrderPackage::query()->whereIn('logistic_number', $logistic_numbers)
-//            ->whereIn('order_id', function ($query) {
-//                $query->from('orders')->select('id')->whereIn('logistic_id', function ($query) {
-//                    $query->from('logistics')->select('id')->whereIn('code', [
-//                        'ZTO',
-//                        'ZTO-1',
-//                        'WPZTO',
-//                    ]);
-//                });
-//            })->count();
-//        if ($orderPackageCount !== count($logistic_numbers)) {
-//            return [
-//                'success' => false,
-//                'message' => '输入的快递单号异常,请检查承运商是否全部为中通',
-//            ];
-//        }
-
+        //根据环境获取中通接口参数
         $url = env('APP_ENV') === 'production' ? config('api_logistic.collectUpload.ZTO.prod.url') : config('api_logistic.collectUpload.ZTO.test.url');
         $xAppKey = env('APP_ENV') === 'production' ? config('api_logistic.collectUpload.ZTO.prod.x-appKey') : config('api_logistic.collectUpload.ZTO.test.x-appKey');
         $appSecret = env('APP_ENV') === 'production' ? config('api_logistic.collectUpload.ZTO.prod.appSecret') : config('api_logistic.collectUpload.ZTO.test.appSecret');
@@ -411,25 +395,38 @@ class OrderPackageService
                 ];
             }
             try {
+                //调用中通接口
                 $response = $this->sentReqToZOP($collectUploadDTOS, $appSecret, $xAppKey, $url);
+
+                //接口返回的异常包装
+                $responseBody = json_decode($response->body());
+                if ($responseBody->statusCode === 'S210' ||//无权限
+                    $responseBody->statusCode === 'PARAM_ERROR' ||//揽收上传信息为空
+                    $responseBody->statusCode === 'SYSTEM_ERROR'//系统异常,请联系系统管理员
+                ) {
+                    //有异常包装
+                    $errorMessage[] = [
+                        'status_code' => $responseBody->statusCode,
+                        'message' => $responseBody->message,
+                        'logistic_number' => $logistic_numbers_chunked_items,
+                    ];
+                } else {
+                    //没有异常将对应包裹标记为手动揽收
+                    OrderPackage::query()
+                        ->select('weight', 'logistic_number')
+                        ->whereIn('logistic_number', $logistic_numbers_chunked_items)->update([
+                            'collecting_status' => 1,
+                        ]);
+                }
             } catch (\Exception $e) {
+                //调用异常,构建异常返回体
                 $errorMessage[] = [
                     'status_code' => 'REQUEST_ERROR',
                     'message' => [$e->getMessage()],
                     'logistic_number' => $logistic_numbers_chunked_items,
                 ];
             }
-            $responseBody = json_decode($response->body());
-            if ($responseBody->statusCode === 'S210' ||//无权限
-                $responseBody->statusCode === 'PARAM_ERROR' ||//揽收上传信息为空
-                $responseBody->statusCode === 'SYSTEM_ERROR'//系统异常,请联系系统管理员
-            ) {
-                $errorMessage[] = [
-                    'status_code' => $responseBody->statusCode,
-                    'message' => $responseBody->message,
-                    'logistic_number' => $logistic_numbers_chunked_items,
-                ];
-            }
+
         }
         if (empty($errorMessage)) {
             return ['success' => true, 'message' => '一键揽收上传成功'];

+ 32 - 0
database/migrations/2021_09_26_095833_add_column_manual_collection_status_to_order_packages_table.php

@@ -0,0 +1,32 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class AddColumnManualCollectionStatusToOrderPackagesTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('order_packages', function (Blueprint $table) {
+            $table->integer('collecting_status')->default(0)->comment('手动揽收标记 0:不是手动揽收 1:是手动揽收');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('order_packages', function (Blueprint $table) {
+            $table->dropColumn('collecting_status');
+        });
+    }
+}

+ 18 - 0
resources/views/order/index/delivering.blade.php

@@ -44,6 +44,10 @@
                         <button class="btn btn-sm ml-1 btn-success tooltipTarget" title="订单一键回传必须满足条件:订单状态为“分配完成,部分拣货,拣货完成,播种完成”;订单未冻结;订单有快递单号"
                                 @click="manualBack()">一键回传</button>
                     @endcan
+{{--                    @can('订单管理-订单-一键揽收')--}}
+                        <button class="btn btn-sm ml-1 btn-success tooltipTarget" title="订单一键揽收必须满足条件:承运商为:“中通” 订单状态为“播种完成,部分装箱,完全装箱,部分装车,装车完成,部分发运,完全发运”;订单未冻结;订单有快递单号,快递未揽收"
+                                @click="collectUpload()">一键揽收分配</button>
+{{--                    @endcan--}}
                 </div>
                 <div class="modal fade " style="top: 20%" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
                     <div class="modal-dialog">
@@ -1158,6 +1162,20 @@
                         window.tempTip.show("网络错误:" + err);
                     })
                 },
+                collectUpload(){
+                    if(checkData.length===0){tempTip.show('没有勾选记录');return;}
+                    const data = {
+                        'orderno': checkData,
+                        'strict': false,
+                    };
+                    window.axios.post("{{url('order/collectUpload')}}", data).then(res => {
+                        if (res.data.success) {
+                            tempTip.showSuccess(res.data.message)
+                        }else {
+                            tempTip.show(res.data.error_message);
+                        }
+                    });
+                },
                 isDB(item){
                     if(item.indexOf('德邦') == -1  || item.indexOf('京东') == -1) return false;
                     return  true;

+ 1 - 0
routes/web.php

@@ -798,6 +798,7 @@ Route::group(['prefix'=>'package'],function(){
         Route::post('deAllocationAll','OrderController@deAllocationAll');
         Route::post('allocation','OrderController@allocation');
         Route::post('manualBack','OrderController@manualBack');
+        Route::post('collectUpload','OrderController@collectUpload');
         Route::post('resetLogisticsGetMark','OrderController@resetLogisticsGetMark');
         Route::post('resetInterfaceReturnMark','OrderController@resetInterfaceReturnMark');
         Route::post('createRejectedBill','OrderController@createRejectedBill');