|
@@ -1,21 +1,16 @@
|
|
|
<?php
|
|
<?php
|
|
|
|
|
|
|
|
-// 玩家日志逻
|
|
|
|
|
-
|
|
|
|
|
namespace app\v1\logic\dataReport;
|
|
namespace app\v1\logic\dataReport;
|
|
|
|
|
|
|
|
use app\v1\logic\tool\ToolLogic;
|
|
use app\v1\logic\tool\ToolLogic;
|
|
|
use plugin\saiadmin\basic\BaseLogic;
|
|
use plugin\saiadmin\basic\BaseLogic;
|
|
|
-use plugin\saiadmin\service\OpenSpoutWriter;
|
|
|
|
|
use support\think\Db;
|
|
use support\think\Db;
|
|
|
-use support\Request;
|
|
|
|
|
|
|
|
|
|
class ChannelAnalysisLogic extends BaseLogic
|
|
class ChannelAnalysisLogic extends BaseLogic
|
|
|
{
|
|
{
|
|
|
// 分时数据
|
|
// 分时数据
|
|
|
public function getHourDataList($where)
|
|
public function getHourDataList($where)
|
|
|
{
|
|
{
|
|
|
-
|
|
|
|
|
$params = $this->searchByAuth($where);
|
|
$params = $this->searchByAuth($where);
|
|
|
// hour=>小时, reg_total=>注册数,cost=>消耗,pay_num=>付费总用户数,
|
|
// hour=>小时, reg_total=>注册数,cost=>消耗,pay_num=>付费总用户数,
|
|
|
// pay_total=>付费总金额,reg_pay_num=>小时注册当天付费数,reg_pay_total=>小时注册当天付费金额
|
|
// pay_total=>付费总金额,reg_pay_num=>小时注册当天付费数,reg_pay_total=>小时注册当天付费金额
|
|
@@ -42,10 +37,7 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
$unionSql = implode(" UNION ALL ", $sqlParts);
|
|
$unionSql = implode(" UNION ALL ", $sqlParts);
|
|
|
|
|
|
|
|
// 外层包裹分页、排序
|
|
// 外层包裹分页、排序
|
|
|
- $finalSql = "
|
|
|
|
|
- SELECT {$field} FROM ( {$unionSql} ) AS all_hour
|
|
|
|
|
- GROUP BY {$group}
|
|
|
|
|
- ";
|
|
|
|
|
|
|
+ $finalSql = " SELECT {$field} FROM ( {$unionSql} ) AS all_hour GROUP BY {$group} ";
|
|
|
|
|
|
|
|
// 按小时数据
|
|
// 按小时数据
|
|
|
$hourData = Db::connect('db_data_report')->query($finalSql);
|
|
$hourData = Db::connect('db_data_report')->query($finalSql);
|
|
@@ -73,13 +65,11 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
// 回本率
|
|
// 回本率
|
|
|
$hourRow['roi'] = ToolLogic::getPercent($hourRow['reg_pay_total'], $hourRow['cost']);
|
|
$hourRow['roi'] = ToolLogic::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'];
|
|
$total[$hourKey]['reg_total'] = !empty($total[$hourKey]['reg_total']) ? ($total[$hourKey]['reg_total'] + $hourRow['reg_total']) : $hourRow['reg_total'];
|
|
|
$total[$hourKey]['cost'] = !empty($total[$hourKey]['cost']) ? round($total[$hourKey]['cost'] + $hourRow['cost'], 2) : $hourRow['cost'];
|
|
$total[$hourKey]['cost'] = !empty($total[$hourKey]['cost']) ? round($total[$hourKey]['cost'] + $hourRow['cost'], 2) : $hourRow['cost'];
|
|
|
$total[$hourKey]['reg_pay_total'] = !empty($total[$hourKey]['reg_pay_total']) ? ($total[$hourKey]['reg_pay_total'] + $hourRow['reg_pay_total']) : $hourRow['reg_pay_total'];
|
|
$total[$hourKey]['reg_pay_total'] = !empty($total[$hourKey]['reg_pay_total']) ? ($total[$hourKey]['reg_pay_total'] + $hourRow['reg_pay_total']) : $hourRow['reg_pay_total'];
|
|
|
$total[$hourKey]['reg_pay_num'] = !empty($total[$hourKey]['reg_pay_num']) ? ($total[$hourKey]['reg_pay_num'] + $hourRow['reg_pay_num']) : $hourRow['reg_pay_num'];
|
|
$total[$hourKey]['reg_pay_num'] = !empty($total[$hourKey]['reg_pay_num']) ? ($total[$hourKey]['reg_pay_num'] + $hourRow['reg_pay_num']) : $hourRow['reg_pay_num'];
|
|
|
-
|
|
|
|
|
$total['total_raw']['reg_total'] = !empty($total['total_raw']['reg_total']) ? ($total['total_raw']['reg_total'] + $hourRow['reg_total']) : $hourRow['reg_total'];
|
|
$total['total_raw']['reg_total'] = !empty($total['total_raw']['reg_total']) ? ($total['total_raw']['reg_total'] + $hourRow['reg_total']) : $hourRow['reg_total'];
|
|
|
$total['total_raw']['cost'] = !empty($total['total_raw']['cost']) ? round($total['total_raw']['cost'] + $hourRow['cost'], 2) : $hourRow['cost'];
|
|
$total['total_raw']['cost'] = !empty($total['total_raw']['cost']) ? round($total['total_raw']['cost'] + $hourRow['cost'], 2) : $hourRow['cost'];
|
|
|
$total['total_raw']['reg_pay_total'] = !empty($total['total_raw']['reg_pay_total']) ? ($total['total_raw']['reg_pay_total'] + $hourRow['reg_pay_total']) : $hourRow['reg_pay_total'];
|
|
$total['total_raw']['reg_pay_total'] = !empty($total['total_raw']['reg_pay_total']) ? ($total['total_raw']['reg_pay_total'] + $hourRow['reg_pay_total']) : $hourRow['reg_pay_total'];
|
|
@@ -88,7 +78,6 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
$hourResult[$agentId][$hourKey] = $hourRow;
|
|
$hourResult[$agentId][$hourKey] = $hourRow;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-
|
|
|
|
|
// 计算统计的注册成本、付费绿、回本率
|
|
// 计算统计的注册成本、付费绿、回本率
|
|
|
foreach ($total as $key => &$v) {
|
|
foreach ($total as $key => &$v) {
|
|
|
if (!is_array($v)) continue; // 跳过 agent_id => 合计 等非数组元素
|
|
if (!is_array($v)) continue; // 跳过 agent_id => 合计 等非数组元素
|
|
@@ -119,9 +108,8 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
|
|
|
|
|
// 留存按日
|
|
// 留存按日
|
|
|
|
|
|
|
|
- public function generateWhereSql($params)
|
|
|
|
|
|
|
+ public function generateWhereSql($params): string
|
|
|
{
|
|
{
|
|
|
-
|
|
|
|
|
$whereSql = "";
|
|
$whereSql = "";
|
|
|
// 游戏id
|
|
// 游戏id
|
|
|
if (!empty($params['game_id'])) {
|
|
if (!empty($params['game_id'])) {
|
|
@@ -163,9 +151,8 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
return $whereSql;
|
|
return $whereSql;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- public function getActiveDataList($where)
|
|
|
|
|
|
|
+ public function getActiveDataList($where): array
|
|
|
{
|
|
{
|
|
|
-
|
|
|
|
|
$params = $this->searchByAuth($where);
|
|
$params = $this->searchByAuth($where);
|
|
|
|
|
|
|
|
$whereSql = $this->generateWhereSql($params);
|
|
$whereSql = $this->generateWhereSql($params);
|
|
@@ -202,7 +189,6 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
$actDataSql = "select reg_date as tdate, days, sum(active_total) as active from ({$unionGameActiveDaySql}) as all_game_active_day group by reg_date,days";
|
|
$actDataSql = "select reg_date as tdate, days, sum(active_total) as active from ({$unionGameActiveDaySql}) as all_game_active_day group by reg_date,days";
|
|
|
// 替换日期字段, 因为game_active_day_表的日期字段是[reg_date]
|
|
// 替换日期字段, 因为game_active_day_表的日期字段是[reg_date]
|
|
|
$actDataSql = str_replace("AND tdate", "AND reg_date", $actDataSql);
|
|
$actDataSql = str_replace("AND tdate", "AND reg_date", $actDataSql);
|
|
|
-
|
|
|
|
|
// 日期、活跃天数、活跃数,按日期和活跃天数分组
|
|
// 日期、活跃天数、活跃数,按日期和活跃天数分组
|
|
|
$actData = Db::connect('db_data_report')->query($actDataSql);
|
|
$actData = Db::connect('db_data_report')->query($actDataSql);
|
|
|
|
|
|
|
@@ -244,10 +230,7 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
}
|
|
}
|
|
|
// 活跃天数的key
|
|
// 活跃天数的key
|
|
|
$dayKey = 'd' . $r['days'];
|
|
$dayKey = 'd' . $r['days'];
|
|
|
-
|
|
|
|
|
// N日留存率 = 第N天活跃数 ÷ 注册日注册数 × 100%。
|
|
// N日留存率 = 第N天活跃数 ÷ 注册日注册数 × 100%。
|
|
|
- // $list['2025-07-23'][d1]['active']/$list['2025-07-23']['reg']
|
|
|
|
|
- // $list['2025-07-23'][d2]['active']/$list['2025-07-23']['reg']
|
|
|
|
|
$list[$reg_date][$dayKey] = ToolLogic::getPercent($r['active'], $list[$reg_date]['reg']);
|
|
$list[$reg_date][$dayKey] = ToolLogic::getPercent($r['active'], $list[$reg_date]['reg']);
|
|
|
// d1...dn的reg = 记录按日的活跃数
|
|
// d1...dn的reg = 记录按日的活跃数
|
|
|
$totalData[$dayKey]['active'] += $r['active'];
|
|
$totalData[$dayKey]['active'] += $r['active'];
|
|
@@ -262,11 +245,10 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- $data = [
|
|
|
|
|
|
|
+ return [
|
|
|
'data' => array_values($list),
|
|
'data' => array_values($list),
|
|
|
'totalRow' => $total,
|
|
'totalRow' => $total,
|
|
|
];
|
|
];
|
|
|
- return $data;
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -297,14 +279,10 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
public function getAgentDataList($where)
|
|
public function getAgentDataList($where)
|
|
|
{
|
|
{
|
|
|
$params = $this->searchByAuth($where);
|
|
$params = $this->searchByAuth($where);
|
|
|
-
|
|
|
|
|
// 忽略 0 投入
|
|
// 忽略 0 投入
|
|
|
$igz = !empty($params['filter']) && is_array($params['filter']) && in_array('igz', $params['filter']);
|
|
$igz = !empty($params['filter']) && is_array($params['filter']) && in_array('igz', $params['filter']);
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
$group = !empty($params['group']) ? $params['group'] : '';
|
|
$group = !empty($params['group']) ? $params['group'] : '';
|
|
|
|
|
|
|
|
-
|
|
|
|
|
// 如果分组按照 游戏组ID||游戏组
|
|
// 如果分组按照 游戏组ID||游戏组
|
|
|
if ($group == 1) {
|
|
if ($group == 1) {
|
|
|
$type = 'game_id';
|
|
$type = 'game_id';
|
|
@@ -318,7 +296,6 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
|
|
|
|
|
$whereSql = $this->generateWhereSql($params);
|
|
$whereSql = $this->generateWhereSql($params);
|
|
|
|
|
|
|
|
-
|
|
|
|
|
// 1.查询消耗数据, 安game_id/agent_id分组
|
|
// 1.查询消耗数据, 安game_id/agent_id分组
|
|
|
// 忽略后台录入的消耗
|
|
// 忽略后台录入的消耗
|
|
|
$costWhereSql = $whereSql;
|
|
$costWhereSql = $whereSql;
|
|
@@ -348,7 +325,6 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
// 2. 获取基础报表数据,兼容跨年
|
|
// 2. 获取基础报表数据,兼容跨年
|
|
|
$baseData = $this->generateYearUnionList('base_total_day_', $params['reg_date'], $whereSql, $totalDayField, $type);
|
|
$baseData = $this->generateYearUnionList('base_total_day_', $params['reg_date'], $whereSql, $totalDayField, $type);
|
|
|
|
|
|
|
|
-
|
|
|
|
|
// 3. 获取活跃数
|
|
// 3. 获取活跃数
|
|
|
$activeWhereSql = $whereSql . ' AND days = 1';
|
|
$activeWhereSql = $whereSql . ' AND days = 1';
|
|
|
$activeWhereSql = str_replace('AND tdate', 'AND reg_date', $activeWhereSql);
|
|
$activeWhereSql = str_replace('AND tdate', 'AND reg_date', $activeWhereSql);
|
|
@@ -378,8 +354,8 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
$hb7dayData = array_column($hb7dayData ?? [], 'reg_pay_amount_7', $type);
|
|
$hb7dayData = array_column($hb7dayData ?? [], 'reg_pay_amount_7', $type);
|
|
|
|
|
|
|
|
$hb7dayDataSum = 0;
|
|
$hb7dayDataSum = 0;
|
|
|
- foreach ($hb7dayData as $row) {
|
|
|
|
|
- $hb7dayDataSum += $row;
|
|
|
|
|
|
|
+ foreach ($hb7dayData as $daySum) {
|
|
|
|
|
+ $hb7dayDataSum += $daySum;
|
|
|
}
|
|
}
|
|
|
if (empty($baseData)) {
|
|
if (empty($baseData)) {
|
|
|
return [];
|
|
return [];
|
|
@@ -403,7 +379,6 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
|
|
|
|
|
// 拼接数据
|
|
// 拼接数据
|
|
|
foreach ($baseData as $key => &$row) {
|
|
foreach ($baseData as $key => &$row) {
|
|
|
-
|
|
|
|
|
$typeId = $row[$type]; // type, 的取值, 这里根据分组, game_id | agent_id
|
|
$typeId = $row[$type]; // type, 的取值, 这里根据分组, game_id | agent_id
|
|
|
$cost = $costDataColumn[$typeId] ?? 0;
|
|
$cost = $costDataColumn[$typeId] ?? 0;
|
|
|
$row['cost'] = $cost;
|
|
$row['cost'] = $cost;
|
|
@@ -411,7 +386,6 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
if ($igz && $row['cost'] === 0) {
|
|
if ($igz && $row['cost'] === 0) {
|
|
|
unset($baseData[$key]);
|
|
unset($baseData[$key]);
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
// 注册成本
|
|
// 注册成本
|
|
|
$row['reg_cost'] = ToolLogic::getRound($cost, $row['reg_total'] ?? 0);
|
|
$row['reg_cost'] = ToolLogic::getRound($cost, $row['reg_total'] ?? 0);
|
|
|
// 创角率
|
|
// 创角率
|
|
@@ -422,149 +396,97 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
$row['a_per'] = ToolLogic::getPercent($activeData[$typeId]['active'] ?? 0, $row['reg_total'], 1);
|
|
$row['a_per'] = ToolLogic::getPercent($activeData[$typeId]['active'] ?? 0, $row['reg_total'], 1);
|
|
|
// 次留成本
|
|
// 次留成本
|
|
|
$row['a_cost'] = ToolLogic::getRound($cost, $row['active'], 1);
|
|
$row['a_cost'] = ToolLogic::getRound($cost, $row['active'], 1);
|
|
|
-
|
|
|
|
|
// 总付费金额
|
|
// 总付费金额
|
|
|
$row['reg_pay_total'] = $regPayData[$typeId]['reg_pay_total'] ?? 0;
|
|
$row['reg_pay_total'] = $regPayData[$typeId]['reg_pay_total'] ?? 0;
|
|
|
-
|
|
|
|
|
// 总付费人数
|
|
// 总付费人数
|
|
|
$row['reg_pay_num'] = $regPayData[$typeId]['reg_pay_num'] ?? 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'] = ToolLogic::getRound($row['cost'], $row['reg_pay_num']);
|
|
|
-
|
|
|
|
|
// 付费率
|
|
// 付费率
|
|
|
$row['p_per'] = ToolLogic::getPercent($row['reg_pay_num'] ?? 0, $row['reg_total'], 1);
|
|
$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['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_per'] = (float)trim(ToolLogic::getPercent($row['reg_pay_total'], $row['cost']), "%");
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
$row['reg_pay_amount'] = $hb7dayData[$typeId]['reg_pay_amount'] ?? 0;
|
|
$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'] = ToolLogic::getPercent($row['reg_pay_amount'], $row['cost'], 1);
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
//ARPU
|
|
//ARPU
|
|
|
$row['arpu'] = ToolLogic::getRound($row['reg_pay_total'], $row['reg_pay_num']);
|
|
$row['arpu'] = ToolLogic::getRound($row['reg_pay_total'], $row['reg_pay_num']);
|
|
|
-
|
|
|
|
|
//注册ARPU
|
|
//注册ARPU
|
|
|
$row['r_arpu'] = ToolLogic::getRound($row['reg_pay_total'], $row['reg_total']);
|
|
$row['r_arpu'] = ToolLogic::getRound($row['reg_pay_total'], $row['reg_total']);
|
|
|
-
|
|
|
|
|
// 7天回本率
|
|
// 7天回本率
|
|
|
$row['re_amount_per_7'] = ToolLogic::getPercent($hb7dayData[$typeId] ?? 0, $row['cost'], 1);
|
|
$row['re_amount_per_7'] = ToolLogic::getPercent($hb7dayData[$typeId] ?? 0, $row['cost'], 1);
|
|
|
|
|
|
|
|
-
|
|
|
|
|
// 按分组信息展示,id和name
|
|
// 按分组信息展示,id和name
|
|
|
switch ($params['group'] ?? '') {
|
|
switch ($params['group'] ?? '') {
|
|
|
case 1:
|
|
case 1:
|
|
|
$row['akey'] = $row['game_id'];
|
|
$row['akey'] = $row['game_id'];
|
|
|
- $row['name'] = $gameData[$row['game_id']]['name'];
|
|
|
|
|
|
|
+ $row['name'] = $gameData[$row['game_id']]['name'] ?? "";
|
|
|
$row['auth_name'] = '-';
|
|
$row['auth_name'] = '-';
|
|
|
break;
|
|
break;
|
|
|
|
|
|
|
|
case 2:
|
|
case 2:
|
|
|
$row['akey'] = $row['auth_id'];
|
|
$row['akey'] = $row['auth_id'];
|
|
|
$row['name'] = '-';
|
|
$row['name'] = '-';
|
|
|
- $row['auth_name'] = $authData[$row['auth_id']]['username'];
|
|
|
|
|
|
|
+ $row['auth_name'] = $authData[$row['auth_id']]['username'] ?? "";
|
|
|
|
|
|
|
|
case 3:
|
|
case 3:
|
|
|
$row['akey'] = $row['media_id'];
|
|
$row['akey'] = $row['media_id'];
|
|
|
- $row['name'] = $mediaData[$row['media_id']]['name'];
|
|
|
|
|
- $row['auth_name'] = $authData[$row['auth_id']]['username'];
|
|
|
|
|
|
|
+ $row['name'] = $mediaData[$row['media_id']]['name'] ?? "";
|
|
|
|
|
+ $row['auth_name'] = $authData[$row['auth_id']]['username'] ?? "";
|
|
|
|
|
|
|
|
default:
|
|
default:
|
|
|
$row['akey'] = $row['agent_id'];
|
|
$row['akey'] = $row['agent_id'];
|
|
|
- $row['name'] = $agentData[$row['agent_id']]['name'];
|
|
|
|
|
|
|
+ $row['name'] = $agentData[$row['agent_id']]['name'] ?? "";
|
|
|
$row['auth_name'] = '-';
|
|
$row['auth_name'] = '-';
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-
|
|
|
|
|
// 底部合计
|
|
// 底部合计
|
|
|
$total = [
|
|
$total = [
|
|
|
'akey' => '合计'
|
|
'akey' => '合计'
|
|
|
];
|
|
];
|
|
|
- foreach ($baseData as &$row) {
|
|
|
|
|
- $total['cost'] = !empty($total['cost']) ? ($total['cost'] + $row['cost']) : $row['cost'];
|
|
|
|
|
-
|
|
|
|
|
- // 激活
|
|
|
|
|
- $total['install'] = !empty($total['install']) ? ($total['install'] + $row['install']) : $row['install'];
|
|
|
|
|
-
|
|
|
|
|
- // 注册设备
|
|
|
|
|
- $total['reg_dev'] = !empty($total['reg_dev']) ? ($total['reg_dev'] + $row['reg_dev']) : $row['reg_dev'];
|
|
|
|
|
-
|
|
|
|
|
- // 注册数
|
|
|
|
|
- $total['reg_total'] = !empty($total['reg_total']) ? ($total['reg_total'] + $row['reg_total']) : $row['reg_total'];
|
|
|
|
|
-
|
|
|
|
|
- // 创角数
|
|
|
|
|
- $total['role_total'] = !empty($total['role_total']) ? ($total['role_total'] + $row['role_total']) : $row['role_total'];
|
|
|
|
|
- // 创角率
|
|
|
|
|
-
|
|
|
|
|
- // 次留数
|
|
|
|
|
- $total['active'] = !empty($total['active']) ? ($total['active'] + $row['active']) : $row['active'];
|
|
|
|
|
- // 次留成本
|
|
|
|
|
- // 次留率
|
|
|
|
|
-
|
|
|
|
|
- // 当天付费
|
|
|
|
|
- $total['reg_pay_total_da'] = !empty($total['reg_pay_total_da']) ? ($total['reg_pay_total_da'] + $row['reg_pay_total_da']) : $row['reg_pay_total_da'];
|
|
|
|
|
-
|
|
|
|
|
- // 总付费人数
|
|
|
|
|
- $total['reg_pay_num'] = !empty($total['reg_pay_num']) ? ($total['reg_pay_num'] + $row['reg_pay_num']) : $row['reg_pay_num'];
|
|
|
|
|
-
|
|
|
|
|
- // 总付费金额
|
|
|
|
|
- $total['reg_pay_total'] = !empty($total['reg_pay_total']) ? ($total['reg_pay_total'] + $row['reg_pay_total']) : $row['reg_pay_total'];
|
|
|
|
|
-
|
|
|
|
|
- // 老用户
|
|
|
|
|
- $total['old_login_total'] = !empty($total['old_login_total']) ? ($total['old_login_total'] + $row['old_login_total']) : $row['old_login_total'];
|
|
|
|
|
-
|
|
|
|
|
- //注册总充值
|
|
|
|
|
- $total['reg_pay_amount'] = !empty($total['reg_pay_amount']) ? ($total['reg_pay_amount'] + $row['reg_pay_amount']) : $row['reg_pay_amount'];
|
|
|
|
|
-
|
|
|
|
|
|
|
+ foreach ($baseData as $val) {
|
|
|
|
|
+ $total['cost'] = !empty($total['cost']) ? ($total['cost'] + $val['cost']) : $val['cost'];
|
|
|
|
|
+ $total['install'] = !empty($total['install']) ? ($total['install'] + $val['install']) : $val['install']; // 激活
|
|
|
|
|
+ $total['reg_dev'] = !empty($total['reg_dev']) ? ($total['reg_dev'] + $val['reg_dev']) : $val['reg_dev']; // 注册设备
|
|
|
|
|
+ $total['reg_total'] = !empty($total['reg_total']) ? ($total['reg_total'] + $val['reg_total']) : $val['reg_total']; // 注册数
|
|
|
|
|
+ $total['role_total'] = !empty($total['role_total']) ? ($total['role_total'] + $val['role_total']) : $val['role_total']; // 创角数
|
|
|
|
|
+ $total['active'] = !empty($total['active']) ? ($total['active'] + $val['active']) : $val['active'];// 次留数
|
|
|
|
|
+ $total['reg_pay_total_da'] = !empty($total['reg_pay_total_da']) ? ($total['reg_pay_total_da'] + $val['reg_pay_total_da']) : $val['reg_pay_total_da']; // 当天付费
|
|
|
|
|
+ $total['reg_pay_num'] = !empty($total['reg_pay_num']) ? ($total['reg_pay_num'] + $val['reg_pay_num']) : $val['reg_pay_num']; // 总付费人数
|
|
|
|
|
+ $total['reg_pay_total'] = !empty($total['reg_pay_total']) ? ($total['reg_pay_total'] + $val['reg_pay_total']) : $val['reg_pay_total']; // 总付费金额
|
|
|
|
|
+ $total['old_login_total'] = !empty($total['old_login_total']) ? ($total['old_login_total'] + $val['old_login_total']) : $val['old_login_total']; // 老用户
|
|
|
|
|
+ $total['reg_pay_amount'] = !empty($total['reg_pay_amount']) ? ($total['reg_pay_amount'] + $val['reg_pay_amount']) : $val['reg_pay_amount']; //注册总充值
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 注册成本
|
|
// 注册成本
|
|
|
$total['reg_cost'] = ToolLogic::getRound($total['cost'], $total['reg_total'] ?? 0);
|
|
$total['reg_cost'] = ToolLogic::getRound($total['cost'], $total['reg_total'] ?? 0);
|
|
|
-
|
|
|
|
|
// 汇总创角率
|
|
// 汇总创角率
|
|
|
$total['role_per'] = ToolLogic::getRound($total['role_total'], $total['reg_total'] ?? 0);
|
|
$total['role_per'] = ToolLogic::getRound($total['role_total'], $total['reg_total'] ?? 0);
|
|
|
-
|
|
|
|
|
// 次留率
|
|
// 次留率
|
|
|
$total['a_per'] = ToolLogic::getPercent($total['active'], $total['reg_total'], 1);
|
|
$total['a_per'] = ToolLogic::getPercent($total['active'], $total['reg_total'], 1);
|
|
|
// 次留成本
|
|
// 次留成本
|
|
|
$total['a_cost'] = ToolLogic::getRound($total['cost'], $total['active'], 1);
|
|
$total['a_cost'] = ToolLogic::getRound($total['cost'], $total['active'], 1);
|
|
|
-
|
|
|
|
|
// 付费率
|
|
// 付费率
|
|
|
$total['p_per'] = ToolLogic::getPercent($total['reg_pay_num'], $total['reg_total'], 1);
|
|
$total['p_per'] = ToolLogic::getPercent($total['reg_pay_num'], $total['reg_total'], 1);
|
|
|
-
|
|
|
|
|
// 当天回本率
|
|
// 当天回本率
|
|
|
$total['da_per'] = ToolLogic::getPercent($total['reg_pay_total_da'], $total['cost'], 1);
|
|
$total['da_per'] = ToolLogic::getPercent($total['reg_pay_total_da'], $total['cost'], 1);
|
|
|
-
|
|
|
|
|
// 累计回本率
|
|
// 累计回本率
|
|
|
$total['re_per'] = (float)trim(ToolLogic::getPercent($total['reg_pay_total'], $total['cost']), "%");
|
|
$total['re_per'] = (float)trim(ToolLogic::getPercent($total['reg_pay_total'], $total['cost']), "%");
|
|
|
-
|
|
|
|
|
// 实际回本率
|
|
// 实际回本率
|
|
|
$total['re_amount_per'] = ToolLogic::getPercent($total['reg_pay_amount'], $total['cost'], 1);
|
|
$total['re_amount_per'] = ToolLogic::getPercent($total['reg_pay_amount'], $total['cost'], 1);
|
|
|
-
|
|
|
|
|
//ARPU
|
|
//ARPU
|
|
|
$total['arpu'] = ToolLogic::getRound($total['reg_pay_total'], $total['reg_pay_num']);
|
|
$total['arpu'] = ToolLogic::getRound($total['reg_pay_total'], $total['reg_pay_num']);
|
|
|
-
|
|
|
|
|
//注册ARPU
|
|
//注册ARPU
|
|
|
$total['r_arpu'] = ToolLogic::getRound($total['reg_pay_total'], $total['reg_total']);
|
|
$total['r_arpu'] = ToolLogic::getRound($total['reg_pay_total'], $total['reg_total']);
|
|
|
-
|
|
|
|
|
// 7天回本率
|
|
// 7天回本率
|
|
|
-
|
|
|
|
|
$total['re_amount_per_7'] = ToolLogic::getPercent($hb7dayDataSum, $total['cost'], 1);
|
|
$total['re_amount_per_7'] = ToolLogic::getPercent($hb7dayDataSum, $total['cost'], 1);
|
|
|
-
|
|
|
|
|
//付费成本
|
|
//付费成本
|
|
|
$total['p_cost'] = ToolLogic::getRound($total['reg_pay_num'], $total['cost'], 1);
|
|
$total['p_cost'] = ToolLogic::getRound($total['reg_pay_num'], $total['cost'], 1);
|
|
|
|
|
|
|
|
-
|
|
|
|
|
$totalData = $this->agentTotal($where);
|
|
$totalData = $this->agentTotal($where);
|
|
|
|
|
|
|
|
// 汇总数据
|
|
// 汇总数据
|
|
@@ -572,8 +494,6 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
'data' => array_merge($baseData, [$total]),
|
|
'data' => array_merge($baseData, [$total]),
|
|
|
'totalData' => $totalData
|
|
'totalData' => $totalData
|
|
|
];
|
|
];
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public function generateYearUnionList($namePrefix, $regDate, $whereSql = '', $field = '*', $group = null)
|
|
public function generateYearUnionList($namePrefix, $regDate, $whereSql = '', $field = '*', $group = null)
|
|
@@ -598,7 +518,6 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
/**
|
|
/**
|
|
|
* @param $where
|
|
* @param $where
|
|
|
* @param $group
|
|
* @param $group
|
|
|
- * @return void
|
|
|
|
|
* @description 计算7天回本率
|
|
* @description 计算7天回本率
|
|
|
* 1. 7天的注册总充值计算出来,可以通过
|
|
* 1. 7天的注册总充值计算出来,可以通过
|
|
|
*/
|
|
*/
|
|
@@ -638,7 +557,6 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * @return void
|
|
|
|
|
* 大盘数据(没有权限)
|
|
* 大盘数据(没有权限)
|
|
|
* 注册成本:消耗金额/注册数
|
|
* 注册成本:消耗金额/注册数
|
|
|
* roi:注册付费金额 reg_pay_total /消耗 cost
|
|
* roi:注册付费金额 reg_pay_total /消耗 cost
|
|
@@ -648,39 +566,30 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
public function agentTotal($where)
|
|
public function agentTotal($where)
|
|
|
{
|
|
{
|
|
|
$whereSql = $this->generateWhereSql($where);
|
|
$whereSql = $this->generateWhereSql($where);
|
|
|
- $cost = 0; // 消耗金额
|
|
|
|
|
- $regTotal = 0; // 注册数
|
|
|
|
|
- $regPayTotal = 0; // 注册付费金额
|
|
|
|
|
- $regPayNum = 0; // 总付费人数
|
|
|
|
|
|
|
+
|
|
|
// 1. 消耗表. 获取消耗金额
|
|
// 1. 消耗表. 获取消耗金额
|
|
|
$costData = Db::connect('db_advert')->query("SELECT SUM(money) as cost FROM media_cost WHERE 1=1 $whereSql");
|
|
$costData = Db::connect('db_advert')->query("SELECT SUM(money) as cost FROM media_cost WHERE 1=1 $whereSql");
|
|
|
$cost = $costData[0]['cost'] ?? 0;
|
|
$cost = $costData[0]['cost'] ?? 0;
|
|
|
|
|
|
|
|
// 2. base_total_day_ 获取注册数(reg_total)、注册付费金额(reg_pay_total)、
|
|
// 2. base_total_day_ 获取注册数(reg_total)、注册付费金额(reg_pay_total)、
|
|
|
- $baseTotalField = "
|
|
|
|
|
- SUM(reg_total) AS reg_total,
|
|
|
|
|
- SUM(reg_pay_total) AS reg_pay_total";
|
|
|
|
|
|
|
+ $baseTotalField = " SUM(reg_total) AS reg_total, SUM(reg_pay_total) AS reg_pay_total";
|
|
|
$baseTotalDayData = $this->generateYearUnionList('base_total_day_', $where['reg_date'], $whereSql, $baseTotalField);
|
|
$baseTotalDayData = $this->generateYearUnionList('base_total_day_', $where['reg_date'], $whereSql, $baseTotalField);
|
|
|
|
|
|
|
|
$regTotal = $baseTotalDayData[0]['reg_total'] ?? 0;
|
|
$regTotal = $baseTotalDayData[0]['reg_total'] ?? 0;
|
|
|
$regPayTotal = $baseTotalDayData[0]['reg_pay_total'] ?? 0;
|
|
$regPayTotal = $baseTotalDayData[0]['reg_pay_total'] ?? 0;
|
|
|
|
|
|
|
|
// 3. 注册付费表. 获取总付费人数(reg_pay_num)
|
|
// 3. 注册付费表. 获取总付费人数(reg_pay_num)
|
|
|
- $regPayField = "
|
|
|
|
|
- sum(addup_pay_num) as reg_pay_num";
|
|
|
|
|
|
|
+ $regPayField = "sum(addup_pay_num) as reg_pay_num";
|
|
|
$regPayWhereSql = str_replace('AND tdate', 'AND reg_date', $whereSql);
|
|
$regPayWhereSql = str_replace('AND tdate', 'AND reg_date', $whereSql);
|
|
|
$regPayData = $this->generateYearUnionList('game_reg_pay_day_', $where['reg_date'], $regPayWhereSql, $regPayField);
|
|
$regPayData = $this->generateYearUnionList('game_reg_pay_day_', $where['reg_date'], $regPayWhereSql, $regPayField);
|
|
|
$regPayNum = $regPayData[0]['reg_pay_num'] ?? 0;
|
|
$regPayNum = $regPayData[0]['reg_pay_num'] ?? 0;
|
|
|
|
|
|
|
|
// roi
|
|
// roi
|
|
|
$roi = ToolLogic::getPercent($regPayTotal, $cost, 1);
|
|
$roi = ToolLogic::getPercent($regPayTotal, $cost, 1);
|
|
|
-
|
|
|
|
|
// 付费成本
|
|
// 付费成本
|
|
|
$pCost = ToolLogic::getRound($cost, $regPayNum);
|
|
$pCost = ToolLogic::getRound($cost, $regPayNum);
|
|
|
-
|
|
|
|
|
// reg_cost 注册成本
|
|
// reg_cost 注册成本
|
|
|
$regCost = ToolLogic::getRound($cost, $regTotal);
|
|
$regCost = ToolLogic::getRound($cost, $regTotal);
|
|
|
-
|
|
|
|
|
// 付费率
|
|
// 付费率
|
|
|
$pPer = ToolLogic::getPercent($regPayNum, $regTotal, 1);
|
|
$pPer = ToolLogic::getPercent($regPayNum, $regTotal, 1);
|
|
|
|
|
|
|
@@ -694,12 +603,10 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * @param $where
|
|
|
|
|
- * @return void
|
|
|
|
|
* 广告位总览 ,根据site_id分组
|
|
* 广告位总览 ,根据site_id分组
|
|
|
* 支出-> media_cost表的消耗数据
|
|
* 支出-> media_cost表的消耗数据
|
|
|
*/
|
|
*/
|
|
|
- public function getAdSiteDataList($where)
|
|
|
|
|
|
|
+ public function getAdSiteDataList($where): array
|
|
|
{
|
|
{
|
|
|
$params = $this->searchByAuth($where);
|
|
$params = $this->searchByAuth($where);
|
|
|
// 忽略 0 投入
|
|
// 忽略 0 投入
|
|
@@ -747,9 +654,8 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
// active 活跃数,次留人数
|
|
// active 活跃数,次留人数
|
|
|
$activeWhereSql = $whereSql . ' AND days = 1';
|
|
$activeWhereSql = $whereSql . ' AND days = 1';
|
|
|
$activeWhereSql = str_replace('AND tdate', 'AND reg_date', $activeWhereSql);
|
|
$activeWhereSql = str_replace('AND tdate', 'AND reg_date', $activeWhereSql);
|
|
|
- $activeField = "
|
|
|
|
|
- sum(active_total) as active,
|
|
|
|
|
- site_id";
|
|
|
|
|
|
|
+ $activeField = " sum(active_total) as active, site_id";
|
|
|
|
|
+
|
|
|
$activeData = $this->generateYearUnionList('game_active_day_', $params['reg_date'], $activeWhereSql, $activeField, $groupBy);
|
|
$activeData = $this->generateYearUnionList('game_active_day_', $params['reg_date'], $activeWhereSql, $activeField, $groupBy);
|
|
|
$activeData = array_column($activeData, 'active', 'site_id');
|
|
$activeData = array_column($activeData, 'active', 'site_id');
|
|
|
|
|
|
|
@@ -774,7 +680,6 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
// 忽略0投入的
|
|
// 忽略0投入的
|
|
|
if ($igz && $row['cost'] === 0) {
|
|
if ($igz && $row['cost'] === 0) {
|
|
|
unset($baseTotalDayData[$key]);
|
|
unset($baseTotalDayData[$key]);
|
|
|
-
|
|
|
|
|
}
|
|
}
|
|
|
$row['reg_cost'] = ToolLogic::getRound($row['cost'], $row['reg_total'] ?? 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['role_per'] = ToolLogic::getRound($row['role_total'], $row['reg_total'] ?? 0); // 创角率
|
|
@@ -793,8 +698,7 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-
|
|
|
|
|
- // // 合计
|
|
|
|
|
|
|
+ // 合计
|
|
|
$total = [
|
|
$total = [
|
|
|
'site_id' => '合计',
|
|
'site_id' => '合计',
|
|
|
'media_id' => '-',
|
|
'media_id' => '-',
|
|
@@ -804,18 +708,18 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
'site_name' => '-',
|
|
'site_name' => '-',
|
|
|
'auth_name' => '-',
|
|
'auth_name' => '-',
|
|
|
];
|
|
];
|
|
|
- foreach ($baseTotalDayData as &$row) {
|
|
|
|
|
- $total['cost'] = !empty($total['cost']) ? ($total['cost'] + $row['cost']) : $row['cost']; // 支出
|
|
|
|
|
- $total['install'] = !empty($total['install']) ? ($total['install'] + $row['install']) : $row['install']; // 激活
|
|
|
|
|
- $total['reg_dev'] = !empty($total['reg_dev']) ? ($total['reg_dev'] + $row['reg_dev']) : $row['reg_dev']; // 注册设备
|
|
|
|
|
- $total['reg_total'] = !empty($total['reg_total']) ? ($total['reg_total'] + $row['reg_total']) : $row['reg_total']; // 注册数
|
|
|
|
|
- $total['role_total'] = !empty($total['role_total']) ? ($total['role_total'] + $row['role_total']) : $row['role_total']; // 创角数
|
|
|
|
|
- $total['old_login_total'] = !empty($total['old_login_total']) ? ($total['old_login_total'] + $row['old_login_total']) : $row['old_login_total']; // 老用户
|
|
|
|
|
- $total['reg_pay_total'] = !empty($total['reg_pay_total']) ? ($total['reg_pay_total'] + $row['reg_pay_total']) : $row['reg_pay_total']; // 总付费金额
|
|
|
|
|
- $total['reg_pay_num'] = !empty($total['reg_pay_num']) ? ($total['reg_pay_num'] + $row['reg_pay_num']) : $row['reg_pay_num']; // 总付费人数
|
|
|
|
|
- $total['active'] = !empty($total['active']) ? ($total['active'] + $row['active']) : $row['active']; // 次留数
|
|
|
|
|
- $total['reg_pay_amount'] = !empty($total['reg_pay_amount']) ? ($total['reg_pay_amount'] + $row['reg_pay_amount']) : $row['reg_pay_amount']; // 注册总充值
|
|
|
|
|
- $total['reg_pay_total_da'] = !empty($total['reg_pay_total_da']) ? ($total['reg_pay_total_da'] + $row['reg_pay_total_da']) : $row['reg_pay_total_da']; // 当天注册付费金额
|
|
|
|
|
|
|
+ foreach ($baseTotalDayData as $val) {
|
|
|
|
|
+ $total['cost'] = !empty($total['cost']) ? round($total['cost'] + $val['cost'], 2) : $val['cost']; // 支出
|
|
|
|
|
+ $total['install'] = !empty($total['install']) ? ($total['install'] + $val['install']) : $val['install']; // 激活
|
|
|
|
|
+ $total['reg_dev'] = !empty($total['reg_dev']) ? ($total['reg_dev'] + $val['reg_dev']) : $val['reg_dev']; // 注册设备
|
|
|
|
|
+ $total['reg_total'] = !empty($total['reg_total']) ? ($total['reg_total'] + $val['reg_total']) : $val['reg_total']; // 注册数
|
|
|
|
|
+ $total['role_total'] = !empty($total['role_total']) ? ($total['role_total'] + $val['role_total']) : $val['role_total']; // 创角数
|
|
|
|
|
+ $total['old_login_total'] = !empty($total['old_login_total']) ? ($total['old_login_total'] + $val['old_login_total']) : $val['old_login_total']; // 老用户
|
|
|
|
|
+ $total['reg_pay_total'] = !empty($total['reg_pay_total']) ? ($total['reg_pay_total'] + $val['reg_pay_total']) : $val['reg_pay_total']; // 总付费金额
|
|
|
|
|
+ $total['reg_pay_num'] = !empty($total['reg_pay_num']) ? ($total['reg_pay_num'] + $val['reg_pay_num']) : $val['reg_pay_num']; // 总付费人数
|
|
|
|
|
+ $total['active'] = !empty($total['active']) ? ($total['active'] + $val['active']) : $val['active']; // 次留数
|
|
|
|
|
+ $total['reg_pay_amount'] = !empty($total['reg_pay_amount']) ? ($total['reg_pay_amount'] + $val['reg_pay_amount']) : $val['reg_pay_amount']; // 注册总充值
|
|
|
|
|
+ $total['reg_pay_total_da'] = !empty($total['reg_pay_total_da']) ? ($total['reg_pay_total_da'] + $val['reg_pay_total_da']) : $val['reg_pay_total_da']; // 当天注册付费金额
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -831,10 +735,7 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
$total['arpu'] = ToolLogic::getRound($total['reg_pay_total'] ?? 0, $total['reg_pay_num'] ?? 0); // ARPU
|
|
$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['r_arpu'] = ToolLogic::getRound($total['reg_pay_total'] ?? 0, $total['reg_total'] ?? 0); // 注册ARPU
|
|
|
|
|
|
|
|
-
|
|
|
|
|
- $resultData = ['data' => $baseTotalDayData, 'total' => $total];
|
|
|
|
|
- return $resultData;
|
|
|
|
|
-
|
|
|
|
|
|
|
+ return ['data' => $baseTotalDayData, 'total' => $total];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -843,7 +744,6 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
public function getAgentDayDataList($where)
|
|
public function getAgentDayDataList($where)
|
|
|
{
|
|
{
|
|
|
$params = $this->searchByAuth($where);
|
|
$params = $this->searchByAuth($where);
|
|
|
- $whereSql = $this->generateWhereSql($params);
|
|
|
|
|
|
|
|
|
|
// 根据渠道名称获取渠道ID
|
|
// 根据渠道名称获取渠道ID
|
|
|
if (!empty($params['site_name'])) {
|
|
if (!empty($params['site_name'])) {
|
|
@@ -866,7 +766,6 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
$costData = Db::connect('db_advert')->query("SELECT SUM(money) as cost FROM media_cost WHERE 1=1 $whereSql Group By tdate");
|
|
$costData = Db::connect('db_advert')->query("SELECT SUM(money) as cost FROM media_cost WHERE 1=1 $whereSql Group By tdate");
|
|
|
$costData = array_column($costData, 'cost', 'tdate');
|
|
$costData = array_column($costData, 'cost', 'tdate');
|
|
|
|
|
|
|
|
-
|
|
|
|
|
// 2. base统计数据(展示IP(ad_show_ip)、激活(install)、注册设备(reg_dev)、注册数(reg_total)、创角数(role_total)、老用户(old_login_total)、注册付费人数(reg_pay_num)、当天注册付费金额(reg_pay_total_da)、付费总金额(pay_total)、付费总人数(pay_num))
|
|
// 2. base统计数据(展示IP(ad_show_ip)、激活(install)、注册设备(reg_dev)、注册数(reg_total)、创角数(role_total)、老用户(old_login_total)、注册付费人数(reg_pay_num)、当天注册付费金额(reg_pay_total_da)、付费总金额(pay_total)、付费总人数(pay_num))
|
|
|
$baseTotalField = "
|
|
$baseTotalField = "
|
|
|
SUM(ad_show_ip) AS ad_show_ip,
|
|
SUM(ad_show_ip) AS ad_show_ip,
|
|
@@ -906,11 +805,10 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
|
|
|
|
|
// 5. 拼装数据
|
|
// 5. 拼装数据
|
|
|
// 拼装数据
|
|
// 拼装数据
|
|
|
- foreach ($baseTotalDayData as $key => &$row) {
|
|
|
|
|
-
|
|
|
|
|
|
|
+ foreach ($baseTotalDayData as $key => &$row)
|
|
|
|
|
+ {
|
|
|
$row['active'] = $activeData[$row['tdate']] ?? 0; // 次留数
|
|
$row['active'] = $activeData[$row['tdate']] ?? 0; // 次留数
|
|
|
$row['cost'] = $costData[$row['tdate']] ?? 0; // 支出
|
|
$row['cost'] = $costData[$row['tdate']] ?? 0; // 支出
|
|
|
-
|
|
|
|
|
$row['reg_cost'] = ToolLogic::getRound($row['cost'], $row['reg_total'] ?? 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['role_per'] = ToolLogic::getRound($row['role_total'], $row['reg_total'] ?? 0); // 创角率
|
|
|
$row['a_cost'] = ToolLogic::getRound($row['cost'], $row['active'], 1); // 次留成本
|
|
$row['a_cost'] = ToolLogic::getRound($row['cost'], $row['active'], 1); // 次留成本
|
|
@@ -926,31 +824,28 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
$row['arpu'] = ToolLogic::getRound($row['reg_pay_total'], $row['reg_pay_num']); // ARPU
|
|
$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['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['pay_cost'] = ToolLogic::getPercent($row['pay_amount'] ?? 0, $row['cost'] ?? 0); // 收支比
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 6. 合计
|
|
// 6. 合计
|
|
|
$total = [
|
|
$total = [
|
|
|
'tdate' => '合计'
|
|
'tdate' => '合计'
|
|
|
];
|
|
];
|
|
|
- foreach ($baseTotalDayData as &$row) {
|
|
|
|
|
- $total['cost'] = !empty($total['cost']) ? ($total['cost'] + $row['cost']) : $row['cost']; // 支出
|
|
|
|
|
- $total['ad_show_ip'] = !empty($total['ad_show_ip']) ? ($total['ad_show_ip'] + $row['ad_show_ip']) : $row['ad_show_ip']; // 展示IP
|
|
|
|
|
- $total['install'] = !empty($total['install']) ? ($total['install'] + $row['install']) : $row['install']; // 激活
|
|
|
|
|
- $total['reg_dev'] = !empty($total['reg_dev']) ? ($total['reg_dev'] + $row['reg_dev']) : $row['reg_dev']; // 注册设备
|
|
|
|
|
- $total['reg_total'] = !empty($total['reg_total']) ? ($total['reg_total'] + $row['reg_total']) : $row['reg_total']; // 注册数
|
|
|
|
|
- $total['role_total'] = !empty($total['role_total']) ? ($total['role_total'] + $row['role_total']) : $row['role_total']; // 创角数
|
|
|
|
|
- $total['active'] = !empty($total['active']) ? ($total['active'] + $row['active']) : $row['active']; // 次留数
|
|
|
|
|
|
|
+ foreach ($baseTotalDayData as $vv) {
|
|
|
|
|
+ $total['cost'] = !empty($total['cost']) ? ($total['cost'] + $vv['cost']) : $vv['cost']; // 支出
|
|
|
|
|
+ $total['ad_show_ip'] = !empty($total['ad_show_ip']) ? ($total['ad_show_ip'] + $vv['ad_show_ip']) : $vv['ad_show_ip']; // 展示IP
|
|
|
|
|
+ $total['install'] = !empty($total['install']) ? ($total['install'] + $vv['install']) : $vv['install']; // 激活
|
|
|
|
|
+ $total['reg_dev'] = !empty($total['reg_dev']) ? ($total['reg_dev'] + $vv['reg_dev']) : $vv['reg_dev']; // 注册设备
|
|
|
|
|
+ $total['reg_total'] = !empty($total['reg_total']) ? ($total['reg_total'] + $vv['reg_total']) : $vv['reg_total']; // 注册数
|
|
|
|
|
+ $total['role_total'] = !empty($total['role_total']) ? ($total['role_total'] + $vv['role_total']) : $vv['role_total']; // 创角数
|
|
|
|
|
+ $total['active'] = !empty($total['active']) ? ($total['active'] + $vv['active']) : $vv['active']; // 次留数
|
|
|
// 付费人数
|
|
// 付费人数
|
|
|
- $total['reg_pay_num'] = !empty($total['reg_pay_num']) ? ($total['reg_pay_num'] + $row['reg_pay_num']) : $row['reg_pay_num']; // 总付费人数
|
|
|
|
|
- $total['reg_pay_total'] = !empty($total['reg_pay_total']) ? ($total['reg_pay_total'] + $row['reg_pay_total']) : $row['reg_pay_total']; // 总付费金额
|
|
|
|
|
- $total['reg_pay_amount'] = !empty($total['reg_pay_amount']) ? ($total['reg_pay_amount'] + $row['reg_pay_amount']) : $row['reg_pay_amount']; // 注册总充值
|
|
|
|
|
- $total['pay_total'] = !empty($total['pay_total']) ? ($total['pay_total'] + $row['pay_total']) : $row['pay_total']; // 当天收入
|
|
|
|
|
- $total['pay_amount'] = !empty($total['pay_amount']) ? ($total['pay_amount'] + $row['pay_amount']) : $row['pay_amount']; // 实际收入
|
|
|
|
|
- $total['old_login_total'] = !empty($total['old_login_total']) ? ($total['old_login_total'] + $row['old_login_total']) : $row['old_login_total']; // 老用户
|
|
|
|
|
- $total['reg_pay_total_da'] = !empty($total['reg_pay_total_da']) ? ($total['reg_pay_total_da'] + $row['reg_pay_total_da']) : $row['reg_pay_total_da']; // 当天注册付费金额
|
|
|
|
|
-
|
|
|
|
|
|
|
+ $total['reg_pay_num'] = !empty($total['reg_pay_num']) ? ($total['reg_pay_num'] + $vv['reg_pay_num']) : $vv['reg_pay_num']; // 总付费人数
|
|
|
|
|
+ $total['reg_pay_total'] = !empty($total['reg_pay_total']) ? ($total['reg_pay_total'] + $vv['reg_pay_total']) : $vv['reg_pay_total']; // 总付费金额
|
|
|
|
|
+ $total['reg_pay_amount'] = !empty($total['reg_pay_amount']) ? ($total['reg_pay_amount'] + $vv['reg_pay_amount']) : $vv['reg_pay_amount']; // 注册总充值
|
|
|
|
|
+ $total['pay_total'] = !empty($total['pay_total']) ? ($total['pay_total'] + $vv['pay_total']) : $vv['pay_total']; // 当天收入
|
|
|
|
|
+ $total['pay_amount'] = !empty($total['pay_amount']) ? ($total['pay_amount'] + $vv['pay_amount']) : $vv['pay_amount']; // 实际收入
|
|
|
|
|
+ $total['old_login_total'] = !empty($total['old_login_total']) ? ($total['old_login_total'] + $vv['old_login_total']) : $vv['old_login_total']; // 老用户
|
|
|
|
|
+ $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['reg_cost'] = ToolLogic::getRound($total['cost'] ?? 0, $total['reg_total'] ?? 0); // 注册成本
|
|
@@ -964,19 +859,13 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
$total['re_amount_per'] = ToolLogic::getPercent($total['reg_pay_amount'] ?? 0, $total['cost'] ?? 0, 1); // 实际回本率
|
|
$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['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['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['pay_cost'] = ToolLogic::getPercent($total['pay_amount'] ?? 0, $total['cost'] ?? 0); //收支比
|
|
|
|
|
|
|
|
- $resultData = ['data' => array_values($baseTotalDayData), 'totalRow' => $total];
|
|
|
|
|
- return $resultData;
|
|
|
|
|
|
|
+ return ['data' => array_values($baseTotalDayData), 'totalRow' => $total];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-
|
|
|
|
|
- // 生成基础日统计表的联合查询列表
|
|
|
|
|
-
|
|
|
|
|
/**
|
|
/**
|
|
|
* ltv
|
|
* ltv
|
|
|
- *
|
|
|
|
|
*/
|
|
*/
|
|
|
public function getLtvDataList($where)
|
|
public function getLtvDataList($where)
|
|
|
{
|
|
{
|
|
@@ -1011,36 +900,33 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
if (empty($regPayData)) {
|
|
if (empty($regPayData)) {
|
|
|
return ['data' => [], 'totalRow' => []];
|
|
return ['data' => [], 'totalRow' => []];
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
// 前端合计数据
|
|
// 前端合计数据
|
|
|
$totalRow = [
|
|
$totalRow = [
|
|
|
'tdate' => '合计'
|
|
'tdate' => '合计'
|
|
|
];
|
|
];
|
|
|
|
|
|
|
|
// 前端data数据
|
|
// 前端data数据
|
|
|
- $data = [];
|
|
|
|
|
-
|
|
|
|
|
- $totalLtv = [];
|
|
|
|
|
-
|
|
|
|
|
|
|
+ $totalLtv = $data = [];
|
|
|
|
|
|
|
|
// 合计 消耗金额,注册数,注册成本
|
|
// 合计 消耗金额,注册数,注册成本
|
|
|
- foreach ($baseData as $key => $row) {
|
|
|
|
|
|
|
+ foreach ($baseData as $key => $val) {
|
|
|
$totalRow['cost'] = !empty($totalRow['cost']) ? ($totalRow['cost'] + $costData[$key] ?? 0) : $costData[$key] ?? 0;
|
|
$totalRow['cost'] = !empty($totalRow['cost']) ? ($totalRow['cost'] + $costData[$key] ?? 0) : $costData[$key] ?? 0;
|
|
|
$totalRow['d0']['cost'] = !empty($totalRow['cost']) ? ($totalRow['cost'] + $costData[$key] ?? 0) : $costData[$key] ?? 0;
|
|
$totalRow['d0']['cost'] = !empty($totalRow['cost']) ? ($totalRow['cost'] + $costData[$key] ?? 0) : $costData[$key] ?? 0;
|
|
|
- $totalRow['reg_total'] = !empty($totalRow['reg_total']) ? ($totalRow['reg_total'] + $row['reg_total'] ?? 0) : $row['reg_total'] ?? 0;
|
|
|
|
|
- $totalRow['d0']['reg_total'] = !empty($totalRow['reg_total']) ? ($totalRow['reg_total'] + $row['reg_total'] ?? 0) : $row['reg_total'] ?? 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'] = ToolLogic::getRound($totalRow['cost'] ?? 0, $totalRow['reg_total'] ?? 0);
|
|
|
|
|
|
|
|
$days = (strtotime($nowDate) - strtotime($key)) / 86400 + 1;
|
|
$days = (strtotime($nowDate) - strtotime($key)) / 86400 + 1;
|
|
|
for ($i = 1; $i <= $days; $i++) {
|
|
for ($i = 1; $i <= $days; $i++) {
|
|
|
$daykey = 'd' . $i;
|
|
$daykey = 'd' . $i;
|
|
|
- $totalRow[$daykey]['reg_total'] = !empty($totalRow[$daykey]['reg_total']) ? ($totalRow[$daykey]['reg_total'] + $row['reg_total'] ?? 0) : $row['reg_total'] ?? 0;
|
|
|
|
|
|
|
+ $totalRow[$daykey]['reg_total'] = !empty($totalRow[$daykey]['reg_total']) ? ($totalRow[$daykey]['reg_total'] + $val['reg_total'] ?? 0) : $val['reg_total'] ?? 0;
|
|
|
$totalRow[$daykey]['cost'] = !empty($totalRow[$daykey]['cost']) ? ($totalRow[$daykey]['cost'] + $costData[$key] ?? 0) : $costData[$key] ?? 0;
|
|
$totalRow[$daykey]['cost'] = !empty($totalRow[$daykey]['cost']) ? ($totalRow[$daykey]['cost'] + $costData[$key] ?? 0) : $costData[$key] ?? 0;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-
|
|
|
|
|
// 按照天计算LTV
|
|
// 按照天计算LTV
|
|
|
- foreach ($regPayData as &$row) {
|
|
|
|
|
|
|
+ foreach ($regPayData as $row) {
|
|
|
$regDate = $row['reg_date'];
|
|
$regDate = $row['reg_date'];
|
|
|
$data[$regDate]['tdate'] = $regDate;
|
|
$data[$regDate]['tdate'] = $regDate;
|
|
|
|
|
|
|
@@ -1056,7 +942,6 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
$daykey = (strtotime($row['pay_date']) - strtotime($regDate)) / 86400 + 1;
|
|
$daykey = (strtotime($row['pay_date']) - strtotime($regDate)) / 86400 + 1;
|
|
|
$daykey = 'd' . $daykey;
|
|
$daykey = 'd' . $daykey;
|
|
|
|
|
|
|
|
-
|
|
|
|
|
switch ($dataType) {
|
|
switch ($dataType) {
|
|
|
case 'recovery':
|
|
case 'recovery':
|
|
|
$data[$regDate][$daykey] = ToolLogic::getPercent($row['addup_pay_total'], $costData[$regDate] ?? 0, 1);
|
|
$data[$regDate][$daykey] = ToolLogic::getPercent($row['addup_pay_total'], $costData[$regDate] ?? 0, 1);
|
|
@@ -1125,7 +1010,6 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|
|
|
default:
|
|
default:
|
|
|
- continue 2;
|
|
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|
|
|
$totalRow[$daykey]['addup_pay_total'] = $totalRow[$daykey]['addup_pay_total'] ?? 0;
|
|
$totalRow[$daykey]['addup_pay_total'] = $totalRow[$daykey]['addup_pay_total'] ?? 0;
|
|
@@ -1144,11 +1028,9 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
$pay_amount = !empty($pay_amount) ? $pay_amount + $row['addup_pay_amount'] : $row['addup_pay_amount'];
|
|
$pay_amount = !empty($pay_amount) ? $pay_amount + $row['addup_pay_amount'] : $row['addup_pay_amount'];
|
|
|
$pay_num = !empty($pay_num) ? $pay_num + $row['pay_num'] : $row['pay_num'];
|
|
$pay_num = !empty($pay_num) ? $pay_num + $row['pay_num'] : $row['pay_num'];
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- foreach ($totalRow as $key => &$row) {
|
|
|
|
|
|
|
+ foreach ($totalRow as $key => $vv) {
|
|
|
if ($key[0] === 'd') {
|
|
if ($key[0] === 'd') {
|
|
|
switch ($dataType) {
|
|
switch ($dataType) {
|
|
|
case 'recovery':
|
|
case 'recovery':
|
|
@@ -1220,17 +1102,12 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
'data' => array_values($list),
|
|
'data' => array_values($list),
|
|
|
'totalRow' => $totalRow
|
|
'totalRow' => $totalRow
|
|
|
];
|
|
];
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-
|
|
|
|
|
- // 生成wheresql
|
|
|
|
|
-
|
|
|
|
|
/**
|
|
/**
|
|
|
* ltv按月
|
|
* ltv按月
|
|
|
*/
|
|
*/
|
|
|
- public function getLtvmDataList($where)
|
|
|
|
|
|
|
+ public function getLtvmDataList($where): array
|
|
|
{
|
|
{
|
|
|
$params = $this->searchByAuth($where);
|
|
$params = $this->searchByAuth($where);
|
|
|
// 展示类型
|
|
// 展示类型
|
|
@@ -1238,14 +1115,11 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
$nowDate = date("Y-m");
|
|
$nowDate = date("Y-m");
|
|
|
$whereSql = $this->generateWhereSql($params);
|
|
$whereSql = $this->generateWhereSql($params);
|
|
|
|
|
|
|
|
- // 1. 获取消耗金额
|
|
|
|
|
-
|
|
|
|
|
// 2. 获取注册数
|
|
// 2. 获取注册数
|
|
|
$totalBaseWhereSql = str_replace('AND tdate', 'AND tmonth', $whereSql);
|
|
$totalBaseWhereSql = str_replace('AND tdate', 'AND tmonth', $whereSql);
|
|
|
$baseData = Db::connect('db_data_report')->query("SELECT tmonth,SUM(cost) as cost,SUM(reg_total) as reg_total FROM game_total_month WHERE 1=1 $totalBaseWhereSql GROUP BY tmonth");
|
|
$baseData = Db::connect('db_data_report')->query("SELECT tmonth,SUM(cost) as cost,SUM(reg_total) as reg_total FROM game_total_month WHERE 1=1 $totalBaseWhereSql GROUP BY tmonth");
|
|
|
$baseData = array_column($baseData, null, 'tmonth');
|
|
$baseData = array_column($baseData, null, 'tmonth');
|
|
|
|
|
|
|
|
-
|
|
|
|
|
// 3. 获取注册付费金额
|
|
// 3. 获取注册付费金额
|
|
|
$field = "
|
|
$field = "
|
|
|
reg_month,
|
|
reg_month,
|
|
@@ -1270,28 +1144,26 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
|
|
|
|
|
// 前端data数据
|
|
// 前端data数据
|
|
|
$data = [];
|
|
$data = [];
|
|
|
-
|
|
|
|
|
$pay_total = 0;
|
|
$pay_total = 0;
|
|
|
$pay_amount = 0;
|
|
$pay_amount = 0;
|
|
|
$pay_num = 0;
|
|
$pay_num = 0;
|
|
|
|
|
|
|
|
-
|
|
|
|
|
// 合计 消耗金额,注册数,注册成本
|
|
// 合计 消耗金额,注册数,注册成本
|
|
|
- foreach ($baseData as $key => $row) {
|
|
|
|
|
- $totalRow['cost'] = !empty($totalRow['cost']) ? round($totalRow['cost'] + $row['cost'] ?? 0, 2) : $row['cost'] ?? 0;
|
|
|
|
|
- $totalRow['reg_total'] = !empty($totalRow['reg_total']) ? ($totalRow['reg_total'] + $row['reg_total'] ?? 0) : $row['reg_total'] ?? 0;
|
|
|
|
|
|
|
+ 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'] = ToolLogic::getRound($totalRow['cost'] ?? 0, $totalRow['reg_total'] ?? 0);
|
|
|
|
|
|
|
|
$days = ToolLogic::getMonthNum($key, $nowDate);
|
|
$days = ToolLogic::getMonthNum($key, $nowDate);
|
|
|
for ($i = 1; $i <= $days; $i++) {
|
|
for ($i = 1; $i <= $days; $i++) {
|
|
|
$daykey = 'm' . ($i + 1);
|
|
$daykey = 'm' . ($i + 1);
|
|
|
- $totalRow[$daykey]['reg_total'] = !empty($totalRow[$daykey]['reg_total']) ? ($totalRow[$daykey]['reg_total'] + $row['reg_total'] ?? 0) : $row['reg_total'] ?? 0;
|
|
|
|
|
- $totalRow[$daykey]['cost'] = !empty($totalRow[$daykey]['cost']) ? ($totalRow[$daykey]['cost'] + $row['cost'] ?? 0) : $row['cost'] ?? 0;
|
|
|
|
|
|
|
+ $totalRow[$daykey]['reg_total'] = !empty($totalRow[$daykey]['reg_total']) ? ($totalRow[$daykey]['reg_total'] + $val['reg_total'] ?? 0) : $val['reg_total'] ?? 0;
|
|
|
|
|
+ $totalRow[$daykey]['cost'] = !empty($totalRow[$daykey]['cost']) ? ($totalRow[$daykey]['cost'] + $val['cost'] ?? 0) : $val['cost'] ?? 0;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 按照天计算LTV
|
|
// 按照天计算LTV
|
|
|
- foreach ($regPayData as &$row) {
|
|
|
|
|
|
|
+ foreach ($regPayData as $row) {
|
|
|
$regDate = $row['reg_month'];
|
|
$regDate = $row['reg_month'];
|
|
|
|
|
|
|
|
$data[$regDate]['tmonth'] = $regDate;
|
|
$data[$regDate]['tmonth'] = $regDate;
|
|
@@ -1305,10 +1177,8 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
$data[$regDate]['cost'] = $baseData[$regDate]['cost'] ?? 0;
|
|
$data[$regDate]['cost'] = $baseData[$regDate]['cost'] ?? 0;
|
|
|
|
|
|
|
|
// 计算日期相差天数
|
|
// 计算日期相差天数
|
|
|
- // $daykey = (strtotime($row['pay_month'])-strtotime($regDate))/86400+1;
|
|
|
|
|
$daykey = 'm' . (ToolLogic::getMonthNum($regDate, $row['pay_month']) + 1);
|
|
$daykey = 'm' . (ToolLogic::getMonthNum($regDate, $row['pay_month']) + 1);
|
|
|
|
|
|
|
|
-
|
|
|
|
|
switch ($dataType) {
|
|
switch ($dataType) {
|
|
|
case 'recovery':
|
|
case 'recovery':
|
|
|
$data[$regDate][$daykey] = ToolLogic::getPercent($row['addup_pay_total'], $baseData[$regDate]['cost'] ?? 0, 1);
|
|
$data[$regDate][$daykey] = ToolLogic::getPercent($row['addup_pay_total'], $baseData[$regDate]['cost'] ?? 0, 1);
|
|
@@ -1370,7 +1240,6 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|
|
|
default:
|
|
default:
|
|
|
- continue 2;
|
|
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|
|
|
$totalRow[$daykey]['addup_pay_total'] = $totalRow[$daykey]['addup_pay_total'] ?? 0;
|
|
$totalRow[$daykey]['addup_pay_total'] = $totalRow[$daykey]['addup_pay_total'] ?? 0;
|
|
@@ -1393,7 +1262,7 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- foreach ($totalRow as $key => &$row) {
|
|
|
|
|
|
|
+ foreach ($totalRow as $key => $vv) {
|
|
|
if ($key[0] === 'm') {
|
|
if ($key[0] === 'm') {
|
|
|
switch ($dataType) {
|
|
switch ($dataType) {
|
|
|
case 'recovery':
|
|
case 'recovery':
|
|
@@ -1455,10 +1324,7 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
'data' => array_values($list),
|
|
'data' => array_values($list),
|
|
|
'totalRow' => $totalRow
|
|
'totalRow' => $totalRow
|
|
|
];
|
|
];
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|