Bladeren bron

包裹同步更 添加中转,揽收时间

yuang 4 jaren geleden
bovenliggende
commit
dfe944f15a

+ 5 - 0
app/Http/Controllers/KpiController.php

@@ -43,6 +43,11 @@ class KpiController extends Controller
 
     }
 
+    public function logisticsPunctuality()
+    {
+        return view('kpi.logisticsPunctuality.index');
+    }
+
     /**
      * @return Builder[]|Collection
      */

+ 2 - 2
app/OrderPackage.php

@@ -34,8 +34,8 @@ class OrderPackage extends Model
         'measuring_machine_id',
         'weighed_at',
         'status',
-        'sent_at',
-        'received_at',
+        'sent_at', //复核时间
+        'received_at',//签收时间
         'owner_id',
         'uploaded_to_wms',
         'sync_routes_flag',//同步物流信息标记

+ 5 - 0
app/OrderPackageExpressRoute.php

@@ -13,6 +13,11 @@ class OrderPackageExpressRoute extends Model
     protected $fillable = [
         'order_package_express_routes',
         'logistics_number',
+        'issue_time',
+        'check_time',
+        'pickup_time',
+        'transfer_time',
+        'receive_time',
     ];
 
     protected $casts = [

+ 31 - 4
app/Services/OrderPackageReceivedSyncService.php

@@ -9,11 +9,13 @@ use App\Jobs\LogisticSFSync;
 use App\Jobs\LogisticYDSync;
 use App\Jobs\LogisticYTOSync;
 use App\Jobs\LogisticZopSync;
+use App\Order;
 use App\OrderPackage;
 use App\OrderPackageExpressRoute;
 use Carbon\Carbon;
 use Exception;
 use Illuminate\Database\Eloquent\Collection;
+use Illuminate\Support\Facades\Log;
 use Illuminate\Support\Str;
 
 class OrderPackageReceivedSyncService
@@ -198,14 +200,39 @@ class OrderPackageReceivedSyncService
             /** @var OrderPackage $orderPackage */
             $orderPackage = OrderPackage::query()->where('logistic_number', $logisticResponse['logistic_number'])->first();
             if (isset($logisticResponse['transfer_status']) && isset($logisticResponse['logistic_number'])) {
+                $orderPackageExpressRouteArr = [
+                    'order_package_express_routes' => $logisticResponse['transfer_status'],
+                    'logistics_number' => $logisticResponse['logistic_number'],
+                ];
+                try {
+                    $issue_time = $orderPackage->order->created_at ?? null;
+                    $check_time = $orderPackage->sent_at ?? null;
+                    $pickup_time = $orderPackageExpressRouteArr['order_package_express_routes'][0]['accept_time'] ?? null;
+                    $array_filter = array_filter($orderPackageExpressRouteArr['order_package_express_routes'], function ($item) {
+                            return (str_contains($item['remark'], '已发出')//中通
+                                || str_contains($item['remark'], '转运')//中通
+                                || str_contains($item['remark'], '已发往')//中通
+                                || str_contains($item['remark'], '上海分拨交付中心')//韵达
+                            );
+                        }) ?? null;
+                    $transfer_time = null;
+                    if ($array_filter != null) {
+                        $transfer_time = $array_filter[array_key_first($array_filter)]['accept_time'] ?? null;
+                    }
+                    $receive_time = $logisticResponse['received_at'] ?? null;
+                    $orderPackageExpressRouteArr['issue_time'] = $issue_time;
+                    $orderPackageExpressRouteArr['check_time'] = $check_time;
+                    $orderPackageExpressRouteArr['pickup_time'] = $pickup_time;
+                    $orderPackageExpressRouteArr['transfer_time'] = $transfer_time;
+                    $orderPackageExpressRouteArr['receive_time'] = $receive_time;
+                } catch (Exception $e) {
+                    Log::error("快递同步异常", ["msg" => $e->getMessage(), "json" => $orderPackageExpressRouteArr]);
+                }
                 $orderPackageExpressRoute = OrderPackageExpressRoute::query()->updateOrCreate(
                     [
                         'logistics_number' => $logisticResponse['logistic_number'],
                     ],
-                    [
-                        'order_package_express_routes' => $logisticResponse['transfer_status'],
-                        'logistics_number' => $logisticResponse['logistic_number'],
-                    ]);
+                    $orderPackageExpressRouteArr);
                 $orderPackage->order_package_express_route_id = $orderPackageExpressRoute->id;
                 $orderPackage->save();
             }

+ 176 - 0
resources/views/kpi/logisticsPunctuality/index.blade.php

@@ -0,0 +1,176 @@
+@extends('layouts.app')
+@section('title')承运商时效表@endsection
+@section('content')
+    <div class="d-none" id="list">
+        <!--查询            -->
+        <div class="row m-3" style="background-color: #fff;">
+            <div class="form-group m-2" data-toggle="tooltip" data-placement="top" title="承运商">
+                <input v-model="search.logisticName" class="form-control" type="text" step="01">
+            </div>
+            <div class="form-group m-2" data-toggle="tooltip" data-placement="top" title="起始日期">
+                <input v-model="search.startTime" class="form-control" type="date" step="01">
+            </div>
+            <div class="form-group m-2" data-toggle="tooltip" data-placement="top" title="截止日期">
+                <input v-model="search.endTime" class="form-control" type="date" step="01">
+            </div>
+
+            <div class="form-group m-2">
+                <button class="form-control btn btn-sm btn-info" @click="searchData()">查询</button>
+            </div>
+
+            <div class="form-group m-2">
+                <button class="form-control btn btn-sm btn-success" @click="resetSearch()">重置</button>
+            </div>
+
+            <div class="form-group m-2">
+                <button class="form-control btn btn-sm btn-success" @click="downExcel()">导出EXCEL</button>
+            </div>
+        </div>
+
+        <!--            导出-->
+        <span class="dropdown"></span>
+        <!--            表格-->
+        <table class="table table-striped table-bordered table-hover text-nowrap waybill-table td-min-width-80"
+               style="background: #fff;" id="table">
+            <tr v-for="(item,i) in details.data" :key="i">
+                <td class="td-warm text-muted"><span>@{{ i+1 }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.logisticName }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.province }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.t1 }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.t2 }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.t3 }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.t4 }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.t5 }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.orderTotalAmount }}</span></td>
+                <td class="td-warm text-muted"><span>@{{ item.orderHaveRouteAmount }}</span></td>
+            </tr>
+        </table>
+    </div>
+
+
+@endsection
+
+@section('lastScript')
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版2--}}
+    <script>
+        let vue = new Vue({
+            el: "#list",
+            data: {
+                selectTr: null,
+                details: {
+                    data: [],
+                },
+                search: {
+                    startTime: null,
+                    endTime: null,
+                    logisticName: null,
+                },
+            },
+            created() {
+                let url = this.getBaseUrl();
+                url += '/api/report/logisticsPunctuality/list';
+
+                var day1 = new Date();
+                day1.setTime(day1.getTime() - 24 * 60 * 60 * 1000);
+                var s1 = day1.getFullYear() + "-" + ((day1.getMonth() + 1) >= 10 ? (day1.getMonth() + 1) : ('0' + (day1.getMonth() + 1))) + "-" + (day1.getDate() >= 10 ? day1.getDate() : ('0' + day1.getDate()));
+
+                //今天的时间
+                var day2 = new Date();
+                day2.setTime(day2.getTime());
+                var s2 = day2.getFullYear() + "-" + ((day2.getMonth() + 1) >= 10 ? (day2.getMonth() + 1) : ('0' + (day2.getMonth() + 1))) + "-" + (day2.getDate() >= 10 ? day2.getDate() : ('0' + day2.getDate()));
+                this.search.startTime = s1;
+                this.search.endTime = s2;
+                let search = Object.assign({}, this.search);
+                search.startTime += ' 00:00:00';
+                search.endTime += ' 23:59:59';
+
+                axios.post(url, search).then(res => {
+                    this.details.data = res.data.data;
+                });
+            },
+            mounted: function () {
+                $('#list').removeClass('d-none');
+                let column = [
+                    {name: 'logisticName', value: '承运商'},
+                    {name: 'province', value: '省份'},
+                    {name: 't1', value: '推单-出库(库内)'},
+                    {name: 't2', value: '出库-揽收(月台)'},
+                    {name: 't3', value: '揽收-中转(站点)'},
+                    {name: 't4', value: '中转-签收(途中)'},
+                    {name: 't5', value: ' 推单-签收(全部)'},
+                    {name: 'case6Amount', value: '总单量'},
+                    {name: 'case7Amount', value: '总有路由信息单量'},
+
+                ];
+                new Header({
+                    el: "table",
+                    name: "details",
+                    column: column,
+                    data: this.details.data,
+                    restorationColumn: 'addtime',
+                    fixedTop: ($('#form_div').height()) + ($('#btn').height()) + 1,
+                }).init();
+            },
+            methods: {
+                resetSearch() {
+                    this.search = {
+                        startTime: null,
+                        endTime: null,
+                        customerName: null,
+                    };
+                },
+                searchData() {
+                    this.pagination();
+                },
+                //根据环境获取不同的url
+                getBaseUrl() {
+                    let url = null;
+                    let env = "{{ config('app.env') }}";
+                    if (env === 'local') {
+                        url = 'http://127.0.0.1:8111'
+                    } else if (env === 'production') {
+                        url = 'https://stat.baoshi56.com'
+                    }
+                    return url;
+                },
+                pagination(flag) {
+                    let url = this.getBaseUrl();
+                    url += '/api/report/logisticsPunctuality/list';
+                    let search = Object.assign({}, this.search);
+                    search.startTime += ' 00:00:00';
+                    search.endTime += ' 23:59:59';
+                    axios.post(url, search).then(res => {
+                        if (res.data.data === undefined) {
+                            this.details.data = [];
+                        } else {
+                            this.details.data = res.data.data;
+                        }
+                    });
+                },
+                downExcel() {
+                    let url = this.getBaseUrl();
+                    url += '/api/report/scanInfo/export';
+                    let search = this.getSearch();
+                    axios.post(url, search).then(res => {
+                        if (res.data.code === 200) {
+                            let filename = res.data.data;
+                            let downUrl = this.getBaseUrl() + '/api/report/scanInfo/export/' + filename;
+                            let link = document.createElement('a');
+                            link.style.display = 'none';
+                            link.href = downUrl;
+                            link.download = `${filename}.xlsx`;
+                            document.body.appendChild(link);
+                            link.click();
+                            document.body.removeChild(link);
+                            tempTip.showSuccess('导出成功!');
+                        } else {
+                            tempTip.setDuration(3000);
+                            tempTip.show(res.data.data);
+                        }
+                    })
+                }
+            },
+
+        });
+    </script>
+@endsection

+ 4 - 1
resources/views/kpi/ownerPcsReport/index.blade.php

@@ -130,7 +130,10 @@
                 pagination(flag) {
                     let url = this.getBaseUrl();
                     url += '/api/report/customerOrderQty/listGrouped';
-                    axios.post(url, this.search).then(res => {
+                    let search = Object.assign({}, this.search);
+                    search.startTime += ' 00:00:00';
+                    search.endTime += ' 00:00:00';
+                    axios.post(url, search).then(res => {
                         if (res.data.data === undefined) {
                             this.details.data = [];
                         } else {

+ 3 - 1
routes/web.php

@@ -1186,6 +1186,8 @@ Route::group(['middleware' => 'auth'], function ($route) {
         Route::get('dayDetailCustomer', 'KpiController@dayDetailCustomer');
         Route::resource('workCoefficient', 'WorkCoefficientController')->only(['index', 'create', 'update']);
         Route::get('workCoefficientDayStat', 'KpiController@workCoefficientDayStatIndex');
-   });
+        Route::get('ownerPcsReport', 'KpiController@ownerPcsReport');
+        Route::get('logisticsPunctuality', 'KpiController@logisticsPunctuality');
+    });
 });