Przeglądaj źródła

数据中心 订单统计优化

Swdz-WangHaiJun 4 lat temu
rodzic
commit
12e0fa4752

+ 0 - 70
app/Admin/Controllers/Chart/Order.php

xqd
@@ -1,70 +0,0 @@
-<?php
-
-
-namespace App\Admin\Controllers\Chart;
-use Encore\Admin\Widgets\Box;
-use Encore\Admin\Widgets\Echarts\Echarts;
-use Encore\Admin\Widgets\Form;
-use Encore\Admin\Layout\Row;
-use Encore\Admin\Layout\Column;
-use Encore\Admin\Widgets\Collapse;
-
-
-class Order
-{
-    public  function chart(Row $row)
-    {
-        $id = 'n_id';
-        $row->column(12,function (Column $column)use ($id){
-
-            $form = new Form();
-            $form->disableReset();
-            $form->disableSubmit();
-            $end = request('time_end')?:date('Y-m-d H:i:s',strtotime(date("Y-12-31 23:59:59")));
-            $start = request('time_start')?:date('Y-m-d H:i:s',strtotime(date("Y-01-01 00:00:01")));
-            $nowYear = date('Y');
-            $nowMonth = date('m');
-            $year = range(2000,2099);
-            foreach ($year as $v){
-                $realYear[$v]=$v;
-            }
-            $month = range(1,12);
-            $type = request('type',1);
-
-
-            $chartData =self::getData($type);
-
-
-            $filter_content = new Row(function (Column $col)use ($form,$type,$realYear,$nowYear,$month,$nowMonth){
-                $col->row(function (Row $row)use ($form,$type,$realYear,$nowYear,$month,$nowMonth){
-                    $form->select('year','年份')->options($realYear)->default($nowYear);
-                    $form->select('month','月份')->options($month)->default($nowMonth);
-                    $form->action('/admin');
-                    $row->column(6,$form->render());
-                });
-            });
-            $col = new Collapse();
-            $col->add('筛选',$filter_content->render());
-
-            $column->append($col->render());
-//            $column->row(function (Row $row)use ($chartData){
-//                $row->column(6,function (Column $column)use ($chartData){
-//                    $echarts = (new Echarts('用户变化曲线', '','user_change'))
-//                        ->setData($chartData['person']['d'])
-//                        ->bindLegend($chartData['person']['h'])->setShowToolbox(true);
-//                    return $column->append(new  Box('',$echarts));
-//                });
-//            });
-            return $column           ;
-        });
-    }
-
-    public function getData($type)
-    {
-//        1=>'按天查看',
-//        2=>'按月查看',
-//3=>'按年查看',
-
-//        Order::where([''])->;
-    }
-}

+ 153 - 0
app/Admin/Controllers/Chart/OrderChart.php

xqd
@@ -0,0 +1,153 @@
+<?php
+
+
+namespace App\Admin\Controllers\Chart;
+use Encore\Admin\Widgets\Box;
+use Encore\Admin\Widgets\Echarts\Echarts;
+use Encore\Admin\Widgets\Form;
+use Encore\Admin\Layout\Row;
+use Encore\Admin\Layout\Column;
+use Encore\Admin\Widgets\Collapse;
+use App\Models\Order;
+
+class OrderChart
+{
+    public  function chart(Row $row)
+    {
+        $row->column(12,function (Column $column){
+
+            $form = new Form();
+            $form->disableReset();
+            $form->disableSubmit();
+            $ry = request('year');
+            $rm = request('month');
+            //是否是初始化
+            $isb = request('b');
+            $year = range(2000,2099);
+            $month = range(1,12);
+            $nowYear = date('Y');
+            $nowMonth = date('m');
+
+            //默认数据获取方式 1默认选择当前月份 2根据时间
+            $type = 2;
+            if(empty($ry) && empty($rm)){
+                $type = 1;
+            }
+
+            //判断是否是初始化
+            if(empty($isb)){
+                $ry = $nowYear;
+                $rm = $nowMonth;
+            } else {
+                $type = 2;
+            }
+            
+            foreach ($year as $v){
+                $realYear[$v]=$v;
+            }
+            foreach ($month as $v){
+                $realMonth[$v]=$v;
+            }
+
+            $chartData =self::getData($ry,$rm,$type);
+
+            $filter_content = new Row(function (Column $col)use ($form,$type,$realYear,$ry,$rm,$realMonth){
+                $col->row(function (Row $row)use ($form,$type,$realYear,$ry,$rm,$realMonth){
+                    $form->method('get');
+                    $form->select('year','年份')->options($realYear)->default($ry);
+                    $form->select('month','月份')->options($realMonth)->default($rm);
+                    $form->hidden('b')->default(1);
+                    $form->html("<button type='submit'  class='btn btn-success'>筛选</button><a style='margin-left: 20px;' href='/admin'  class='btn btn-danger'>重置</a>");
+                    $form->action('/admin');
+                    $row->column(6,$form->render());
+                });
+            });
+            $col = new Collapse();
+            $col->add('日期筛选',$filter_content->render());
+
+            $column->append($col->render());
+            $column->row(function (Row $row)use ($chartData){
+                $row->column(12,function (Column $column)use ($chartData){
+                    $echarts = (new Echarts('订单走势图', '','user_change'))
+                        ->setData($chartData['d'])
+                        ->bindLegend($chartData['h'])->setShowToolbox(true);
+                    return $column->append(new  Box('',$echarts));
+                });
+            });
+        });
+    }
+
+    public function getData($year,$month,$type)
+    {
+
+        //type 1默认选择当前月份 2根据时间
+
+        if($type == 1){
+            //查找天
+
+            $data = Order::query()
+                ->selectRaw('DATE_FORMAT(created_at,"%m-%d") as day')
+                ->selectRaw('COUNT(*) as count')
+                ->where('created_at', '>=', $year.'-'.$month)
+                ->where('created_at', '<', $year.'-'.($month+1))
+                ->groupBy('day')
+                ->get()->toArray();
+            $data = self::getFomateData($data,3);
+            return $data;
+        }
+
+        if(empty($year) && empty($month)){
+            //查找年
+            $data = Order::query()
+                ->selectRaw('DATE_FORMAT(created_at,"%Y") as day')
+                ->selectRaw('COUNT(*) as count')
+                ->where('created_at', '>', '2000-')
+                ->where('created_at', '<', '2099-')
+                ->groupBy('day')
+                ->get()->toArray();
+            $data = self::getFomateData($data,1);
+            return $data;
+        }
+
+        if($year && $month){
+            //查找天
+            $data = Order::query()
+                ->selectRaw('DATE_FORMAT(created_at,"%m-%d") as day')
+                ->selectRaw('COUNT(*) as count')
+                ->where('created_at', '>', $year.'-'.$month)
+                ->where('created_at', '<', $year.'-'.($month+1))
+                ->groupBy('day')
+                ->get()->toArray();
+            $data = self::getFomateData($data,3);
+
+            return $data;
+
+        }
+
+        if($year){
+            //查找月
+            $data = Order::query()
+                ->selectRaw('DATE_FORMAT(created_at,"%m") as day')
+                ->selectRaw('COUNT(*) as count')
+                ->where('created_at', '>=', $year.'-')
+                ->where('created_at', '<', ($year+1).'-')
+                ->groupBy('day')
+                ->get()->toArray();
+            $data = self::getFomateData($data,2);
+            return $data;
+        }
+        return self::getFomateData([],3);
+
+    }
+
+    public static function getFomateData($data,$type)
+    {
+        $typeArr = [1=>'年',2=>'月',3=>'日'];
+        $chartData['d'] = [];
+        foreach ($data as $v){
+            $chartData['d'][] = ['day'=>$v['day'].$typeArr[$type],'count'=>$v['count']];
+        }
+        $chartData['h'] = ['day'=>$typeArr[$type],'count'=>'订单数'];
+        return $chartData;
+    }
+}

+ 2 - 2
app/Admin/Controllers/HomeController.php

xqd xqd
@@ -2,7 +2,7 @@
 
 namespace App\Admin\Controllers;
 
-use App\Admin\Controllers\Chart\Order;
+use App\Admin\Controllers\Chart\OrderChart;
 use App\Http\Controllers\Controller;
 use Encore\Admin\Controllers\Dashboard;
 use Encore\Admin\Layout\Column;
@@ -65,7 +65,7 @@ class HomeController extends Controller
 //                        1=>'订单总数(单)',
             })
             ->row(function (Row $row){
-                (new Order())->chart($row);
+                (new OrderChart())->chart($row);
             })
             ;
     }