Explorar o código

wesmiler 报恩寺项目提交

wesmiler %!s(int64=4) %!d(string=hai) anos
pai
achega
0858305f27

+ 20 - 3
app/Http/Controllers/IndexController.php

@@ -18,7 +18,11 @@ use App\Models\OrdersModel;
 use App\Models\UserModel;
 use App\Models\AdminRomModel;
 use App\Services\AdminService;
+use App\Services\EnshrineOrdersService;
+use App\Services\GongdengOrderService;
+use App\Services\MemberService;
 use App\Services\MenuService;
+use App\Services\OrdersService;
 use App\Services\RedisService;
 use App\Services\TradeService;
 use App\Services\UserService;
@@ -132,6 +136,7 @@ class IndexController extends Backend
                 ->count('id'),
             'gdDayCount'=> GongdengOrderModel::where(['mark'=> 1,'status'=> 2])
                 ->where('pay_at','>=', date('Y-m-d'))
+                ->where('pay_at','<=', date('Y-m-d H:i:s'))
                 ->count('id'),
             'shopCount'=> OrdersModel::where(['mark'=> 1])
                 ->whereIn('status',[2,3,4])
@@ -139,16 +144,19 @@ class IndexController extends Backend
             'shopDayCount'=> OrdersModel::where(['mark'=> 1])
                 ->whereIn('status',[2,3,4])
                 ->where('pay_at','>=', date('Y-m-d'))
+                ->where('pay_at','<=', date('Y-m-d H:i:s'))
                 ->count('id'),
             'memberCount'=> MemberModel::where(['mark'=> 1,'status'=> 1])
                 ->count('id'),
             'memberDayCount'=> MemberModel::where(['mark'=> 1,'status'=> 1])
                 ->where('create_time','>=', strtotime(date('Y-m-d')))
+                ->where('create_time','<=', time())
                 ->count('id'),
             'enshrineTotal'=> intval(EnshrineOrdersModel::where(['mark'=> 1,'status'=> 2])
                 ->sum('total')),
             'enshrineDayTotal'=> intval(EnshrineOrdersModel::where(['mark'=> 1,'status'=> 2])
                 ->where('pay_at','>=', date('Y-m-d'))
+                ->where('pay_at','<=', date('Y-m-d H:i:s'))
                 ->sum('total')),
         ];
 
@@ -161,26 +169,35 @@ class IndexController extends Backend
      * @return array
      */
     public function tradeRank(){
-        $datas = TradeService::make()->ranks();
+        $dateType = request()->get('dateType', 0);
+        $datas = TradeService::make()->ranks($dateType);
         return message(MESSAGE_OK,true, $datas);
     }
 
 
-    public function statisticsTable(){
+    /**
+     * 统计表数据
+     * @return array
+     */
+    public function tableData(){
         $type = request()->get('type', 'trade');
         $dateType = request()->get('dateType', 0);
         $datas = [];
-
         switch($type){
             case 'trade': // 消费
+                $datas = TradeService::make()->tableData($dateType);
                 break;
             case 'gd': // 供灯交易量
+                $datas = GongdengOrderService::make()->tableData($dateType);
                 break;
             case 'member': // 用户注册
+                $datas = MemberService::make()->tableData($dateType);
                 break;
             case 'shop': // 商城交易量
+                $datas = OrdersService::make()->tableData($dateType);
                 break;
             case 'enshrine': // 供奉订单交易额
+                $datas = EnshrineOrdersService::make()->tableData($dateType);
                 break;
         }
 

+ 87 - 0
app/Services/EnshrineOrdersService.php

@@ -106,6 +106,93 @@ class EnshrineOrdersService extends BaseService
     }
 
     /**
+     * 统计表数据
+     * @param $dateType
+     * @return array
+     */
+    public function tableData($dateType){
+        $cacheKey = "caches:statistics:table_enshrine_{$dateType}";
+        $datas = RedisService::get($cacheKey);
+        if($datas){
+            return $datas;
+        }
+
+        $firstTime = strtotime(date('Y-m-d'));
+        if($dateType == 0){
+            $formatStr = "%Y-%m-%d %H:00";
+            $firstTime = strtotime(date('Y-m-d'));
+            for($i = 0; $i<=3; $i++){
+                $i = $i<10? '0'.$i : $i;
+                $ks = date('Y-m-d')." {$i}:00";
+                $datas[$ks] = [
+                    'date'=> $i.'点',
+                    'ks'=> $ks,
+                    'value'=> 0,
+                ];
+            }
+        }else if($dateType == 1){
+            $formatStr = "%Y-%m-%d";
+            $firstTime =  strtotime('monday this week');
+            $weeks = ['周一','周二','周三','周四','周五','周六','周日'];
+            for($i = 0; $i<7; $i++){
+                $ks = date('Y-m-d', $firstTime+$i*86400);
+                $datas[$ks] = [
+                    'date'=> $weeks[$i],
+                    'ks'=> $ks,
+                    'value'=> 0,
+                ];
+            }
+        }else if($dateType == 2){
+            $formatStr = "%Y-%m-%d";
+            $firstTime = strtotime(date('Y-m-01'));
+            $num = cal_days_in_month(CAL_GREGORIAN, date('m'), date('Y'));
+            for($i = 1; $i<=$num; $i++){
+                $i = $i<10? '0'.$i : $i;
+                $ks = date('Y-m')."-{$i}";
+                $datas[$ks] = [
+                    'date'=> $i.'号',
+                    'ks'=> $ks,
+                    'value'=> 0,
+                ];
+            }
+        }else if($dateType == 3){
+            $formatStr = "%Y-%m";
+            $firstTime = strtotime(date('Y-01-01'));
+            for($i = 1; $i<=12; $i++){
+                $ks = date('Y')."-".($i<10? '0'.$i : $i);
+                $datas[$ks] = [
+                    'date'=> $i.'月',
+                    'ks'=> $ks,
+                    'value'=> 0,
+                ];
+            }
+        }
+
+        $counts = $this->model::from('enshrine_orders as a')
+            ->leftJoin('member as m', 'm.id', '=', 'a.user_id')
+            ->where(['a.mark'=> 1,'m.mark'=> 1,'a.status'=>2])
+            ->where('a.create_time','>=', $firstTime)
+            ->where('a.create_time','<=', time())
+            ->select([\DB::raw('sum('.env('DB_PREFIX').'a.`total`) as value'),\DB::raw('FROM_UNIXTIME('.env('DB_PREFIX')."a.create_time,'{$formatStr}') as ks")])
+            ->groupBy(\DB::raw('FROM_UNIXTIME('.env('DB_PREFIX')."a.create_time,'{$formatStr}')"))
+            ->get();
+
+        $counts = $counts? $counts->toArray() : [];
+        if($counts){
+            foreach ($counts as $v){
+                if(isset($datas[$v['ks']])){
+                    $datas[$v['ks']]['value'] = $v['value'];
+                }
+            }
+        }
+
+        $datas = array_values($datas);
+        RedisService::set($cacheKey, $datas, rand(5, 10));
+
+        return $datas;
+    }
+
+    /**
      * 添加或编辑
      * @return array
      * @since 2020/11/11

+ 100 - 0
app/Services/GongdengOrderService.php

@@ -25,6 +25,7 @@ use App\Models\MemberModel;
  */
 class GongdengOrderService extends BaseService
 {
+    protected static $instance = null;
     /**
      * 构造函数
      * @author wesmiler
@@ -36,6 +37,18 @@ class GongdengOrderService extends BaseService
         $this->model = new GongdengOrderModel();
     }
 
+    /**
+     * 静态入口
+     * @return GongdengOrderService|null
+     */
+    public static function make(){
+        if(!self::$instance){
+            self::$instance = new GongdengOrderService();
+        }
+
+        return self::$instance;
+    }
+
     public function getList()
     {
         $params = request()->all();
@@ -193,6 +206,93 @@ class GongdengOrderService extends BaseService
     }
 
     /**
+     * 统计表数据
+     * @param $dateType
+     * @return array
+     */
+    public function tableData($dateType){
+        $cacheKey = "caches:statistics:table_gd_{$dateType}";
+        $datas = RedisService::get($cacheKey);
+        if($datas){
+            return $datas;
+        }
+
+        $firstTime = strtotime(date('Y-m-d'));
+        if($dateType == 0){
+            $formatStr = "%Y-%m-%d %H:00";
+            $firstTime = strtotime(date('Y-m-d'));
+            for($i = 0; $i<24; $i++){
+                $i = $i<10? '0'.$i : $i;
+                $ks = date('Y-m-d')." {$i}:00";
+                $datas[$ks] = [
+                    'date'=> $i.'点',
+                    'ks'=> $ks,
+                    'value'=> 0,
+                ];
+            }
+        }else if($dateType == 1){
+            $formatStr = "%Y-%m-%d";
+            $firstTime =  strtotime('monday this week');
+            $weeks = ['周一','周二','周三','周四','周五','周六','周日'];
+            for($i = 0; $i<7; $i++){
+                $ks = date('Y-m-d', $firstTime+$i*86400);
+                $datas[$ks] = [
+                    'date'=> $weeks[$i],
+                    'ks'=> $ks,
+                    'value'=> 0,
+                ];
+            }
+        }else if($dateType == 2){
+            $formatStr = "%Y-%m-%d";
+            $firstTime = strtotime(date('Y-m-01'));
+            $num = cal_days_in_month(CAL_GREGORIAN, date('m'), date('Y'));
+            for($i = 1; $i<=$num; $i++){
+                $i = $i<10? '0'.$i : $i;
+                $ks = date('Y-m')."-{$i}";
+                $datas[$ks] = [
+                    'date'=> $i.'号',
+                    'ks'=> $ks,
+                    'value'=> 0,
+                ];
+            }
+        }else if($dateType == 3){
+            $formatStr = "%Y-%m";
+            $firstTime = strtotime(date('Y-01-01'));
+            for($i = 1; $i<=12; $i++){
+                $ks = date('Y')."-".($i<10? '0'.$i : $i);
+                $datas[$ks] = [
+                    'date'=> $i.'月',
+                    'ks'=> $ks,
+                    'value'=> 0,
+                ];
+            }
+        }
+
+        $counts = $this->model::from('gongdeng_orders as a')
+            ->leftJoin('member as m', 'm.id', '=', 'a.user_id')
+            ->where(['a.mark'=> 1,'m.mark'=> 1,'a.status'=> 2])
+            ->where('a.create_time','>=', $firstTime)
+            ->where('a.create_time','<=', time())
+            ->select([\DB::raw('count('.env('DB_PREFIX').'a.`id`) as value'),\DB::raw('FROM_UNIXTIME('.env('DB_PREFIX')."a.create_time,'{$formatStr}') as ks")])
+            ->groupBy(\DB::raw('FROM_UNIXTIME('.env('DB_PREFIX')."a.create_time,'{$formatStr}')"))
+            ->get();
+
+        $counts = $counts? $counts->toArray() : [];
+        if($counts){
+            foreach ($counts as $v){
+                if(isset($datas[$v['ks']])){
+                    $datas[$v['ks']]['value'] = $v['value'];
+                }
+            }
+        }
+
+        $datas = array_values($datas);
+        RedisService::set($cacheKey, $datas, rand(5, 10));
+
+        return $datas;
+    }
+
+    /**
      * 供灯下单
      */
     public function buy($userId)

+ 86 - 0
app/Services/MemberService.php

@@ -262,6 +262,92 @@ class MemberService extends BaseService
     }
 
     /**
+     * 统计表数据
+     * @param $dateType
+     * @return array
+     */
+    public function tableData($dateType){
+        $cacheKey = "caches:statistics:table_member_{$dateType}";
+        $datas = RedisService::get($cacheKey);
+        if($datas){
+            return $datas;
+        }
+
+        $firstTime = strtotime(date('Y-m-d'));
+        if($dateType == 0){
+            $formatStr = "%Y-%m-%d %H";
+            $firstTime = strtotime(date('Y-m-d'));
+            for($i = 0; $i<24; $i++){
+                $i = $i<10? '0'.$i : $i;
+                $ks = date('Y-m-d')." {$i}:00";
+                $datas[$ks] = [
+                    'date'=> $i.'点',
+                    'ks'=> $ks,
+                    'value'=> 0,
+                ];
+            }
+        }else if($dateType == 1){
+            $formatStr = "%Y-%m-%d";
+            $firstTime =  strtotime('monday this week');
+            $weeks = ['周一','周二','周三','周四','周五','周六','周日'];
+            for($i = 0; $i<7; $i++){
+                $ks = date('Y-m-d', $firstTime+$i*86400);
+                $datas[$ks] = [
+                    'date'=> $weeks[$i],
+                    'ks'=> $ks,
+                    'value'=> 0,
+                ];
+            }
+        }else if($dateType == 2){
+            $formatStr = "%Y-%m-%d";
+            $firstTime = strtotime(date('Y-m-01'));
+            $num = cal_days_in_month(CAL_GREGORIAN, date('m'), date('Y'));
+            for($i = 1; $i<=$num; $i++){
+                $i = $i<10? '0'.$i : $i;
+                $ks = date('Y-m')."-{$i}";
+                $datas[$ks] = [
+                    'date'=> $i.'号',
+                    'ks'=> $ks,
+                    'value'=> 0,
+                ];
+            }
+        }else if($dateType == 3){
+            $formatStr = "%Y-%m";
+            $firstTime = strtotime(date('Y-01-01'));
+            for($i = 1; $i<=12; $i++){
+                $ks = date('Y')."-".($i<10? '0'.$i : $i);
+                $datas[$ks] = [
+                    'date'=> $i.'月',
+                    'ks'=> $ks,
+                    'value'=> 0,
+                ];
+            }
+        }
+
+        $counts = $this->model::from('member as a')
+            ->where(['a.mark'=> 1,'a.status'=> 1])
+            ->where('a.create_time','>=', $firstTime)
+            ->where('a.create_time','<=', time())
+            ->select([\DB::raw('count('.env('DB_PREFIX').'a.`id`) as value'),\DB::raw('FROM_UNIXTIME('.env('DB_PREFIX')."a.create_time,'{$formatStr}') as ks")])
+            ->groupBy(\DB::raw('FROM_UNIXTIME('.env('DB_PREFIX')."a.create_time,'{$formatStr}')"))
+            ->get();
+
+        $counts = $counts? $counts->toArray() : [];
+        if($counts){
+            foreach ($counts as $v){
+                if(isset($datas[$v['ks']])){
+                    $datas[$v['ks']]['value'] = $v['value'];
+                }
+            }
+        }
+
+        $datas = array_values($datas);
+        RedisService::set($cacheKey, $datas, rand(5, 10));
+
+        return $datas;
+    }
+
+    /**
      * 保存资料
      * @param $userId
      * @return array

+ 88 - 0
app/Services/OrdersService.php

@@ -146,6 +146,94 @@ class OrdersService extends BaseService
     }
 
     /**
+     * 统计表数据
+     * @param $dateType
+     * @return array
+     */
+    public function tableData($dateType){
+        $cacheKey = "caches:statistics:table_shop_{$dateType}";
+        $datas = RedisService::get($cacheKey);
+        if($datas){
+            return $datas;
+        }
+
+        $firstTime = strtotime(date('Y-m-d'));
+        if($dateType == 0){
+            $formatStr = "%Y-%m-%d %H:00";
+            $firstTime = strtotime(date('Y-m-d'));
+            for($i = 0; $i<24; $i++){
+                $i = $i<10? '0'.$i : $i;
+                $ks = date('Y-m-d')." {$i}:00";
+                $datas[$ks] = [
+                    'date'=> $i.'点',
+                    'ks'=> $ks,
+                    'value'=> 0,
+                ];
+            }
+        }else if($dateType == 1){
+            $formatStr = "%Y-%m-%d";
+            $firstTime =  strtotime('monday this week');
+            $weeks = ['周一','周二','周三','周四','周五','周六','周日'];
+            for($i = 0; $i<7; $i++){
+                $ks = date('Y-m-d', $firstTime+$i*86400);
+                $datas[$ks] = [
+                    'date'=> $weeks[$i],
+                    'ks'=> $ks,
+                    'value'=> 0,
+                ];
+            }
+        }else if($dateType == 2){
+            $formatStr = "%Y-%m-%d";
+            $firstTime = strtotime(date('Y-m-01'));
+            $num = cal_days_in_month(CAL_GREGORIAN, date('m'), date('Y'));
+            for($i = 1; $i<=$num; $i++){
+                $i = $i<10? '0'.$i : $i;
+                $ks = date('Y-m')."-{$i}";
+                $datas[$ks] = [
+                    'date'=> $i.'号',
+                    'ks'=> $ks,
+                    'value'=> 0,
+                ];
+            }
+        }else if($dateType == 3){
+            $formatStr = "%Y-%m";
+            $firstTime = strtotime(date('Y-01-01'));
+            for($i = 1; $i<=12; $i++){
+                $ks = date('Y')."-".($i<10? '0'.$i : $i);
+                $datas[$ks] = [
+                    'date'=> $i.'月',
+                    'ks'=> $ks,
+                    'value'=> 0,
+                ];
+            }
+        }
+
+        $counts = $this->model::from('orders as a')
+            ->leftJoin('member as m', 'm.id', '=', 'a.user_id')
+            ->where(['a.mark'=> 1,'m.mark'=> 1])
+            ->whereIn('a.status',[2,3,4])
+            ->where('a.create_time','>=', $firstTime)
+            ->where('a.create_time','<=', time())
+            ->select([\DB::raw('count('.env('DB_PREFIX').'a.`id`) as value'),\DB::raw('FROM_UNIXTIME('.env('DB_PREFIX')."a.create_time,'{$formatStr}') as ks")])
+            ->groupBy(\DB::raw('FROM_UNIXTIME('.env('DB_PREFIX')."a.create_time,'{$formatStr}')"))
+            ->get();
+
+        $counts = $counts? $counts->toArray() : [];
+        if($counts){
+            foreach ($counts as $v){
+                if(isset($datas[$v['ks']])){
+                    $datas[$v['ks']]['value'] = $v['value'];
+                }
+            }
+        }
+
+        $datas = array_values($datas);
+        RedisService::set($cacheKey, $datas, rand(5, 10));
+
+        return $datas;
+    }
+
+    /**
      * 获取订单信息
      * @param $orderSn
      * @return array

+ 100 - 3
app/Services/TradeService.php

@@ -180,13 +180,23 @@ class TradeService extends BaseService
      * 消费排名
      * @return mixed
      */
-    public function ranks(){
+    public function ranks($dateType){
+        $firstTime = strtotime(date('Y-m-d'));
+        if($dateType==1){
+            $firstTime = strtotime('monday this week');
+        }else if($dateType==2){
+            $firstTime = strtotime(date('Y-m-01'));
+        }else if($dateType==3){
+            $firstTime = strtotime(date('Y-01-01'));
+        }
         $dataList = $this->model::from('account_logs as a')
             ->leftJoin('member as m', 'm.id', '=', 'a.user_id')
+            ->where('a.create_time','>=', $firstTime)
+            ->where('a.create_time','<=', time())
             ->where(['a.mark'=> 1,'m.mark'=> 1,'a.status'=> 1,'a.coin_type'=> 2,'a.pay_type'=> 2,'a.change_type'=> 2])
-            ->select(['m.avatar','m.nickname','a.id','a.user_id', \DB::raw('sum(a.money) as total')])
+            ->select(['m.avatar','m.nickname','a.id','a.user_id', \DB::raw('sum('.env('DB_PREFIX').'a.`money`) as total')])
             ->groupBy('a.user_id')
-            ->orderBy(\DB::raw('sum(a.money)'),'desc')
+            ->orderBy(\DB::raw('sum('.env('DB_PREFIX').'a.`money`)'),'desc')
             ->orderBy('m.create_time','asc')
             ->take(50)
             ->get();
@@ -201,6 +211,93 @@ class TradeService extends BaseService
     }
 
     /**
+     * 统计表数据
+     * @param $dateType
+     * @return array
+     */
+    public function tableData($dateType){
+        $cacheKey = "caches:statistics:table_trade_{$dateType}";
+        $datas = RedisService::get($cacheKey);
+        if($datas){
+            return $datas;
+        }
+
+        $firstTime = strtotime(date('Y-m-d'));
+        if($dateType == 0){
+            $formatStr = "%Y-%m-%d %H:00";
+            $firstTime = strtotime(date('Y-m-d'));
+            for($i = 0; $i<24; $i++){
+                $i = $i<10? '0'.$i : $i;
+                $ks = date('Y-m-d')." {$i}:00";
+                $datas[$ks] = [
+                    'date'=> $i.'点',
+                    'ks'=> $ks,
+                    'value'=> 0,
+                ];
+            }
+        }else if($dateType == 1){
+            $formatStr = "%Y-%m-%d";
+            $firstTime =  strtotime('monday this week');
+            $weeks = ['周一','周二','周三','周四','周五','周六','周日'];
+            for($i = 0; $i<7; $i++){
+                $ks = date('Y-m-d', $firstTime+$i*86400);
+                $datas[$ks] = [
+                    'date'=> $weeks[$i],
+                    'ks'=> $ks,
+                    'value'=> 0,
+                ];
+            }
+        }else if($dateType == 2){
+            $formatStr = "%Y-%m-%d";
+            $firstTime = strtotime(date('Y-m-01'));
+            $num = cal_days_in_month(CAL_GREGORIAN, date('m'), date('Y'));
+            for($i = 1; $i<=$num; $i++){
+                $i = $i<10? '0'.$i : $i;
+                $ks = date('Y-m')."-{$i}";
+                $datas[$ks] = [
+                    'date'=> $i.'号',
+                    'ks'=> $ks,
+                    'value'=> 0,
+                ];
+            }
+        }else if($dateType == 3){
+            $formatStr = "%Y-%m";
+            $firstTime = strtotime(date('Y-01-01'));
+            for($i = 1; $i<=12; $i++){
+                $ks = date('Y')."-".($i<10? '0'.$i : $i);
+                $datas[$ks] = [
+                    'date'=> $i.'月',
+                    'ks'=> $ks,
+                    'value'=> 0,
+                ];
+            }
+        }
+
+        $counts = $this->model::from('account_logs as a')
+            ->leftJoin('member as m', 'm.id', '=', 'a.user_id')
+            ->where(['a.mark'=> 1,'m.mark'=> 1,'a.status'=> 1,'a.coin_type'=> 2,'a.pay_type'=> 2,'a.change_type'=> 2])
+            ->where('a.create_time','>=', $firstTime)
+            ->where('a.create_time','<=', time())
+            ->select([\DB::raw('sum('.env('DB_PREFIX').'a.`money`) as value'),\DB::raw('FROM_UNIXTIME('.env('DB_PREFIX')."a.create_time,'{$formatStr}') as ks")])
+            ->groupBy(\DB::raw('FROM_UNIXTIME('.env('DB_PREFIX')."a.create_time,'{$formatStr}')"))
+            ->get();
+
+        $counts = $counts? $counts->toArray() : [];
+        if($counts){
+            foreach ($counts as $v){
+                if(isset($datas[$v['ks']])){
+                    $datas[$v['ks']]['value'] = $v['value'];
+                }
+            }
+        }
+
+        $datas = array_values($datas);
+        RedisService::set($cacheKey, $datas, rand(5, 10));
+
+        return $datas;
+    }
+
+    /**
      * 统计
      * @param $params
      * @return mixed

+ 1 - 0
routes/web.php

@@ -78,6 +78,7 @@ Route::post('/index/clearCache', [IndexController::class, 'clearCache']);
 Route::post('/index/statistics', [IndexController::class, 'statistics']);
 Route::post('/index/counts', [IndexController::class, 'counts']);
 Route::post('/index/tradeRank', [IndexController::class, 'tradeRank']);
+Route::post('/index/tableData', [IndexController::class, 'tableData']);
 
 // 用户管理
 Route::get('/user/index', [UserController::class, 'index']);