ith5 hace 5 meses
padre
commit
5412c72071
Se han modificado 1 ficheros con 15 adiciones y 5 borrados
  1. 15 5
      app/v1/logic/dataReport/ChannelAnalysisLogic.php

+ 15 - 5
app/v1/logic/dataReport/ChannelAnalysisLogic.php

@@ -125,8 +125,9 @@ class ChannelAnalysisLogic extends BaseLogic
         }
         $unionBaseTotalDaySql = implode(" UNION ALL ", $baseTotalDaySqlParts);
 
+
         // 按照每日,获取=>注册数据
-        $regData = Db::connect('db_data_report')->query("SELECT tdate, SUM('reg_total') reg_total FROM ( {$unionBaseTotalDaySql} ) AS all_base_total_day  GROUP BY tdate order by tdate ");
+        $regData = Db::connect('db_data_report')->query("SELECT tdate, SUM(reg_total) reg_total FROM ( {$unionBaseTotalDaySql} ) AS all_base_total_day  GROUP BY tdate order by tdate ");
 
 
         // 2. 活跃数据:$actData = 按照日期,获取每日的 活跃数 SUM(【active_total】) 活跃天数 【days】, 分组 【reg_date,days】,game_active_day_2025
@@ -147,11 +148,14 @@ class ChannelAnalysisLogic extends BaseLogic
         $actDataSql = "select reg_date as tdate, days, sum(active_total) as active from ({$unionGameActiveDaySql}) as all_game_active_day group by reg_date,days";
         // 替换日期字段, 因为game_active_day_表的日期字段是[reg_date]
         $actDataSql = str_replace("AND tdate", "AND reg_date", $actDataSql);
+
+       
         // 日期、活跃天数、活跃数,按日期和活跃天数分组
         $actData = Db::connect('db_data_report')->query($actDataSql);
 
         $tdate = date('Y-m-d');
         $list = $totalData = [];
+        
         // 遍历每日的注册数
         foreach ($regData as $r) {
             // 如果当日没有注册的话,则跳过
@@ -160,6 +164,7 @@ class ChannelAnalysisLogic extends BaseLogic
             }
             // 注册日期
             $reg_date = $r['tdate'];
+         
             $list[$reg_date]['tdate'] = $reg_date;
             // 注册数
             $list[$reg_date]['reg'] = $r['reg_total'];
@@ -169,15 +174,20 @@ class ChannelAnalysisLogic extends BaseLogic
             for ($i = 1; $i <= $days; $i++) {
                 $dayKey = 'd' . $i;
                 // d1...dn的reg = 记录按日的注册数
-                $totalData[$dayKey]['reg'] += $r['reg_total'];
+                $totalData[$dayKey]['reg'] = !empty($totalData[$dayKey]['reg']) ? $totalData[$dayKey]['reg'] + $r['reg_total'] : $r['reg_total'];
             }
-            $totalData['reg'] += $r['reg_total'];
+            $totalData['reg'] = !empty($totalData['reg']) ? $totalData['reg'] + $r['reg_total'] : $r['reg_total'];
         }
 
+
         // 遍历每日的活跃数
         foreach ($actData as $r) {
             // 注册日期
             $reg_date = $r['tdate'];
+            // 如果当前日期没有数据,则跳过
+            if(empty($list[$reg_date])){
+                continue;
+            }
             // 如果日期,没有注册数/活跃数, 则跳过
             if (!$list[$reg_date]['reg'] || !$r['active']) {
                 continue;
@@ -191,7 +201,7 @@ class ChannelAnalysisLogic extends BaseLogic
             // N日留存率 = 第N天活跃数 ÷ 注册日注册数 × 100%。
             $list[$reg_date][$dayKey] = ToolLogic::getPercent($r['active'], $list[$reg_date]['reg']);
             // d1...dn的reg = 记录按日的活跃数
-            $totalData[$dayKey]['active'] += $r['active'];
+            $totalData[$dayKey]['active'] = !empty($totalData[$dayKey]['active']) ? $totalData[$dayKey]['active'] + $r['active'] : $r['active'];
         }
 
         $total = [];
@@ -199,7 +209,7 @@ class ChannelAnalysisLogic extends BaseLogic
             if ($key == 'reg') {
                 $total['reg'] = $val;
             } else {
-                $total[$key] = ToolLogic::getPercent($val['active'], $val['reg']);
+                $total[$key] = ToolLogic::getPercent($val['active']??0, $val['reg']??0);
             }
         }