Browse Source

数据统计增加小程序维度

zqwang 1 year ago
parent
commit
e1a780e119

+ 3 - 1
modules/Statistic/Http/Controllers/HomeStatisticsController.php

@@ -27,7 +27,9 @@ class HomeStatisticsController  extends CatchController
             $type = 3;
         }
         $uid = $this->getLoginUserId();
-        return UserStatisticsService::getTodayHomeData($uid,$type);
+        $miniProgramId = $request->input('miniprogram_id',0);
+
+        return UserStatisticsService::getTodayHomeData($uid,$type,$miniProgramId);
     }
 
 }

+ 86 - 121
modules/Statistic/Services/UserStatisticsService.php

@@ -29,25 +29,24 @@ class UserStatisticsService extends BaseService
      * name: getTodayData
      * @param int $accountId 账号id
      * @param int $type 账号类型 1 其他 2 投放公司 3 优化师
-     * @param  int $minId  小程序id
+     * @param int $minId 小程序id
      * date 2023/06/20 10:20
      * @return array
      */
-    public static function getTodayData($accountId, $type = 1,$minId=0)
+    public static function getTodayData($accountId, $type = 1, $minId = 0)
     {
         $date = date("Y-m-d");
-        $date = "2023-06-25";
-        $start = $date. " 00:00:00";
+        $start = $date . " 00:00:00";
         $end = $date . " 23:59:59";
 
-        $where  = [];
-        if ($minId > 0){
+        $where = [];
+        if ($minId > 0) {
             $where['miniprogram_id'] = $minId;
         }
 
-        if ($type == 2){
-            $where['puser_id']  = $accountId;
-        }else if($type ==3){
+        if ($type == 2) {
+            $where['puser_id'] = $accountId;
+        } else if ($type == 3) {
             $where['user_id'] = $accountId;
         }
         $new_user_num = DB::table('user_ranse_record_all')->where($where)->where('date', $date)->count(); // 新增用户人数
@@ -128,122 +127,88 @@ class UserStatisticsService extends BaseService
      * name: getTodayData
      * @param int $accountId 账号id
      * @param int $type 账号类型 1 其他 2 投放公司 3 优化师
+     * @param int $minId 小程序id
      * date 2023/06/20 10:20
      * @return array
      */
-    public static function getTodayHomeData(mixed $accountId, int $type)
-     {
+    public static function getTodayHomeData(mixed $accountId, int $type, $minId = 0)
+    {
         $date = date("Y-m-d");
-        $start = date("Y-m-d") . " 00:00:00";
-        $end = date("Y-m-d") . " 23:59:59";
-        if ($type == 1) {
-            $new_user_num = DB::table('user_ranse_record_all')->where('date', $date)->count(); // 新增用户人数
-            $info = DB::table('orders')->where('status', "<>", 'UNPAID')
-                ->whereBetween("created_at", [$start, $end])
-                ->whereBetween('ranse_created_at', [$start, $end])
-                ->select(
-                    DB::raw("sum(if(status = 'unpaid', 0, price)) as recharge_total"), // 单日新增用户充值金额
-                    DB::raw("count(DISTINCT ranse_created_at,uid) as recharge_num")  // 当日新增用户充值人数
-                )->first();
-            $new_user_recharge_total = $info->recharge_total ?: 0; // 新增用户充值总额
-            $new_user_recharge_num = $info->recharge_num ?: 0; // 新增用户充值人数
-            $info = DB::table('orders')->where('status', "<>", 'UNPAID')
-                ->whereBetween("created_at", [$start, $end])
-                ->whereBetween('ranse_created_at', [$start, $end])
-                ->whereIn('order_type', ["COIN", "FIRST_COIN"])
-                ->select(
-                    DB::raw("sum(if(status = 'unpaid', 0, price)) as recharge_total"), // 单日新增用户充值金额
-                    DB::raw("count(DISTINCT ranse_created_at,uid) as recharge_num")  // 当日新增用户充值人数
-                )->first(); // 普通充值金额
-            $new_user_recharge_coin_total = $info->recharge_total ?: 0; // 新增用户普通充值总额
-            $new_user_recharge_coin_num = $info->recharge_num ?: 0; // 新增用户普通充值总额
-            $info = DB::table('orders')->where('status', "<>", 'UNPAID')
-                ->whereBetween("created_at", [$start, $end])
-                ->whereBetween('ranse_created_at', [$start, $end])
-                ->whereNotIn('order_type', ["COIN", "FIRST_COIN"])
-                ->select(
-                    DB::raw("sum(if(status = 'unpaid', 0, price)) as recharge_total"), // 单日新增用户充值金额
-                    DB::raw("count(DISTINCT ranse_created_at,uid) as recharge_num")  // 当日新增用户充值人数
-                )->first(); // 会员充值金额
-            $new_user_recharge_vip_total = $info->recharge_total ?: 0; // 新增用户会员充值总额
-            $new_user_recharge_vip_num = $info->recharge_num ?: 0; // 新增用户会员充值总额
-            $info = DB::table('orders')->where('status', "<>", 'UNPAID')
-                ->whereBetween("created_at", [$start, $end])
-                ->select(
-                    DB::raw("sum(if(status = 'unpaid', 0, price)) as  recharge_total"), // 单日新增用户充值金额
-                    DB::raw("count(DISTINCT ranse_created_at,uid) as  recharge_num")  // 当日新增用户充值人数
-                )->first();
-            $recharge_total = $info->recharge_total ?: 0; // 充值金额
-            // 充值笔数
-           $recharge_num =  DB::table('orders')->where('status', "<>", 'UNPAID')
-                ->whereBetween("created_at", [$start, $end])->count();
-            $recharge_coin_total = DB::table('orders')->where('status', "<>", 'UNPAID')
-                ->whereBetween("created_at", [$start, $end])
-                ->whereIn('order_type', ["COIN", "FIRST_COIN"])->sum('price'); // 普通充值金额
-            $recharge_vip_total = DB::table('orders')->where('status', "<>", 'UNPAID')
-                ->whereBetween("created_at", [$start, $end])
-                ->whereNotIn('order_type', ["COIN", "FIRST_COIN"])->sum('price'); // 会员充值金额
-
+        $start = $date . " 00:00:00";
+        $end = $date . " 23:59:59";
 
+        $where = [];
+        if ($minId > 0) {
+            $where['miniprogram_id'] = $minId;
+        }
+        if ($type == 2) {
+            $where['puser_id'] = $accountId;
+        } else if ($type == 3) {
+            $where['user_id'] = $accountId;
+        }
+        $new_user_num = DB::table('user_ranse_record_all')->where($where)->where('date', $date)->count(); // 新增用户人数
+        $info = DB::table('orders')->where('status', "<>", 'UNPAID')
+            ->where($where)
+            ->whereBetween("created_at", [$start, $end])
+            ->whereBetween('ranse_created_at', [$start, $end])
+            ->select(
+                DB::raw("sum(if(status = 'unpaid', 0, price)) as recharge_total"), // 单日新增用户充值金额
+                DB::raw("count(DISTINCT ranse_created_at,uid) as recharge_num")  // 当日新增用户充值人数
+            )->first();
+        $new_user_recharge_total = $info->recharge_total ?: 0; // 新增用户充值总额
+        $new_user_recharge_num = $info->recharge_num ?: 0; // 新增用户充值人数
+        if ($type == 2) {
+            $where = ['puser_id' => $accountId];
         } else {
-            $key = sprintf(self::PROMOTION_STATISTIC_RECORD_REDIS_KEY, $date);
-            $new_user_recharge_total = self::getValue($key, sprintf(self::NEW_USER_RECHARGE_TOTAL, $accountId)); // 当日新增用户充值总额
-            $new_user_recharge_num = self::getValue($key, sprintf(self::NEW_USER_RECHARGE_NUM, $accountId)); // 当日新增用户充值人数
-            $new_user_num = self::getValue($key, sprintf(self::NEW_USER_NUM, $accountId)); // 当日新增用户人数
-            if ($type == 2) {
-                $where = ['puser_id' => $accountId];
-            } else {
-                $where = ['user_id' => $accountId];
-            }
-            $info = DB::table('orders')->where('status', "<>", 'UNPAID')
-                ->where($where)
-                ->whereBetween("created_at", [$start, $end])
-                ->whereBetween('ranse_created_at', [$start, $end])
-                ->whereIn('order_type', ["COIN", "FIRST_COIN"])->select(
+            $where = ['user_id' => $accountId];
+        }
+        $info = DB::table('orders')->where('status', "<>", 'UNPAID')
+            ->where($where)
+            ->whereBetween("created_at", [$start, $end])
+            ->whereBetween('ranse_created_at', [$start, $end])
+            ->whereIn('order_type', ["COIN", "FIRST_COIN"])->select(
                 DB::raw("sum(if(status = 'unpaid', 0, price)) as recharge_total"), // 单日新增用户充值金额
                 DB::raw("count(DISTINCT ranse_created_at,uid) as recharge_num")  // 当日新增用户充值人数
             )->first(); // 普通充值金额
-            $new_user_recharge_coin_total = $info->recharge_total ?: 0; // 新增用户普通充值总额
-            $new_user_recharge_coin_num = $info->recharge_num ?: 0; // 新增用户普通充值总额
-            $info = DB::table('orders')->where('status', "<>", 'UNPAID')
-                ->where($where)
-                ->whereBetween("created_at", [$start, $end])
-                ->whereBetween('ranse_created_at', [$start, $end])
-                ->whereNotIn('order_type', ["COIN", "FIRST_COIN"])
-                ->select(
-                    DB::raw("sum(if(status = 'unpaid', 0, price)) as recharge_total"), // 单日新增用户充值金额
-                    DB::raw("count(DISTINCT ranse_created_at,uid) as recharge_num")  // 当日新增用户充值人数
-                )->first(); // 会员充值金额
-            $new_user_recharge_vip_total = $info->recharge_total ?: 0; // 新增用户会员充值总额
-            $new_user_recharge_vip_num = $info->recharge_num ?: 0; // 新增用户会员充值总额
-            $info = DB::table('orders')->where('status', "<>", 'UNPAID')
-                ->whereBetween("created_at", [$start, $end])
-                ->where($where)
-                ->select(
-                    DB::raw("sum(if(status = 'unpaid', 0, price)) as  recharge_total"), // 单日新增用户充值金额
-                    DB::raw("count(DISTINCT ranse_created_at,uid) as  recharge_num")  // 当日新增用户充值人数
-                )->first();
-            $recharge_total = $info->recharge_total ?: 0; // 充值人数
-            $recharge_num =  DB::table('orders')->where('status', "<>", 'UNPAID')
-                ->whereBetween("created_at", [$start, $end])
-                ->where($where)->count();
-            $recharge_coin_total = DB::table('orders')->where('status', "<>", 'UNPAID')
-                ->where($where)
-                ->whereBetween("created_at", [$start, $end])
-                ->whereIn('order_type', ["COIN", "FIRST_COIN"])->sum('price'); // 普通充值金额
-            $recharge_vip_total = DB::table('orders')->where('status', "<>", 'UNPAID')
-                ->where($where)
-                ->whereBetween("created_at", [$start, $end])
-                ->whereNotIn('order_type', ["COIN", "FIRST_COIN"])->sum('price'); // 会员充值金额
-
-        }
+        $new_user_recharge_coin_total = $info->recharge_total ?: 0; // 新增用户普通充值总额
+        $new_user_recharge_coin_num = $info->recharge_num ?: 0; // 新增用户普通充值总额
+        $info = DB::table('orders')->where('status', "<>", 'UNPAID')
+            ->where($where)
+            ->whereBetween("created_at", [$start, $end])
+            ->whereBetween('ranse_created_at', [$start, $end])
+            ->whereNotIn('order_type', ["COIN", "FIRST_COIN"])
+            ->select(
+                DB::raw("sum(if(status = 'unpaid', 0, price)) as recharge_total"), // 单日新增用户充值金额
+                DB::raw("count(DISTINCT ranse_created_at,uid) as recharge_num")  // 当日新增用户充值人数
+            )->first(); // 会员充值金额
+        $new_user_recharge_vip_total = $info->recharge_total ?: 0; // 新增用户会员充值总额
+        $new_user_recharge_vip_num = $info->recharge_num ?: 0; // 新增用户会员充值总额
+        $info = DB::table('orders')->where('status', "<>", 'UNPAID')
+            ->whereBetween("created_at", [$start, $end])
+            ->where($where)
+            ->select(
+                DB::raw("sum(if(status = 'unpaid', 0, price)) as  recharge_total"), // 单日新增用户充值金额
+                DB::raw("count(DISTINCT ranse_created_at,uid) as  recharge_num")  // 当日新增用户充值人数
+            )->first();
+        $recharge_total = $info->recharge_total ?: 0; // 充值人数
+        $recharge_num = DB::table('orders')->where('status', "<>", 'UNPAID')
+            ->whereBetween("created_at", [$start, $end])
+            ->where($where)->count();
+        $recharge_coin_total = DB::table('orders')->where('status', "<>", 'UNPAID')
+            ->where($where)
+            ->whereBetween("created_at", [$start, $end])
+            ->whereIn('order_type', ["COIN", "FIRST_COIN"])->sum('price'); // 普通充值金额
+        $recharge_vip_total = DB::table('orders')->where('status', "<>", 'UNPAID')
+            ->where($where)
+            ->whereBetween("created_at", [$start, $end])
+            ->whereNotIn('order_type', ["COIN", "FIRST_COIN"])->sum('price'); // 会员充值金额
 
-        $data =  [
+        $data = [
             'new_user_num' => $new_user_num, // 新增用户数
-            'new_user_recharge_num' =>  $new_user_recharge_num, // 新增用户充值人数
+            'new_user_recharge_num' => $new_user_recharge_num, // 新增用户充值人数
             'new_user_recharge_coin_num' => $new_user_recharge_coin_num, // 新增用户普通充值人数
             'new_user_recharge_vip_num' => $new_user_recharge_vip_num, // 新增用户vip充值人数
-            'new_user_recharge_total' =>  $new_user_recharge_total, // 新增用户充值金额
+            'new_user_recharge_total' => $new_user_recharge_total, // 新增用户充值金额
             'new_user_recharge_vip_total' => $new_user_recharge_vip_total, // 新增用户普通充值金额
             'new_user_recharge_coin_total' => $new_user_recharge_coin_total, // 新增用户vip充值金额
             'recharge_total' => $recharge_total, // 充值金额
@@ -254,10 +219,10 @@ class UserStatisticsService extends BaseService
         ];
 
         // 新增用户充值率
-        $data['new_user_recharge_rate'] = $data['new_user_num'] >  0 && $data['new_user_recharge_num'] >  0 ? sprintf("%.2f%s",$data['new_user_recharge_num']/$data['new_user_num'],"%") : 0;
-       // 新增用户人均充值
-        $data['new_user_mean'] = $data['new_user_num'] >  0 && $data['new_user_recharge_total'] >  0 ? sprintf("%.2f",$data['new_user_recharge_total']/$data['new_user_num']) : 0;
-        $data['recharge_mean'] = $data['recharge_total'] >  0 && $data['recharge_num'] >  0 ? sprintf("%.2f",$data['recharge_total']/$data['recharge_num'],"%") : 0; // 新增用户人均充值
+        $data['new_user_recharge_rate'] = $data['new_user_num'] > 0 && $data['new_user_recharge_num'] > 0 ? sprintf("%.2f%s", $data['new_user_recharge_num'] / $data['new_user_num'], "%") : 0;
+        // 新增用户人均充值
+        $data['new_user_mean'] = $data['new_user_num'] > 0 && $data['new_user_recharge_total'] > 0 ? sprintf("%.2f", $data['new_user_recharge_total'] / $data['new_user_num']) : 0;
+        $data['recharge_mean'] = $data['recharge_total'] > 0 && $data['recharge_num'] > 0 ? sprintf("%.2f", $data['recharge_total'] / $data['recharge_num'], "%") : 0; // 新增用户人均充值
         return $data;
 
     }
@@ -283,11 +248,11 @@ class UserStatisticsService extends BaseService
      * @param mixed $type 账号类型 1 其他 2 投放公司 3 优化师
      * @param mixed $miniProgramId 小程序id
      */
-    public static function historyStats(int $accountId, $type,$miniProgramId)
-    {   print_sql();
-        $month = self::getStaticsData($accountId, date('Y-m-01'), date('Y-m-d', strtotime('yesterday')), $type,$miniProgramId);
-        $lastMonth = self::getStaticsData($accountId, date('Y-m-01', strtotime(date('Y-m-01')) - 10), date('Y-m-d', strtotime(date('Y-m-01')) - 10), $type,$miniProgramId);
-        $history = self::getHistoryData($accountId, $type,$miniProgramId);
+    public static function historyStats(int $accountId, $type, $miniProgramId)
+    {
+        $month = self::getStaticsData($accountId, date('Y-m-01'), date('Y-m-d', strtotime('yesterday')), $type, $miniProgramId);
+        $lastMonth = self::getStaticsData($accountId, date('Y-m-01', strtotime(date('Y-m-01')) - 10), date('Y-m-d', strtotime(date('Y-m-01')) - 10), $type, $miniProgramId);
+        $history = self::getHistoryData($accountId, $type, $miniProgramId);
         return ['month' => $month, 'lastMonth' => $lastMonth, 'history' => $history];
     }