PC-202304251453\Administrator 5 місяців тому
батько
коміт
776b03075c

+ 111 - 28
app/functions.php

@@ -10,33 +10,98 @@ function isValidDate($date, $format = 'Y-m-d'): bool
     return $d && $d->format($format) === $date;
 }
 
+// 获取IP地址
+function getIpLocation($ip): string
+{
+    $ip2region = new \Ip2Region();
+    try {
+        $region = $ip2region->memorySearch($ip);
+    } catch (\Exception $e) {
+        return '未知';
+    }
+    list($country, $number, $province, $city, $network) = explode('|', $region['region']);
+    if ($network === '内网IP') {
+        return $network;
+    }
+    if ($country == '中国') {
+        return $province.'-'.$city.':'.$network;
+    } else if ($country == '0') {
+        return '未知';
+    } else {
+        return $country;
+    }
+}
+
 /**
- * 获取两个日期之间的所有月份(格式:202508)
- *
- * @param string $startDate 开始日期(格式:Y-m-d)
- * @param string $endDate 结束日期(格式:Y-m-d)
- * @return array 月份数组,格式为 ['202508', '202509', ...]
+ * 两数相除
  */
-function getMonthsBetweenDates($startDate, $endDate) {
-    $months = [];
+function getRound($num, $base, $precision = 2){
+    if (!$base) return '0';
+    return round($num / $base, $precision);
+}
+
+/**
+ * 获取百分比
+ */
+function getPercent($num, $base, $precision = 2, $last = '%')
+{
+    $num  = intval($num);
+    $base = intval($base);
+
+    if (!$base) return '0';
+
+    return round($num / $base * 100, $precision) . $last;
+}
 
+// 多维数组排序
+function arrSort($data = [],$name='',$sort = 'desc'){
+    if(!$data || !$name){
+        return false;
+    }
+    $orders = [];
+    foreach($data as $v){
+        $orders[] = $v[$name];
+    }
+    if($sort == 'desc') {
+        array_multisort($orders,SORT_DESC, $data);
+    } else {
+        array_multisort($orders,SORT_ASC, $data);
+    }
+
+    return $data;
+}
+
+// 传入两日期,获取年范围
+function getYearRange($startDate, $endDate)
+{
+    $startYear = (int)date('Y', strtotime($startDate));
+    $endYear = (int)date('Y', strtotime($endDate));
+
+    $years = [];
+    for ($year = $startYear; $year <= $endYear; $year++) {
+        $years[] = $year;
+    }
+
+    return $years;
+}
+
+// 获取两个日期之间的所有月份
+function getMonthRange($startDate, $endDate): array
+{
+    $months = [];
     // 转换为 DateTime 对象
     $start = new DateTime($startDate);
     $end = new DateTime($endDate);
-
     // 确保开始日期不大于结束日期
     if ($start > $end) {
         return $months;
     }
-
     // 设置开始日期为当月的第一天
     $start->modify('first day of this month');
-
     // 循环直到超过结束日期
     while ($start <= $end) {
         // 添加当前月份到数组(格式:202508)
         $months[] = $start->format('Ym');
-
         // 增加一个月
         $start->add(new DateInterval('P1M'));
     }
@@ -44,24 +109,42 @@ function getMonthsBetweenDates($startDate, $endDate) {
     return $months;
 }
 
-// 获取IP地址
-function getIpLocation($ip): string
+// 获取两个日期之间的所有日期
+function getDateRange($startDate, $endDate): array
 {
-    $ip2region = new \Ip2Region();
-    try {
-        $region = $ip2region->memorySearch($ip);
-    } catch (\Exception $e) {
-        return '未知';
-    }
-    list($country, $number, $province, $city, $network) = explode('|', $region['region']);
-    if ($network === '内网IP') {
-        return $network;
+    $dates = [];
+    $startDate = new \DateTime($startDate);
+    $endDate = new \DateTime($endDate);
+    $endDate->modify('+1 day'); // 添加一天,包含结束日期
+
+    $interval = new \DateInterval('P1D');
+    $dateRange = new \DatePeriod($startDate, $interval, $endDate);
+
+    foreach ($dateRange as $date) {
+        $dates[] = $date->format('Y-m-d');
     }
-    if ($country == '中国') {
-        return $province.'-'.$city.':'.$network;
-    } else if ($country == '0') {
-        return '未知';
-    } else {
-        return $country;
+
+    return $dates;
+}
+
+/**
+ * 获取月份差
+ */
+function getMonthNum($sdate,$edate): float|int
+{
+    if($sdate > $edate){
+        return 0;
     }
+    list($y1,$m1)=explode("-",date('Y-m',strtotime($sdate)));
+    list($y2,$m2)=explode("-",date('Y-m',strtotime($edate)));
+
+    return abs(($y2-$y1)*12 + $m2-$m1);
+}
+
+/**
+ * 获取两个日期之间的天数
+ */
+function getDateNum($sdate,$edate): float|int
+{
+    return ceil((strtotime($edate) - strtotime($sdate)) / 86400);
 }

+ 1 - 1
app/v1/logic/customer/SdkOrderLogic.php

@@ -37,7 +37,7 @@ class SdkOrderLogic extends BaseLogic
             throw new ApiException('请选择时间范围');
         }
         // 获取年月
-        $monthRange = getMonthsBetweenDates($params['pay_time'][0], $params['pay_time'][1]);
+        $monthRange = getMonthRange($params['pay_time'][0], $params['pay_time'][1]);
 
         $eqWhere = ["game_id", "user_name", "order_id", "trade_id", "role_id", "role_name"];
         $where = [];

+ 97 - 98
app/v1/logic/dataReport/AnalyseLogic.php

@@ -4,7 +4,7 @@
 
 namespace app\v1\logic\dataReport;
 
-use app\v1\logic\tool\ToolLogic;
+
 use plugin\saiadmin\basic\BaseLogic;
 use plugin\saiadmin\exception\ApiException;
 use support\think\Db;
@@ -13,12 +13,12 @@ class AnalyseLogic extends BaseLogic
 {
 
     // 注册按日
-    public function getRegDayDataList($where)
+    public function getRegDayDataList($params)
     {
-        $params = $this->searchByAuth($where);
-        $whereSql = $this->generateWhereSql($params);
+        $params = $this->searchByAuth($params);
+        $whereRaw = $this->getCommonWhereRaw($params);
         $field = "SUM(reg_total) AS reg_total, tdate,game_id";
-        $baseData = $this->generateYearUnionList('base_total_day_', $where['reg_date'], $whereSql, $field, 'game_id,tdate');
+        $baseData = $this->generateYearUnionList('base_total_day_', $params['reg_date'], $whereRaw, $field, 'game_id,tdate');
 
         $data = [];
         foreach ($baseData as $row) {
@@ -32,7 +32,7 @@ class AnalyseLogic extends BaseLogic
         $list = array_values($data);
 
         $totalRow = ['game_id' => '合计'];
-        foreach ($list as &$row) {
+        foreach ($list as $row) {
             $totalRow['total'] = !empty($totalRow['total']) ? $totalRow['total'] + $row['total'] : $row['total'];
             foreach ($row as $key => $value) {
                 if ($key == 'total' || $key == 'game_id') {
@@ -43,7 +43,7 @@ class AnalyseLogic extends BaseLogic
         }
 
         // 获取两个注册日期之间的日期列表
-        $dateList = ToolLogic::getDatesBetween($where['reg_date'][0], $where['reg_date'][1]);
+        $dateList = getDateRange($params['reg_date'][0], $params['reg_date'][1]);
         $columnsData = [
             [
                 'title' => '游戏ID',
@@ -78,13 +78,13 @@ class AnalyseLogic extends BaseLogic
 
 
     // 留存按日
-    public function generateYearUnionList($namePrefix, $regDate, $whereSql = '', $field = '*', $group = null)
+    public function generateYearUnionList($namePrefix, $regDate, $whereRaw = '1=1', $field = '*', $group = null)
     {
-
-        $tableNames = ToolLogic::getYearlyTableNames($namePrefix, $regDate[0], $regDate[1]);
+        $yearRange = getYearRange($regDate[0], $regDate[1]);
         $sqlParts = [];
-        foreach ($tableNames as $tableName) {
-            $sqlParts[] = "SELECT * FROM {$tableName} WHERE 1=1 {$whereSql}";
+        foreach ($yearRange as $year) {
+            $tableName = $namePrefix . $year;
+            $sqlParts[] = "SELECT * FROM {$tableName} WHERE {$whereRaw}";
         }
         $unionSql = implode(" UNION ALL ", $sqlParts);
         $finalSql = "
@@ -114,14 +114,14 @@ class AnalyseLogic extends BaseLogic
 
         $tableName = 'base_total_hour_' . $ym;
 
-        $whereSql = 'WHERE 1=1';
+        $whereRaw = 'WHERE 1=1';
         if (!empty($params['game_id'])) {
-            $whereSql .= " AND game_id IN(" . implode(',', $params['game_id']) . ")";
+            $whereRaw .= " AND game_id IN(" . implode(',', $params['game_id']) . ")";
         }
         if (!empty($params['reg_date'])) {
-            $whereSql .= " AND tdate = '" . $params['reg_date'] . "'";
+            $whereRaw .= " AND tdate = '" . $params['reg_date'] . "'";
         }
-        $sql = "SELECT {$field} FROM {$tableName} {$whereSql}  GROUP BY game_id,thour,tdate";
+        $sql = "SELECT {$field} FROM {$tableName} {$whereRaw}  GROUP BY game_id,thour,tdate";
         $baseData = Db::connect('db_data_report')->query($sql);
         $data = [];
         foreach ($baseData as &$row) {
@@ -158,12 +158,12 @@ class AnalyseLogic extends BaseLogic
     {
         $params = $this->searchByAuth($where);
         // 构建whereSql
-        $whereSql = '';
+        $whereRaw = '';
         if (!empty($params['game_id'])) {
-            $whereSql .= " AND game_id IN(" . implode(',', $params['game_id']) . ")";
+            $whereRaw .= " AND game_id IN(" . implode(',', $params['game_id']) . ")";
         }
         if (!empty($params['reg_date'])) {
-            $whereSql .= " AND tdate BETWEEN '{$params['reg_date'][0]}' AND '{$params['reg_date'][1]}'";
+            $whereRaw .= " AND tdate BETWEEN '{$params['reg_date'][0]}' AND '{$params['reg_date'][1]}'";
         }
 
         $data = [];
@@ -174,12 +174,12 @@ class AnalyseLogic extends BaseLogic
         $activeField = "SUM(active_total) AS active_total, reg_date,game_id,days";
 
         // 1. 查询每天的注册数,根据注册时间,游戏
-        $baseData = $this->generateYearUnionList('base_total_day_', $params['reg_date'], $whereSql, $baseField, 'game_id,tdate');
+        $baseData = $this->generateYearUnionList('base_total_day_', $params['reg_date'], $whereRaw, $baseField, 'game_id,tdate');
         $baseData = array_column($baseData, null, 'tdate');
 
 
         // 2. 查询每天的活跃数,根据注册时间,游戏,留存天数
-        $activeWhereSql = str_replace("AND tdate", "AND reg_date", $whereSql);
+        $activeWhereSql = str_replace("AND tdate", "AND reg_date", $whereRaw);
         if (!empty($params['days'])) {
             $activeWhereSql .= " AND days = {$params['days']}";
         }
@@ -193,7 +193,7 @@ class AnalyseLogic extends BaseLogic
             $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']);
+            $data[$game_id][$tdate]['retention_total'] = getPercent($data[$game_id][$tdate]['active_total'], $data[$game_id][$tdate]['reg_total']);
             // 每日合计
             $data[$game_id]['total_reg_total'] = !empty($data[$game_id]['total_reg_total']) ? $data[$game_id]['total_reg_total'] + $data[$game_id][$tdate]['reg_total'] : $data[$game_id][$tdate]['reg_total'];
             $data[$game_id]['total_active_total'] = !empty($data[$game_id]['total_active_total']) ? $data[$game_id]['total_active_total'] + $data[$game_id][$tdate]['active_total'] : $data[$game_id][$tdate]['active_total'];
@@ -215,9 +215,9 @@ class AnalyseLogic extends BaseLogic
                     continue;
                 }
                 if ($key == 'total_active_total') {
-                    $row['total'] = ToolLogic::getPercent($row['total_active_total'], $row['total_reg_total']);
+                    $row['total'] = getPercent($row['total_active_total'], $row['total_reg_total']);
                 } else {
-                    $row[$key] = ToolLogic::getPercent($value['active_total'], $value['reg_total']);
+                    $row[$key] = getPercent($value['active_total'], $value['reg_total']);
                 }
             }
         }
@@ -226,13 +226,13 @@ class AnalyseLogic extends BaseLogic
             if ($totalKey == 'game_id' || $totalKey == 'total_active_total' || $totalKey == 'total_reg_total') {
                 continue;
             }
-            $totalRow[$totalKey] = ToolLogic::getPercent($row['active_total'], $row['reg_total']);
+            $totalRow[$totalKey] = getPercent($row['active_total'], $row['reg_total']);
 
         }
-        $totalRow['total'] = ToolLogic::getPercent($totalRow['total_active_total']??0, $totalRow['total_reg_total']??0);
+        $totalRow['total'] = getPercent($totalRow['total_active_total']??0, $totalRow['total_reg_total']??0);
 
         // 获取两个注册日期之间的日期列表
-        $dateList = ToolLogic::getDatesBetween($where['reg_date'][0], $where['reg_date'][1]);
+        $dateList = getDateRange($where['reg_date'][0], $where['reg_date'][1]);
         $columnsData = [
             [
                 'title' => '游戏ID',
@@ -269,7 +269,7 @@ class AnalyseLogic extends BaseLogic
     {
         $params = $this->searchByAuth($where);
 
-        $whereSql = $this->generateWhereSql($params);
+        $whereRaw = $this->getCommonWhereRaw($params);
 
         // 基础汇总信息
         $field = "
@@ -282,7 +282,7 @@ class AnalyseLogic extends BaseLogic
       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');
+        $baseData = $this->generateYearUnionList('base_total_day_', $where['reg_date'], $whereRaw, $field, 'tdate');
 
         if (empty($baseData)) {
             return [
@@ -291,7 +291,7 @@ class AnalyseLogic extends BaseLogic
             ];
         }
 
-        $actWhereSql = str_replace("AND tdate", "AND reg_date", $whereSql);
+        $actWhereSql = str_replace("AND tdate", "AND reg_date", $whereRaw);
         $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');
@@ -314,28 +314,28 @@ class AnalyseLogic extends BaseLogic
 
 
             $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['arpu'] = getRound($row['pay_total'], $row['pay_num']); // 总用户 - ARPU
+            $row['pay_rate'] = 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['reg_pay_rate'] = getPercent($row['reg_pay_num'], $row['reg_total']); // 新用户 - 注册付费率
+            $row['reg_arpu'] = getRound($row['reg_pay_total'], $row['reg_pay_num']); // 新用户 - 注册付费ARPU
+            $row['act_rate'] = 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
+            $row['old_pay_rate'] = getPercent($row['old_pay_num'], $row['old_login_total']); // 老用户 - 付费率
+            $row['old_arpu'] = 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['arpu'] = getRound($totalRow['pay_total'], $totalRow['pay_num']); // 总用户 - ARPU
+        $totalRow['pay_rate'] = getPercent($totalRow['pay_num'], $totalRow['login_total']); // 总用户 - 付费率
+        $totalRow['reg_pay_rate'] = getPercent($totalRow['reg_pay_num'], $totalRow['reg_total']); // 新用户 - 注册付费率
+        $totalRow['reg_arpu'] = 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']); // 次留率
+        $totalRow['old_pay_rate'] = getPercent($totalRow['old_pay_num'], $totalRow['old_login_total']); // 老用户 - 付费率
+        $totalRow['old_arpu'] = getRound($totalRow['old_pay_total'], $totalRow['old_pay_num']); // 老用户 - 付费ARPU
+        $totalRow['act_rate'] = getPercent($totalRow['active'], $totalRow['reg_total']); // 次留率
 
 
         return [
@@ -353,7 +353,7 @@ class AnalyseLogic extends BaseLogic
             $agentData = Db::connect('db_advert')->query("SELECT id,name FROM agent_list WHERE 1=1 AND name = '{$params['agent_name']}'");
             $params['agent_id'] = $agentData[0]['id'] ?? 0;
         }
-        $whereSql = $this->generateWhereSql($params);
+        $whereRaw = $this->getCommonWhereRaw($params);
         // 基础汇总信息
         $field = "
       SUM(login_total) AS login_total,
@@ -365,7 +365,7 @@ class AnalyseLogic extends BaseLogic
       SUM(reg_pay_total) AS reg_pay_total,
       SUM(old_login_total) AS old_login_total,
       date_format(`tdate`, '%Y-%m') AS mdate";
-        $baseData = $this->generateYearUnionList('base_total_day_', $where['reg_date'], $whereSql, $field, 'mdate');
+        $baseData = $this->generateYearUnionList('base_total_day_', $where['reg_date'], $whereRaw, $field, 'mdate');
 
         if (empty($baseData)) {
             return [
@@ -374,7 +374,7 @@ class AnalyseLogic extends BaseLogic
             ];
         }
 
-        $actWhereSql = str_replace("AND tdate", "AND reg_date", $whereSql);
+        $actWhereSql = str_replace("AND tdate", "AND reg_date", $whereRaw);
         $actWhereSql .= " AND days = 1";
         $actData = $this->generateYearUnionList('game_active_day_', $where['reg_date'], $actWhereSql, 'SUM(active_total) AS active_total,date_format(reg_date, "%Y-%m") AS mdate', 'mdate');
         $actData = array_column($actData, null, 'mdate');
@@ -397,28 +397,28 @@ class AnalyseLogic extends BaseLogic
 
 
             $row['active'] = !empty($actData[$row['mdate']]['active_total']) ? $actData[$row['mdate']]['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['arpu'] = getRound($row['pay_total'], $row['pay_num']); // 总用户 - ARPU
+            $row['pay_rate'] = 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['reg_pay_rate'] = getPercent($row['reg_pay_num'], $row['reg_total']); // 新用户 - 注册付费率
+            $row['reg_arpu'] = getRound($row['reg_pay_total'], $row['reg_pay_num']); // 新用户 - 注册付费ARPU
+            $row['act_rate'] = 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
+            $row['old_pay_rate'] = getPercent($row['old_pay_num'], $row['old_login_total']); // 老用户 - 付费率
+            $row['old_arpu'] = 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['arpu'] = getRound($totalRow['pay_total'], $totalRow['pay_num']); // 总用户 - ARPU
+        $totalRow['pay_rate'] = getPercent($totalRow['pay_num'], $totalRow['login_total']); // 总用户 - 付费率
+        $totalRow['reg_pay_rate'] = getPercent($totalRow['reg_pay_num'], $totalRow['reg_total']); // 新用户 - 注册付费率
+        $totalRow['reg_arpu'] = 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']); // 次留率
+        $totalRow['old_pay_rate'] = getPercent($totalRow['old_pay_num'], $totalRow['old_login_total']); // 老用户 - 付费率
+        $totalRow['old_arpu'] = getRound($totalRow['old_pay_total'], $totalRow['old_pay_num']); // 老用户 - 付费ARPU
+        $totalRow['act_rate'] = getPercent($totalRow['active'], $totalRow['reg_total']); // 次留率
 
 
         return [
@@ -438,8 +438,8 @@ class AnalyseLogic extends BaseLogic
         $ldate = date('Y-m-d', strtotime($tdate . ' -1 days'));
         $wdate = date('Y-m-d', strtotime($tdate . ' -7 days'));
         unset($params['reg_date']);
-        $whereSql = $this->generateWhereSql($params);
-        $whereSql .= " AND tdate IN ('{$tdate}','{$ldate}','{$wdate}')";
+        $whereRaw = $this->getCommonWhereRaw($params);
+        $whereRaw .= " AND tdate IN ('{$tdate}','{$ldate}','{$wdate}')";
 
 
         $field = "
@@ -452,7 +452,7 @@ class AnalyseLogic extends BaseLogic
         $year = (int)date('Y', strtotime($tdate));
         $tableName = 'base_total_day_' . $year;
 
-        $baseData = Db::connect('db_data_report')->query("SELECT {$field} FROM {$tableName} WHERE 1=1 {$whereSql} GROUP BY game_id,tdate");
+        $baseData = Db::connect('db_data_report')->query("SELECT {$field} FROM {$tableName} WHERE 1=1 {$whereRaw} GROUP BY game_id,tdate");
 
         if (empty($baseData)) {
             return [
@@ -477,7 +477,7 @@ class AnalyseLogic extends BaseLogic
                 $data[$gameId]['login_total'] = $row['login_total']; // DAU
                 $data[$gameId]['pay_total'] = $row['pay_total'] ?? 0; // 今日充值
                 $data[$gameId]['pay_num'] = $row['pay_num'] ?? 0; // 今日付费人数
-                $data[$gameId]['pay_arpu'] = ToolLogic::getRound($row['pay_total'], $row['pay_num']);  // 今日付费ARPU
+                $data[$gameId]['pay_arpu'] = getRound($row['pay_total'], $row['pay_num']);  // 今日付费ARPU
 
 
                 $allTotal += $row['pay_total'];
@@ -502,14 +502,14 @@ class AnalyseLogic extends BaseLogic
             }
         }
 
-        $totalRow['pay_arpu'] = ToolLogic::getRound($totalRow['pay_total'], $totalRow['pay_num']); // 今日充值ARPU
-        $totalRow['pay_ratio'] = ToolLogic::getPercent($totalRow['pay_total'], $allTotal); // 今日充值占比
+        $totalRow['pay_arpu'] = getRound($totalRow['pay_total'], $totalRow['pay_num']); // 今日充值ARPU
+        $totalRow['pay_ratio'] = getPercent($totalRow['pay_total'], $allTotal); // 今日充值占比
         $totalRow['pay_increase_yestoday'] = $totalRow['pay_total'] - $totalRow['yestoday_pay_total']; // 昨日增长
         $totalRow['pay_increase_week'] = $totalRow['pay_total'] - $totalRow['week_pay_total']; // 7天增长
 
         foreach ($data as &$row) {
 
-            $row['pay_ratio'] = ToolLogic::getPercent($row['pay_total'], $allTotal); // 今日充值占比
+            $row['pay_ratio'] = getPercent($row['pay_total'], $allTotal); // 今日充值占比
             $row['pay_increase_yestoday'] = $row['pay_total'] - $row['yestoday_pay_total']; // 昨日增长
             $row['pay_increase_week'] = $row['pay_total'] - $row['week_pay_total']; // 7天增长
         }
@@ -536,18 +536,15 @@ class AnalyseLogic extends BaseLogic
         $params = $this->searchByAuth($where);
        
         // 判断不能超过90天查询
-        $days = ToolLogic::getDays($where['reg_date'][0], $where['reg_date'][1]);
+        $days = getDateNum($where['reg_date'][0], $where['reg_date'][1]);
         if ($days > 90) {
             throw new ApiException('时间查询范围请勿超过90天');
         }
         $whereParams = $params;
         unset($whereParams['reg_date']);
-        $whereSql = $this->generateWhereSql($whereParams);
-
-     
-        $whereSql = str_replace('tdate', 'reg_date', $whereSql);
-
+        $whereRaw = $this->getCommonWhereRaw($whereParams);
 
+        $whereRaw = str_replace('tdate', 'reg_date', $whereRaw);
 
         // 1. 根据注册时间,获取注册付费人数
         $payData = Db::connect('db_game_log')->query("
@@ -555,7 +552,7 @@ class AnalyseLogic extends BaseLogic
             SUBSTRING(reg_date,1,10) as dimension, 
             COUNT(DISTINCT uid) as pay_num 
             FROM sdk_order_success
-            WHERE 1=1 {$whereSql} AND reg_date BETWEEN '{$params['reg_date'][0]} 00:00:00' AND '{$params['reg_date'][1]} 23:59:59'
+            WHERE 1=1 {$whereRaw} AND reg_date BETWEEN '{$params['reg_date'][0]} 00:00:00' AND '{$params['reg_date'][1]} 23:59:59'
                 GROUP BY 
                 dimension
         ");
@@ -566,8 +563,9 @@ class AnalyseLogic extends BaseLogic
         // 2. 计算留存付费的人数
         $sqlArr = [];
         $medate = date("Y-m-d", strtotime("+ 60 day", strtotime($params['reg_date'][1])));
-        $tableNames = ToolLogic::getMonthlyTableNames('sdk_login_log_', $params['reg_date'][0], $medate);
-        foreach ($tableNames as $tableName) {
+        $monthRange = getMonthRange($params['reg_date'][0], $medate);
+        foreach ($monthRange as $month) {
+            $tableName = 'sdk_login_log_' . $month;
             $sqlArr[] = "
           SELECT  
             CONCAT(FROM_UNIXTIME(reg_time, '%Y-%m-%d'), '|', TIMESTAMPDIFF(DAY, FROM_UNIXTIME(reg_time), FROM_UNIXTIME(login_time))) AS dimension,
@@ -580,10 +578,10 @@ class AnalyseLogic extends BaseLogic
                 DISTINCT user_name
               FROM sdk_order_success
                WHERE 1=1
-                {$whereSql} AND reg_date BETWEEN '{$params['reg_date'][0]} 00:00:00' AND '{$params['reg_date'][1]} 23:59:59'
+                {$whereRaw} AND reg_date BETWEEN '{$params['reg_date'][0]} 00:00:00' AND '{$params['reg_date'][1]} 23:59:59'
             )  AS b ON a.user_name = b.user_name
            WHERE 1=1
-              {$whereSql} AND reg_time BETWEEN " . strtotime($params['reg_date'][0] . " 00:00:00") . " AND " . strtotime($params['reg_date'][1] . " 23:59:59") . "
+              {$whereRaw} AND reg_time BETWEEN " . strtotime($params['reg_date'][0] . " 00:00:00") . " AND " . strtotime($params['reg_date'][1] . " 23:59:59") . "
           GROUP BY dimension
         ";
         }
@@ -594,7 +592,7 @@ class AnalyseLogic extends BaseLogic
         $remainData = Db::connect('db_game_log')->query($sql);
         $remainData = $remainData ? array_column($remainData, null, "dimension") : [];
 
-        $regDateRange = ToolLogic::getDatesBetween($params['reg_date'][0], $params['reg_date'][1]);
+        $regDateRange = getDateRange($params['reg_date'][0], $params['reg_date'][1]);
         $remainRange = [];
         for ($i = 2; $i <= 30; $i++) {
             $remainRange[] = $i;
@@ -635,9 +633,9 @@ class AnalyseLogic extends BaseLogic
         if ($params['show_type'] == 'rate') {
             if ($data) foreach ($remainRange as $remainNum) {
                 $key = 'remain_' . $remainNum;
-                $totalRow[$key] = $totalRow[$key] ? ToolLogic::getPercent($totalRow[$key], $totalRow['reg_pay_num']) : '';
+                $totalRow[$key] = $totalRow[$key] ? getPercent($totalRow[$key], $totalRow['reg_pay_num']) : '';
                 foreach ($data as &$val) {
-                    $val[$key] = $val[$key] ? ToolLogic::getPercent($val[$key], $val['reg_pay_num']) : '';
+                    $val[$key] = $val[$key] ? getPercent($val[$key], $val['reg_pay_num']) : '';
                 }
             }
         }
@@ -672,9 +670,9 @@ class AnalyseLogic extends BaseLogic
 
             // 获取对比日期1的数据, 注册、登录、充值
             $params['reg_date'] = $params['compare_date1'];
-            $whereSql1 = $this->generateWhereSql($params);
+            $whereRaw1 = $this->getCommonWhereRaw($params);
 
-            $baseData1 = $this->generateYearUnionList('base_total_day_', $params['compare_date1'], $whereSql1, $field, 'tdate');
+            $baseData1 = $this->generateYearUnionList('base_total_day_', $params['compare_date1'], $whereRaw1, $field, 'tdate');
 
             foreach ($baseData1 as $item) {
                 $data1Res[$item['tdate']]['reg'] = $item['reg'];
@@ -685,8 +683,8 @@ class AnalyseLogic extends BaseLogic
 
             // 获取对比日期2的数据, 注册、登录、充值
             $params['reg_date'] = $params['compare_date2'];
-            $whereSql2 = $this->generateWhereSql($params);
-            $baseData2 = $this->generateYearUnionList('base_total_day_', $params['compare_date2'], $whereSql2, $field, 'tdate');
+            $whereRaw2 = $this->getCommonWhereRaw($params);
+            $baseData2 = $this->generateYearUnionList('base_total_day_', $params['compare_date2'], $whereRaw2, $field, 'tdate');
 
 
             foreach ($baseData2 as $item) {
@@ -698,7 +696,7 @@ class AnalyseLogic extends BaseLogic
 
             // 获取消耗数据1
             $params['reg_date'] = $params['compare_date1'];
-            $costWhereSql1 = $this->generateWhereSql($params);
+            $costWhereSql1 = $this->getCommonWhereRaw($params);
 
             $costData1 = Db::connect('db_advert')->query("
           SELECT SUM(money) as money, tdate
@@ -714,7 +712,7 @@ class AnalyseLogic extends BaseLogic
 
             // 获取消耗数据2
             $params['reg_date'] = $params['compare_date2'];
-            $costWhereSql2 = $this->generateWhereSql($params);
+            $costWhereSql2 = $this->getCommonWhereRaw($params);
             $costData2 = Db::connect('db_advert')->query("
           SELECT SUM(money) as money, tdate
           FROM media_cost
@@ -728,8 +726,8 @@ class AnalyseLogic extends BaseLogic
 
 
             // 获取两个日期之间的所有日期
-            $day1Date = ToolLogic::getDatesBetween($params['compare_date1'][0], $params['compare_date1'][1]);
-            $day2Date = ToolLogic::getDatesBetween($params['compare_date2'][0], $params['compare_date2'][1]);
+            $day1Date = getDateRange($params['compare_date1'][0], $params['compare_date1'][1]);
+            $day2Date = getDateRange($params['compare_date2'][0], $params['compare_date2'][1]);
 
 
             foreach ($day1Date as $k => $d) {
@@ -800,8 +798,8 @@ class AnalyseLogic extends BaseLogic
 
             // 获取对比日期1的数据, 注册、登录、充值
             $params['reg_date'] = $params['compare_date1_date'];
-            $whereSql1 = $this->generateWhereSql($params);
-            $baseData1 = $this->generateMonthUnionList('base_total_hour_', $params['compare_date1'], $whereSql1, $field, 'thour');
+            $whereRaw1 = $this->getCommonWhereRaw($params);
+            $baseData1 = $this->generateMonthUnionList('base_total_hour_', $params['compare_date1'], $whereRaw1, $field, 'thour');
 
             foreach ($baseData1 as $item) {
                 $data1Res[$item['thour']]['reg'] = $item['reg'];
@@ -812,9 +810,9 @@ class AnalyseLogic extends BaseLogic
 
             // 获取对比日期2的数据, 注册、登录、充值
             $params['reg_date'] = $params['compare_date2_date'];
-            $whereSql2 = $this->generateWhereSql($params);
+            $whereRaw2 = $this->getCommonWhereRaw($params);
 
-            $baseData2 = $this->generateMonthUnionList('base_total_hour_', $params['compare_date2'], $whereSql2, $field, 'thour');
+            $baseData2 = $this->generateMonthUnionList('base_total_hour_', $params['compare_date2'], $whereRaw2, $field, 'thour');
 
             foreach ($baseData2 as $item) {
                 $data2Res[$item['thour']]['reg'] = $item['reg'];
@@ -865,12 +863,13 @@ class AnalyseLogic extends BaseLogic
         }
     }
 
-    public function generateMonthUnionList($namePrefix, $regDate, $whereSql = '', $field = '*', $group = null)
+    public function generateMonthUnionList($namePrefix, $regDate, $whereRaw = '', $field = '*', $group = null)
     {
-        $tableNames = ToolLogic::getMonthlyTableNames($namePrefix, $regDate[0], $regDate[1]);
+        $monthRange = getMonthRange($regDate[0], $regDate[1]);
         $sqlParts = [];
-        foreach ($tableNames as $tableName) {
-            $sqlParts[] = "SELECT * FROM {$tableName} WHERE 1=1 {$whereSql}";
+        foreach ($monthRange as $month) {
+            $tableName = $namePrefix . $month;
+            $sqlParts[] = "SELECT * FROM {$tableName} WHERE 1=1 {$whereRaw}";
         }
         $unionSql = implode(" UNION ALL ", $sqlParts);
         $finalSql = "

+ 163 - 166
app/v1/logic/dataReport/ChannelAnalysisLogic.php

@@ -2,16 +2,16 @@
 
 namespace app\v1\logic\dataReport;
 
-use app\v1\logic\tool\ToolLogic;
+
 use plugin\saiadmin\basic\BaseLogic;
 use support\think\Db;
 
 class ChannelAnalysisLogic extends BaseLogic
 {
     // 分时数据
-    public function getHourDataList($where)
+    public function getHourDataList($params)
     {
-        $params = $this->searchByAuth($where);
+        $params = $this->searchByAuth($params);
         // hour=>小时, reg_total=>注册数,cost=>消耗,pay_num=>付费总用户数,
         // pay_total=>付费总金额,reg_pay_num=>小时注册当天付费数,reg_pay_total=>小时注册当天付费金额
         // reg_pay_num_rg=>注册累计付费数,reg_pay_total_rg=>注册累计付费金额
@@ -26,12 +26,13 @@ class ChannelAnalysisLogic extends BaseLogic
             SUM(reg_pay_num_rg) as reg_pay_num_rg,
             SUM(reg_pay_total_rg) as reg_pay_total_rg";
         $group = 'agent_id,thour';
-        $whereSql = $this->generateWhereSql($params);
+        $whereSql = $this->getCommonWhereRaw($params);
     
         // 根据日期,连表查询
-        $tableNames = ToolLogic::getMonthlyTableNames('base_total_hour_', $where['reg_date'][0], $where['reg_date'][1]);
+        $monthRange = getMonthRange($params['reg_date'][0], $params['reg_date'][1]);
         $sqlParts = [];
-        foreach ($tableNames as $tableName) {
+        foreach ($monthRange as $month) {
+            $tableName = 'base_total_hour_' . $month;
             $sqlParts[] = "SELECT * FROM {$tableName} WHERE 1=1 {$whereSql}";
         }
         $unionSql = implode(" UNION ALL ", $sqlParts);
@@ -59,11 +60,11 @@ class ChannelAnalysisLogic extends BaseLogic
             }
             unset($hourRow['agent_id'], $hourRow['hour']);
             // 注册成本
-            $hourRow['reg_cost'] = ToolLogic::getRound($hourRow['cost'], $hourRow['reg_total']);
+            $hourRow['reg_cost'] = getRound($hourRow['cost'], $hourRow['reg_total']);
             // 付费率
-            $hourRow['pay_rate'] = ToolLogic::getPercent($hourRow['reg_pay_num'], $hourRow['reg_total']);
+            $hourRow['pay_rate'] = getPercent($hourRow['reg_pay_num'], $hourRow['reg_total']);
             // 回本率
-            $hourRow['roi'] = ToolLogic::getPercent($hourRow['reg_pay_total'], $hourRow['cost']);
+            $hourRow['roi'] = getPercent($hourRow['reg_pay_total'], $hourRow['cost']);
 
             // 统计数据,每小时的数据
             $total[$hourKey]['reg_total'] = !empty($total[$hourKey]['reg_total']) ? ($total[$hourKey]['reg_total'] + $hourRow['reg_total']) : $hourRow['reg_total'];
@@ -81,9 +82,9 @@ class ChannelAnalysisLogic extends BaseLogic
         // 计算统计的注册成本、付费绿、回本率
         foreach ($total as $key => &$v) {
             if (!is_array($v)) continue; // 跳过 agent_id => 合计 等非数组元素
-            $v['reg_cost'] = ToolLogic::getRound($v['cost'], $v['reg_total']);
-            $v['pay_rate'] = ToolLogic::getPercent($v['reg_pay_num'], $v['reg_total']);
-            $v['roi'] = ToolLogic::getPercent($v['reg_pay_total'], $v['cost']);
+            $v['reg_cost'] = getRound($v['cost'], $v['reg_total']);
+            $v['pay_rate'] = getPercent($v['reg_pay_num'], $v['reg_total']);
+            $v['roi'] = getPercent($v['reg_pay_total'], $v['cost']);
         }
 
         // 计算行汇总
@@ -94,9 +95,9 @@ class ChannelAnalysisLogic extends BaseLogic
             $item['total_raw']['reg'] = round(array_sum(array_column($item, 'reg')), 2);
             $item['total_raw']['pay_num'] = round(array_sum(array_column($item, 'pay_num')), 2);
             $item['total_raw']['pay'] = round(array_sum(array_column($item, 'pay')), 2);
-            $item['total_raw']['reg_cost'] = ToolLogic::getRound($item['total_raw']['cost'], $item['total_raw']['reg'], 1);
-            $item['total_raw']['pay_rate'] = ToolLogic::getPercent($item['total_raw']['pay_num'], $item['total_raw']['reg']);
-            $item['total_raw']['roi'] = ToolLogic::getPercent($item['total_raw']['pay'], $item['total_raw']['cost']);
+            $item['total_raw']['reg_cost'] = getRound($item['total_raw']['cost'], $item['total_raw']['reg'], 1);
+            $item['total_raw']['pay_rate'] = getPercent($item['total_raw']['pay_num'], $item['total_raw']['reg']);
+            $item['total_raw']['roi'] = getPercent($item['total_raw']['pay'], $item['total_raw']['cost']);
         }
 
         $data = array_values($hourResult);
@@ -113,14 +114,13 @@ class ChannelAnalysisLogic extends BaseLogic
     {
         $params = $this->searchByAuth($where);
 
-        $whereSql = $this->generateWhereSql($params);
+        $whereSql = $this->getCommonWhereRaw($params);
 
         // 1. 注册数据:$regData = 按照日期,获取每日的 注册数【reg_total】分组,base_total_day_2025
-
-        $baseTotalDayTableNames = ToolLogic::getYearlyTableNames('base_total_day_', $params['reg_date'][0], $params['reg_date'][1]);
-
+        $yearRange = getYearRange($params['reg_date'][0], $params['reg_date'][1]);
         $baseTotalDaySqlParts = [];
-        foreach ($baseTotalDayTableNames as $tableName) {
+        foreach ($yearRange as $year) {
+            $tableName = 'base_total_day_' . $year;
             $baseTotalDaySqlParts[] = "SELECT * FROM {$tableName} WHERE 1=1 {$whereSql}";
         }
         $unionBaseTotalDaySql = implode(" UNION ALL ", $baseTotalDaySqlParts);
@@ -130,15 +130,11 @@ class ChannelAnalysisLogic extends BaseLogic
 
 
         // 2. 活跃数据:$actData = 按照日期,获取每日的 活跃数 SUM(【active_total】) 活跃天数 【days】, 分组 【reg_date,days】,game_active_day_2025
-
-        $gameActiveDayTableNames = ToolLogic::getYearlyTableNames('game_active_day_', $params['reg_date'][0], $params['reg_date'][1]);
-
+        $yearRange = getYearRange($params['reg_date'][0], $params['reg_date'][1]);
         $gameActiveDaySqlParts = [];
 
-        foreach ($gameActiveDayTableNames as $tableName) {
-            if (!preg_match('/^game_active_day_\\d{4}$/', $tableName)) {
-                continue;
-            }
+        foreach ($yearRange as $year) {
+            $tableName = 'game_active_day_' . $year;
             $gameActiveDaySqlParts[] = "SELECT * FROM {$tableName} WHERE 1=1 {$whereSql}";
         }
 
@@ -189,7 +185,7 @@ class ChannelAnalysisLogic extends BaseLogic
             // 活跃天数的key
             $dayKey = 'd' . $r['days'];
             // N日留存率 = 第N天活跃数 ÷ 注册日注册数 × 100%。
-            $list[$reg_date][$dayKey] = ToolLogic::getPercent($r['active'], $list[$reg_date]['reg']);
+            $list[$reg_date][$dayKey] = getPercent($r['active'], $list[$reg_date]['reg']);
             // d1...dn的reg = 记录按日的活跃数
             $totalData[$dayKey]['active'] += $r['active'];
         }
@@ -199,7 +195,7 @@ class ChannelAnalysisLogic extends BaseLogic
             if ($key == 'reg') {
                 $total['reg'] = $val;
             } else {
-                $total[$key] = ToolLogic::getPercent($val['active'], $val['reg']);
+                $total[$key] = getPercent($val['active'], $val['reg']);
             }
         }
 
@@ -252,7 +248,7 @@ class ChannelAnalysisLogic extends BaseLogic
             $type = 'agent_id';
         }
 
-        $whereSql = $this->generateWhereSql($params);
+        $whereSql = $this->getCommonWhereRaw($params);
 
         // 1.查询消耗数据, 安game_id/agent_id分组
         // 忽略后台录入的消耗
@@ -345,36 +341,36 @@ class ChannelAnalysisLogic extends BaseLogic
                 unset($baseData[$key]);
             }
             // 注册成本
-            $row['reg_cost'] = ToolLogic::getRound($cost, $row['reg_total'] ?? 0);
+            $row['reg_cost'] = getRound($cost, $row['reg_total'] ?? 0);
             // 创角率
-            $row['role_per'] = ToolLogic::getRound($row['role_total'], $row['reg_total'] ?? 0);
+            $row['role_per'] = getRound($row['role_total'], $row['reg_total'] ?? 0);
             // 次留数
             $row['active'] = $activeData[$typeId]['active'] ?? 0;
             // 次留率
-            $row['a_per'] = ToolLogic::getPercent($activeData[$typeId]['active'] ?? 0, $row['reg_total'], 1);
+            $row['a_per'] = getPercent($activeData[$typeId]['active'] ?? 0, $row['reg_total'], 1);
             // 次留成本
-            $row['a_cost'] = ToolLogic::getRound($cost, $row['active'], 1);
+            $row['a_cost'] = getRound($cost, $row['active'], 1);
             // 总付费金额
             $row['reg_pay_total'] = $regPayData[$typeId]['reg_pay_total'] ?? 0;
             // 总付费人数
             $row['reg_pay_num'] = $regPayData[$typeId]['reg_pay_num'] ?? 0;
             //付费成本
-            $row['p_cost'] = ToolLogic::getRound($row['cost'], $row['reg_pay_num']);
+            $row['p_cost'] = getRound($row['cost'], $row['reg_pay_num']);
             // 付费率
-            $row['p_per'] = ToolLogic::getPercent($row['reg_pay_num'] ?? 0, $row['reg_total'], 1);
+            $row['p_per'] = getPercent($row['reg_pay_num'] ?? 0, $row['reg_total'], 1);
             // 当天回本率
-            $row['da_per'] = ToolLogic::getPercent($row['reg_pay_total_da'] ?? 0, $row['cost'], 1);
+            $row['da_per'] = getPercent($row['reg_pay_total_da'] ?? 0, $row['cost'], 1);
             // 累计回本率
-            $row['re_per'] = (float)trim(ToolLogic::getPercent($row['reg_pay_total'], $row['cost']), "%");
+            $row['re_per'] = (float)trim(getPercent($row['reg_pay_total'], $row['cost']), "%");
             $row['reg_pay_amount'] = $hb7dayData[$typeId]['reg_pay_amount'] ?? 0;
             // 实际回本率
-            $row['re_amount_per'] = ToolLogic::getPercent($row['reg_pay_amount'], $row['cost'], 1);
+            $row['re_amount_per'] = getPercent($row['reg_pay_amount'], $row['cost'], 1);
             //ARPU
-            $row['arpu'] = ToolLogic::getRound($row['reg_pay_total'], $row['reg_pay_num']);
+            $row['arpu'] = getRound($row['reg_pay_total'], $row['reg_pay_num']);
             //注册ARPU
-            $row['r_arpu'] = ToolLogic::getRound($row['reg_pay_total'], $row['reg_total']);
+            $row['r_arpu'] = getRound($row['reg_pay_total'], $row['reg_total']);
             // 7天回本率
-            $row['re_amount_per_7'] = ToolLogic::getPercent($hb7dayData[$typeId] ?? 0, $row['cost'], 1);
+            $row['re_amount_per_7'] = getPercent($hb7dayData[$typeId] ?? 0, $row['cost'], 1);
 
             // 按分组信息展示,id和name
             switch ($params['group'] ?? '') {
@@ -421,29 +417,29 @@ class ChannelAnalysisLogic extends BaseLogic
         }
 
         // 注册成本
-        $total['reg_cost'] = ToolLogic::getRound($total['cost']??0, $total['reg_total'] ?? 0);
+        $total['reg_cost'] = getRound($total['cost']??0, $total['reg_total'] ?? 0);
         // 汇总创角率
-        $total['role_per'] = ToolLogic::getRound($total['role_total']??0, $total['reg_total'] ?? 0);
+        $total['role_per'] = getRound($total['role_total']??0, $total['reg_total'] ?? 0);
         // 次留率
-        $total['a_per'] = ToolLogic::getPercent($total['active']??0, $total['reg_total']??0, 1);
+        $total['a_per'] = getPercent($total['active']??0, $total['reg_total']??0, 1);
         // 次留成本
-        $total['a_cost'] = ToolLogic::getRound($total['cost']??0, $total['active']??0, 1);
+        $total['a_cost'] = getRound($total['cost']??0, $total['active']??0, 1);
         // 付费率
-        $total['p_per'] = ToolLogic::getPercent($total['reg_pay_num']??0, $total['reg_total']??0, 1);
+        $total['p_per'] = getPercent($total['reg_pay_num']??0, $total['reg_total']??0, 1);
         // 当天回本率
-        $total['da_per'] = ToolLogic::getPercent($total['reg_pay_total_da']??0, $total['cost']??0, 1);
+        $total['da_per'] = getPercent($total['reg_pay_total_da']??0, $total['cost']??0, 1);
         // 累计回本率
-        $total['re_per'] = (float)trim(ToolLogic::getPercent($total['reg_pay_total']??0, $total['cost']??0), "%");
+        $total['re_per'] = (float)trim(getPercent($total['reg_pay_total']??0, $total['cost']??0), "%");
         // 实际回本率
-        $total['re_amount_per'] = ToolLogic::getPercent($total['reg_pay_amount']??0, $total['cost']??0, 1);
+        $total['re_amount_per'] = getPercent($total['reg_pay_amount']??0, $total['cost']??0, 1);
         //ARPU
-        $total['arpu'] = ToolLogic::getRound($total['reg_pay_total']??0, $total['reg_pay_num']??0);
+        $total['arpu'] = getRound($total['reg_pay_total']??0, $total['reg_pay_num']??0);
         //注册ARPU
-        $total['r_arpu'] = ToolLogic::getRound($total['reg_pay_total']??0, $total['reg_total']??0);
+        $total['r_arpu'] = getRound($total['reg_pay_total']??0, $total['reg_total']??0);
         // 7天回本率
-        $total['re_amount_per_7'] = ToolLogic::getPercent($hb7dayDataSum??0, $total['cost']??0, 1);
+        $total['re_amount_per_7'] = getPercent($hb7dayDataSum??0, $total['cost']??0, 1);
         //付费成本
-        $total['p_cost'] = ToolLogic::getRound($total['reg_pay_num']??0, $total['cost']??0, 1);
+        $total['p_cost'] = getRound($total['reg_pay_num']??0, $total['cost']??0, 1);
 
         $totalData = $this->agentTotal($where);
 
@@ -457,9 +453,10 @@ class ChannelAnalysisLogic extends BaseLogic
     public function generateYearUnionList($namePrefix, $regDate, $whereSql = '', $field = '*', $group = null)
     {
 
-        $tableNames = ToolLogic::getYearlyTableNames($namePrefix, $regDate[0], $regDate[1]);
+        $yearRange = getYearRange($regDate[0], $regDate[1]);
         $sqlParts = [];
-        foreach ($tableNames as $tableName) {
+        foreach ($yearRange as $year) {
+            $tableName = $namePrefix . $year;
             $sqlParts[] = "SELECT * FROM {$tableName} WHERE 1=1 {$whereSql}";
         }
         $unionSql = implode(" UNION ALL ", $sqlParts);
@@ -482,7 +479,7 @@ class ChannelAnalysisLogic extends BaseLogic
     public function computedHb7days($where, $type)
     {
         $payDataAll = [];
-        $dateRange = ToolLogic::getDatesBetween($where['reg_date'][0], $where['reg_date'][1]);
+        $dateRange = getDateRange($where['reg_date'][0], $where['reg_date'][1]);
         foreach ($dateRange as $regDate) {
 
             $field = "
@@ -497,7 +494,7 @@ class ChannelAnalysisLogic extends BaseLogic
             $wherePay = $where;
             unset($wherePay['reg_date']);
 
-            $whereSql = $this->generateWhereSql($wherePay);
+            $whereSql = $this->getCommonWhereRaw($wherePay);
             $whereSql = "{$whereSql} AND reg_date = '{$regDate}' AND pay_date = '{$eDate}'";
 
 
@@ -523,7 +520,7 @@ class ChannelAnalysisLogic extends BaseLogic
      */
     public function agentTotal($where)
     {
-        $whereSql = $this->generateWhereSql($where);
+        $whereSql = $this->getCommonWhereRaw($where);
 
         // 1. 消耗表. 获取消耗金额
         $costData = Db::connect('db_advert')->query("SELECT SUM(money) as cost FROM media_cost WHERE 1=1 $whereSql");
@@ -543,13 +540,13 @@ class ChannelAnalysisLogic extends BaseLogic
         $regPayNum = $regPayData[0]['reg_pay_num'] ?? 0;
 
         // roi
-        $roi = ToolLogic::getPercent($regPayTotal, $cost, 1);
+        $roi = getPercent($regPayTotal, $cost, 1);
         // 付费成本
-        $pCost = ToolLogic::getRound($cost, $regPayNum);
+        $pCost = getRound($cost, $regPayNum);
         // reg_cost 注册成本
-        $regCost = ToolLogic::getRound($cost, $regTotal);
+        $regCost = getRound($cost, $regTotal);
         // 付费率
-        $pPer = ToolLogic::getPercent($regPayNum, $regTotal, 1);
+        $pPer = getPercent($regPayNum, $regTotal, 1);
 
         // 返回数据
         return [
@@ -586,7 +583,7 @@ class ChannelAnalysisLogic extends BaseLogic
             $params['agent_id'] = 0;
         }
         $groupBy = 'site_id,media_id';
-        $whereSql = $this->generateWhereSql($params);
+        $whereSql = $this->getCommonWhereRaw($params);
 
         // 支出数据
         $costWhereSql = $whereSql;
@@ -639,20 +636,20 @@ class ChannelAnalysisLogic extends BaseLogic
             if ($igz && $row['cost'] === 0) {
                 unset($baseTotalDayData[$key]);
             }
-            $row['reg_cost'] = ToolLogic::getRound($row['cost'], $row['reg_total'] ?? 0); // 注册成本
-            $row['role_per'] = ToolLogic::getRound($row['role_total'], $row['reg_total'] ?? 0); // 创角率
-            $row['a_cost'] = ToolLogic::getRound($row['cost'], $row['active'], 1); // 次留成本
-            $row['a_per'] = ToolLogic::getPercent($row['active'], $row['reg_total'], 1); // 次留率
+            $row['reg_cost'] = getRound($row['cost'], $row['reg_total'] ?? 0); // 注册成本
+            $row['role_per'] = getRound($row['role_total'], $row['reg_total'] ?? 0); // 创角率
+            $row['a_cost'] = getRound($row['cost'], $row['active'], 1); // 次留成本
+            $row['a_per'] = getPercent($row['active'], $row['reg_total'], 1); // 次留率
             $row['reg_pay_total'] = $regPayData[$row['site_id']]['reg_pay_total'] ?? 0; // 总付费金额
             $row['reg_pay_num'] = $regPayData[$row['site_id']]['reg_pay_num'] ?? 0; // 总付费人数
             $row['reg_pay_amount'] = $regPayData[$row['site_id']]['reg_pay_amount'] ?? 0; // 注册总充值
-            $row['p_cost'] = ToolLogic::getRound($row['cost'], $row['reg_pay_num']); // 付费成本
-            $row['p_per'] = ToolLogic::getPercent($row['reg_pay_num'] ?? 0, $row['reg_total'], 1); // 付费率
-            $row['da_per'] = ToolLogic::getPercent($row['reg_pay_total_da'] ?? 0, $row['cost'], 1); // 当天回本率
-            $row['re_per'] = (float)trim(ToolLogic::getPercent($row['reg_pay_total'], $row['cost']), "%"); // 累计回本率
-            $row['re_amount_per'] = ToolLogic::getPercent($row['reg_pay_amount'], $row['cost'], 1); // 实际回本率
-            $row['arpu'] = ToolLogic::getRound($row['reg_pay_total'], $row['reg_pay_num']); // ARPU
-            $row['r_arpu'] = ToolLogic::getRound($row['reg_pay_total'], $row['reg_total']); // 注册ARPU
+            $row['p_cost'] = getRound($row['cost'], $row['reg_pay_num']); // 付费成本
+            $row['p_per'] = getPercent($row['reg_pay_num'] ?? 0, $row['reg_total'], 1); // 付费率
+            $row['da_per'] = getPercent($row['reg_pay_total_da'] ?? 0, $row['cost'], 1); // 当天回本率
+            $row['re_per'] = (float)trim(getPercent($row['reg_pay_total'], $row['cost']), "%"); // 累计回本率
+            $row['re_amount_per'] = getPercent($row['reg_pay_amount'], $row['cost'], 1); // 实际回本率
+            $row['arpu'] = getRound($row['reg_pay_total'], $row['reg_pay_num']); // ARPU
+            $row['r_arpu'] = getRound($row['reg_pay_total'], $row['reg_total']); // 注册ARPU
 
         }
 
@@ -681,17 +678,17 @@ class ChannelAnalysisLogic extends BaseLogic
 
         }
 
-        $total['reg_cost'] = ToolLogic::getRound($total['cost'] ?? 0, $total['reg_total'] ?? 0); // 注册成本
-        $total['role_per'] = ToolLogic::getRound($total['role_total'] ?? 0, $total['reg_total'] ?? 0); // 创角率
-        $total['a_per'] = ToolLogic::getPercent($total['active'] ?? 0, $total['reg_total'] ?? 0, 1); // 次留率
-        $total['a_cost'] = ToolLogic::getRound($total['cost'] ?? 0, $total['active'] ?? 0, 1); // 次留成本
-        $total['p_cost'] = ToolLogic::getRound($total['reg_pay_num'] ?? 0, $total['cost'] ?? 0, 1); // 付费成本
-        $total['p_per'] = ToolLogic::getPercent($total['reg_pay_num'] ?? 0, $total['reg_total'] ?? 0, 1); // 付费率
-        $total['da_per'] = ToolLogic::getPercent($total['reg_pay_total_da'] ?? 0, $total['cost'] ?? 0, 1); // 当天回本率
-        $total['re_per'] = (float)trim(ToolLogic::getPercent($total['reg_pay_total'] ?? 0, $total['cost'] ?? 0), "%"); // 累计回本率
-        $total['re_amount_per'] = ToolLogic::getPercent($total['reg_pay_amount'] ?? 0, $total['cost'] ?? 0, 1); // 实际回本率
-        $total['arpu'] = ToolLogic::getRound($total['reg_pay_total'] ?? 0, $total['reg_pay_num'] ?? 0); // ARPU
-        $total['r_arpu'] = ToolLogic::getRound($total['reg_pay_total'] ?? 0, $total['reg_total'] ?? 0); // 注册ARPU
+        $total['reg_cost'] = getRound($total['cost'] ?? 0, $total['reg_total'] ?? 0); // 注册成本
+        $total['role_per'] = getRound($total['role_total'] ?? 0, $total['reg_total'] ?? 0); // 创角率
+        $total['a_per'] = getPercent($total['active'] ?? 0, $total['reg_total'] ?? 0, 1); // 次留率
+        $total['a_cost'] = getRound($total['cost'] ?? 0, $total['active'] ?? 0, 1); // 次留成本
+        $total['p_cost'] = getRound($total['reg_pay_num'] ?? 0, $total['cost'] ?? 0, 1); // 付费成本
+        $total['p_per'] = getPercent($total['reg_pay_num'] ?? 0, $total['reg_total'] ?? 0, 1); // 付费率
+        $total['da_per'] = getPercent($total['reg_pay_total_da'] ?? 0, $total['cost'] ?? 0, 1); // 当天回本率
+        $total['re_per'] = (float)trim(getPercent($total['reg_pay_total'] ?? 0, $total['cost'] ?? 0), "%"); // 累计回本率
+        $total['re_amount_per'] = getPercent($total['reg_pay_amount'] ?? 0, $total['cost'] ?? 0, 1); // 实际回本率
+        $total['arpu'] = getRound($total['reg_pay_total'] ?? 0, $total['reg_pay_num'] ?? 0); // ARPU
+        $total['r_arpu'] = getRound($total['reg_pay_total'] ?? 0, $total['reg_total'] ?? 0); // 注册ARPU
 
         return ['data' => $baseTotalDayData, 'total' => $total];
     }
@@ -718,7 +715,7 @@ class ChannelAnalysisLogic extends BaseLogic
         if (empty($params['agent_id'])) {
             $params['agent_id'] = 0;
         }
-        $whereSql = $this->generateWhereSql($params);
+        $whereSql = $this->getCommonWhereRaw($params);
 
         // 1. 消耗表. 获取消耗金额
         $costData = Db::connect('db_advert')->query("SELECT SUM(money) as cost FROM media_cost WHERE 1=1 $whereSql Group By tdate");
@@ -767,21 +764,21 @@ class ChannelAnalysisLogic extends BaseLogic
         {
             $row['active'] = $activeData[$row['tdate']] ?? 0; // 次留数
             $row['cost'] = $costData[$row['tdate']] ?? 0; // 支出
-            $row['reg_cost'] = ToolLogic::getRound($row['cost'], $row['reg_total'] ?? 0); // 注册成本
-            $row['role_per'] = ToolLogic::getRound($row['role_total'], $row['reg_total'] ?? 0); // 创角率
-            $row['a_cost'] = ToolLogic::getRound($row['cost'], $row['active'], 1); // 次留成本
-            $row['a_per'] = ToolLogic::getPercent($row['active'], $row['reg_total'], 1); // 次留率
+            $row['reg_cost'] = getRound($row['cost'], $row['reg_total'] ?? 0); // 注册成本
+            $row['role_per'] = getRound($row['role_total'], $row['reg_total'] ?? 0); // 创角率
+            $row['a_cost'] = getRound($row['cost'], $row['active'], 1); // 次留成本
+            $row['a_per'] = getPercent($row['active'], $row['reg_total'], 1); // 次留率
             $row['reg_pay_total'] = $regPayData[$row['tdate']]['reg_pay_total'] ?? 0; // 总付费金额
             $row['reg_pay_num'] = $regPayData[$row['tdate']]['reg_pay_num'] ?? 0; // 总付费人数
             $row['reg_pay_amount'] = $regPayData[$row['tdate']]['reg_pay_amount'] ?? 0; // 注册总充值
-            $row['p_cost'] = ToolLogic::getRound($row['cost'], $row['reg_pay_num']); // 付费成本
-            $row['p_per'] = ToolLogic::getPercent($row['reg_pay_num'] ?? 0, $row['reg_total'], 1); // 付费率
-            $row['da_per'] = ToolLogic::getPercent($row['reg_pay_total_da'] ?? 0, $row['cost'], 1); // 当天回本率
-            $row['re_per'] = (float)trim(ToolLogic::getPercent($row['reg_pay_total'], $row['cost']), "%"); // 累计回本率
-            $row['re_amount_per'] = ToolLogic::getPercent($row['reg_pay_amount'], $row['cost'], 1); // 实际回本率
-            $row['arpu'] = ToolLogic::getRound($row['reg_pay_total'], $row['reg_pay_num']); // ARPU
-            $row['r_arpu'] = ToolLogic::getRound($row['reg_pay_total'], $row['reg_total']); // 注册ARPU
-            $row['pay_cost'] = ToolLogic::getPercent($row['pay_amount'] ?? 0, $row['cost'] ?? 0); // 收支比
+            $row['p_cost'] = getRound($row['cost'], $row['reg_pay_num']); // 付费成本
+            $row['p_per'] = getPercent($row['reg_pay_num'] ?? 0, $row['reg_total'], 1); // 付费率
+            $row['da_per'] = getPercent($row['reg_pay_total_da'] ?? 0, $row['cost'], 1); // 当天回本率
+            $row['re_per'] = (float)trim(getPercent($row['reg_pay_total'], $row['cost']), "%"); // 累计回本率
+            $row['re_amount_per'] = getPercent($row['reg_pay_amount'], $row['cost'], 1); // 实际回本率
+            $row['arpu'] = getRound($row['reg_pay_total'], $row['reg_pay_num']); // ARPU
+            $row['r_arpu'] = getRound($row['reg_pay_total'], $row['reg_total']); // 注册ARPU
+            $row['pay_cost'] = getPercent($row['pay_amount'] ?? 0, $row['cost'] ?? 0); // 收支比
         }
 
         // 6. 合计
@@ -806,18 +803,18 @@ class ChannelAnalysisLogic extends BaseLogic
             $total['reg_pay_total_da'] = !empty($total['reg_pay_total_da']) ? ($total['reg_pay_total_da'] + $vv['reg_pay_total_da']) : $vv['reg_pay_total_da']; // 当天注册付费金额
         }
 
-        $total['reg_cost'] = ToolLogic::getRound($total['cost'] ?? 0, $total['reg_total'] ?? 0); // 注册成本
-        $total['role_per'] = ToolLogic::getRound($total['role_total'] ?? 0, $total['reg_total'] ?? 0); // 创角率
-        $total['a_per'] = ToolLogic::getPercent($total['active'] ?? 0, $total['reg_total'] ?? 0, 1); // 次留率
-        $total['a_cost'] = ToolLogic::getRound($total['cost'] ?? 0, $total['active'] ?? 0, 1); // 次留成本
-        $total['p_cost'] = ToolLogic::getRound($total['reg_pay_num'] ?? 0, $total['cost'] ?? 0, 1); // 付费成本
-        $total['p_per'] = ToolLogic::getPercent($total['reg_pay_num'] ?? 0, $total['reg_total'] ?? 0, 1); // 付费率
-        $total['da_per'] = ToolLogic::getPercent($total['reg_pay_total_da'] ?? 0, $total['cost'] ?? 0, 1); // 当天回本率
-        $total['re_per'] = (float)trim(ToolLogic::getPercent($total['reg_pay_total'] ?? 0, $total['cost'] ?? 0), "%"); // 累计回本率
-        $total['re_amount_per'] = ToolLogic::getPercent($total['reg_pay_amount'] ?? 0, $total['cost'] ?? 0, 1); // 实际回本率
-        $total['arpu'] = ToolLogic::getRound($total['reg_pay_total'] ?? 0, $total['reg_pay_num'] ?? 0); // ARPU
-        $total['r_arpu'] = ToolLogic::getRound($total['reg_pay_total'] ?? 0, $total['reg_total'] ?? 0); // 注册ARPU
-        $total['pay_cost'] = ToolLogic::getPercent($total['pay_amount'] ?? 0, $total['cost'] ?? 0); //收支比
+        $total['reg_cost'] = getRound($total['cost'] ?? 0, $total['reg_total'] ?? 0); // 注册成本
+        $total['role_per'] = getRound($total['role_total'] ?? 0, $total['reg_total'] ?? 0); // 创角率
+        $total['a_per'] = getPercent($total['active'] ?? 0, $total['reg_total'] ?? 0, 1); // 次留率
+        $total['a_cost'] = getRound($total['cost'] ?? 0, $total['active'] ?? 0, 1); // 次留成本
+        $total['p_cost'] = getRound($total['reg_pay_num'] ?? 0, $total['cost'] ?? 0, 1); // 付费成本
+        $total['p_per'] = getPercent($total['reg_pay_num'] ?? 0, $total['reg_total'] ?? 0, 1); // 付费率
+        $total['da_per'] = getPercent($total['reg_pay_total_da'] ?? 0, $total['cost'] ?? 0, 1); // 当天回本率
+        $total['re_per'] = (float)trim(getPercent($total['reg_pay_total'] ?? 0, $total['cost'] ?? 0), "%"); // 累计回本率
+        $total['re_amount_per'] = getPercent($total['reg_pay_amount'] ?? 0, $total['cost'] ?? 0, 1); // 实际回本率
+        $total['arpu'] = getRound($total['reg_pay_total'] ?? 0, $total['reg_pay_num'] ?? 0); // ARPU
+        $total['r_arpu'] = getRound($total['reg_pay_total'] ?? 0, $total['reg_total'] ?? 0); // 注册ARPU
+        $total['pay_cost'] = getPercent($total['pay_amount'] ?? 0, $total['cost'] ?? 0); //收支比
 
         return ['data' => array_values($baseTotalDayData), 'totalRow' => $total];
     }
@@ -831,7 +828,7 @@ class ChannelAnalysisLogic extends BaseLogic
         // 展示类型
         $dataType = $params['data_type'] ?? 'recovery';
         $nowDate = date("Y-m-d");
-        $whereSql = $this->generateWhereSql($params);
+        $whereSql = $this->getCommonWhereRaw($params);
 
         // 1. 获取消耗金额
         $costData = Db::connect('db_advert')->query("SELECT SUM(money) as cost, tdate FROM media_cost WHERE 1=1 $whereSql group by tdate");
@@ -873,7 +870,7 @@ class ChannelAnalysisLogic extends BaseLogic
             $totalRow['d0']['cost'] = !empty($totalRow['cost']) ? ($totalRow['cost'] + $costData[$key] ?? 0) : $costData[$key] ?? 0;
             $totalRow['reg_total'] = !empty($totalRow['reg_total']) ? ($totalRow['reg_total'] + $val['reg_total'] ?? 0) : $val['reg_total'] ?? 0;
             $totalRow['d0']['reg_total'] = !empty($totalRow['reg_total']) ? ($totalRow['reg_total'] + $val['reg_total'] ?? 0) : $val['reg_total'] ?? 0;
-            $totalRow['reg_cost'] = ToolLogic::getRound($totalRow['cost'] ?? 0, $totalRow['reg_total'] ?? 0);
+            $totalRow['reg_cost'] = getRound($totalRow['cost'] ?? 0, $totalRow['reg_total'] ?? 0);
 
             $days = (strtotime($nowDate) - strtotime($key)) / 86400 + 1;
             for ($i = 1; $i <= $days; $i++) {
@@ -892,7 +889,7 @@ class ChannelAnalysisLogic extends BaseLogic
             $data[$regDate]['reg_total'] = $baseData[$regDate]['reg_total'] ?? 0;
 
             // 注册成本
-            $data[$regDate]['reg_cost'] = ToolLogic::getRound($costData[$regDate] ?? 0, $data[$regDate]['reg_total'] ?? 0);
+            $data[$regDate]['reg_cost'] = getRound($costData[$regDate] ?? 0, $data[$regDate]['reg_total'] ?? 0);
             // 消耗金额
             $data[$regDate]['cost'] = $costData[$regDate] ?? 0;
 
@@ -902,35 +899,35 @@ class ChannelAnalysisLogic extends BaseLogic
 
             switch ($dataType) {
                 case 'recovery':
-                    $data[$regDate][$daykey] = ToolLogic::getPercent($row['addup_pay_total'], $costData[$regDate] ?? 0, 1);
+                    $data[$regDate][$daykey] = getPercent($row['addup_pay_total'], $costData[$regDate] ?? 0, 1);
                     if ($nowDate === $row['pay_date']) {
-                        $data[$regDate]['d0'] = ToolLogic::getPercent($row['addup_pay_total'], $costData[$regDate] ?? 0, 1);
+                        $data[$regDate]['d0'] = getPercent($row['addup_pay_total'], $costData[$regDate] ?? 0, 1);
                     }
                     break;
 
                 /* 扣除分成/cost , 计算 */
                 case 'remount':
                     // 按天回本率
-                    $data[$regDate][$daykey] = ToolLogic::getPercent($row['addup_pay_amount'], $costData[$regDate] ?? 0, 1);
+                    $data[$regDate][$daykey] = getPercent($row['addup_pay_amount'], $costData[$regDate] ?? 0, 1);
                     // 累计回本率
                     if ($nowDate === $row['pay_date']) {
-                        $data[$regDate]['d0'] = ToolLogic::getPercent($row['addup_pay_amount'], $costData[$regDate] ?? 0, 1);
+                        $data[$regDate]['d0'] = getPercent($row['addup_pay_amount'], $costData[$regDate] ?? 0, 1);
                     }
                     break;
 
                 /*  累计计费付费金额 / 注册数 */
                 case 'ltv':
                     // 按天LTV
-                    $data[$regDate][$daykey] = ToolLogic::getRound($row['addup_pay_total'], $baseData[$regDate]['reg_total'] ?? 0, 1);
+                    $data[$regDate][$daykey] = getRound($row['addup_pay_total'], $baseData[$regDate]['reg_total'] ?? 0, 1);
                     // 累计LTV
                     if ($nowDate === $row['pay_date']) {
-                        $data[$regDate]['d0'] = ToolLogic::getRound($row['addup_pay_total'], $baseData[$regDate]['reg_total'] ?? 0, 1);
+                        $data[$regDate]['d0'] = getRound($row['addup_pay_total'], $baseData[$regDate]['reg_total'] ?? 0, 1);
                     }
                     break;
 
                 /* 后面的LTV数据, 按天LTV / 第一天LTV , 目的是为了计算LTV增长率*/
                 case 'ltvbs':
-                    $totalLtv[$daykey] = ToolLogic::getRound($row['addup_pay_total'], $baseData[$regDate]['reg_total'] ?? 0, 1);
+                    $totalLtv[$daykey] = getRound($row['addup_pay_total'], $baseData[$regDate]['reg_total'] ?? 0, 1);
                     $fz = $totalLtv['d1'] ?? 0 != 0 ? $totalLtv['d1'] : 1;
                     $data[$regDate][$daykey] = round($totalLtv[$daykey] / $fz, 2);
                     break;
@@ -954,17 +951,17 @@ class ChannelAnalysisLogic extends BaseLogic
 
                 /* 付费率 */
                 case 'pay_rate':
-                    $data[$regDate][$daykey] = ToolLogic::getPercent($row['pay_num'], $baseData[$regDate]['reg_total']);
+                    $data[$regDate][$daykey] = getPercent($row['pay_num'], $baseData[$regDate]['reg_total']);
                     if ($nowDate === $row['pay_date']) {
-                        $data[$regDate]['d0'] = ToolLogic::getPercent($row['addup_pay_num'], $baseData[$regDate]['reg_total']);
+                        $data[$regDate]['d0'] = getPercent($row['addup_pay_num'], $baseData[$regDate]['reg_total']);
                     }
                     break;
 
                 /* 付费ARPU */
                 case 'arpu':
-                    $data[$regDate][$daykey] = ToolLogic::getRound($row['pay_total'], $row['pay_num']);
+                    $data[$regDate][$daykey] = getRound($row['pay_total'], $row['pay_num']);
                     if ($nowDate === $row['pay_date']) {
-                        $data[$regDate]['d0'] = ToolLogic::getRound($row['addup_pay_total'], $row['addup_pay_num']);
+                        $data[$regDate]['d0'] = getRound($row['addup_pay_total'], $row['addup_pay_num']);
                     }
                     break;
                 default:
@@ -992,16 +989,16 @@ class ChannelAnalysisLogic extends BaseLogic
             if ($key[0] === 'd') {
                 switch ($dataType) {
                     case 'recovery':
-                        $totalRow[$key] = ToolLogic::getPercent($totalRow[$key]['addup_pay_total'] ?? 0, $totalRow[$key]['cost'] ?? 0, 1);
+                        $totalRow[$key] = getPercent($totalRow[$key]['addup_pay_total'] ?? 0, $totalRow[$key]['cost'] ?? 0, 1);
                         break;
                     case 'remount':
-                        $totalRow[$key] = ToolLogic::getPercent($totalRow[$key]['addup_pay_amount'] ?? 0, $totalRow[$key]['cost'] ?? 0, 1);
+                        $totalRow[$key] = getPercent($totalRow[$key]['addup_pay_amount'] ?? 0, $totalRow[$key]['cost'] ?? 0, 1);
                         break;
                     case 'ltv':
-                        $totalRow[$key] = ToolLogic::getRound($totalRow[$key]['addup_pay_total'] ?? 0, $totalRow[$key]['reg_total'] ?? 0);
+                        $totalRow[$key] = getRound($totalRow[$key]['addup_pay_total'] ?? 0, $totalRow[$key]['reg_total'] ?? 0);
                         break;
                     case 'ltvbs':
-                        $totalLtv[$key] = ToolLogic::getRound($totalRow[$key]['addup_pay_total'] ?? 0, $totalRow[$key]['reg_total'] ?? 0);
+                        $totalLtv[$key] = getRound($totalRow[$key]['addup_pay_total'] ?? 0, $totalRow[$key]['reg_total'] ?? 0);
                         $fz = $totalLtv['d1'] ?? 0 != 0 ? $totalLtv['d1'] : 1;
                         $totalRow[$key] = round($totalLtv[$key] / $fz, 2);
 
@@ -1013,10 +1010,10 @@ class ChannelAnalysisLogic extends BaseLogic
                         $totalRow[$key] = $totalRow[$key]['pay_total'] ?? 0;
                         break;
                     case 'pay_rate':
-                        $totalRow[$key] = ToolLogic::getPercent($totalRow[$key]['pay_num'] ?? 0, $totalRow[$key]['reg_total'] ?? 0);
+                        $totalRow[$key] = getPercent($totalRow[$key]['pay_num'] ?? 0, $totalRow[$key]['reg_total'] ?? 0);
                         break;
                     case 'arpu':
-                        $totalRow[$key] = ToolLogic::getRound($totalRow[$key]['pay_total'] ?? 0, $totalRow[$key]['pay_num'] ?? 0);
+                        $totalRow[$key] = getRound($totalRow[$key]['pay_total'] ?? 0, $totalRow[$key]['pay_num'] ?? 0);
                         break;
                 }
             }
@@ -1025,16 +1022,16 @@ class ChannelAnalysisLogic extends BaseLogic
         if ($data && $totalRow) {
             switch ($dataType) {
                 case 'recovery':
-                    $totalRow['d0'] = ToolLogic::getPercent($pay_total, $totalRow['cost'], 1);
+                    $totalRow['d0'] = getPercent($pay_total, $totalRow['cost'], 1);
                     break;
                 case 'remount':
-                    $totalRow['d0'] = ToolLogic::getPercent($pay_amount, $totalRow['cost'], 1);
+                    $totalRow['d0'] = getPercent($pay_amount, $totalRow['cost'], 1);
                     break;
                 case 'ltv':
-                    $totalRow['d0'] = ToolLogic::getRound($pay_total, $totalRow['reg_total']);
+                    $totalRow['d0'] = getRound($pay_total, $totalRow['reg_total']);
                     break;
                 case 'ltvbs':
-                    $totalLtv['d0'] = ToolLogic::getRound($pay_total, $totalRow['reg_total']);
+                    $totalLtv['d0'] = getRound($pay_total, $totalRow['reg_total']);
                     $fz = $totalLtv['d1'] ?? 0 != 0 ? $totalLtv['d1'] : 1;
                     $totalRow['d0'] = round($totalLtv['d0'] / $fz, 2);
                     break;
@@ -1045,16 +1042,16 @@ class ChannelAnalysisLogic extends BaseLogic
                     $totalRow['d0'] = $pay_total;
                     break;
                 case 'pay_rate':
-                    $totalRow['d0'] = ToolLogic::getPercent($pay_num, $totalRow['reg_total']);
+                    $totalRow['d0'] = getPercent($pay_num, $totalRow['reg_total']);
                     break;
                 case 'arpu':
-                    $totalRow['d0'] = ToolLogic::getRound($pay_total, $pay_num);
+                    $totalRow['d0'] = getRound($pay_total, $pay_num);
                     break;
                 default:
                     break;
             }
-            $totalRow['reg_cost'] = ToolLogic::getRound($totalRow['cost'], $totalRow['reg_total']);
-            $list = ToolLogic::arrSort($data, 'tdate', 'asc');
+            $totalRow['reg_cost'] = getRound($totalRow['cost'], $totalRow['reg_total']);
+            $list = arrSort($data, 'tdate', 'asc');
         }
         return [
             'data' => array_values($list),
@@ -1071,7 +1068,7 @@ class ChannelAnalysisLogic extends BaseLogic
         // 展示类型
         $dataType = $params['data_type'] ?? 'recovery';
         $nowDate = date("Y-m");
-        $whereSql = $this->generateWhereSql($params);
+        $whereSql = $this->getCommonWhereRaw($params);
 
         // 2. 获取注册数
         $totalBaseWhereSql = str_replace('AND tdate', 'AND tmonth', $whereSql);
@@ -1110,9 +1107,9 @@ class ChannelAnalysisLogic extends BaseLogic
         foreach ($baseData as $key => $val) {
             $totalRow['cost'] = !empty($totalRow['cost']) ? round($totalRow['cost'] + $val['cost'] ?? 0, 2) : $val['cost'] ?? 0;
             $totalRow['reg_total'] = !empty($totalRow['reg_total']) ? ($totalRow['reg_total'] + $val['reg_total'] ?? 0) : $val['reg_total'] ?? 0;
-            $totalRow['reg_cost'] = ToolLogic::getRound($totalRow['cost'] ?? 0, $totalRow['reg_total'] ?? 0);
+            $totalRow['reg_cost'] = getRound($totalRow['cost'] ?? 0, $totalRow['reg_total'] ?? 0);
 
-            $days = ToolLogic::getMonthNum($key, $nowDate);
+            $days = getMonthNum($key, $nowDate);
             for ($i = 1; $i <= $days; $i++) {
                 $daykey = 'm' . ($i + 1);
                 $totalRow[$daykey]['reg_total'] = !empty($totalRow[$daykey]['reg_total']) ? ($totalRow[$daykey]['reg_total'] + $val['reg_total'] ?? 0) : $val['reg_total'] ?? 0;
@@ -1130,38 +1127,38 @@ class ChannelAnalysisLogic extends BaseLogic
             $data[$regDate]['reg_total'] = $baseData[$regDate]['reg_total'] ?? 0;
 
             // 注册成本
-            $data[$regDate]['reg_cost'] = ToolLogic::getRound($baseData[$regDate]['cost'] ?? 0, $data[$regDate]['reg_total'] ?? 0);
+            $data[$regDate]['reg_cost'] = getRound($baseData[$regDate]['cost'] ?? 0, $data[$regDate]['reg_total'] ?? 0);
             // 消耗金额
             $data[$regDate]['cost'] = $baseData[$regDate]['cost'] ?? 0;
 
             // 计算日期相差天数
-            $daykey = 'm' . (ToolLogic::getMonthNum($regDate, $row['pay_month']) + 1);
+            $daykey = 'm' . (getMonthNum($regDate, $row['pay_month']) + 1);
 
             switch ($dataType) {
                 case 'recovery':
-                    $data[$regDate][$daykey] = ToolLogic::getPercent($row['addup_pay_total'], $baseData[$regDate]['cost'] ?? 0, 1);
+                    $data[$regDate][$daykey] = getPercent($row['addup_pay_total'], $baseData[$regDate]['cost'] ?? 0, 1);
                     if ($nowDate === $row['pay_month']) {
-                        $data[$regDate]['m0'] = ToolLogic::getPercent($row['addup_pay_total'], $baseData[$regDate]['cost'] ?? 0, 1);
+                        $data[$regDate]['m0'] = getPercent($row['addup_pay_total'], $baseData[$regDate]['cost'] ?? 0, 1);
                     }
                     break;
 
                 /* 扣除分成/cost , 计算 */
                 case 'remount':
                     // 按天回本率
-                    $data[$regDate][$daykey] = ToolLogic::getPercent($row['addup_pay_amount'], $baseData[$regDate]['cost'] ?? 0, 1);
+                    $data[$regDate][$daykey] = getPercent($row['addup_pay_amount'], $baseData[$regDate]['cost'] ?? 0, 1);
                     // 累计回本率
                     if ($nowDate === $row['pay_month']) {
-                        $data[$regDate]['m0'] = ToolLogic::getPercent($row['addup_pay_amount'], $baseData[$regDate]['cost'] ?? 0, 1);
+                        $data[$regDate]['m0'] = getPercent($row['addup_pay_amount'], $baseData[$regDate]['cost'] ?? 0, 1);
                     }
                     break;
 
                 /*  累计计费付费金额 / 注册数 */
                 case 'ltv':
                     // 按天LTV
-                    $data[$regDate][$daykey] = ToolLogic::getRound($row['addup_pay_total'], $baseData[$regDate]['reg_total'] ?? 0, 1);
+                    $data[$regDate][$daykey] = getRound($row['addup_pay_total'], $baseData[$regDate]['reg_total'] ?? 0, 1);
                     // 累计LTV
                     if ($nowDate === $row['pay_month']) {
-                        $data[$regDate]['m0'] = ToolLogic::getRound($row['addup_pay_total'], $baseData[$regDate]['reg_total'] ?? 0, 1);
+                        $data[$regDate]['m0'] = getRound($row['addup_pay_total'], $baseData[$regDate]['reg_total'] ?? 0, 1);
                     }
                     break;
 
@@ -1184,17 +1181,17 @@ class ChannelAnalysisLogic extends BaseLogic
 
                 /* 付费率 */
                 case 'pay_rate':
-                    $data[$regDate][$daykey] = ToolLogic::getPercent($row['pay_num'], $baseData[$regDate]['reg_total']);
+                    $data[$regDate][$daykey] = getPercent($row['pay_num'], $baseData[$regDate]['reg_total']);
                     if ($nowDate === $row['pay_month']) {
-                        $data[$regDate]['m0'] = ToolLogic::getPercent($row['addup_pay_num'], $baseData[$regDate]['reg_total']);
+                        $data[$regDate]['m0'] = getPercent($row['addup_pay_num'], $baseData[$regDate]['reg_total']);
                     }
                     break;
 
                 /* 付费ARPU */
                 case 'arpu':
-                    $data[$regDate][$daykey] = ToolLogic::getRound($row['pay_total'], $row['pay_num']);
+                    $data[$regDate][$daykey] = getRound($row['pay_total'], $row['pay_num']);
                     if ($nowDate === $row['pay_month']) {
-                        $data[$regDate]['m0'] = ToolLogic::getRound($row['addup_pay_total'], $row['addup_pay_num']);
+                        $data[$regDate]['m0'] = getRound($row['addup_pay_total'], $row['addup_pay_num']);
                     }
                     break;
                 default:
@@ -1224,13 +1221,13 @@ class ChannelAnalysisLogic extends BaseLogic
             if ($key[0] === 'm') {
                 switch ($dataType) {
                     case 'recovery':
-                        $totalRow[$key] = ToolLogic::getPercent($totalRow[$key]['addup_pay_total'] ?? 0, $totalRow[$key]['cost'] ?? 0, 1);
+                        $totalRow[$key] = getPercent($totalRow[$key]['addup_pay_total'] ?? 0, $totalRow[$key]['cost'] ?? 0, 1);
                         break;
                     case 'remount':
-                        $totalRow[$key] = ToolLogic::getPercent($totalRow[$key]['addup_pay_amount'] ?? 0, $totalRow[$key]['cost'] ?? 0, 1);
+                        $totalRow[$key] = getPercent($totalRow[$key]['addup_pay_amount'] ?? 0, $totalRow[$key]['cost'] ?? 0, 1);
                         break;
                     case 'ltv':
-                        $totalRow[$key] = ToolLogic::getRound($totalRow[$key]['addup_pay_total'] ?? 0, $totalRow[$key]['reg_total'] ?? 0);
+                        $totalRow[$key] = getRound($totalRow[$key]['addup_pay_total'] ?? 0, $totalRow[$key]['reg_total'] ?? 0);
                         break;
                     case 'pay_num':
                         $totalRow[$key] = $totalRow[$key]['pay_num'] ?? 0;
@@ -1239,10 +1236,10 @@ class ChannelAnalysisLogic extends BaseLogic
                         $totalRow[$key] = $totalRow[$key]['pay_total'] ?? 0;
                         break;
                     case 'pay_rate':
-                        $totalRow[$key] = ToolLogic::getPercent($totalRow[$key]['pay_num'] ?? 0, $totalRow[$key]['reg_total'] ?? 0);
+                        $totalRow[$key] = getPercent($totalRow[$key]['pay_num'] ?? 0, $totalRow[$key]['reg_total'] ?? 0);
                         break;
                     case 'arpu':
-                        $totalRow[$key] = ToolLogic::getRound($totalRow[$key]['pay_total'] ?? 0, $totalRow[$key]['pay_num'] ?? 0);
+                        $totalRow[$key] = getRound($totalRow[$key]['pay_total'] ?? 0, $totalRow[$key]['pay_num'] ?? 0);
                         break;
                 }
             }
@@ -1251,13 +1248,13 @@ class ChannelAnalysisLogic extends BaseLogic
         if ($data && $totalRow) {
             switch ($dataType) {
                 case 'recovery':
-                    $totalRow['m0'] = ToolLogic::getPercent($pay_total, $totalRow['cost'], 1);
+                    $totalRow['m0'] = getPercent($pay_total, $totalRow['cost'], 1);
                     break;
                 case 'remount':
-                    $totalRow['m0'] = ToolLogic::getPercent($pay_amount, $totalRow['cost'], 1);
+                    $totalRow['m0'] = getPercent($pay_amount, $totalRow['cost'], 1);
                     break;
                 case 'ltv':
-                    $totalRow['m0'] = ToolLogic::getRound($pay_total, $totalRow['reg_total']);
+                    $totalRow['m0'] = getRound($pay_total, $totalRow['reg_total']);
                     break;
 
                 case 'pay_num':
@@ -1267,16 +1264,16 @@ class ChannelAnalysisLogic extends BaseLogic
                     $totalRow['m0'] = $pay_total;
                     break;
                 case 'pay_rate':
-                    $totalRow['m0'] = ToolLogic::getPercent($pay_num, $totalRow['reg_total']);
+                    $totalRow['m0'] = getPercent($pay_num, $totalRow['reg_total']);
                     break;
                 case 'arpu':
-                    $totalRow['m0'] = ToolLogic::getRound($pay_total, $pay_num);
+                    $totalRow['m0'] = getRound($pay_total, $pay_num);
                     break;
                 default:
                     break;
             }
-            $totalRow['reg_cost'] = ToolLogic::getRound($totalRow['cost'], $totalRow['reg_total']);
-            $list = ToolLogic::arrSort($data, 'tmonth', 'asc');
+            $totalRow['reg_cost'] = getRound($totalRow['cost'], $totalRow['reg_total']);
+            $list = arrSort($data, 'tmonth', 'asc');
         }
         return [
             'data' => array_values($list),

+ 7 - 7
app/v1/logic/dataReport/MaterialLogic.php

@@ -4,7 +4,7 @@
 
 namespace app\v1\logic\dataReport;
 
-use app\v1\logic\tool\ToolLogic;
+
 use plugin\saiadmin\basic\BaseLogic;
 use support\think\Db;
 
@@ -88,9 +88,9 @@ class MaterialLogic extends BaseLogic
                 $row['material_id'] = '';
             }
             $row['cost'] = round($row['cost'], 2);
-            $row['ad_click_rate'] = ToolLogic::getPercent($row['click'], $row['ad_show'], 2);
-            $row['reg_cost'] = ToolLogic::getRound($row['cost'], $row['register'], 2);
-            $row['pay_cost'] = ToolLogic::getRound($row['cost'], (int)$row['pay_count'], 2);
+            $row['ad_click_rate'] = getPercent($row['click'], $row['ad_show'], 2);
+            $row['reg_cost'] = getRound($row['cost'], $row['register'], 2);
+            $row['pay_cost'] = getRound($row['cost'], (int)$row['pay_count'], 2);
             $totalData['cost'] = !empty($totalData['cost']) ? round($totalData['cost'] + $row['cost'], 2) : $row['cost'];
             $totalData['ad_show'] = !empty($totalData['ad_show']) ? $totalData['ad_show'] + $row['ad_show'] : $row['ad_show'];
             $totalData['click'] = !empty($totalData['click']) ? $totalData['click'] + $row['click'] : $row['click'];
@@ -100,9 +100,9 @@ class MaterialLogic extends BaseLogic
             $totalData['pay_amount'] = !empty($totalData['pay_amount']) ? $totalData['pay_amount'] + $row['pay_amount'] : $row['pay_amount'];
         }
 
-        $totalData['ad_click_rate'] = ToolLogic::getPercent($totalData['click']??0, $totalData['ad_show']??0, 2);
-        $totalData['reg_cost'] = ToolLogic::getRound($totalData['cost']??0, $totalData['register']??0, 2);
-        $totalData['pay_cost'] = ToolLogic::getRound($totalData['cost']??0, (int)$totalData['pay_count']??0, 2);
+        $totalData['ad_click_rate'] = getPercent($totalData['click']??0, $totalData['ad_show']??0, 2);
+        $totalData['reg_cost'] = getRound($totalData['cost']??0, $totalData['register']??0, 2);
+        $totalData['pay_cost'] = getRound($totalData['cost']??0, (int)$totalData['pay_count']??0, 2);
 
         return [
             'data' => $data,

+ 2 - 2
app/v1/logic/dataReport/UserLogLogic.php

@@ -38,7 +38,7 @@ class UserLogLogic extends BaseLogic
 
         // 公共处理完的where, 自然量ID, auth_id=0为自然量
         $whereRaw = $this->getCommonWhereRaw($params);
-        $monthRange = getMonthsBetweenDates($params['reg_time'][0], $params['reg_time'][1]);
+        $monthRange = getMonthRange($params['reg_time'][0], $params['reg_time'][1]);
 
         $db = Db::connect('db_game_log');
         $unionQuery = [];
@@ -93,7 +93,7 @@ class UserLogLogic extends BaseLogic
 
          // 公共处理完的where, 自然量ID, auth_id=0为自然量
         $whereRaw = $this->getCommonWhereRaw($params);
-        $monthRange = getMonthsBetweenDates($params['login_time'][0], $params['login_time'][1]);
+        $monthRange = getMonthRange($params['login_time'][0], $params['login_time'][1]);
 
         $db = Db::connect('db_game_log');
         $unionQuery = [];

+ 0 - 126
app/v1/logic/tool/ToolLogic.php

@@ -1,126 +0,0 @@
-<?php
-
-namespace app\v1\logic\tool;
-
-class ToolLogic
-{
-    /**
-     * 两数相除
-     */
-    public static function getRound($num, $base, $precision = 2){
-        if (!$base) return '0';
-        return round($num / $base, $precision);
-    }
-
-    /**
-     * 获取百分比
-     */
-    public static function getPercent($num, $base, $precision = 2, $last = '%'){
-        $num  = intval($num);
-        $base = intval($base);
-
-        if (!$base) return '0';
-
-        return round($num / $base * 100, $precision) . $last;
-    }
-
-    // 获取YM表名
-    public static function getMonthlyTableNames($prefix, $startDate, $endDate) {
-
-        $start = new \DateTime($startDate);
-        $end = new \DateTime($endDate);
-        // 判断$endDate是否大于当前时间,如果大于,则取当前时间
-        $now = new \DateTime();
-        if ($end > $now) {
-            $end = clone $now;
-        }
-        $end->modify('first day of next month'); // Include the end month
-
-        $tables = [];
-
-        while ($start < $end) {
-            $tables[] = $prefix . $start->format('Ym');
-            $start->modify('+1 month');
-        }
-
-
-        return $tables;
-    }
-
-    // 获取年份表名
-    public static function getYearlyTableNames($prefix,$startDate, $endDate){
-        $startYear = (int)date('Y', strtotime($startDate));
-        $endYear = (int)date('Y', strtotime($endDate));
-
-        $tables = [];
-        for ($year = $startYear; $year <= $endYear; $year++) {
-            $tables[] = $prefix . $year;
-        }
-
-        return $tables;
-    }
-
-    /**
-     * 多维数组排序
-     */
-    public static function arrSort($data = [],$name='',$sort = 'desc'){
-        if(!$data || !$name){
-            return false;
-        }
-        $orders = [];
-        foreach($data as $v){
-            $orders[] = $v[$name];
-        }
-        if($sort == 'desc') {
-            array_multisort($orders,SORT_DESC, $data);
-        } else {
-            array_multisort($orders,SORT_ASC, $data);
-        }
-
-        return $data;
-    }
-
-    /**
-     * 获取两个日期之间的所有日期
-     */
-    public static function getDatesBetween($startDate, $endDate)
-    {
-        $dates = [];
-        $startDate = new \DateTime($startDate);
-        $endDate = new \DateTime($endDate);
-        $endDate->modify('+1 day'); // 添加一天,包含结束日期
-
-        $interval = new \DateInterval('P1D');
-        $dateRange = new \DatePeriod($startDate, $interval, $endDate);
-
-        foreach ($dateRange as $date) {
-            $dates[] = $date->format('Y-m-d');
-        }
-
-        return $dates;
-    }
-
-       /**
-     * 获取月份差
-     */
-    public static function getMonthNum($sdate,$edate){
-        if($sdate > $edate){
-            return 0;
-        }
-        list($y1,$m1)=explode("-",date('Y-m',strtotime($sdate)));
-        list($y2,$m2)=explode("-",date('Y-m',strtotime($edate)));
-        return abs(($y2-$y1)*12 + $m2-$m1);
-    }
-
-    /**
-     * 获取两个日期之间的天数
-     */
-    public static function getDays($sdate,$edate){
-        $days = (strtotime($edate) - strtotime($sdate)) / 86400;
-        return $days;
-    }
-
-    
-
-
-}

+ 92 - 154
plugin/saiadmin/basic/BaseLogic.php

@@ -161,114 +161,6 @@ class BaseLogic
         return $this->model->withSearch($withSearch, $data);
     }
 
-    /**
-     * 根据权限搜索器
-     * @param array $searchWhere
-     * @param array $withSearch 搜索器
-     * @return mixed
-     */
-     public function searchByAuth(array $searchWhere = []): mixed
-    {
-        $withSearch = array_keys($searchWhere);
-        $data = $searchWhere;
-        foreach ($withSearch as $k => $v) {
-            if ($data[$v] === '') {
-                unset($data[$v]);
-                unset($withSearch[$k]);
-            }
-        }
-
-        $userAuthCache = new UserInfoCache(getCurrentInfo()['id']);
-        $userInfo = $userAuthCache->getUserInfo();
-        // Todo 如果角色权限,超过跳过权限限制
-        $roleIds = array_column($userInfo['roleList'], 'id');
-        if(in_array(1, $roleIds)){
-            return $data;
-        }
-
-        // Todo 1、游戏权限
-        $authGameList = $userInfo['deptList']['game_list'];
-        if($authGameList != '*'){
-            $authGameIds = explode(',', $authGameList);
-
-            if(!empty($data['game_id'])){
-                $inputGameIds = is_array($data['game_id']) ? $data['game_id'] : explode(',', $data['game_id']);
-                $data['game_id'] = array_values(array_intersect($inputGameIds, $authGameIds)); // 如果传入了game_id,则取权限交集
-            }else{
-                // 如果没传入game_id,则取权限
-                $data['game_id'] = $authGameIds;
-            }
-        }
-
-        // Todo 2、广告数据权限
-        $userId = $userInfo['id'];
-        $deptId = $userInfo['deptList']['id'];
-        // 广告权限,自己 or 全部
-        $authAdPermission = $userInfo['ad_permission'];
-        if($authAdPermission){
-            if($authAdPermission==1){ // Todo 1、仅自己
-                $data['auth_id'] = [$userId];
-            } elseif($authAdPermission==2) { // Todo 2、自己部门
-                $underUserIds = Db::connect('db_system')->table('sa_system_user')->where('dept_id', 'in', $deptId)->column('id');
-                if(!empty($data['auth_id'])) { // 如果传入了负责人ID,则取交集
-                    $data['auth_id'] = array_values(array_intersect( $data['auth_id'], array_values($underUserIds)));
-                }else{ // 如果没有传入负责人ID, 则取当前用户以及下面组员
-                    $data['auth_id'] =  array_values($underUserIds);
-                }
-            }
-        }
-
-        // 看指定游戏的自然量
-        $authNormalGameList = $userInfo['normal_game_list']; // 可看自然量的游戏
-        if($authNormalGameList!='*' && $authNormalGameList!='-1' && !empty($data['game_id'])){
-            // 则取auth_normal_game_list交集
-            $data['normal_game_id'] = array_values(array_intersect(explode(',', $authNormalGameList), $data['game_id']));
-        }
-
-        return $data;
-    }
-
-    // Todo 公共 where 子句
-    protected function getCommonWhereRaw($params): string
-    {
-        $eqParams = ["user_name", "media_id", "site_id", "agent_id", "vt", "server_id", "server_name"];
-        $inParams = ["game_id", "auth_id"];
-        $betweenParams  = ["tdate"];
-        $timeParams     = ["reg_time", "pay_time", "login_time"];
-        $DateTimeParams = ["create_time"];
-
-        // Todo And条件
-        $whereRaw = " 1=1 ";
-        foreach ($params as $key => $value){
-            if (in_array($key, $eqParams)) {
-                $whereRaw .= " AND `{$key}`='{$value}'";
-            } elseif (in_array($key, $inParams) && !empty($value)) {
-                $value = is_string($value) ? explode(',', $value) : $value;
-                $whereRaw .= " AND `{$key}` IN ('".implode("','", $value)."')";
-            } elseif (in_array($key, $betweenParams) && !empty($value)) {
-                $whereRaw .= " AND `{$key}` BETWEEN '{$value[0]}' AND '{$value[1]}'";
-            } elseif (in_array($key, $DateTimeParams) && !empty($value)) {
-                $value[0] = $value[0] .' 00:00:00';
-                $value[1] = $value[1] .' 23:59:59';
-                $whereRaw .= " AND `{$key}` BETWEEN '{$value[0]}' AND '{$value[1]}'";
-            } elseif (in_array($key, $timeParams) && !empty($value)) {
-                $value[0] = strtotime($value[0] .' 00:00:00');
-                $value[1] = strtotime($value[1] .' 23:59:59');
-                $whereRaw .= " AND `{$key}` BETWEEN '{$value[0]}' AND '{$value[1]}'";
-            }
-        }
-
-        // Todo 自然量走 Or 条件
-        $whereOr = [];
-        if(!empty($params['normal_game_id'])){
-            foreach ($params['normal_game_id'] as $gameId){
-                $whereOr[] = "(game_id = {$gameId} AND auth_id=0)";
-            }
-        }
-        $whereOr = $whereOr ? implode(' OR ', $whereOr) : "";
-
-        return $whereRaw . ($whereOr ? " OR {$whereOr}" : "");
-    }
     /**
      * 分页查询数据
      * @param $query
@@ -432,66 +324,112 @@ class BaseLogic
         return call_user_func_array([$this->model, $name], $arguments);
     }
 
-    // 渠道分析、运营分析生成的whereSql
-    public function generateWhereSql($params): string
+    /**
+     * 根据权限搜索器
+     * @param array $searchWhere
+     * @param array $withSearch 搜索器
+     * @return mixed
+     */
+    public function searchByAuth(array $searchWhere = []): mixed
     {
-        $whereSql = "";
-        // 游戏id
-        if (!empty($params['game_id'])) {
-            if (is_array($params['game_id'])) {
-                $whereSql .= " AND game_id IN(" . implode(',', $params['game_id']) . ")";
-            } else {
-                $whereSql .= " AND game_id = {$params['game_id']}";
+        $withSearch = array_keys($searchWhere);
+        $data = $searchWhere;
+        foreach ($withSearch as $k => $v) {
+            if ($data[$v] === '') {
+                unset($data[$v]);
+                unset($withSearch[$k]);
             }
         }
-        // 媒体id
-        if (!empty($params['media_id'])) {
-            $whereSql .= " AND media_id = {$params['media_id']}";
-        }
-        // 渠道id
-        if (!empty($params['agent_id'])) {
-            $whereSql .= " AND agent_id = {$params['agent_id']}";
+
+        $userAuthCache = new UserInfoCache(getCurrentInfo()['id']);
+        $userInfo = $userAuthCache->getUserInfo();
+        // Todo 如果角色权限,超过跳过权限限制
+        $roleIds = array_column($userInfo['roleList'], 'id');
+        if(in_array(1, $roleIds)){
+            return $data;
         }
-        // 广告位id
-        if (!empty($params['site_id'])) {
-            if (is_array($params['site_id'])) {
-                $whereSql .= " AND site_id IN(" . implode(',', $params['site_id']) . ")";
-            } else {
-                $whereSql .= " AND site_id = {$params['site_id']}";
+
+        // Todo 1、游戏权限
+        $authGameList = $userInfo['deptList']['game_list'];
+        if($authGameList != '*'){
+            $authGameIds = explode(',', $authGameList);
+
+            if(!empty($data['game_id'])){
+                $inputGameIds = is_array($data['game_id']) ? $data['game_id'] : explode(',', $data['game_id']);
+                $data['game_id'] = array_values(array_intersect($inputGameIds, $authGameIds)); // 如果传入了game_id,则取权限交集
+            }else{
+                // 如果没传入game_id,则取权限
+                $data['game_id'] = $authGameIds;
             }
         }
-        // 负责人
-        if (!empty($params['auth_id'])) {
-            if (is_array($params['auth_id'])) {
-                
-                $whereSql .= " AND auth_id IN(" . implode(',', $params['auth_id']) . ")";
-            } else {
-                $whereSql .= " AND auth_id = {$params['auth_id']}";
+
+        // Todo 2、广告数据权限
+        $userId = $userInfo['id'];
+        $deptId = $userInfo['deptList']['id'];
+        // 广告权限,自己 or 全部
+        $authAdPermission = $userInfo['ad_permission'];
+        if($authAdPermission){
+            if($authAdPermission==1){ // Todo 1、仅自己
+                $data['auth_id'] = [$userId];
+            } elseif($authAdPermission==2) { // Todo 2、自己部门
+                $underUserIds = Db::connect('db_system')->table('sa_system_user')->where('dept_id', 'in', $deptId)->column('id');
+                if(!empty($data['auth_id'])) { // 如果传入了负责人ID,则取交集
+                    $data['auth_id'] = array_values(array_intersect( $data['auth_id'], array_values($underUserIds)));
+                }else{ // 如果没有传入负责人ID, 则取当前用户以及下面组员
+                    $data['auth_id'] =  array_values($underUserIds);
+                }
             }
         }
-        // 注册日期
-        if (!empty($params['reg_date']) ?? null) {
-            $whereSql .= " AND tdate BETWEEN '{$params['reg_date'][0]}' AND '{$params['reg_date'][1]}'";
-        }
 
-        // 自然量ID, auth_id=0为自然量
-        if(!empty($params['normal_game_id'])){
-            for($i=0;$i<count($params['normal_game_id']);$i++){
-                $whereSql .= " OR (game_id = {$params['normal_game_id'][$i]} AND auth_id=0)";
-            }
+        // 看指定游戏的自然量
+        $authNormalGameList = $userInfo['normal_game_list']; // 可看自然量的游戏
+        if($authNormalGameList!='*' && $authNormalGameList!='-1' && !empty($data['game_id'])){
+            // 则取auth_normal_game_list交集
+            $data['normal_game_id'] = array_values(array_intersect(explode(',', $authNormalGameList), $data['game_id']));
         }
 
-        // 注册时间
-        if (!empty($params['reg_time'])) {
-            $whereSql .= " AND create_time BETWEEN '{$params['reg_time'][0]} 00:00:00' AND '{$params['reg_time'][1]} 23:59:59'";
+        return $data;
+    }
+
+    // Todo 公共 whereRaw 子句
+    protected function getCommonWhereRaw($params): string
+    {
+        $eqParams = ["user_name", "media_id", "site_id", "agent_id", "vt", "server_id", "server_name"];
+        $inParams = ["game_id", "auth_id"];
+        $betweenParams  = ["tdate"];
+        $timeParams     = ["reg_time", "pay_time", "login_time"];
+        $DateTimeParams = ["create_time"];
+
+        // Todo And条件
+        $whereRaw = " 1=1 ";
+        foreach ($params as $key => $value){
+            if (in_array($key, $eqParams)) {
+                $whereRaw .= " AND `{$key}`='{$value}'";
+            } elseif (in_array($key, $inParams) && !empty($value)) {
+                $value = is_string($value) ? explode(',', $value) : $value;
+                $whereRaw .= " AND `{$key}` IN ('".implode("','", $value)."')";
+            } elseif (in_array($key, $betweenParams) && !empty($value)) {
+                $whereRaw .= " AND `{$key}` BETWEEN '{$value[0]}' AND '{$value[1]}'";
+            } elseif (in_array($key, $DateTimeParams) && !empty($value)) {
+                $value[0] = $value[0] .' 00:00:00';
+                $value[1] = $value[1] .' 23:59:59';
+                $whereRaw .= " AND `{$key}` BETWEEN '{$value[0]}' AND '{$value[1]}'";
+            } elseif (in_array($key, $timeParams) && !empty($value)) {
+                $value[0] = strtotime($value[0] .' 00:00:00');
+                $value[1] = strtotime($value[1] .' 23:59:59');
+                $whereRaw .= " AND `{$key}` BETWEEN '{$value[0]}' AND '{$value[1]}'";
+            }
         }
 
-        // 用户名
-        if (!empty($params['user_name'])) {
-            $whereSql .= " AND user_name = {$params['user_name']}";
+        // Todo 自然量走 Or 条件
+        $whereOr = [];
+        if(!empty($params['normal_game_id'])){
+            foreach ($params['normal_game_id'] as $gameId){
+                $whereOr[] = "(game_id = {$gameId} AND auth_id=0)";
+            }
         }
+        $whereOr = $whereOr ? implode(' OR ', $whereOr) : "";
 
-        return $whereSql;
+        return $whereRaw . ($whereOr ? " OR {$whereOr}" : "");
     }
-
 }