浏览代码

首页数据

zqwang 1 年之前
父节点
当前提交
e0ed4bf759

+ 33 - 0
modules/Statistic/Http/Controllers/HomeStatisticsController.php

@@ -0,0 +1,33 @@
+<?php
+/**
+ *
+ * @file:HomeStatisticsController.php
+ * @Date: 2023/6/28
+ * @Time: 09:23
+ */
+
+
+namespace Modules\Statistic\Http\Controllers;
+
+use Catch\Base\CatchController;
+use Illuminate\Http\Request;
+use Modules\Statistic\Services\UserStatisticsService;
+use Modules\User\Http\Controllers\UserTrait;
+
+class HomeStatisticsController  extends CatchController
+{
+    use UserTrait;
+    public  function  statistics(Request $request)
+    {
+        $userContext = $this->getUserContext(null);
+        $type = 1;
+        if( $userContext['loginUserRoles']->contains('company')){
+            $type = 2;
+        }else if ($userContext['loginUserRoles']->contains('optimizer')){
+            $type = 3;
+        }
+        $uid = $this->getLoginUserId();
+        return UserStatisticsService::getTodayHomeData($uid,$type);
+    }
+
+}

+ 171 - 27
modules/Statistic/Services/UserStatisticsService.php

@@ -79,6 +79,144 @@ class UserStatisticsService extends BaseService
         return Redis::hget($key, $field);
     }
 
+    /**
+     *
+     * name: getTodayData
+     * @param int $accountId 账号id
+     * @param int $type 账号类型 1 其他 2 投放公司 3 优化师
+     * date 2023/06/20 10:20
+     * @return array
+     */
+    public static function getTodayHomeData(mixed $accountId, int $type)
+     {
+        $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'); // 会员充值金额
+
+
+        } 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(
+                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'); // 会员充值金额
+
+        }
+
+        $data =  [
+            'new_user_num' => $new_user_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_vip_total' => $new_user_recharge_vip_total, // 新增用户普通充值金额
+            'new_user_recharge_coin_total' => $new_user_recharge_coin_total, // 新增用户vip充值金额
+            'recharge_total' => $recharge_total, // 充值金额
+            'recharge_coin_totall' => $recharge_coin_total, // 普通充值金额
+            'recharge_vip_total' => $recharge_vip_total, // VIP 充值金额
+            'recharge_num' => $recharge_num, // 充值笔数
+
+        ];
+
+        // 新增用户充值率
+        $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;
+
+    }
 
 
     /**
@@ -111,25 +249,31 @@ class UserStatisticsService extends BaseService
             $recharge_coin_num = DB::table('orders')->where('status', "<>", 'UNPAID')
                 ->where('puser_id', $accountId)->whereBetween("created_at", [$start, $end])
                 ->whereBetween('ranse_created_at', [$start, $end])
-                ->where('order_type', 'COIN')->groupBy('uid', 'ranse_created_at')->count();
+                ->whereIn("order_type", ["COIN", "FIRST_COIN"])->groupBy('uid', 'ranse_created_at')->count();
             $recharge_vip_num = DB::table('orders')->where('status', "<>", 'UNPAID')
                 ->where('puser_id', $accountId)->whereBetween("created_at", [$start, $end])
                 ->whereBetween('ranse_created_at', [$start, $end])
-                ->where('order_type', '<>', 'COIN')->groupBy('uid', 'ranse_created_at')->count();
+                ->whereNotIn("order_type", ["COIN", "FIRST_COIN"])->groupBy('uid', 'ranse_created_at')->count();
         } elseif ($type == 3) {
             // 优化师
             $recharge_coin_num = DB::table('orders')->where('status', "<>", 'UNPAID')
                 ->where('user_id', $accountId)->whereBetween("created_at", [$start, $end])
                 ->whereBetween('ranse_created_at', [$start, $end])
-                ->where('order_type', 'COIN')->groupBy('uid', 'ranse_created_at')->count();
+                ->whereIn("order_type", ["COIN", "FIRST_COIN"])->groupBy('uid', 'ranse_created_at')->count();
             $recharge_vip_num = DB::table('orders')->where('status', "<>", 'UNPAID')
                 ->where('user_id', $accountId)->whereBetween("created_at", [$start, $end])
                 ->whereBetween('ranse_created_at', [$start, $end])
-                ->where('order_type', '<>', 'COIN')->groupBy('uid', 'ranse_created_at')->count();
+                ->whereNotIn("order_type", ["COIN", "FIRST_COIN"])->groupBy('uid', 'ranse_created_at')->count();
         } else {
             // 其他暂不统计
-            $recharge_coin_num = 0;
-            $recharge_vip_num = 0;
+            $recharge_coin_num = DB::table('orders')->where('status', "<>", 'UNPAID')
+                ->whereBetween("created_at", [$start, $end])
+                ->whereBetween('ranse_created_at', [$start, $end])
+                ->whereIn("order_type", ["COIN", "FIRST_COIN"])->groupBy('uid', 'ranse_created_at')->count();
+            $recharge_vip_num = DB::table('orders')->where('status', "<>", 'UNPAID')
+                ->whereBetween("created_at", [$start, $end])
+                ->whereBetween('ranse_created_at', [$start, $end])
+                ->whereNotIn("order_type", ["COIN", "FIRST_COIN"])->groupBy('uid', 'ranse_created_at')->count();
         }
         return [$recharge_coin_num, $recharge_vip_num];
     }
@@ -143,10 +287,10 @@ class UserStatisticsService extends BaseService
     public static function historyStats(int $accountId, $type)
     {
         print_sql();
-        $month = self::getStaticsData($accountId,date('Y-m-01'), date('Y-m-d', strtotime('yesterday')), $type);
-        $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);
-        $history = self::getHistoryData($accountId,$type);
-        return ['month' => $month,'lastMonth' => $lastMonth,'history' => $history];
+        $month = self::getStaticsData($accountId, date('Y-m-01'), date('Y-m-d', strtotime('yesterday')), $type);
+        $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);
+        $history = self::getHistoryData($accountId, $type);
+        return ['month' => $month, 'lastMonth' => $lastMonth, 'history' => $history];
     }
 
     /**
@@ -154,20 +298,20 @@ class UserStatisticsService extends BaseService
      * name: getMonthData
      * @param int $accountId 账号
      * @param mixed $type 角色类型 账号类型 1 其他 2 投放公司 3 优化师
-     * @param  mixed $minId 小程序id
+     * @param mixed $minId 小程序id
      * date 2023/06/27 11:19
      */
     protected static function getHistoryData($accountId, $type, $minId = 0)
     {
         $date = date('Y-m-d', strtotime('yesterday'));
-        $sql = TjOptimizerDayNewUser::where('date',$date);
+        $sql = TjOptimizerDayNewUser::where('date', $date);
         if ($type == 2) {
             $sql->where('puser_id', $accountId);
         } elseif ($type == 3) {
             $sql->where('puser_id', $accountId);
         }
-        if ($minId){
-            $sql->where('miniprogram_id',$minId);
+        if ($minId) {
+            $sql->where('miniprogram_id', $minId);
         }
         $info = $sql->select(
             DB::raw("sum(recharge_amount_total) as recharge_amount_total"), // 总充金额
@@ -175,8 +319,8 @@ class UserStatisticsService extends BaseService
         )->first();
 
         return [
-            'recharge_amount_total' => $info->recharge_amount_total?:0,
-            'recharge_user_total' => $info->recharge_user_total?: 0,
+            'recharge_amount_total' => $info->recharge_amount_total ?: 0,
+            'recharge_user_total' => $info->recharge_user_total ?: 0,
         ];
     }
 
@@ -185,10 +329,10 @@ class UserStatisticsService extends BaseService
      * name: getMonthData
      * @param int $accountId 账号
      * @param mixed $type 角色类型 账号类型 1 其他 2 投放公司 3 优化师
-     * @param  mixed $minId 小程序id
+     * @param mixed $minId 小程序id
      * date 2023/06/27 11:19
      */
-    private static function getStaticsData($accountId, $start, $end,$type,$minId = 0)
+    private static function getStaticsData($accountId, $start, $end, $type, $minId = 0)
     {
         $sql = TjOptimizerDayNewUser::where('date', '>=', $start)->where("date", "<=", $end);
         if ($type == 2) {
@@ -196,8 +340,8 @@ class UserStatisticsService extends BaseService
         } elseif ($type == 3) {
             $sql->where('puser_id', $accountId);
         }
-        if ($minId){
-            $sql->where('miniprogram_id',$minId);
+        if ($minId) {
+            $sql->where('miniprogram_id', $minId);
         }
         return self::handleStaticData($sql);
 
@@ -210,9 +354,9 @@ class UserStatisticsService extends BaseService
      * @return array
      * date 2023/06/27 14:51
      */
-    protected  static function handleStaticData($sql): array
+    protected static function handleStaticData($sql): array
     {
-        $info =  $sql->select(
+        $info = $sql->select(
             DB::raw("sum(new_user_recharge_total) as new_user_recharge_total"), // 充值人数
             DB::raw("sum(new_user_num) as new_user_num"), // 新增用户人数
             DB::raw("sum(new_user_recharge_num) as new_user_recharge_num"), // 充值人数
@@ -220,11 +364,11 @@ class UserStatisticsService extends BaseService
             DB::raw("sum(new_user_recharge_coin_num) as new_user_recharge_coin_num") // 普通充值人数
         )->first();
         return [
-            'new_user_recharge_total' => $info->new_user_recharge_total?:0,
-            'new_user_num' => $info->new_user_num?: 0,
-            'new_user_recharge_num' => $info->new_user_recharge_num?:0,
-            'new_user_recharge_vip_num' => $info->new_user_recharge_vip_num?: 0,
-            'new_user_recharge_coin_num' => $info->new_user_recharge_coin_num ?:0,
+            'new_user_recharge_total' => $info->new_user_recharge_total ?: 0,
+            'new_user_num' => $info->new_user_num ?: 0,
+            'new_user_recharge_num' => $info->new_user_recharge_num ?: 0,
+            'new_user_recharge_vip_num' => $info->new_user_recharge_vip_num ?: 0,
+            'new_user_recharge_coin_num' => $info->new_user_recharge_coin_num ?: 0,
         ];
     }
 

+ 5 - 0
modules/Statistic/routes/route.php

@@ -1,6 +1,7 @@
 <?php
 
 use Illuminate\Support\Facades\Route;
+use Modules\Statistic\Http\Controllers\HomeStatisticsController;
 use Modules\Statistic\Http\Controllers\UserStatisticsController;
 
 Route::prefix('statistic')->group(function(){
@@ -16,4 +17,8 @@ Route::prefix('statistic')->group(function(){
         // 投手日充值列表汇总
         Route::any('list_statistics',[UserStatisticsController::class,'listStatistics']);
     });
+
+    // 首页统计
+    Route::any("home",[HomeStatisticsController::class,"statistics"]);
+
 });