|
|
@@ -842,8 +842,6 @@ class channelAnalysisLogic extends BaseLogic
|
|
|
// 2. 获取注册数
|
|
|
$baseData = $this->generateYearUnionList('base_total_day_', $params['reg_date'], $whereSql, "SUM(reg_total) as reg_total, tdate", 'tdate');
|
|
|
$baseData = array_column($baseData, null, 'tdate');
|
|
|
-
|
|
|
- print_r($baseData);
|
|
|
|
|
|
// 3. 获取注册付费金额
|
|
|
$field = "
|
|
|
@@ -851,184 +849,187 @@ class channelAnalysisLogic extends BaseLogic
|
|
|
pay_date,
|
|
|
SUM(pay_num) as pay_num,
|
|
|
SUM(pay_total) as pay_total,
|
|
|
- DATEDIFF(pay_date, reg_date) as day,
|
|
|
SUM(addup_pay_num) AS addup_pay_num,
|
|
|
SUM(addup_pay_total) AS addup_pay_total,
|
|
|
SUM(addup_pay_amount) AS addup_pay_amount
|
|
|
";
|
|
|
$regPayWhereSql = str_replace('AND tdate','AND reg_date',$whereSql);
|
|
|
- $regPayData = $this->generateYearUnionList('game_reg_pay_day_', $params['reg_date'], $regPayWhereSql, $field, 'reg_date,day');
|
|
|
+ $regPayData = $this->generateYearUnionList('game_reg_pay_day_', $params['reg_date'], $regPayWhereSql, $field, 'reg_date,pay_date');
|
|
|
|
|
|
+ // 如果注册付费数据为空,则返回空数据给前端
|
|
|
if(empty($regPayData)){
|
|
|
return ['data'=>[],'totalRow'=>[]];
|
|
|
}
|
|
|
-
|
|
|
- // 3. 获取日期列表(注册日期和今天之间的日期)
|
|
|
- /**
|
|
|
- * 计算ltv
|
|
|
- * game_reg_pay_day_
|
|
|
- *
|
|
|
- * 消耗金额、注册数、注册成本,按照注册日期,分组统计
|
|
|
- *
|
|
|
- * 第一天: reg_date 注册时间(不变), reg_pay 1天总付费金额(addup_pay_total) / 消耗金额 * 100%
|
|
|
- * 第二天: reg_date 注册时间(不变), reg_pay 2天总付费金额(addup_pay_total) / 消耗金额 * 100%
|
|
|
- */
|
|
|
-
|
|
|
- // 合计
|
|
|
+ // 前端合计数据
|
|
|
$totalRow = [
|
|
|
'tdate' => '合计'
|
|
|
];
|
|
|
+
|
|
|
+ // 前端data数据
|
|
|
+ $data = [];
|
|
|
+
|
|
|
+ $totalLtv=[];
|
|
|
+
|
|
|
+
|
|
|
+ // 合计 消耗金额,注册数,注册成本
|
|
|
+ foreach($baseData as $key=>$row){
|
|
|
+ $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['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_cost'] = ToolLogic::getRound($totalRow['cost']??0,$totalRow['reg_total']??0);
|
|
|
+
|
|
|
+ $days = (strtotime($nowDate)-strtotime($key))/86400+1;
|
|
|
+ for($i=1;$i<=$days;$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]['cost'] = !empty($totalRow[$daykey]['cost']) ? ($totalRow[$daykey]['cost'] + $costData[$key]??0) : $costData[$key]??0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
// 按照天计算LTV
|
|
|
foreach($regPayData as &$row){
|
|
|
- $data[$row['reg_date']]['tdate'] = $row['reg_date'];
|
|
|
- // 计算相差
|
|
|
- $daykey = (strtotime($row['pay_date'])-strtotime($row['reg_date']))/86400+1;
|
|
|
- $daykey = 'd'.$daykey;
|
|
|
-
|
|
|
+ $regDate = $row['reg_date'];
|
|
|
+ $data[$regDate]['tdate'] = $regDate;
|
|
|
+
|
|
|
// 注册数
|
|
|
- $data[$row['reg_date']]['reg_total'] = $baseData[$row['reg_date']]['reg_total'] ?? 0;
|
|
|
+ $data[$regDate]['reg_total'] = $baseData[$regDate]['reg_total'] ?? 0;
|
|
|
+
|
|
|
// 注册成本
|
|
|
- $data[$row['reg_date']]['reg_cost'] = ToolLogic::getRound($costData[$row['reg_date']]??0,$data[$row['reg_date']]['reg_total']??0);
|
|
|
+ $data[$regDate]['reg_cost'] = ToolLogic::getRound($costData[$regDate]??0,$data[$regDate]['reg_total']??0);
|
|
|
// 消耗金额
|
|
|
- $data[$row['reg_date']]['cost'] = $costData[$row['reg_date']]??0;
|
|
|
-
|
|
|
+ $data[$regDate]['cost'] = $costData[$regDate]??0;
|
|
|
+
|
|
|
+ // 计算日期相差天数
|
|
|
+ $daykey = (strtotime($row['pay_date'])-strtotime($regDate))/86400+1;
|
|
|
+ $daykey = 'd'.$daykey;
|
|
|
+
|
|
|
|
|
|
switch($dataType){
|
|
|
-
|
|
|
- /* 不扣除分成/cost , 计算 */
|
|
|
case 'recovery':
|
|
|
- // 按天回本率
|
|
|
- $data[$row['reg_date']][$daykey] = ToolLogic::getPercent($row['addup_pay_total'],$costData[$row['reg_date']]??0,1);
|
|
|
- // 累计回本率
|
|
|
+ $data[$regDate][$daykey] = ToolLogic::getPercent($row['addup_pay_total'],$costData[$regDate]??0,1);
|
|
|
if($nowDate === $row['pay_date']){
|
|
|
- $data[$row['reg_date']]['d0'] = ToolLogic::getPercent($row['addup_pay_total'],$costData[$row['reg_date']]??0,1);
|
|
|
- $totalRow['d0']['addup_pay_total'] = !empty($totalRow['d0']['addup_pay_total']) ? ($totalRow['d0']['addup_pay_total'] + $row['addup_pay_total']) : $row['addup_pay_total'];
|
|
|
+ $data[$regDate]['d0'] = ToolLogic::getPercent($row['addup_pay_total'],$costData[$regDate]??0,1);
|
|
|
}
|
|
|
- // $data[$row['reg_date']]['addup_pay_total'] = $row['addup_pay_total'];
|
|
|
- // 合计的按日的注册总充值
|
|
|
- $totalRow[$daykey]['addup_pay_total'] = !empty($totalRow[$daykey]['addup_pay_total']) ? ($totalRow[$daykey]['addup_pay_total'] + $row['addup_pay_total']??0) : $row['addup_pay_total']??0;
|
|
|
break;
|
|
|
|
|
|
/* 扣除分成/cost , 计算 */
|
|
|
case 'remount':
|
|
|
// 按天回本率
|
|
|
- $data[$row['reg_date']][$daykey] = ToolLogic::getPercent($row['addup_pay_amount'],$costData[$row['reg_date']]??0,1);
|
|
|
+ $data[$regDate][$daykey] = ToolLogic::getPercent($row['addup_pay_amount'],$costData[$regDate]??0,1);
|
|
|
// 累计回本率
|
|
|
if($nowDate === $row['pay_date']){
|
|
|
- $data[$row['reg_date']]['d0'] = ToolLogic::getPercent($row['addup_pay_amount'],$costData[$row['reg_date']]??0,1);
|
|
|
- $totalRow['d0']['addup_pay_amount'] = !empty($totalRow['d0']['addup_pay_amount']) ? ($totalRow['d0']['addup_pay_amount'] + $row['addup_pay_amount']) : $row['addup_pay_amount'];
|
|
|
+ $data[$regDate]['d0'] = ToolLogic::getPercent($row['addup_pay_amount'],$costData[$regDate]??0,1);
|
|
|
}
|
|
|
- // $data[$row['reg_date']]['addup_pay_amount'] = $row['addup_pay_amount'];
|
|
|
- // 合计的按日的扣除分成(注册总充值)
|
|
|
- $totalRow[$daykey]['addup_pay_amount'] = !empty($totalRow[$daykey]['addup_pay_amount']) ? ($totalRow[$daykey]['addup_pay_amount'] + $row['addup_pay_amount']??0) : $row['addup_pay_amount']??0;
|
|
|
break;
|
|
|
|
|
|
/* 累计计费付费金额 / 注册数 */
|
|
|
case 'ltv':
|
|
|
// 按天LTV
|
|
|
- $data[$row['reg_date']][$daykey] = ToolLogic::getRound($row['addup_pay_total'],$baseData[$row['reg_date']]['reg_total']??0,1);
|
|
|
+ $data[$regDate][$daykey] = ToolLogic::getRound($row['addup_pay_total'],$baseData[$regDate]['reg_total']??0,1);
|
|
|
// 累计LTV
|
|
|
if($nowDate === $row['pay_date']){
|
|
|
- $data[$row['reg_date']]['d0'] = ToolLogic::getRound($row['addup_pay_total'],$baseData[$row['reg_date']]['reg_total']??0,1);
|
|
|
- $totalRow['d0']['addup_pay_total'] = !empty($totalRow['d0']['addup_pay_total']) ? ($totalRow['d0']['addup_pay_total'] + $row['addup_pay_total']) : $row['addup_pay_total'];
|
|
|
- }
|
|
|
- // $data[$row['reg_date']]['addup_pay_total'] = $row['addup_pay_total'];
|
|
|
- // 合计的按日的注册总充值
|
|
|
- $totalRow[$daykey]['addup_pay_total'] = !empty($totalRow[$daykey]['addup_pay_total']) ? ($totalRow[$daykey]['addup_pay_total'] + $row['addup_pay_total']??0) : $row['addup_pay_total']??0;
|
|
|
+ $data[$regDate]['d0'] = ToolLogic::getRound($row['addup_pay_total'],$baseData[$regDate]['reg_total']??0,1);
|
|
|
+ }
|
|
|
break;
|
|
|
|
|
|
/* 后面的LTV数据, 按天LTV / 第一天LTV , 目的是为了计算LTV增长率*/
|
|
|
case 'ltvbs':
|
|
|
- $data[$row['reg_date']][$daykey] = ToolLogic::getRound($row['addup_pay_total'],$baseData[$row['reg_date']]['reg_total']??0,1);
|
|
|
- $fz = $data[$row['reg_date']]['d1']!=0 ? $data[$row['reg_date']]['d1'] : 1;
|
|
|
- $data[$row['reg_date']][$daykey] = round($data[$row['reg_date']][$daykey] / $fz,2);
|
|
|
-
|
|
|
- if($nowDate === $row['pay_date']){
|
|
|
- $data[$row['reg_date']]['d0'] = round($data[$row['reg_date']][$daykey] / $fz,2);
|
|
|
- $totalRow['d0']['addup_pay_total'] = !empty($totalRow['d0']['addup_pay_total']) ? ($totalRow['d0']['addup_pay_total'] + $row['addup_pay_total']) : $row['addup_pay_total'];
|
|
|
- }
|
|
|
- $totalRow[$daykey]['addup_pay_total'] = !empty($totalRow[$daykey]['addup_pay_total']) ? ($totalRow[$daykey]['addup_pay_total'] + $row['addup_pay_total']??0) : $row['addup_pay_total']??0;
|
|
|
-
|
|
|
+ $totalLtv[$daykey] = ToolLogic::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;
|
|
|
|
|
|
/* 付费人数*/
|
|
|
case 'pay_num':
|
|
|
- $data[$row['reg_date']][$daykey] = $row['pay_num'];
|
|
|
+ $data[$regDate][$daykey] = $row['pay_num'];
|
|
|
if($nowDate === $row['pay_date']){
|
|
|
- $data[$row['reg_date']]['d0'] = $row['addup_pay_num'];
|
|
|
- $totalRow['d0'] = !empty($totalRow['d0']) ? ($totalRow['d0'] + $row['addup_pay_num']) : $row['addup_pay_num'];
|
|
|
+ $data[$regDate]['d0'] = $row['addup_pay_num'];
|
|
|
}
|
|
|
- $totalRow[$daykey] = !empty($totalRow[$daykey]['addup_pay_num']) ? ($totalRow[$daykey]['addup_pay_num'] + $row['pay_num']??0) : $row['pay_num']??0;
|
|
|
-
|
|
|
break;
|
|
|
|
|
|
/* 付费总额 */
|
|
|
case 'pay_total':
|
|
|
- $data[$row['reg_date']][$daykey] = $row['pay_total'];
|
|
|
+ $data[$regDate][$daykey] = $row['pay_total'];
|
|
|
if($nowDate === $row['pay_date']){
|
|
|
- $data[$row['reg_date']]['d0'] = $row['addup_pay_total'];
|
|
|
- $totalRow['d0'] = $row['addup_pay_total'];
|
|
|
+ $data[$regDate]['d0'] = $row['addup_pay_total'];
|
|
|
}
|
|
|
- $totalRow[$daykey] = !empty($totalRow[$daykey]['addup_pay_total']) ? ($totalRow[$daykey]['addup_pay_total'] + $row['pay_total']??0) : $row['pay_total']??0;
|
|
|
+
|
|
|
break;
|
|
|
|
|
|
/* 付费率 */
|
|
|
case 'pay_rate':
|
|
|
- $data[$row['reg_date']][$daykey] = ToolLogic::getPercent($row['pay_num'],$baseData[$row['reg_date']]['reg_total']??0);
|
|
|
+ $data[$regDate][$daykey] = ToolLogic::getPercent($row['pay_num'],$baseData[$regDate]['reg_total']);
|
|
|
if($nowDate === $row['pay_date']){
|
|
|
- $data[$row['reg_date']]['d0'] = ToolLogic::getPercent($row['addup_pay_num'],$baseData[$row['reg_date']]['reg_total']??0);
|
|
|
+ $data[$regDate]['d0'] = ToolLogic::getPercent($row['addup_pay_num'],$baseData[$regDate]['reg_total']);
|
|
|
}
|
|
|
- $totalRow[$daykey] = !empty($totalRow[$daykey]['addup_pay_num']) ? ($totalRow[$daykey]['addup_pay_num'] + $row['pay_num']??0) : $row['pay_num']??0;
|
|
|
break;
|
|
|
|
|
|
/* 付费ARPU */
|
|
|
case 'arpu':
|
|
|
- $data[$row['reg_date']][$daykey] = ToolLogic::getRound($row['pay_total'],$row['pay_num']);
|
|
|
-
|
|
|
+ $data[$regDate][$daykey] = ToolLogic::getRound($row['pay_total'],$row['pay_num']);
|
|
|
if($nowDate === $row['pay_date']){
|
|
|
- $data[$row['reg_date']]['d0'] = ToolLogic::getRound($row['addup_pay_total'],$row['addup_pay_num']);
|
|
|
- $totalRow['d0']['addup_pay_total'] = $row['addup_pay_total'];
|
|
|
- $totalRow['d0']['addup_pay_num'] = $row['addup_pay_num'];
|
|
|
+ $data[$regDate]['d0'] = ToolLogic::getRound($row['addup_pay_total'],$row['addup_pay_num']);
|
|
|
}
|
|
|
- $totalRow[$daykey]['addup_pay_total'] = !empty($totalRow[$daykey]['addup_pay_total']) ? ($totalRow[$daykey]['addup_pay_total'] + $row['pay_total']??0) : $row['pay_total']??0;
|
|
|
- $totalRow[$daykey]['addup_pay_num'] = !empty($totalRow[$daykey]['addup_pay_num']) ? ($totalRow[$daykey]['addup_pay_num'] + $row['pay_num']??0) : $row['pay_num']??0;
|
|
|
- break;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ continue 2;
|
|
|
+ break;
|
|
|
}
|
|
|
- }
|
|
|
+ $totalRow[$daykey]['addup_pay_total'] = $totalRow[$daykey]['addup_pay_total'] ?? 0;
|
|
|
+ $totalRow[$daykey]['addup_pay_amount'] = $totalRow[$daykey]['addup_pay_amount'] ?? 0;
|
|
|
+ $totalRow[$daykey]['pay_num'] = $totalRow[$daykey]['pay_num'] ?? 0;
|
|
|
+ $totalRow[$daykey]['pay_total'] = $totalRow[$daykey]['pay_total'] ?? 0;
|
|
|
|
|
|
- foreach($data as $key=>&$row){
|
|
|
- // 合计注册数
|
|
|
- $totalRow['reg_total'] = !empty($totalRow['reg_total']) ? ($totalRow['reg_total'] + $baseData[$row['tdate']]['reg_total'] ?? 0) : $baseData[$row['tdate']]['reg_total'] ?? 0;
|
|
|
-
|
|
|
- // 合计消耗金额
|
|
|
- $totalRow['cost'] = !empty($totalRow['cost']) ? ($totalRow['cost'] + $row['cost']??0) : $row['cost']??0;
|
|
|
+ $totalRow[$daykey]['addup_pay_total'] = !empty($totalRow[$daykey]['addup_pay_total']) ? $totalRow[$daykey]['addup_pay_total'] + $row['addup_pay_total'] : $row['addup_pay_total'];
|
|
|
+ $totalRow[$daykey]['addup_pay_amount'] = !empty($totalRow[$daykey]['addup_pay_amount']) ? $totalRow[$daykey]['addup_pay_amount'] + $row['addup_pay_amount'] : $row['addup_pay_amount'];
|
|
|
+ $totalRow[$daykey]['pay_num'] = !empty($totalRow[$daykey]['pay_num']) ? $totalRow[$daykey]['pay_num'] + $row['pay_num'] : $row['pay_num'];
|
|
|
+ $totalRow[$daykey]['pay_total'] = !empty($totalRow[$daykey]['pay_total']) ? $totalRow[$daykey]['pay_total'] + $row['pay_total'] : $row['pay_total'];
|
|
|
|
|
|
- // 合计注册成本
|
|
|
- $totalRow['reg_cost'] = ToolLogic::getRound($totalRow['cost']??0,$totalRow['reg_total']??0);
|
|
|
-
|
|
|
+
|
|
|
+ if($row['pay_date'] == $regDate){
|
|
|
+ $totalRow['d0']['pay_total'] = !empty($totalRow['d0']['pay_total']) ? $totalRow['d0']['pay_total'] + $row['addup_pay_total'] : $row['addup_pay_total'];
|
|
|
+ $totalRow['d0']['addup_pay_amount'] = !empty($totalRow['d0']['addup_pay_amount']) ? $totalRow['d0']['addup_pay_amount'] + $row['addup_pay_amount'] : $row['addup_pay_amount'];
|
|
|
+ $totalRow['d0']['pay_num'] = !empty($totalRow['d0']['pay_num']) ? $totalRow['d0']['pay_num'] + $row['addup_pay_num'] : $row['addup_pay_num'];
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
+
|
|
|
foreach($totalRow as $key=>&$row){
|
|
|
if($key[0]==='d'){
|
|
|
switch($dataType){
|
|
|
case 'recovery':
|
|
|
- $totalRow[$key] = ToolLogic::getPercent($totalRow[$key]['addup_pay_total'],$totalRow['cost']??0,1);
|
|
|
+ $totalRow[$key] = ToolLogic::getPercent($totalRow[$key]['addup_pay_total']??0,$totalRow[$key]['cost']??0,1);
|
|
|
break;
|
|
|
case 'remount':
|
|
|
- $totalRow[$key] = ToolLogic::getPercent($totalRow[$key]['addup_pay_amount'],$totalRow['cost']??0,1);
|
|
|
+ $totalRow[$key] = ToolLogic::getPercent($totalRow[$key]['addup_pay_amount']??0,$totalRow[$key]['cost']??0,1);
|
|
|
break;
|
|
|
case 'ltv':
|
|
|
- $totalRow[$key] = ToolLogic::getRound($totalRow[$key]['addup_pay_total'],$totalRow['reg_total']??0);
|
|
|
+ $totalRow[$key] = ToolLogic::getRound($totalRow[$key]['addup_pay_total']??0,$totalRow[$key]['reg_total']??0);
|
|
|
break;
|
|
|
case 'ltvbs':
|
|
|
- $totalRow[$key] = ToolLogic::getRound($totalRow[$key]['addup_pay_total'],$totalRow['reg_total']??0);
|
|
|
- $fz = $totalRow['d1']??0!=0 ? $totalRow['d1'] : 1;
|
|
|
- $totalRow[$key] = round($totalRow[$key] / $fz,2); // 增长率
|
|
|
+ $totalLtv[$key] = ToolLogic::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);
|
|
|
+
|
|
|
+ $totalLtv['d0'] = ToolLogic::getRound($totalRow['d0']['addup_pay_total']??0,$totalRow['d0']['reg_total']??0);
|
|
|
+ $fz = $totalLtv['d1']??0!=0 ? $totalLtv['d1'] : 1;
|
|
|
+ $totalRow['d0'] = round($totalLtv['d0']/$fz, 2);
|
|
|
+ break;
|
|
|
+ case 'pay_num':
|
|
|
+ $totalRow[$key] = $totalRow[$key]['pay_num']??0;
|
|
|
+ break;
|
|
|
+ case 'pay_total':
|
|
|
+ $totalRow[$key] = $totalRow[$key]['pay_total']??0;
|
|
|
break;
|
|
|
case 'pay_rate':
|
|
|
- $totalRow[$key] = ToolLogic::getPercent($totalRow[$key]['addup_pay_num'],$totalRow['reg_total']??0);
|
|
|
+ $totalRow[$key] = ToolLogic::getPercent($totalRow[$key]['pay_num']??0,$totalRow[$key]['reg_total']??0);
|
|
|
break;
|
|
|
case 'arpu':
|
|
|
- $totalRow[$key] = ToolLogic::getRound($totalRow[$key]['addup_pay_total'],$totalRow['addup_pay_num']??0);
|
|
|
+ $totalRow[$key] = ToolLogic::getRound($totalRow[$key]['pay_total']??0,$totalRow[$key]['pay_num']??0);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
@@ -1042,6 +1043,17 @@ class channelAnalysisLogic extends BaseLogic
|
|
|
];
|
|
|
|
|
|
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * ltv按月
|
|
|
+ */
|
|
|
+ public function getLtvmDataList($where){
|
|
|
+ $params = $this->searchByAuth($where);
|
|
|
+ $whereSql = $this->generateWhereSql($params);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
|
|
|
/**
|