ith5 5 месяцев назад
Родитель
Сommit
a257a78973
2 измененных файлов с 124 добавлено и 0 удалено
  1. 13 0
      app/v1/controller/gameLog/AnalyseController.php
  2. 111 0
      app/v1/logic/gameLog/AnalyseLogic.php

+ 13 - 0
app/v1/controller/gameLog/AnalyseController.php

@@ -45,6 +45,19 @@ class AnalyseController extends BaseController
             ['days', '']
         ]);
         $data = $this->logic->getRetentionDayDataList($where);
+        $data['data'] = $this->logic->trandformListColumn($data['data'],['game']);
+        return $this->success($data);
+    }
+
+    //数据总览
+    public function getDataOverview(Request $request){
+        $where = $request->more([
+            ['game_id', ''],
+            ['reg_date', ''],
+            ['auth_id', ''],
+            ['media_id', '']
+        ]);
+        $data = $this->logic->getDataOverview($where);
         return $this->success($data);
     }
 

+ 111 - 0
app/v1/logic/gameLog/AnalyseLogic.php

@@ -158,6 +158,7 @@ class AnalyseLogic extends BaseLogic
       foreach($baseData as $row){
         $game_id = $row['game_id'];
         $tdate = $row['tdate'];
+        $data[$game_id]['game_id'] = $game_id;
         $data[$game_id][$tdate]['reg_total'] = $row['reg_total'];
         $data[$game_id][$tdate]['active_total'] = !empty($activeData[$tdate]['active_total']) ? $activeData[$tdate]['active_total'] : 0;
         $data[$game_id][$tdate]['retention_total'] = ToolLogic::getPercent($data[$game_id][$tdate]['active_total'],$data[$game_id][$tdate]['reg_total']);
@@ -199,13 +200,123 @@ class AnalyseLogic extends BaseLogic
       }
       $totalRow['total'] = ToolLogic::getPercent($totalRow['total_active_total'],$totalRow['total_reg_total']);
 
+      // 获取两个注册日期之间的日期列表
+      $dateList = ToolLogic::getDatesBetween($where['reg_date'][0],$where['reg_date'][1]);
+      $columnsData = [
+        [
+          'title' => '游戏ID',
+          'dataIndex' => 'game_id',
+          'width' => 120,
+        ],
+        [
+          'title' => '游戏',
+          'dataIndex' => 'game_name',
+          'width' => 120,
+        ],
+        [
+          'title' => '合计',
+          'dataIndex' => 'total',
+          'width' => 120,
+        ]
+      ];
+      foreach($dateList as $date){
+        $columnsData[] = [
+          'title' => $date,
+          'dataIndex' => $date,
+          'width' => 120,
+        ];
+      }
 
       $result['data'] = $data;
       $result['totalRow'] = $totalRow;
+      $result['columns'] = $columnsData;
       return $result;
     }
 
 
+    /*
+     数据总览
+     1. DAU 登陆总数 login_total
+     2. ARPU pay_total/pay_num
+    */
+    public function getDataOverview($where){
+      $params = $this->searchByAuth($where);
+      $whereSql = $this->generateWhereSql($params);
+      // 基础汇总信息
+      $field = "
+      SUM(login_total) AS login_total,  -- 登陆总数
+      SUM(reg_total) AS reg_total, -- 注册总数
+      SUM(pay_total) AS pay_total, -- 付费总数
+      SUM(pay_num) AS pay_num, -- 付费人数
+      SUM(reg_login_total) AS reg_login_total, -- 注册登陆总数
+      SUM(reg_pay_num) AS reg_pay_num, -- 注册付费数
+      SUM(reg_pay_total) AS reg_pay_total, -- 注册付费金额
+      SUM(old_login_total) AS old_login_total, -- 老用户登陆总数
+      tdate";
+      $baseData = $this->generateYearUnionList('base_total_day_',$where['reg_date'],$whereSql,$field,'tdate');
+     
+      if(empty($baseData)){
+        return [
+          'data' => [],
+          'totalRow' => []
+        ];
+      }
+      
+      $actWhereSql = str_replace("AND tdate", "AND reg_date", $whereSql);
+      $actWhereSql .= " AND days = 1";
+      $actData = $this->generateYearUnionList('game_active_day_',$where['reg_date'],$actWhereSql,'SUM(active_total) AS active_total,reg_date','reg_date');
+      $actData = array_column($actData,null,'reg_date');
+
+      $totalRow = [
+        'tdate' => '合计'
+      ];
+
+      foreach($baseData as &$row){
+        $totalRow['login_total']     = !empty($totalRow['login_total']) ? $totalRow['login_total'] + $row['login_total'] : $row['login_total']; // 总用户 - 登陆总数
+        $totalRow['reg_login_total'] = !empty($totalRow['reg_login_total']) ? $totalRow['reg_login_total'] + $row['reg_login_total'] : $row['reg_login_total']; // 新用户 - 注册登陆总数
+        $totalRow['pay_num']         = !empty($totalRow['pay_num']) ? $totalRow['pay_num'] + $row['pay_num'] : $row['pay_num']; // 总用户 - 付费人数
+        $totalRow['pay_total']       = !empty($totalRow['pay_total']) ? $totalRow['pay_total'] + $row['pay_total'] : $row['pay_total']; // 总用户 - 付费金额
+
+        $totalRow['old_login_total'] = !empty($totalRow['old_login_total']) ? $totalRow['old_login_total'] + $row['old_login_total'] : $row['old_login_total']; // 老用户 - 登陆总数
+        $totalRow['reg_total']       = !empty($totalRow['reg_total']) ? $totalRow['reg_total'] + $row['reg_total'] : $row['reg_total']; // 新用户 - 注册总数
+        $totalRow['reg_pay_num']     = !empty($totalRow['reg_pay_num']) ? $totalRow['reg_pay_num'] + $row['reg_pay_num'] : $row['reg_pay_num']; // 新用户 - 注册付费数
+        $totalRow['reg_pay_total']   = !empty($totalRow['reg_pay_total']) ? $totalRow['reg_pay_total'] + $row['reg_pay_total'] : $row['reg_pay_total']; // 新用户 - 注册付费金额
+        $totalRow['active']          = !empty($totalRow['active']) ? $totalRow['active'] + $actData[$row['tdate']]['active_total']??0 : $actData[$row['tdate']]['active_total']??0; // 次留数
+
+
+        $row['active'] = !empty($actData[$row['tdate']]['active_total']) ? $actData[$row['tdate']]['active_total'] : 0; // 次留数
+        $row['arpu'] = ToolLogic::getRound($row['pay_total'],$row['pay_num']); // 总用户 - ARPU
+        $row['pay_rate'] = ToolLogic::getPercent($row['pay_num'],$row['login_total']); // 总用户 - 付费率
+
+        $row['reg_pay_rate'] = ToolLogic::getPercent($row['reg_pay_num'],$row['reg_total']); // 新用户 - 注册付费率
+        $row['reg_arpu'] = ToolLogic::getRound($row['reg_pay_total'],$row['reg_pay_num']); // 新用户 - 注册付费ARPU
+        $row['act_rate'] = ToolLogic::getPercent($row['active'],$row['reg_total']); // 新用户 - 次留率
+
+        $row['old_pay_num'] = $row['pay_num'] - $row['reg_pay_num']; // 老用户 - 付费人数
+        $row['old_pay_total'] = $row['pay_total'] - $row['reg_pay_total']; // 老用户 - 付费金额
+        $row['old_pay_rate'] = ToolLogic::getPercent($row['old_pay_num'],$row['old_login_total']); // 老用户 - 付费率
+        $row['old_arpu'] = ToolLogic::getRound($row['old_pay_total'],$row['old_pay_num']); // 老用户 - 付费ARPU
+
+      }
+      $totalRow['arpu'] = ToolLogic::getRound($totalRow['pay_total'],$totalRow['pay_num']); // 总用户 - ARPU
+      $totalRow['pay_rate'] = ToolLogic::getPercent($totalRow['pay_num'],$totalRow['login_total']); // 总用户 - 付费率
+      $totalRow['reg_pay_rate'] = ToolLogic::getPercent($totalRow['reg_pay_num'],$totalRow['reg_total']); // 新用户 - 注册付费率
+      $totalRow['reg_arpu'] = ToolLogic::getRound($totalRow['reg_pay_total'],$totalRow['reg_pay_num']); // 新用户 - 注册付费ARPU
+      $totalRow['old_pay_num'] = $totalRow['pay_num'] - $totalRow['reg_pay_num']; // 老用户 - 付费人数
+      $totalRow['old_pay_total'] = $totalRow['pay_total'] - $totalRow['reg_pay_total']; // 老用户 - 付费金额
+      $totalRow['old_pay_rate'] = ToolLogic::getPercent($totalRow['old_pay_num'],$totalRow['old_login_total']); // 老用户 - 付费率
+      $totalRow['old_arpu'] = ToolLogic::getRound($totalRow['old_pay_total'],$totalRow['old_pay_num']); // 老用户 - 付费ARPU
+      $totalRow['act_rate'] = ToolLogic::getPercent($totalRow['active'],$totalRow['reg_total']); // 次留率
+
+
+
+      return [
+        'data' => $baseData,
+        'totalRow' => $totalRow
+      ];
+    }
+
+
 
 
     // 生成基础日统计表的联合查询列表