소스 검색

Merge branch 'yang'

# Conflicts:
#	app/Http/Controllers/TestController.php
zhouzhendong 4 년 전
부모
커밋
b93ced6470

+ 8 - 4
app/Filters/OrderPackageFilters.php

@@ -53,7 +53,9 @@ class OrderPackageFilters
     public function apply($builder)
     {
         $this->queryBuilder = $builder;
-        $filters = array_filter($this->request->only($this->filters));
+        $filters = array_filter($this->request->only($this->filters),function($item){
+            return $item !== null;
+        });
         foreach ($filters as $filter => $value) {
             if (method_exists($this, $filter)) {
                 $this->$filter($value, $this->queryBuilder);
@@ -85,17 +87,19 @@ class OrderPackageFilters
     private function has_transfer_status($has_transfer_status)
     {
         if ($has_transfer_status == '是') {
-            $this->queryBuilder->whereNotNull('transfer_status')->where('transfer_status', '!=', []);
+            $this->queryBuilder->whereNotNull('transfer_status');
         } elseif ($has_transfer_status == '否') {
             $this->queryBuilder->where(function ($query) {
-                $query->whereNull('transfer_status')->orwhere('transfer_status', []);
+                $query->whereNull('transfer_status');
             });
         }
     }
 
     private function status($status)
     {
-        $statuses = array_filter(preg_split('/[,, ]+/is', $status));
+        $statuses = array_filter(preg_split('/[,, ]+/is', $status),function($item){
+            return $item !== null;
+        });
         $this->queryBuilder->whereIn('status', $statuses);
     }
 

+ 9 - 4
app/Http/Controllers/PackageLogisticController.php

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

+ 47 - 92
app/Http/Controllers/TestController.php

@@ -45,15 +45,16 @@ use App\Services\BatchService;
 use App\Services\CacheShelfService;
 use App\Services\ForeignHaiRoboticsService;
 use App\Services\OrderPackageReceivedSyncService;
+use App\Services\OrderPackageService;
 use App\Services\OrderService;
 use App\Services\OwnerFeeTotalService;
 use App\Services\OwnerLogisticFeeReportService;
 use App\Services\OwnerPriceOperationService;
 use App\Services\OwnerStoreFeeReportService;
 use App\Services\OwnerStoreOutFeeReportService;
+use App\Services\ReviewService;
 use App\Services\StationService;
 use App\Services\StorageService;
-use App\Services\StoreService;
 use App\Station;
 use App\StationTask;
 use App\StationTaskMaterialBox;
@@ -104,73 +105,10 @@ class TestController extends Controller
         return call_user_func([$this, $method], $request);
     }
 
-    private function valFormat($val):?string
+    public function test()
     {
-        if ($val!==null){
-            $ret = date("Y-m-d H:i:s",strtotime($val))===(string)$val;
-            if ($ret)$val = "to_date('".$val."','yyyy-mm-dd hh24:mi:ss')";
-            else $val = "'".$val."'";
-        }else $val = "null";
-        return $val;
-    }
 
-    public function test1($task,$amount){
-        DB::connection("oracle")->beginTransaction();
-        try {
-            $columns = '';
-            $values = '';
-            foreach ($task as $key => $val) {
-                if (Str::upper($key) == 'TASKID_SEQUENCE') {
-                    $taskMax = DB::connection("oracle")->selectOne(DB::raw("select MAX(TASKID_SEQUENCE) maxseq from TSK_TASKLISTS where taskid = ?"), [$task->taskid]);
-                    $val = $taskMax->maxseq + 1;
-                }
-                if (Str::upper($key) == 'FMQTY' || Str::upper($key) == 'FMQTY_EACH'
-                    || Str::upper($key) == 'PLANTOQTY' || Str::upper($key) == 'PLANTOQTY_EACH') {
-                    $val -= $amount;
-                    $task->$key = $amount;
-                }
-                $columns .= $key . ",";
-                $values .= $this->valFormat($val) . ",";
-            }
-            $columns = mb_substr($columns, 0, -1);
-            $values = mb_substr($values, 0, -1);
-            $sql = <<<sql
-    INSERT INTO TSK_TASKLISTS({$columns}) VALUES({$values})
-sql;
-            dd($sql);
-        } catch (\Exception $e) {
-            dd($e);
-        }
-    }
 
-    public function test()
-    {
-        $a = "2021-09-13 00:00:00";
-        dd(mb_substr($a,0,10));
-        $models = app("MaterialBoxModelService")->getModelSortedByOwner(null);
-        foreach ($models as $model){
-            $box = app("MaterialBoxService")->getAnEmptyBox($model,[],2);
-            dd($box);
-            if ($box)return $box;
-        }
-        dd();
-        TaskTransaction::query()->where("id",">=",280)->delete();
-        /*$a= new StorageService();
-        $a->clearTask(["HAIB1-01-01"]);
-        $task = StationTaskMaterialBox::query()->find(90233);
-        $station = Station::query()->find(11);
-        $foreignHaiRoboticsService = new ForeignHaiRoboticsService();
-        $foreignHaiRoboticsService->putBinToStore_fromCacheShelf($task, $station);
-        dd(1);*/
-        /*$batchService = new BatchService();
-        $batches = Batch::query()->where("id",171829)->get();
-        $batchService->assignTasks($batches);
-        dd();*/
-        /*TaskTransaction::query()->where("id",">=",277)->delete();
-        StationTaskMaterialBox::query()->whereIn("id",[89685,89686,89687])->delete();
-        app("CacheShelfService")->_stationCacheLightOff("HAIB1-01-01");//灭灯
-        app("CacheShelfService")->_stationCacheLightOff("HAIB1-02-01");//灭灯
-        dd(1);*/
         Station::query()->where("station_type_id", 5)->update(["status" => 1]);
         Cache::forget("CACHE_SHELF_AVAILABLE");
         $station = ["HAIB1-01-01", "HAIB1-02-01"];
@@ -365,25 +303,26 @@ sql;
             ]);
     }
 
-    public function syncOrderPackage(){
-        ini_set('memory_limit','500M');
+    public function syncOrderPackage()
+    {
+        ini_set('memory_limit', '500M');
         ini_set('max_execution_time', 0);
         $orderPackingSummary = OracleDocOrderPackingSummary::query()
-            ->where('editTime','>=','2021-09-11 12:00:00')
-            ->where('editTime','<=','2021-09-12 12:40:00')
+            ->where('editTime', '>=', '2021-09-11 12:00:00')
+            ->where('editTime', '<=', '2021-09-12 12:40:00')
             ->get();
 
         $orderPackingSummary_chunk = $orderPackingSummary->chunk(200);
         foreach ($orderPackingSummary_chunk as $orderPackingSummarys) {
             foreach ($orderPackingSummarys as $orderPackingSummary) {
-                $orderPackage = OrderPackage::query()->where('logistic_number',$orderPackingSummary->traceid)->first();
+                $orderPackage = OrderPackage::query()->where('logistic_number', $orderPackingSummary->traceid)->first();
                 $orderPackage->update([
-                    'uploaded_to_wms'=> true,
-                    'weight'=>$orderPackingSummary->grossweight,
-                    'length'=>$orderPackingSummary->length,
-                    'width'=>$orderPackingSummary->width,
-                    'height'=>$orderPackingSummary->height,
-                    'weighed_at'=>$orderPackingSummary->edittime
+                    'uploaded_to_wms' => true,
+                    'weight' => $orderPackingSummary->grossweight,
+                    'length' => $orderPackingSummary->length,
+                    'width' => $orderPackingSummary->width,
+                    'height' => $orderPackingSummary->height,
+                    'weighed_at' => $orderPackingSummary->edittime
                 ]);
                 dispatch(new WeightUpdateInstantBill($orderPackage));
             }
@@ -391,22 +330,38 @@ sql;
         return ['success' => true];
     }
 
-    public function testChangeLabor()
+    public function collectUpload()
     {
-        $laborReports=LaborReport::query()
-            ->where('created_at','like','2021-09-13%')
-            ->where('user_workgroup_id',4)
-            ->where('online_duration','>',13)
-            ->get();
-        foreach ($laborReports as $laborReport){
-          LaborReport::query()->find($laborReport->id)
-              ->update([
-                  'online_duration'=>round(Carbon::parse($laborReport->check_out_at)->diffInSeconds(Carbon::parse($laborReport->check_in_at))/3600,2),
-                  'working_duration'=>(round(Carbon::parse($laborReport->check_out_at)->diffInSeconds(Carbon::parse($laborReport->check_in_at))/3600,2)-1),
-              ]);
-          LaborReportStatus::query()->where('labor_report_id',$laborReport->id)
-              ->where('status','已退场')
-              ->update(['created_at'=>$laborReport->check_out_at]);
-        }
+        /** @var OrderPackageService $service */
+        $service = app('OrderPackageService');
+        return $service->collectUpload([
+            '75803656098638',
+            '75803656098612'
+        ]);
+    }
+
+    public function init_在途异常()
+    {
+        $logistic_numbers = OrderPackage::query()
+            ->select('logistic_number')
+            ->where('exception_status', 5)
+            ->where('created_at', '>=', now()->subDays(20)->toDateTimeString())
+            ->pluck('logistic_number');
+        /** @var OrderPackageReceivedSyncService $service */
+        $service = app('OrderPackageReceivedSyncService');
+        $service->syncLogisticRoute(false, $logistic_numbers);
+
+
+//        $logistic_numbers = OrderPackage::query()
+//            ->select(['logistic_number', 'order_id', 'id'])
+//            ->whereIn('order_id', function ($query) {
+//                $query->from('orders')->selectRaw('id')->whereIn('logistic_id', function ($builder) {
+//                    $builder->from('logistics')->selectRaw('id')->where('type', '=', '快递')->whereNotIn('belong_company', ['顺丰', '中通', '韵达', '圆通', '京东']);
+//                });
+//            })
+//            ->where('exception_status', 5)
+//            ->where('created_at', '>=', now()->subDays(20)->toDateTimeString())
+//            ->pluck('logistic_number');
+//        $service->syncLogisticRouteByAliJiSu($logistic_numbers);
     }
 }

+ 12 - 171
app/Services/OrderPackageReceivedSyncService.php

@@ -215,9 +215,21 @@ class OrderPackageReceivedSyncService
             if (Str::contains($orderPackage->logistic_number, ['SO', '#', '-'])) {
                 $logisticResponse['exception_status'] = '单号异常';
             }
+            if (((!isset($logisticResponse['status'])) || ($logisticResponse['status'] === '')) && $orderPackage->status === '') {
+                $logisticResponse['status'] = '生成订单';
+
+                if (!empty($orderPackage->sent_at)) {
+                    $logisticResponse['status'] = '已复核';
+                }
+                if (!empty($orderPackage->weighed_at)) {
+                    $logisticResponse['status'] = '已称重';
+                }
+            }
+
             if (isset($logisticResponse['exception_status'])) $logisticResponse['exception_status'] = OrderPackage::switchExceptionStatus($logisticResponse['exception_status']);
             if (isset($logisticResponse['status'])) $logisticResponse['status'] = OrderPackage::switchStatus($logisticResponse['status']);
             if (isset($logisticResponse['routes_length'])) unset($logisticResponse['routes_length']);
+            if(empty($logisticResponse['transfer_status'])) unset($logisticResponse['transfer_status']);
             OrderPackage::query()->where('logistic_number', $logisticResponse['logistic_number'])
                 ->update($logisticResponse);
         }
@@ -247,175 +259,4 @@ class OrderPackageReceivedSyncService
         }
         return $data;
     }
-
-
-    /**
-     * @param array $data
-     * @param $lastRouteDate
-     * @return array
-     */
-    public function setExceptionType(array $data, $lastRouteDate): array
-    {
-        //设置默认异常为否
-
-        $data['exception_type'] = '无';
-        $data['exception'] = '否';
-        $logistic_number = $data['logistic_number'];
-        /** @var OrderPackage $orderPackage */
-        $orderPackage = OrderPackage::query()->with('order')->where('logistic_number', $logistic_number)->first();
-        $delivered_duration = now()->diffInHours(Carbon::parse($orderPackage['sent_at']));
-        $last_routed_duration = now()->diffInHours(Carbon::parse($lastRouteDate));
-        $VALID_HOURS = 4;
-        $SHORT_RESPONSE_HOURS = (function ($province) {
-            switch ($province) {
-                case '浙江省':
-                case '江苏省':
-                case '上海':
-                case '安徽省':
-                    return 24;
-                case '北京':
-                case '天津':
-                case '江西省':
-                case '湖北省':
-                case '湖南省':
-                case '广东省':
-                case '福建省':
-                case '山东省':
-                case '河北省':
-                case '河南省':
-                case '山西省':
-                case '四川省':
-                case '陕西省':
-                case '重庆':
-                case '广西壮族自治区':
-                case '贵州省':
-                case '云南省':
-                case '海南省':
-                case '吉林省':
-                case '黑龙江省':
-                case '辽宁省':
-                    return 72;
-                case '青海省':
-                case '宁夏回族自治区':
-                case '甘肃省':
-                case '内蒙古自治区':
-                case '新疆维吾尔自治区':
-                case '西藏自治区':
-                    return 120;
-                default:
-                    return 24;
-            }
-        })($orderPackage->order->province);
-        $LONG_RESPONSE_HOURS = (function ($province) {
-            switch ($province) {
-                case '浙江省':
-                case '江苏省':
-                case '上海':
-                case '安徽省':
-                    return 72;
-                case '北京':
-                case '天津':
-                case '江西省':
-                case '湖北省':
-                case '湖南省':
-                case '广东省':
-                case '福建省':
-                case '山东省':
-                case '河北省':
-                case '河南省':
-                case '山西省':
-                case '四川省':
-                case '陕西省':
-                case '重庆':
-                case '广西壮族自治区':
-                case '贵州省':
-                case '云南省':
-                case '海南省':
-                case '吉林省':
-                case '黑龙江省':
-                case '辽宁省':
-                    return 120;
-                case '青海省':
-                case '宁夏回族自治区':
-                case '甘肃省':
-                case '内蒙古自治区':
-                case '新疆维吾尔自治区':
-                case '西藏自治区':
-                    return 168;
-                default:
-                    return 72;
-            }
-        })($orderPackage->order->province);
-        $SENDING_RESPONSE_HOURS = 48;
-        $HAVEN_SECOND_GOT_HOURS = 24;
-        $IS_ROUTED = 1;               //0000 0001 有路由信息
-        $IS_IN_VALID_TIME = 2;        //0000 0010 大于4小时
-        $IS_WEIGHED = 4;              //0000 0100 称重过
-        $IS_RECEIVED = 8;          //0000 1000 已经收货
-        $IS_SENDING = 16;             //0001 0000 正在派送
-        $IS_SHORT_NO_RESPONSE = 32;     //0010 0000 中转异常
-        $IS_LONG_NO_RESPONSE = 64;     //0010 0000 疑似丢件
-        $IS_SENDING_NO_RESPONSE = 128;     //0010 0000 派送异常
-        $IS_SECOND_ROUTE_HAVE = 256;     //0100 0000 揽件异常
-        $conclusion = (function () use (
-            $data, $delivered_duration, $last_routed_duration,
-            $VALID_HOURS, $IS_ROUTED, $IS_IN_VALID_TIME, $IS_WEIGHED, $IS_RECEIVED, $IS_SENDING, $IS_SHORT_NO_RESPONSE, $IS_LONG_NO_RESPONSE, $IS_SENDING_NO_RESPONSE,
-            $SHORT_RESPONSE_HOURS, $LONG_RESPONSE_HOURS, $SENDING_RESPONSE_HOURS, $HAVEN_SECOND_GOT_HOURS, $IS_SECOND_ROUTE_HAVE,
-            $orderPackage
-        ) {
-            $conclusion = 0;
-            $conclusion |= !empty($data['transfer_status']) ? $IS_ROUTED : 0;
-            $conclusion |= ($delivered_duration > $VALID_HOURS) ? $IS_IN_VALID_TIME : 0;
-            $conclusion |= ($orderPackage->weighed_at) ? $IS_WEIGHED : 0;
-            $conclusion |= ($data['status'] == '已签收') ? $IS_RECEIVED : 0;
-            $conclusion |= ($data['status'] == '派送中') ? $IS_SENDING : 0;//
-            $conclusion |= ($last_routed_duration > $SHORT_RESPONSE_HOURS && $last_routed_duration < $LONG_RESPONSE_HOURS) ? $IS_SHORT_NO_RESPONSE : 0;
-            $conclusion |= ($last_routed_duration > $LONG_RESPONSE_HOURS) ? $IS_LONG_NO_RESPONSE : 0;
-            $conclusion |= ($last_routed_duration > $SENDING_RESPONSE_HOURS && $data['status'] == '派送中') ? $IS_SENDING_NO_RESPONSE : 0;
-            $conclusion |= ($delivered_duration > $HAVEN_SECOND_GOT_HOURS && $data['routes_length'] < 3) ? $IS_SECOND_ROUTE_HAVE : 0;//和出库时间比较 超过指定时间,路由信息小于三条
-            return $conclusion;
-        })();
-        switch ($conclusion) {
-            case $IS_IN_VALID_TIME:
-                $data['exception_type'] = '疑似库内丢件';
-                break;
-            case $IS_IN_VALID_TIME | $IS_WEIGHED:
-                $data['exception_type'] = '揽件异常';
-                break;
-            case $IS_ROUTED | $IS_IN_VALID_TIME | $IS_SHORT_NO_RESPONSE:
-            case $IS_ROUTED | $IS_IN_VALID_TIME | $IS_SHORT_NO_RESPONSE | $IS_WEIGHED:
-                $data['exception_type'] = '中转异常';
-                break;
-            case $IS_ROUTED | $IS_IN_VALID_TIME | $IS_LONG_NO_RESPONSE:
-            case $IS_ROUTED | $IS_IN_VALID_TIME | $IS_LONG_NO_RESPONSE | $IS_WEIGHED:
-                $data['exception_type'] = '疑似丢件';
-                break;
-            default:
-                break;
-        }
-        if ($conclusion
-            == ($conclusion | $IS_ROUTED | $IS_IN_VALID_TIME | $IS_SENDING | $IS_SENDING_NO_RESPONSE)) {
-            $data['exception_type'] = '派件异常';
-        }
-        if ($conclusion
-            == ($conclusion | $IS_SECOND_ROUTE_HAVE)) {
-            $data['exception_type'] = '揽件异常';
-            $data['exception'] = '是';
-
-        }
-        switch ($conclusion) {
-            case $IS_IN_VALID_TIME:
-            case $IS_IN_VALID_TIME | $IS_WEIGHED:
-            case $IS_ROUTED | $IS_SHORT_NO_RESPONSE:
-            case $IS_LONG_NO_RESPONSE:
-                $data['exception'] = '是';
-                break;
-            default:
-                break;
-        }
-        return [
-            'exception_type' => array_key_exists('exception_type', $data) ? $data['exception_type'] : null,
-            'exception' => array_key_exists('exception', $data) ? $data['exception'] : null,
-        ];
-    }
 }

+ 5 - 7
app/Traits/LogisticSyncTrait.php

@@ -59,7 +59,7 @@ trait LogisticSyncTrait
         } else {//复核过
             if (empty($transfer_status)) {//没有路由信息
                 /** @var Carbon $temp_time */
-                $temp_time = $orderPackage->weighed_at?:$orderPackage->sent_at;//揽收异常以称重时间优先 没有称重以发出时间
+                $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'] = '疑似库内丢件';
@@ -74,10 +74,9 @@ trait LogisticSyncTrait
                     }
                     return ($a['accept_time'] > $b['accept_time']) ? -1 : 1;
                 });
-
                 $last_transfer = $transfer_status[0]['accept_time'];
-                $last_remark = empty(!$transfer_status[0]['remark'])?:$transfer_status[0]['accept_address'];
-                if (count($transfer_status) <= 3) {//三条以内的不管地区 时间限制为24h
+                $last_remark = empty(!$transfer_status[0]['remark']) ? $transfer_status[0]['remark'] : $transfer_status[0]['accept_address'];
+                if (count($transfer_status) < 3) {//三条以内的不管地区 时间限制为24h
                     if (Carbon::parse($last_transfer)->diffInHours(now()) > 24) {
                         $data['exception_status'] = '在途异常';
                     }
@@ -126,11 +125,10 @@ trait LogisticSyncTrait
                         $data['exception_status'] = '在途异常';
                     }
                 }
-
-                if ($data['exception_status']??''==='在途异常'&& $data['status']== '派送中') {
+                if (($data['exception_status'] ?? '' === '在途异常') && ($data['status'] ?? '' === '派送中')) {//在途异常修正为派送异常
                     $data['exception_status'] = '派送异常';
                 }
-                if (Str::contains($last_remark,['代收','快递柜','驿站','自提柜','丰巢','快递小屋','合作点','快递超市','签收'])) {
+                if (Str::contains($last_remark, ['代收', '快递柜', '驿站', '自提柜', '丰巢', '快递小屋', '合作点', '快递超市', '签收'])) {
                     $data['exception_status'] = '';
                     $data['status'] = '已签收';
                 }

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

@@ -224,7 +224,7 @@
                                 v-for="log in package.order.issue.logs">@{{ log.content }}<br></span></span></td>
                     <td class="text-overflow-warp-200"><span
                             v-if="package.order && package.order.issue && package.order.issue.logs.length >0"><span
-                                v-for="log in package.order.issue.logs">@{{ log.user.name }}<br></span></span></td>
+                                v-for="log in package.order.issue.logs">@{{ log && log.user && log.user.name }}<br></span></span></td>
                     <td class="text-overflow-warp-200"><span
                             v-if="package.order && package.order.issue && package.order.issue.logs.length >0"><span
                                 v-for="log in package.order.issue.logs">@{{ log.created_at }}<br></span></span></td>
@@ -347,6 +347,7 @@
                             tip: ['输入关键词快速定位下拉列表,回车确定', '选择要显示的状态'],
                             placeholder: ['状态','定位或多选状态'],
                             data: [
+                                {name: '0', value: '空'},
                                 {name: '1', value: '生成订单'},
                                 {name: '2', value: '已复核'},
                                 {name: '3', value: '已称重'},

+ 1 - 2
tests/Feature/LogisticZopSyncTest.php

@@ -26,7 +26,6 @@ class LogisticZopSyncTest extends TestCase
     protected function setUp(): void
     {
         parent::setUp(); // TODO: Change the autogenerated stub
-        OrderPackage::query()->where('logistic_number', '000000111')->delete();
     }
 
 
@@ -39,7 +38,7 @@ class LogisticZopSyncTest extends TestCase
 
     public function test_get()
     {
-        LogisticZopSync::dispatch('75502471791896');
+        LogisticZopSync::dispatch('75806876414856');
     }