AnalyseLogic.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. <?php
  2. // 玩家日志逻
  3. namespace app\v1\logic\gameLog;
  4. use app\v1\logic\tool\ToolLogic;
  5. use plugin\saiadmin\basic\BaseLogic;
  6. use support\think\Db;
  7. class AnalyseLogic extends BaseLogic
  8. {
  9. public function getRegDayDataList($where){
  10. $params = $this->searchByAuth($where);
  11. $whereSql = $this->generateWhereSql($params);
  12. $field = "SUM(reg_total) AS reg_total, tdate,game_id";
  13. $baseData = $this->generateYearUnionList('base_total_day_',$where['reg_date'],$whereSql,$field,'game_id,tdate');
  14. $data=[];
  15. foreach($baseData as $row){
  16. $tdate = $row['tdate'];
  17. $game_id = $row['game_id'];
  18. $data[$game_id][$tdate] = $row['reg_total'];
  19. $data[$game_id]['total'] = !empty($data[$game_id]['total']) ? $data[$game_id]['total'] + $row['reg_total'] : $row['reg_total'];
  20. $data[$game_id]['game_id'] = $game_id;
  21. }
  22. $list = array_values($data);
  23. $totalRow = ['game_id'=>'合计'];
  24. foreach($list as &$row){
  25. $totalRow['total'] = !empty($totalRow['total']) ? $totalRow['total'] + $row['total'] : $row['total'];
  26. foreach ($row as $key => $value) {
  27. if($key == 'total' || $key == 'game_id'){
  28. continue;
  29. }
  30. $totalRow[$key] = !empty($totalRow[$key]) ? $totalRow[$key] + $value : $value;
  31. }
  32. }
  33. // 获取两个注册日期之间的日期列表
  34. $dateList = ToolLogic::getDatesBetween($where['reg_date'][0],$where['reg_date'][1]);
  35. $columnsData = [
  36. [
  37. 'title' => '游戏ID',
  38. 'dataIndex' => 'game_id',
  39. 'width' => 120,
  40. ],
  41. [
  42. 'title' => '游戏',
  43. 'dataIndex' => 'game_name',
  44. 'width' => 120,
  45. ],
  46. [
  47. 'title' => '合计',
  48. 'dataIndex' => 'total',
  49. 'width' => 120,
  50. ]
  51. ];
  52. foreach($dateList as $date){
  53. $columnsData[] = [
  54. 'title' => $date,
  55. 'dataIndex' => $date,
  56. 'width' => 120,
  57. ];
  58. }
  59. $result['data'] = $list;
  60. $result['totalRow'] = $totalRow;
  61. $result['columns'] = $columnsData;
  62. return $result;
  63. }
  64. // 生成基础日统计表的联合查询列表
  65. public function generateYearUnionList($namePrefix, $regDate,$whereSql='',$field='*',$group=null){
  66. $tableNames = ToolLogic::getYearlyTableNames($namePrefix, $regDate[0],$regDate[1]);
  67. $sqlParts = [];
  68. foreach ($tableNames as $tableName){
  69. $sqlParts[] = "SELECT * FROM {$tableName} WHERE 1=1 {$whereSql}";
  70. }
  71. $unionSql = implode(" UNION ALL ", $sqlParts);
  72. $finalSql = "
  73. SELECT {$field} FROM ( {$unionSql} ) AS all_total_day
  74. ";
  75. if (!empty($group)) {
  76. $finalSql .= " GROUP BY {$group}";
  77. }
  78. $baseData = Db::connect('db_data_report')->query($finalSql);
  79. return $baseData;
  80. }
  81. // 生成wheresql
  82. public function generateWhereSql($params){
  83. $whereSql = "";
  84. // 游戏id
  85. if(!empty($params['game_id'])){
  86. if (is_array($params['game_id'])) {
  87. $whereSql .= " AND game_id IN(" . implode(',', $params['game_id']) . ")";
  88. } else {
  89. $whereSql .= " AND game_id = {$params['game_id']}";
  90. }
  91. }
  92. // 媒体id
  93. if(!empty($params['media_id'])){
  94. $whereSql .= " AND media_id = {$params['media_id']}";
  95. }
  96. // 渠道id
  97. if(!empty($params['agent_id'])){
  98. $whereSql .= " AND agent_id = {$params['agent_id']}";
  99. }
  100. // 广告位id
  101. if(!empty($params['site_id'])){
  102. if (is_array($params['site_id'])) {
  103. $whereSql .= " AND site_id IN(" . implode(',', $params['site_id']) . ")";
  104. } else {
  105. $whereSql .= " AND site_id = {$params['site_id']}";
  106. }
  107. }
  108. // 负责人
  109. if(!empty($params['auth_id'])){
  110. if (is_array($params['auth_id'])) {
  111. $whereSql .= " AND auth_id IN(" . implode(',', $params['auth_id']) . ")";
  112. } else {
  113. $whereSql .= " AND auth_id = {$params['auth_id']}";
  114. }
  115. }
  116. // 注册日期
  117. if(!empty($params['reg_date'])??null){
  118. $whereSql .= " AND tdate BETWEEN '{$params['reg_date'][0]}' AND '{$params['reg_date'][1]}'";
  119. }
  120. return $whereSql;
  121. }
  122. }