|
|
@@ -1079,8 +1079,230 @@ class channelAnalysisLogic extends BaseLogic
|
|
|
*/
|
|
|
public function getLtvmDataList($where){
|
|
|
$params = $this->searchByAuth($where);
|
|
|
+ // 展示类型
|
|
|
+ $dataType = $params['data_type'] ?? 'recovery';
|
|
|
+ $nowDate = date("Y-m");
|
|
|
$whereSql = $this->generateWhereSql($params);
|
|
|
-
|
|
|
+
|
|
|
+ // 1. 获取消耗金额
|
|
|
+
|
|
|
+ // 2. 获取注册数
|
|
|
+ $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 = array_column($baseData, null, 'tmonth');
|
|
|
+
|
|
|
+
|
|
|
+ // 3. 获取注册付费金额
|
|
|
+ $field = "
|
|
|
+ reg_month,
|
|
|
+ pay_month,
|
|
|
+ SUM(pay_num) as pay_num,
|
|
|
+ SUM(pay_total) as pay_total,
|
|
|
+ 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_month',$whereSql);
|
|
|
+ $regPayData = Db::connect('db_data_report')->query("SELECT $field FROM game_reg_pay_month WHERE 1=1 $regPayWhereSql GROUP BY reg_month,pay_month");
|
|
|
+
|
|
|
+ // 如果注册付费数据为空,则返回空数据给前端
|
|
|
+ if(empty($regPayData)){
|
|
|
+ return ['data'=>[],'totalRow'=>[]];
|
|
|
+ }
|
|
|
+ // 前端合计数据
|
|
|
+ $totalRow = [
|
|
|
+ 'tmonth' => '合计'
|
|
|
+ ];
|
|
|
+
|
|
|
+ // 前端data数据
|
|
|
+ $data = [];
|
|
|
+
|
|
|
+ $pay_total = 0;
|
|
|
+ $pay_amount = 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;
|
|
|
+ $totalRow['reg_cost'] = ToolLogic::getRound($totalRow['cost']??0,$totalRow['reg_total']??0);
|
|
|
+
|
|
|
+ $days = ToolLogic::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'] + $row['reg_total']??0) : $row['reg_total']??0;
|
|
|
+ $totalRow[$daykey]['cost'] = !empty($totalRow[$daykey]['cost']) ? ($totalRow[$daykey]['cost'] + $row['cost']??0) : $row['cost']??0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+print_r($regPayData);
|
|
|
+
|
|
|
+ // 按照天计算LTV
|
|
|
+ foreach($regPayData as &$row){
|
|
|
+ $regDate = $row['reg_month'];
|
|
|
+
|
|
|
+ $data[$regDate]['tmonth'] = $regDate;
|
|
|
+
|
|
|
+ // 注册数
|
|
|
+ $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]['cost'] = $baseData[$regDate]['cost']??0;
|
|
|
+
|
|
|
+ // 计算日期相差天数
|
|
|
+ // $daykey = (strtotime($row['pay_month'])-strtotime($regDate))/86400+1;
|
|
|
+ $daykey = 'm'.(ToolLogic::getMonthNum($regDate,$row['pay_month'])+1);
|
|
|
+
|
|
|
+
|
|
|
+ switch($dataType){
|
|
|
+ case 'recovery':
|
|
|
+ $data[$regDate][$daykey] = ToolLogic::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);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ /* 扣除分成/cost , 计算 */
|
|
|
+ case 'remount':
|
|
|
+ // 按天回本率
|
|
|
+ $data[$regDate][$daykey] = ToolLogic::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);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ /* 累计计费付费金额 / 注册数 */
|
|
|
+ case 'ltv':
|
|
|
+ // 按天LTV
|
|
|
+ $data[$regDate][$daykey] = ToolLogic::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);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ /* 付费人数*/
|
|
|
+ case 'pay_num':
|
|
|
+ $data[$regDate][$daykey] = $row['pay_num'];
|
|
|
+ if($nowDate === $row['pay_month']){
|
|
|
+ $data[$regDate]['m0'] = $row['addup_pay_num'];
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ /* 付费总额 */
|
|
|
+ case 'pay_total':
|
|
|
+ $data[$regDate][$daykey] = $row['pay_total'];
|
|
|
+ if($nowDate === $row['pay_month']){
|
|
|
+ $data[$regDate]['m0'] = $row['addup_pay_total'];
|
|
|
+ }
|
|
|
+
|
|
|
+ break;
|
|
|
+
|
|
|
+ /* 付费率 */
|
|
|
+ case 'pay_rate':
|
|
|
+ $data[$regDate][$daykey] = ToolLogic::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']);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ /* 付费ARPU */
|
|
|
+ case 'arpu':
|
|
|
+ $data[$regDate][$daykey] = ToolLogic::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']);
|
|
|
+ }
|
|
|
+ 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;
|
|
|
+
|
|
|
+ $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'];
|
|
|
+
|
|
|
+
|
|
|
+ if($row['pay_month'] == $regDate){
|
|
|
+ $pay_total = !empty($pay_total) ? $pay_total + $row['addup_pay_total'] : $row['addup_pay_total'];
|
|
|
+ $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'];
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ foreach($totalRow as $key=>&$row){
|
|
|
+ if($key[0]==='m'){
|
|
|
+ switch($dataType){
|
|
|
+ case 'recovery':
|
|
|
+ $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']??0,$totalRow[$key]['cost']??0,1);
|
|
|
+ break;
|
|
|
+ case 'ltv':
|
|
|
+ $totalRow[$key] = ToolLogic::getRound($totalRow[$key]['addup_pay_total']??0,$totalRow[$key]['reg_total']??0);
|
|
|
+ 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]['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);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if($data && $totalRow){
|
|
|
+ switch($dataType){
|
|
|
+ case 'recovery':
|
|
|
+ $totalRow['m0'] = ToolLogic::getPercent($pay_total,$totalRow['cost'],1);
|
|
|
+ break;
|
|
|
+ case 'remount':
|
|
|
+ $totalRow['m0'] = ToolLogic::getPercent($pay_amount,$totalRow['cost'],1);
|
|
|
+ break;
|
|
|
+ case 'ltv':
|
|
|
+ $totalRow['m0'] = ToolLogic::getRound($pay_total,$totalRow['reg_total']);
|
|
|
+ break;
|
|
|
+
|
|
|
+ case 'pay_num':
|
|
|
+ $totalRow['m0'] = $pay_num;
|
|
|
+ break;
|
|
|
+ case 'pay_total':
|
|
|
+ $totalRow['m0'] = $pay_total;
|
|
|
+ break;
|
|
|
+ case 'pay_rate':
|
|
|
+ $totalRow['m0'] = ToolLogic::getPercent($pay_num,$totalRow['reg_total']);
|
|
|
+ break;
|
|
|
+ case 'arpu':
|
|
|
+ $totalRow['m0'] = ToolLogic::getRound($pay_total,$pay_num);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ $totalRow['reg_cost'] = ToolLogic::getRound($totalRow['cost'],$totalRow['reg_total']);
|
|
|
+ $list = ToolLogic::arrSort($data,'tmonth','asc');
|
|
|
+ }
|
|
|
+ return [
|
|
|
+ 'data' =>array_values( $list),
|
|
|
+ 'totalRow' => $totalRow
|
|
|
+ ];
|
|
|
|
|
|
|
|
|
}
|