|
|
@@ -618,6 +618,222 @@ class AnalyseLogic extends BaseLogic
|
|
|
];
|
|
|
}
|
|
|
|
|
|
+ // 图表数据
|
|
|
+ public function getChartData($where){
|
|
|
+ $params = $this->searchByAuth($where);
|
|
|
+ $type = $params['compare_type']??'day';
|
|
|
+
|
|
|
+ // 如果按照天对比
|
|
|
+ if($type === 'day'){
|
|
|
+ $data1 = [];
|
|
|
+ $data2 = [];
|
|
|
+ $data1Res = [];
|
|
|
+ $data2Res = [];
|
|
|
+
|
|
|
+ $field = "
|
|
|
+ SUM(reg_total) as reg, -- 注册人数
|
|
|
+ SUM(old_login_total) as login, -- 老用户登陆人数
|
|
|
+ SUM(pay_total) as pay, -- 付费金额
|
|
|
+ tdate
|
|
|
+ ";
|
|
|
+
|
|
|
+ // 获取对比日期1的数据, 注册、登录、充值
|
|
|
+ $params['reg_date'] = $params['compare_date1'];
|
|
|
+ $whereSql1 = $this->generateWhereSql($params);
|
|
|
+
|
|
|
+ $baseData1 = $this->generateYearUnionList('base_total_day_',$params['compare_date1'],$whereSql1,$field,'tdate');
|
|
|
+
|
|
|
+ foreach($baseData1 as $item){
|
|
|
+ $data1Res[$item['tdate']]['reg'] = $item['reg'];
|
|
|
+ $data1Res[$item['tdate']]['pay'] = $item['pay'];
|
|
|
+ $data1Res[$item['tdate']]['login'] = $item['login'];
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // 获取对比日期2的数据, 注册、登录、充值
|
|
|
+ $params['reg_date'] = $params['compare_date2'];
|
|
|
+ $whereSql2 = $this->generateWhereSql($params);
|
|
|
+ $baseData2 = $this->generateYearUnionList('base_total_day_',$params['compare_date2'],$whereSql2,$field,'tdate');
|
|
|
+
|
|
|
+
|
|
|
+ foreach($baseData2 as $item){
|
|
|
+ $data2Res[$item['tdate']]['reg'] = $item['reg'];
|
|
|
+ $data2Res[$item['tdate']]['pay'] = $item['pay'];
|
|
|
+ $data2Res[$item['tdate']]['login'] = $item['login'];
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ // 获取消耗数据1
|
|
|
+ $params['reg_date'] = $params['compare_date1'];
|
|
|
+ $costWhereSql1 = $this->generateWhereSql($params);
|
|
|
+ echo $costWhereSql1;
|
|
|
+ $costData1 = Db::connect('db_advert')->query("
|
|
|
+ SELECT SUM(money) as money, tdate
|
|
|
+ FROM media_cost
|
|
|
+ WHERE 1=1 {$costWhereSql1}
|
|
|
+ GROUP BY tdate
|
|
|
+ ");
|
|
|
+
|
|
|
+ foreach($costData1 as $item){
|
|
|
+ $data1Res[$item['tdate']]['cost'] = $item['money'];
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // 获取消耗数据2
|
|
|
+ $params['reg_date'] = $params['compare_date2'];
|
|
|
+ $costWhereSql2 = $this->generateWhereSql($params);
|
|
|
+ $costData2 = Db::connect('db_advert')->query("
|
|
|
+ SELECT SUM(money) as money, tdate
|
|
|
+ FROM media_cost
|
|
|
+ WHERE 1=1 {$costWhereSql2}
|
|
|
+ GROUP BY tdate
|
|
|
+ ");
|
|
|
+
|
|
|
+ foreach($costData2 as $item){
|
|
|
+ $data2Res[$item['tdate']]['cost'] = $item['money'];
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ // 获取两个日期之间的所有日期
|
|
|
+ $day1Date = ToolLogic::getDatesBetween($params['compare_date1'][0],$params['compare_date1'][1]);
|
|
|
+ $day2Date = ToolLogic::getDatesBetween($params['compare_date2'][0],$params['compare_date2'][1]);
|
|
|
+
|
|
|
+
|
|
|
+ foreach($day1Date as $k=>$d){
|
|
|
+
|
|
|
+ $data1['days'][$k] = $d;
|
|
|
+
|
|
|
+ $data1['pay'][$k] = !empty($data1Res[$d]['pay']) ? round((float)$data1Res[$d]['pay'], 2) : 0;
|
|
|
+ $data1['cost'][$k] = !empty($data1Res[$d]['cost']) ? round((float)$data1Res[$d]['cost'], 2) : 0;
|
|
|
+ $data1['reg'][$k] = !empty($data1Res[$d]['reg']) ? (int)$data1Res[$d]['reg'] : 0;
|
|
|
+ $data1['login'][$k]= !empty($data1Res[$d]['login']) ? (int)$data1Res[$d]['login'] : 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ foreach($day2Date as $k=>$d){
|
|
|
+
|
|
|
+ $data2['days'][$k] = $d;
|
|
|
+ $data2['pay'][$k] = !empty($data2Res[$d]['pay']) ? round((float)$data2Res[$d]['pay'], 2) : 0;
|
|
|
+ $data2['cost'][$k] = !empty($data2Res[$d]['cost']) ? round((float)$data2Res[$d]['cost'], 2) : 0;
|
|
|
+ $data2['reg'][$k] = !empty($data2Res[$d]['reg']) ? (int)$data2Res[$d]['reg'] : 0;
|
|
|
+ $data2['login'][$k]= !empty($data2Res[$d]['login']) ? (int)$data2Res[$d]['login'] : 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 格式化x轴的时间
|
|
|
+ $forData = [];
|
|
|
+ $days1 = [];
|
|
|
+ $days2 = [];
|
|
|
+ if(count($data1['days'])>count($data2['days'])){
|
|
|
+ $forData = $data1['days'];
|
|
|
+ }else{
|
|
|
+ $forData = $data2['days'];
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ for($i=0;$i<count($forData);$i++){
|
|
|
+ $d1 = !empty($data1['days'][$i]) ? date("m-d", strtotime($data1['days'][$i])) : "";
|
|
|
+ $d2 = !empty($data2['days'][$i]) ? date("m-d", strtotime($data2['days'][$i])) : "";
|
|
|
+ $days1[] = $d1;
|
|
|
+ $days2[] = $d2;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ $data1['series'] = "日期1";
|
|
|
+ $data2['series'] = "日期2";
|
|
|
+
|
|
|
+
|
|
|
+ return [
|
|
|
+ 'data1' => $data1,
|
|
|
+ 'data2' => $data2,
|
|
|
+ 'days1' => $days1,
|
|
|
+ 'days2' => $days2
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // 如果按小时对比
|
|
|
+ if($type === 'hour'){
|
|
|
+ $data1 = [];
|
|
|
+ $data2 = [];
|
|
|
+ $data1Res = [];
|
|
|
+ $data2Res = [];
|
|
|
+
|
|
|
+ $field = "
|
|
|
+ SUM(reg_total) as reg, -- 注册人数
|
|
|
+ SUM(old_login_total) as login, -- 老用户登陆人数
|
|
|
+ SUM(pay_total) as pay, -- 付费金额
|
|
|
+ SUM(cost) as cost, -- 消耗金额
|
|
|
+ thour
|
|
|
+ ";
|
|
|
+
|
|
|
+ // 获取对比日期1的数据, 注册、登录、充值
|
|
|
+ $params['reg_date'] = $params['compare_date1_date'];
|
|
|
+ $whereSql1 = $this->generateWhereSql($params);
|
|
|
+ $baseData1 = $this->generateMonthUnionList('base_total_hour_',$params['compare_date1'],$whereSql1,$field,'thour');
|
|
|
+
|
|
|
+ foreach($baseData1 as $item){
|
|
|
+ $data1Res[$item['thour']]['reg'] = $item['reg'];
|
|
|
+ $data1Res[$item['thour']]['pay'] = $item['pay'];
|
|
|
+ $data1Res[$item['thour']]['login'] = $item['login'];
|
|
|
+ $data1Res[$item['thour']]['cost'] = $item['cost'];
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取对比日期2的数据, 注册、登录、充值
|
|
|
+ $params['reg_date'] = $params['compare_date2_date'];
|
|
|
+ $whereSql2 = $this->generateWhereSql($params);
|
|
|
+ echo $whereSql2;
|
|
|
+ $baseData2 = $this->generateMonthUnionList('base_total_hour_',$params['compare_date2'],$whereSql2,$field,'thour');
|
|
|
+
|
|
|
+ foreach($baseData2 as $item){
|
|
|
+ $data2Res[$item['thour']]['reg'] = $item['reg'];
|
|
|
+ $data2Res[$item['thour']]['pay'] = $item['pay'];
|
|
|
+ $data2Res[$item['thour']]['login'] = $item['login'];
|
|
|
+ $data2Res[$item['thour']]['cost'] = $item['cost'];
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ $ndate = date("Y-m-d");
|
|
|
+ $hour = date("H");
|
|
|
+ print_r($data1Res);
|
|
|
+ for ($h=0; $h<24; $h++){
|
|
|
+ if($params['compare_date1_date']==$ndate && $h>$hour){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ $data1['hour'][$h] = $h;
|
|
|
+ $data1['pay'][$h] = !empty($data1Res[$h]) ? round((float)$data1Res[$h]['pay']??0, 2) : 0;
|
|
|
+ $data1['cost'][$h] = !empty($data1Res[$h]) ? round((float)$data1Res[$h]['cost']??0, 2) : 0;
|
|
|
+ $data1['reg'][$h] = !empty($data1Res[$h]) ? (int)$data1Res[$h]['reg']??0 : 0;
|
|
|
+ $data1['login'][$h] = !empty($data1Res[$h]) ? (int)$data1Res[$h]['login']??0 : 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ for($h=0; $h<24; $h++){
|
|
|
+ if($params['compare_date2_date']==$ndate && $h>$hour){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ $data2['hour'][$h] = $h;
|
|
|
+ $data2['pay'][$h] = !empty($data2Res[$h]) ? round((float)$data2Res[$h]['pay']??0, 2) : 0;
|
|
|
+ $data2['cost'][$h] = !empty($data2Res[$h]) ? round((float)$data2Res[$h]['cost']??0, 2) : 0;
|
|
|
+ $data2['reg'][$h] = !empty($data2Res[$h]) ? (int)$data2Res[$h]['reg']??0 : 0;
|
|
|
+ $data2['login'][$h] = !empty($data2Res[$h]) ? (int)$data2Res[$h]['login']??0 : 0;
|
|
|
+ }
|
|
|
+ $hour = [];
|
|
|
+ for ($h=0; $h<24; $h++){
|
|
|
+ $hour[] = $h;
|
|
|
+ }
|
|
|
+
|
|
|
+ $data1['series'] = $params['compare_date1_date'];
|
|
|
+ $data2['series'] = $params['compare_date2_date'];
|
|
|
+
|
|
|
+ return [
|
|
|
+ 'data1' => $data1,
|
|
|
+ 'data2' => $data2,
|
|
|
+ 'days1' => $hour,
|
|
|
+ 'days2' => $hour
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
// 生成基础日统计表的联合查询列表
|
|
|
public function generateYearUnionList($namePrefix, $regDate,$whereSql='',$field='*',$group=null){
|
|
|
|
|
|
@@ -639,6 +855,26 @@ class AnalyseLogic extends BaseLogic
|
|
|
}
|
|
|
|
|
|
|
|
|
+ // 生成基础小时统计表的联合查询列表
|
|
|
+ public function generateMonthUnionList($namePrefix, $regDate,$whereSql='',$field='*',$group=null){
|
|
|
+ $tableNames = ToolLogic::getMonthlyTableNames($namePrefix, $regDate[0],$regDate[1]);
|
|
|
+ $sqlParts = [];
|
|
|
+ foreach ($tableNames as $tableName){
|
|
|
+ $sqlParts[] = "SELECT * FROM {$tableName} WHERE 1=1 {$whereSql}";
|
|
|
+ }
|
|
|
+ $unionSql = implode(" UNION ALL ", $sqlParts);
|
|
|
+ $finalSql = "
|
|
|
+ SELECT {$field} FROM ( {$unionSql} ) AS all_total_day
|
|
|
+ ";
|
|
|
+ if (!empty($group)) {
|
|
|
+ $finalSql .= " GROUP BY {$group}";
|
|
|
+ }
|
|
|
+
|
|
|
+ $baseData = Db::connect('db_data_report')->query($finalSql);
|
|
|
+ return $baseData;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
// 生成wheresql
|
|
|
public function generateWhereSql($params){
|
|
|
|
|
|
@@ -676,9 +912,13 @@ class AnalyseLogic extends BaseLogic
|
|
|
}
|
|
|
}
|
|
|
// 注册日期
|
|
|
- if(!empty($params['reg_date'])??null){
|
|
|
+ if(!empty($params['reg_date']) && is_array($params['reg_date'])){
|
|
|
$whereSql .= " AND tdate BETWEEN '{$params['reg_date'][0]}' AND '{$params['reg_date'][1]}'";
|
|
|
}
|
|
|
+ // 注册日期,不是数组,则认为是单个日期
|
|
|
+ if(!empty($params['reg_date']) && !is_array($params['reg_date'])){
|
|
|
+ $whereSql .= " AND tdate = '{$params['reg_date']}'";
|
|
|
+ }
|
|
|
|
|
|
return $whereSql;
|
|
|
}
|