فهرست منبع

Merge branch 'dev' of http://git.range8.cn/youyou/dms-api into dev

PC-202304251453\Administrator 5 ماه پیش
والد
کامیت
4b0451066e
1فایلهای تغییر یافته به همراه194 افزوده شده و 8 حذف شده
  1. 194 8
      app/v1/logic/gameLog/ChannelAnalysisLogic.php

+ 194 - 8
app/v1/logic/gameLog/ChannelAnalysisLogic.php

@@ -826,34 +826,220 @@ class channelAnalysisLogic extends BaseLogic
 
     /**
      * ltv
+     * 
      */
     public function getLtvDataList($where){
         $params = $this->searchByAuth($where);
+        // 展示类型
+        $dataType = $params['data_type'] ?? 'recovery';
         $nowDate = date("Y-m-d");
         $whereSql = $this->generateWhereSql($params);
 
         // 1. 获取消耗金额
-        $costData = Db::connect('db_advert')->query("SELECT SUM(money) as cost FROM media_cost WHERE 1=1 $whereSql group by tdate");
+        $costData = Db::connect('db_advert')->query("SELECT SUM(money) as cost, tdate FROM media_cost WHERE 1=1 $whereSql group by tdate");
         $costData = array_column($costData, 'cost', 'tdate');
 
         // 2. 获取注册数
         $baseData = $this->generateYearUnionList('base_total_day_', $params['reg_date'], $whereSql, "SUM(reg_total) as reg_total, tdate", 'tdate');
+        $baseData = array_column($baseData, null, 'tdate');
+
+        print_r($baseData);
      
+        // 3. 获取注册付费金额
+         $field  = "
+            reg_date,
+            pay_date,
+            SUM(pay_num) as pay_num,
+            SUM(pay_total) as pay_total,
+            DATEDIFF(pay_date, reg_date) as day,
+            SUM(addup_pay_num) AS addup_pay_num,
+            SUM(addup_pay_total) AS addup_pay_total,
+            SUM(addup_pay_amount) AS addup_pay_amount
+        ";
+        $regPayWhereSql = str_replace('AND tdate','AND reg_date',$whereSql);
+        $regPayData = $this->generateYearUnionList('game_reg_pay_day_', $params['reg_date'], $regPayWhereSql, $field, 'reg_date,day');
 
+       if(empty($regPayData)){
+        return ['data'=>[],'totalRow'=>[]];
+       }
+           
         // 3. 获取日期列表(注册日期和今天之间的日期)
-      
+        /**
+         * 计算ltv
+         * game_reg_pay_day_
+         * 
+         * 消耗金额、注册数、注册成本,按照注册日期,分组统计
+         * 
+         * 第一天: reg_date 注册时间(不变), reg_pay 1天总付费金额(addup_pay_total) / 消耗金额 * 100%
+         * 第二天: reg_date 注册时间(不变), reg_pay 2天总付费金额(addup_pay_total) / 消耗金额 * 100%
+         */
+
+        // 合计
+        $totalRow = [
+            'tdate' => '合计'
+        ];
+        // 按照天计算LTV
+        foreach($regPayData as &$row){
+            $data[$row['reg_date']]['tdate'] = $row['reg_date'];
+            // 计算相差
+            $daykey = (strtotime($row['pay_date'])-strtotime($row['reg_date']))/86400+1;
+            $daykey = 'd'.$daykey;
+           
+            // 注册数
+            $data[$row['reg_date']]['reg_total'] = $baseData[$row['reg_date']]['reg_total'] ?? 0;
+            // 注册成本
+            $data[$row['reg_date']]['reg_cost'] = ToolLogic::getRound($costData[$row['reg_date']]??0,$data[$row['reg_date']]['reg_total']??0);
+            // 消耗金额
+            $data[$row['reg_date']]['cost'] = $costData[$row['reg_date']]??0;
+          
+
+            switch($dataType){
+
+                /* 不扣除分成/cost , 计算 */
+                case 'recovery':
+                // 按天回本率
+                $data[$row['reg_date']][$daykey] = ToolLogic::getPercent($row['addup_pay_total'],$costData[$row['reg_date']]??0,1);
+                // 累计回本率
+                if($nowDate === $row['pay_date']){
+                    $data[$row['reg_date']]['d0'] = ToolLogic::getPercent($row['addup_pay_total'],$costData[$row['reg_date']]??0,1);
+                    $totalRow['d0']['addup_pay_total'] = !empty($totalRow['d0']['addup_pay_total']) ? ($totalRow['d0']['addup_pay_total'] + $row['addup_pay_total']) : $row['addup_pay_total'];
+                }
+                // $data[$row['reg_date']]['addup_pay_total'] = $row['addup_pay_total'];
+                // 合计的按日的注册总充值
+                $totalRow[$daykey]['addup_pay_total'] = !empty($totalRow[$daykey]['addup_pay_total']) ? ($totalRow[$daykey]['addup_pay_total'] + $row['addup_pay_total']??0) : $row['addup_pay_total']??0; 
+                break;
+
+                /* 扣除分成/cost , 计算 */
+                case 'remount':
+                    // 按天回本率
+                    $data[$row['reg_date']][$daykey] = ToolLogic::getPercent($row['addup_pay_amount'],$costData[$row['reg_date']]??0,1);
+                    // 累计回本率
+                    if($nowDate === $row['pay_date']){
+                        $data[$row['reg_date']]['d0'] = ToolLogic::getPercent($row['addup_pay_amount'],$costData[$row['reg_date']]??0,1);
+                        $totalRow['d0']['addup_pay_amount'] = !empty($totalRow['d0']['addup_pay_amount']) ? ($totalRow['d0']['addup_pay_amount'] + $row['addup_pay_amount']) : $row['addup_pay_amount'];
+                    }
+                    // $data[$row['reg_date']]['addup_pay_amount'] = $row['addup_pay_amount'];
+                    // 合计的按日的扣除分成(注册总充值)
+                    $totalRow[$daykey]['addup_pay_amount'] = !empty($totalRow[$daykey]['addup_pay_amount']) ? ($totalRow[$daykey]['addup_pay_amount'] + $row['addup_pay_amount']??0) : $row['addup_pay_amount']??0; 
+                break;
+
+                /*  累计计费付费金额 / 注册数 */
+                case 'ltv':
+                    // 按天LTV
+                    $data[$row['reg_date']][$daykey] = ToolLogic::getRound($row['addup_pay_total'],$baseData[$row['reg_date']]['reg_total']??0,1);
+                    // 累计LTV
+                    if($nowDate === $row['pay_date']){
+                        $data[$row['reg_date']]['d0'] = ToolLogic::getRound($row['addup_pay_total'],$baseData[$row['reg_date']]['reg_total']??0,1);
+                        $totalRow['d0']['addup_pay_total'] = !empty($totalRow['d0']['addup_pay_total']) ? ($totalRow['d0']['addup_pay_total'] + $row['addup_pay_total']) : $row['addup_pay_total'];
+                    }
+                    // $data[$row['reg_date']]['addup_pay_total'] = $row['addup_pay_total'];
+                    // 合计的按日的注册总充值
+                    $totalRow[$daykey]['addup_pay_total'] = !empty($totalRow[$daykey]['addup_pay_total']) ? ($totalRow[$daykey]['addup_pay_total'] + $row['addup_pay_total']??0) : $row['addup_pay_total']??0; 
+                break;
+
+                /* 后面的LTV数据, 按天LTV / 第一天LTV , 目的是为了计算LTV增长率*/
+                case 'ltvbs':
+                     $data[$row['reg_date']][$daykey] = ToolLogic::getRound($row['addup_pay_total'],$baseData[$row['reg_date']]['reg_total']??0,1);
+                     $fz = $data[$row['reg_date']]['d1']!=0 ? $data[$row['reg_date']]['d1'] : 1;
+                     $data[$row['reg_date']][$daykey] = round($data[$row['reg_date']][$daykey] / $fz,2);
+
+                     if($nowDate === $row['pay_date']){
+                        $data[$row['reg_date']]['d0'] = round($data[$row['reg_date']][$daykey] / $fz,2);
+                        $totalRow['d0']['addup_pay_total'] = !empty($totalRow['d0']['addup_pay_total']) ? ($totalRow['d0']['addup_pay_total'] + $row['addup_pay_total']) : $row['addup_pay_total'];
+                    }
+                    $totalRow[$daykey]['addup_pay_total'] = !empty($totalRow[$daykey]['addup_pay_total']) ? ($totalRow[$daykey]['addup_pay_total'] + $row['addup_pay_total']??0) : $row['addup_pay_total']??0; 
+                
+                break;
+
+                /* 付费人数*/ 
+                case 'pay_num':
+                    $data[$row['reg_date']][$daykey] = $row['pay_num'];
+                    if($nowDate === $row['pay_date']){
+                        $data[$row['reg_date']]['d0'] = $row['addup_pay_num'];
+                        $totalRow['d0'] = !empty($totalRow['d0']) ? ($totalRow['d0'] + $row['addup_pay_num']) : $row['addup_pay_num'];
+                    }
+                    $totalRow[$daykey] = !empty($totalRow[$daykey]['addup_pay_num']) ? ($totalRow[$daykey]['addup_pay_num'] + $row['pay_num']??0) : $row['pay_num']??0; 
+                     
+                break;
+
+                /* 付费总额 */
+                case 'pay_total':
+                    $data[$row['reg_date']][$daykey] = $row['pay_total'];
+                    if($nowDate === $row['pay_date']){
+                        $data[$row['reg_date']]['d0'] = $row['addup_pay_total'];
+                        $totalRow['d0'] = $row['addup_pay_total'];
+                    }
+                    $totalRow[$daykey] = !empty($totalRow[$daykey]['addup_pay_total']) ? ($totalRow[$daykey]['addup_pay_total'] + $row['pay_total']??0) : $row['pay_total']??0; 
+                break;
+
+                /* 付费率 */
+                case 'pay_rate':
+                    $data[$row['reg_date']][$daykey] = ToolLogic::getPercent($row['pay_num'],$baseData[$row['reg_date']]['reg_total']??0);
+                    if($nowDate === $row['pay_date']){
+                        $data[$row['reg_date']]['d0'] = ToolLogic::getPercent($row['addup_pay_num'],$baseData[$row['reg_date']]['reg_total']??0);
+                    }
+                    $totalRow[$daykey] = !empty($totalRow[$daykey]['addup_pay_num']) ? ($totalRow[$daykey]['addup_pay_num'] + $row['pay_num']??0) : $row['pay_num']??0; 
+                break;
+
+                /* 付费ARPU */
+                case 'arpu':
+                    $data[$row['reg_date']][$daykey] = ToolLogic::getRound($row['pay_total'],$row['pay_num']);
+
+                    if($nowDate === $row['pay_date']){
+                        $data[$row['reg_date']]['d0'] = ToolLogic::getRound($row['addup_pay_total'],$row['addup_pay_num']);
+                        $totalRow['d0']['addup_pay_total'] = $row['addup_pay_total'];
+                        $totalRow['d0']['addup_pay_num'] = $row['addup_pay_num'];
+                    }
+                    $totalRow[$daykey]['addup_pay_total'] = !empty($totalRow[$daykey]['addup_pay_total']) ? ($totalRow[$daykey]['addup_pay_total'] + $row['pay_total']??0) : $row['pay_total']??0; 
+                    $totalRow[$daykey]['addup_pay_num'] = !empty($totalRow[$daykey]['addup_pay_num']) ? ($totalRow[$daykey]['addup_pay_num'] + $row['pay_num']??0) : $row['pay_num']??0; 
+                    break;
+            }
+        }
 
+        foreach($data as $key=>&$row){
+            // 合计注册数
+            $totalRow['reg_total'] = !empty($totalRow['reg_total']) ? ($totalRow['reg_total'] + $baseData[$row['tdate']]['reg_total'] ?? 0) : $baseData[$row['tdate']]['reg_total'] ?? 0;
+           
+            // 合计消耗金额
+            $totalRow['cost'] = !empty($totalRow['cost']) ? ($totalRow['cost'] + $row['cost']??0) : $row['cost']??0;
 
-        foreach($baseData as &$row){
-            $dateList = ToolLogic::getDatesBetween($row['tdate'], $nowDate);
-            for($i=0;$i<count($dateList);$i++){
-                $row['d'.($i+1)] = '';
+            // 合计注册成本
+            $totalRow['reg_cost'] = ToolLogic::getRound($totalRow['cost']??0,$totalRow['reg_total']??0);
+     
+        }
+        foreach($totalRow as $key=>&$row){
+             if($key[0]==='d'){
+                switch($dataType){
+                    case 'recovery':
+                        $totalRow[$key] = ToolLogic::getPercent($totalRow[$key]['addup_pay_total'],$totalRow['cost']??0,1);
+                    break;
+                    case 'remount':
+                        $totalRow[$key] = ToolLogic::getPercent($totalRow[$key]['addup_pay_amount'],$totalRow['cost']??0,1);
+                    break;
+                    case 'ltv':
+                        $totalRow[$key] = ToolLogic::getRound($totalRow[$key]['addup_pay_total'],$totalRow['reg_total']??0);
+                    break;
+                    case 'ltvbs':
+                        $totalRow[$key] = ToolLogic::getRound($totalRow[$key]['addup_pay_total'],$totalRow['reg_total']??0);
+                        $fz = $totalRow['d1']??0!=0 ? $totalRow['d1'] : 1;
+                        $totalRow[$key] = round($totalRow[$key] / $fz,2); // 增长率
+                    break;
+                    case 'pay_rate':
+                        $totalRow[$key] = ToolLogic::getPercent($totalRow[$key]['addup_pay_num'],$totalRow['reg_total']??0);
+                    break;
+                    case 'arpu':
+                        $totalRow[$key] = ToolLogic::getRound($totalRow[$key]['addup_pay_total'],$totalRow['addup_pay_num']??0);
+                    break;
+                }
             }
         }
 
-        print_r($baseData);
+        
 
-        return $baseData;
+        return [
+            'data' =>array_values($data),
+            'totalRow' => $totalRow
+        ];
         
         
     }