ANG YU 4 жил өмнө
parent
commit
82abcf8682

+ 4 - 2
app/Filters/OrderPackageFilters.php

@@ -82,9 +82,11 @@ class OrderPackageFilters
     private function has_transfer_status($has_transfer_status)
     {
         if ($has_transfer_status == '是') {
-            $this->queryBuilder->whereNotNull('transfer_status');
+            $this->queryBuilder->whereNotNull('transfer_status')->where('transfer_status','!=',[]);
         } elseif ($has_transfer_status == '否') {
-            $this->queryBuilder->whereNull('transfer_status');
+            $this->queryBuilder->where(function ($query) {
+                $query->whereNull('transfer_status')->orwhere('transfer_status', []);
+            });
         }
     }
 

+ 14 - 5
app/Http/Controllers/PackageLogisticController.php

@@ -70,11 +70,20 @@ class PackageLogisticController extends Controller
 
     public function batchUpdate(Request $request)
     {
-        OrderPackage::query()->whereIn('logistic_number', $request->input('logistic_numbers'))->update([
-            'status' => OrderPackage::switchStatus($request->input('status')),
-            //标记为手动更新
-            'is_manual_update' => true,
-        ]);
+        if (!empty($request->input('status'))) {
+            OrderPackage::query()->whereIn('logistic_number', $request->input('logistic_numbers'))->update([
+                'status' => OrderPackage::switchStatus($request->input('status')),
+                //标记为手动更新
+                'is_manual_update' => true,
+            ]);
+        }else if (!empty($request->input('exceptionStatus'))) {
+            OrderPackage::query()->whereIn('logistic_number', $request->input('logistic_numbers'))->update([
+                'exception_status' => OrderPackage::switchExceptionStatus($request->input('exceptionStatus')),
+                //标记为手动更新
+                'is_manual_update' => true,
+            ]);
+        }
+
     }
 
     /**

+ 8 - 0
app/Http/Controllers/TestController.php

@@ -372,4 +372,12 @@ sql;
                 'status' => 7,
             ]);
     }
+
+    public function sync_order_packages_where_exception_status_在途异常()
+    {
+//        $logistic_number = OrderPackage::query()->where('exception_status', 5)->pluck('logistic_number')->toArray();
+        /** @var OrderPackageReceivedSyncService $OrderPackageReceivedSyncService */
+        $OrderPackageReceivedSyncService = app('OrderPackageReceivedSyncService');
+        $OrderPackageReceivedSyncService->syncLogisticRoute(false, ['YT5786786410738']);
+    }
 }

+ 1 - 0
app/OrderPackage.php

@@ -82,6 +82,7 @@ class OrderPackage extends Model
             '疑似库内丢件' => 4,
             '在途异常' => 5,
             '揽件异常' => 6,
+            '派送异常' => 7,
         ],
     ];
 

+ 24 - 14
app/Services/OrderPackageReceivedSyncService.php

@@ -27,25 +27,35 @@ class OrderPackageReceivedSyncService
      * 2 如果当前时间小于等于初始化时间,执行初始化脚本,将数据库中全部小于等于初始化时间的数据更新
      * @throws Exception
      */
-    public function syncLogisticRoute($is_to_init = false)
+    public function syncLogisticRoute($is_to_init = false,$logistic_numbers = [])
     {
         ini_set('max_execution_time', 2 * 60 * 60);
         ini_set('memory_limit', '1024M');
         //  LogService::log(OrderPackageReceivedSyncService::class, "同步快递信息定时方法", '');
-        $query = OrderPackage::query()
-            ->select(['logistic_number', 'order_id', 'id'])
-            ->with(['order' => function ($query) {
-                return $query->select(['id', 'logistic_id'])->with('logistic:id,name,code');
-            }]);
-        if ($is_to_init) {//当前时间小于等于初始化时间
-            $initDate = Carbon::parse(config('api_logistic.init_date'));
-            //初始化查询一个月的数据,exception为否
-            $query = $query->where('created_at', '>=', $initDate)
-                ->whereNull('received_at');
-        } else {//查询20天以内的数据
-            $query = $query->where('created_at', '>=', now()->subDays(config('api_logistic.querying_days'))->startOfDay())
-                ->whereNull('received_at');
+        if (empty($logistic_numbers)) {
+            $query = OrderPackage::query()
+                ->select(['logistic_number', 'order_id', 'id'])
+                ->with(['order' => function ($query) {
+                    return $query->select(['id', 'logistic_id'])->with('logistic:id,name,code');
+                }]);
+            if ($is_to_init) {//当前时间小于等于初始化时间
+                $initDate = Carbon::parse(config('api_logistic.init_date'));
+                //初始化查询一个月的数据,exception为否
+                $query = $query->where('created_at', '>=', $initDate)
+                    ->whereNull('received_at');
+            } else {//查询20天以内的数据
+                $query = $query->where('created_at', '>=', now()->subDays(config('api_logistic.querying_days'))->startOfDay())
+                    ->whereNull('received_at');
+            }
+        } else {
+            $query = OrderPackage::query()
+                ->select(['logistic_number', 'order_id', 'id'])
+                ->with(['order' => function ($query) {
+                    return $query->select(['id', 'logistic_id'])->with('logistic:id,name,code');
+                }])
+                ->whereIn('logistic_number', $logistic_numbers);
         }
+
         $query->chunkById(1000, function ($orderPackages) {
             //  LogService::log(OrderPackageReceivedSyncService::class, "同步快递信息定时方法", json_encode(data_get($orderPackages,'*.logistic_number')));
             $logisticNumbers = $this->buildData($orderPackages);

+ 7 - 5
app/Traits/LogisticSyncTrait.php

@@ -58,9 +58,9 @@ trait LogisticSyncTrait
             }
         } else {//复核过
             if (empty($transfer_status)) {//没有路由信息
-                /** @var Carbon $sent_at */
-                $sent_at = $orderPackage->sent_at;
-                if (now()->gt($sent_at->addDay()->startOfDay()->addHours(6))) {//当前时间大于复核时间的第二天6点
+                /** @var Carbon $temp_time */
+                $temp_time = $orderPackage->weighed_at?:$orderPackage->sent_at;//揽收异常以称重时间优先 没有称重以发出时间
+                if (now()->gt($temp_time->addDay()->startOfDay()->addHours(6))) {//当前时间大于复核时间的第二天6点
                     if (empty($orderPackage->weighed_at)) {//没有称重
                         $data['exception_status'] = '疑似库内丢件';
                     } else {//有称重
@@ -126,10 +126,12 @@ trait LogisticSyncTrait
                         $data['exception_status'] = '在途异常';
                     }
                 }
-                if (Str::contains($last_remark,['代收','快递柜'])) {
+                if (Str::contains($last_remark,['代收','快递柜','驿站','自提柜','丰巢','快递小屋','合作点','快递超市'])) {
                     $data['exception_status'] = '';
                     $data['status'] = '已签收';
-
+                }
+                if ($data['exception_status']??''==='在途异常'&& $data['status']== '派送中') {
+                    $data['exception_status'] = '派送异常';
                 }
             }
         }

+ 31 - 1
resources/views/package/logistic/index.blade.php

@@ -92,6 +92,17 @@
                         </button>
                     </span>
 
+                    <span class="ml-1">
+                        <select class="form-control-sm ml-2" v-model="batchExceptionStatus">
+                            <option v-for="(value,index) in exception_statuses" :value="value"
+                                    :name="value" :key="index">@{{ value }}
+                            </option>
+                        </select>
+                        <button @click="batchExceptionStatusUpdate()" type="button"
+                                class="btn btn-sm ml-2 btn-outline-danger">批量异常状态修改
+                        </button>
+                    </span>
+
                     <span class="ml-1">
                         <!-- Button trigger modal -->
                         <button
@@ -295,9 +306,11 @@
                     '延迟发货',
                     '疑似库内丢件',
                     '在途异常',
-                    '揽件异常'
+                    '揽件异常',
+                    '派送异常'
                 ],
                 batchStatus: null,
+                batchExceptionStatus: null,
                 remarkHover: null,
                 remark: null,
                 isShowRemarkInput: false,
@@ -443,6 +456,7 @@
                                 {name: '4', value: '疑似库内丢件'},
                                 {name: '5', value: '在途异常'},
                                 {name: '6', value: '揽件异常'},
+                                {name: '7', value: '派送异常'},
                             ]
                         },
 
@@ -524,6 +538,22 @@
                         location.reload();
                     })
                 },
+                batchExceptionStatusUpdate() {
+                    if(!confirm('是否却认操作')) return;
+                    let _this = this;
+                    if (checkData.length === 0) {
+                        tempTip.show('没有勾选记录');
+                        return
+                    }
+                    axios.put('{{url('package/logistic/batchUpdate')}}', {
+                        exceptionStatus: this.batchExceptionStatus,
+                        logistic_numbers: checkData
+                    }).then(() => {
+                        tempTip.setDuration(1000);
+                        tempTip.showSuccess('批量异常状态成功');
+                        location.reload();
+                    })
+                },
                 submitBenchRemark() {
                     let _this = this;
                     if (checkData.length === 0) {