Pārlūkot izejas kodu

订单量趋势 快递分布查询添加缓存与页面布局调整

ANG YU 5 gadi atpakaļ
vecāks
revīzija
25f7b241b8

+ 10 - 0
app/Http/Controllers/ControlPanelController.php

@@ -41,6 +41,7 @@ class ControlPanelController extends Controller
         $orderCountingRecords = $orderCountingRecordService->orderCountingRecords($start, $end, $unit);
         return compact('orderCountingRecords');
     }
+
     public function logisticsCountingRecordsApi(Request $request)
     {
         $orderCountingRecordService = app(OrderCountingRecordService::class);
@@ -49,4 +50,13 @@ class ControlPanelController extends Controller
         $logisticsCountingRecords = $orderCountingRecordService->logisticsCountingRecords($start, $end);
         return compact('logisticsCountingRecords');
     }
+
+    public function warehouseCountingRecordsApi(Request $request)
+    {
+        $orderCountingRecordService = app(OrderCountingRecordService::class);
+        $start = $request->start;
+        $end = $request->end;
+        $warehouseCountingRecords = $orderCountingRecordService->warehouseCountingRecords($start, $end);
+        return compact('warehouseCountingRecords');
+    }
 }

+ 81 - 57
app/Services/OrderCountingRecordService.php

@@ -11,6 +11,7 @@ use App\Warehouse;
 use Carbon\Carbon;
 use DateTime;
 use Illuminate\Database\Eloquent\Collection;
+use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Cache;
 use App\User;
 use Illuminate\Support\Str;
@@ -45,24 +46,27 @@ class OrderCountingRecordService
         return $resultByCache['resultOrders'];
     }
 
-    public function orderCountingRecords($start, $end, $unit = '日')
+    public function orderCountingRecords($start, $end, $ownerIds = null, $unit = '日', $user = null)
     {
-        $orders = $this->get($start, $end, null, $unit, null);
-        $dataList = collect();
-        $orders->groupBy('date_target')->each(function ($items) use (&$dataList, $unit) {
-            $counter = $items->reduce(function ($sum, $item) {
-                return $sum + $item->amount;
-            }, 0);
-            $date_target = $items[0]->date_target;
-            if ($unit == '周') {
-                $date_target = (new DateTime())->setISODate(Str::of($date_target)->explode('-')[0], Str::of($date_target)->explode('-')[1])->format('yy-m-d');
-            }
-            $dataList->push([
-                'counter' => $counter,
-                'date_target' => $date_target,
-            ]);
+        $key = 'orderCountingRecords_' . $start . '_' . $end . '_' . $unit . '_' . Auth::user()->id;
+        return Cache::remember($key, 600, function () use ($start, $end, $unit, $ownerIds, $user) {
+            $orders = $this->get($start, $end, null, $unit, null);
+            $dataList = collect();
+            $orders->groupBy('date_target')->each(function ($items) use (&$dataList, $unit) {
+                $counter = $items->reduce(function ($sum, $item) {
+                    return $sum + $item->amount;
+                }, 0);
+                $date_target = $items[0]->date_target;
+                if ($unit == '周') {
+                    $date_target = (new DateTime())->setISODate(Str::of($date_target)->explode('-')[0], Str::of($date_target)->explode('-')[1])->format('yy-m-d');
+                }
+                $dataList->push([
+                    'counter' => $counter,
+                    'date_target' => $date_target,
+                ]);
+            });
+            return $dataList->sortBy("date_target");
         });
-        return $dataList->sortBy("date_target");
     }
 
     /**
@@ -74,51 +78,71 @@ class OrderCountingRecordService
      */
     public function logisticsCountingRecords($start, $end, $ownerIds = null, $user = null)
     {
-        $dataList = collect();
-        $resultOrders = $this->get($start, $end, $ownerIds, '日', $user);
-        $resultOrders->groupBy('logistic_id')->each(function ($item) use (&$dataList) {
-            $counter = $item->reduce(function ($sum, $item) {
-                return $sum + $item->amount;
-            }, 0);
-            $dataList->push([
-                'value' => $counter,
-                'logistic_id' => $item[0]->logistic_id,
-            ]);
-        });
-        $map = [];
-        $logistics =  Logistic::query()->whereIn('id',data_get($dataList,'*.logistic_id'))->get();
-        $logistics->each(function($logistic)use(&$map){
-            $map[$logistic->id] = $logistic;
-        });
-        return $dataList->map(function (&$item)use($map){
-            $logistic = $map[$item['logistic_id']] ?? '';
-            $item['name'] = $logistic->name ??'';
-            return $item;
+        $key = 'logisticsCountingRecords_' . $start . '_' . $end . '_' . Auth::user()->id;
+        return Cache::remember($key, 600, function () use ($start, $end, $ownerIds, $user) {
+            $dataList = collect();
+            $resultOrders = $this->get($start, $end, $ownerIds, '日', $user);
+            $resultOrders->groupBy('logistic_id')->each(function ($item) use (&$dataList) {
+                $counter = $item->reduce(function ($sum, $item) {
+                    return $sum + $item->amount;
+                }, 0);
+                $dataList->push([
+                    'value' => $counter,
+                    'logistic_id' => $item[0]->logistic_id,
+                ]);
+            });
+            $map = [];
+            $logistics = Logistic::query()->whereIn('id', data_get($dataList, '*.logistic_id'))->get();
+            $logistics->each(function ($logistic) use (&$map) {
+                $map[$logistic->id] = $logistic;
+            });
+            return $dataList->map(function (&$item) use ($map) {
+                $logistic = $map[$item['logistic_id']] ?? '';
+                $item['name'] = $logistic->name ?? '';
+                return $item;
+            });
         });
     }
 
     public function warehouseCountingRecords($start, $end, $ownerIds = null, $user = null)
     {
-        $dataList = collect();
-        $resultOrders = $this->get($start, $end, $ownerIds, '日', $user);
-        $resultOrders->groupBy('warehouse_id')->each(function ($item) use (&$dataList) {
-            $counter = $item->reduce(function ($sum, $item) {
-                return $sum + $item->amount;
-            }, 0);
-            $dataList->push([
-                'value' => $counter,
-                'warehouse_id' => $item[0]->warehouse_id,
-            ]);
-        });
-        $map = [];
-        $logistics =  Warehouse::query()->whereIn('id',data_get($dataList,'*.warehouse_id'))->get();
-        $logistics->each(function($warehouse)use(&$map){
-            $map[$warehouse->id] = $warehouse;
-        });
-        return $dataList->map(function (&$item)use($map){
-            $warehouse = $map[$item['warehouse_id']] ?? '';
-            $item['name'] = $warehouse->name ??'';
-            return $item;
+        $key = 'warehouseCountingRecords_' . $start . '_' . $end . '_' . Auth::user()->id;
+        return Cache::remember($key, 600, function () use ($start, $end, $ownerIds, $user) {
+            $dataList = collect();
+            $resultOrders = $this->get($start, $end, $ownerIds, '日', $user);
+            $resultOrders->groupBy('warehouse_id')->each(function ($item) use (&$dataList) {
+                $counter = $item->reduce(function ($sum, $item) {
+                    return $sum + $item->amount;
+                }, 0);
+                $dataList->push([
+                    'value' => $counter,
+                    'warehouse_id' => $item[0]->warehouse_id,
+                ]);
+            });
+            $map = [];
+            $logistics = Warehouse::query()->whereIn('id', data_get($dataList, '*.warehouse_id'))->get();
+            $logistics->each(function ($warehouse) use (&$map) {
+                $map[$warehouse->id] = $warehouse;
+            });
+            return $dataList->map(function (&$item) use ($map) {
+                $warehouse = $map[$item['warehouse_id']] ?? '';
+                $item['code'] = $warehouse->name ?? '';
+                switch ($item['code']) {
+                    case 'WH01':
+                        $item['name'] = '松江一仓';
+                        break;
+                    case 'WH02':
+                        $item['name'] = '松江二仓';
+                        break;
+                    case 'WH03':
+                        $item['name'] = '嘉定一仓';
+                        break;
+                    default:
+                        $item['name'] = '仓库为空';
+                        break;
+                }
+                return $item;
+            });
         });
     }
 
@@ -264,7 +288,7 @@ class OrderCountingRecordService
         }
         return Cache::remember(
             'PermittingOwnerIds' . '_' . auth()->user()->id . '_' . implode('_', $ownerIds),
-            config('cache.rarelyChange'), function () use ($ownerIds, $permittingOwnerIds) {
+            600, function () use ($ownerIds, $permittingOwnerIds) {
             /** @var User $user */
             return array_intersect($ownerIds, $permittingOwnerIds);
         });

+ 76 - 13
resources/views/control/panel.blade.php

@@ -111,7 +111,33 @@
                         </div>
                     </div>
                     <div class="col-6">
-
+                        <div class="card">
+                            <div class="card-header">
+                                <div class="col-5 row">
+                                    <div class="block">
+                                        <span class="demonstration"></span>
+                                        <el-date-picker
+                                            v-model="warehouseCountingRecordsData"
+                                            type="daterange"
+                                            align="right"
+                                            unlink-panels
+                                            range-separator="-"
+                                            start-placeholder="开始日期"
+                                            end-placeholder="结束日期"
+                                            value-format="yyyy-MM-dd"
+                                            :picker-options="pickerOptions">
+                                        </el-date-picker>
+                                        <el-button type="primary" icon="el-icon-search"
+                                                   @click="warehouseCountingRecordsApi()">搜索
+                                        </el-button>
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="card-body row">
+                                <div id="warehouseCountingRecords" class="col"
+                                     style="width: 600px;height:600px;"></div>
+                            </div>
+                        </div>
                     </div>
                 </div>
             </div>
@@ -133,6 +159,7 @@
                 warehousesOrders:{!! $warehousesOrders !!},
                 orderCountingRecords:{!! $orderCountingRecords !!},
                 logisticsCountingRecords:{!! $logisticsCountingRecords !!},
+                warehouseCountingRecords:{!! $warehouseCountingRecords !!},
                 warehouses: {},
                 totalOrders: {
                     total: null,
@@ -171,12 +198,12 @@
                         }
                     }]
                 },
-                orderCountingRecordsDate: [
-                    moment(new Date(new Date().getTime() - 3600 * 1000 * 24 * 30)).format('yyyy-MM-DD'),
-                    moment(new Date()).format('yyyy-MM-DD')
-                ],
+                orderCountingRecordsDate: [moment(new Date(new Date().getTime() - 3600 * 1000 * 24 * 30)).format('yyyy-MM-DD'),
+                    moment(new Date()).format('yyyy-MM-DD')],
                 logisticsCountingRecordsData: [moment(new Date(new Date().getTime() - 3600 * 1000 * 24 * 30)).format('yyyy-MM-DD'),
                     moment(new Date()).format('yyyy-MM-DD')],
+                warehouseCountingRecordsData: [moment(new Date(new Date().getTime() - 3600 * 1000 * 24 * 30)).format('yyyy-MM-DD'),
+                    moment(new Date()).format('yyyy-MM-DD')],
                 unit: '日'
             },
             mounted: function () {
@@ -198,10 +225,12 @@
                 this.orderCountingRecordsChart = echarts.init(document.getElementById('orderCountingRecords'));
                 this.initOrderCountingRecordsChart();
 
-                // this.initLogisticsCountingRecords();
                 this.logisticsCountingRecordsChart = echarts.init(document.getElementById('logisticsCountingRecords'));
                 this.initLogisticsCountingRecordsChart();
 
+                this.warehouseCountingRecordsChart = echarts.init(document.getElementById('warehouseCountingRecords'));
+                this.initWarehouseCountingRecordsChart();
+
             },
             methods: {
                 getWareHouse: function (code) {
@@ -214,13 +243,6 @@
                         _this.orderCountingRecordsData.push(item.counter);
                     });
                 },
-                initLogisticsCountingRecords() {
-                    let _this = this;
-                    this.logisticsCountingRecords.forEach(function (item) {
-                        _this.orderCountingRecordsDateTarget.push(item.date_target);
-                        _this.orderCountingRecordsData.push(item.counter);
-                    });
-                },
                 initOrderCountingRecordsChart() {
                     this.orderCountingRecordsChart.setOption({
                         title: {text: '实时待处理订单'},
@@ -266,6 +288,34 @@
                         ]
                     });
                 },
+                initWarehouseCountingRecordsChart() {
+                    this.warehouseCountingRecordsChart.setOption({
+                        title: {
+                            text: '仓库分布',
+                            left: 'left'
+                        },
+                        tooltip: {
+                            trigger: 'item',
+                            formatter: '{a} <br/>{b} : {c} ({d}%)'
+                        },
+                        series: [
+                            {
+                                name: '访问来源',
+                                type: 'pie',
+                                radius: '55%',
+                                center: ['50%', '60%'],
+                                data: this.warehouseCountingRecords,
+                                emphasis: {
+                                    itemStyle: {
+                                        shadowBlur: 10,
+                                        shadowOffsetX: 0,
+                                        shadowColor: 'rgba(0, 0, 0, 0.5)'
+                                    }
+                                }
+                            }
+                        ]
+                    });
+                },
                 orderCountingRecordApi() {
                     let formData = new FormData();
                     formData.append('start', this.orderCountingRecordsDate[0]);
@@ -294,6 +344,19 @@
                             _this.initLogisticsCountingRecordsChart();
                         }
                     });
+                },
+
+                warehouseCountingRecordsApi() {
+                    let formData = new FormData();
+                    formData.append('start', this.warehouseCountingRecordsData[0]);
+                    formData.append('end', this.warehouseCountingRecordsData[1]);
+                    let _this = this;
+                    axios.post('{{url('apiLocal/control/panel/menu/warehouseCountingRecordsApi')}}', formData).then(function (res) {
+                        if (res.status === 200) {
+                            _this.warehouseCountingRecords = res.data.warehouseCountingRecords;
+                            _this.initWarehouseCountingRecordsChart();
+                        }
+                    });
                 }
             }
         });

+ 2 - 1
routes/apiLocal.php

@@ -88,5 +88,6 @@ Route::group(['prefix'=>'maintenance'],function (){
 /** 控制台 */
 Route::group(['prefix'=>'control'],function () {
     Route::post('panel/menu/orderCountingRecordApi','ControlPanelController@orderCountingRecordsApi') ;
-    Route::post('panel/menu/logisticsCountingRecordsApi','ControlPanelController@logisticsCountingRecordsApi') ;
+    Route::post('panel/menu/logisticsCountingRecordsApi','ControlPanelController@logisticsCountingRecordsApi');
+    Route::post('panel/menu/warehouseCountingRecordsApi','ControlPanelController@warehouseCountingRecordsApi');
 });