getAllByCondition('name,id', ['cooperation_status' => 1], "id desc", "all"); $gameList = []; foreach ($tmpGameList as $game) { $gameList[$game['id']] = $game; } $channelList = (new ComplexChannelModel())->getAllByCondition('id,name', ['flag' => 4], 'name asc'); $channelByIdList = []; foreach ($channelList as $channel) { $channelByIdList[$channel['id']] = $channel; } // 设置默认时间范围(昨天) $defaultDate = date('Y-m-d', strtotime('-1 day')); $defaultStart = $defaultDate; $defaultEnd = $defaultDate; $this->assign('gameArr', $tmpGameList); $this->assign('game_list', $gameList); $this->assign('channel_list', $channelByIdList); $this->assign('default_start', $defaultStart); $this->assign('default_end', $defaultEnd); list($list, $total) = $this->getSummaryList(request()->param()); // 参考Complex.php的方式处理分页数据 // 确保 $list 是分页对象,如果不是则获取总数 $listTotal = is_object($list) && method_exists($list, 'total') ? $list->total() : (is_array($list) ? count($list) : 0); $listData = is_object($list) && method_exists($list, 'toArray') ? $list->toArray()['data'] : (is_array($list) ? $list : []); $pageHtml = is_object($list) && method_exists($list, 'render') ? $list->render() : ''; $this->assign('total', $total); $this->assign('list', $listData); $this->assign('listTotal', $listTotal); // 传递总数,供视图使用 $this->assign('page', $pageHtml); return $this->fetch(); } /** * 获取汇总列表数据 */ private function getSummaryList($data) { $where = []; $isDateRange = false; $startDate = ''; $endDate = ''; // 游戏筛选(单选) if (isset($data['game_id']) && $data['game_id']) { $where['game_id'] = $data['game_id']; } // 渠道筛选 if (isset($data['complex_id']) && $data['complex_id'] != '') { $where['complex_id'] = $data['complex_id']; } // 时间筛选 if (isset($data['start']) && isset($data['end']) && $data['start'] != '' && $data['end'] != '') { $where['day'] = [ ['>=', $data['start']], ['<=', $data['end']], ]; } elseif (isset($data['start']) && $data['start'] != '') { $where['day'] = ['>=', $data['start']]; } elseif (isset($data['end']) && $data['end'] != '') { $where['day'] = ['<=', $data['end']]; } else { // 默认昨天 $defaultDate = date('Y-m-d', strtotime('-1 day')); $where['day'] = [ ['>=', $defaultDate], ['<=', $defaultDate], ]; if (!isset($data['start'])) { $data['start'] = $defaultDate; } if (!isset($data['end'])) { $data['end'] = $defaultDate; } } $param = input('get.'); // 查询列表(原有逻辑) $list = Db::table('cy_complex_summary_game_day') ->where($where) ->order('day,reg_num desc') ->group('day, game_id, complex_id') ->paginate(20, false, ['query' => $param])->each(function($item){ $item['arpu'] = round($item['arpu']/100, 2); $item['arppu'] = round($item['arppu']/100, 2); return $item; }); // 计算汇总 $total = Db::table('cy_complex_summary_game_day') ->where($where) ->field('count(*) as total') ->find(); return [$list, $total ?: ['total' => 0]]; } /** * 导出数据 */ public function export() { if (request()->isPost()) { $data = input('post.'); $where = []; $startDate = ''; $endDate = ''; // 游戏筛选(单选) if (isset($data['game_id']) && $data['game_id']) { $where['game_id'] = $data['game_id']; } // 渠道筛选 if (isset($data['complex_id']) && $data['complex_id'] != '') { $where['complex_id'] = $data['complex_id']; } // 时间筛选 if (isset($data['start']) && isset($data['end']) && $data['start'] != '' && $data['end'] != '') { $startDate = $data['start']; $endDate = $data['end']; $where['day'] = [ ['>=', $data['start']], ['<=', $data['end']], ]; } elseif (isset($data['start']) && $data['start'] != '') { $where['day'] = ['>=', $data['start']]; } elseif (isset($data['end']) && $data['end'] != '') { $where['day'] = ['<=', $data['end']]; } else { // 默认昨天 $defaultDate = date('Y-m-d', strtotime('-1 day')); $startDate = $defaultDate; $endDate = $defaultDate; $where['day'] = [ ['>=', $defaultDate], ['<=', $defaultDate], ]; } // 构建查询SQL $query = Db::table('cy_complex_summary_game_day'); $sql = $query ->where($where) ->field('*') ->order('day,reg_num desc') ->fetchSql(true) ->select(); // 扩展参数,用于Go脚本处理 $extend = [ 'is_date_range' => false, 'start_date' => $startDate, 'end_date' => $endDate, 'task_type' => 'complexSummaryGameDayExport', 'file_name' => "渠道-游戏单日报表_%s.csv", 'headers' => [ ['field' => 'day', 'title' => '日期'], ['field' => 'game_id', 'title' => '游戏名称'], ['field' => 'complex_id', 'title' => '渠道名称'], ['field' => 'reg_num', 'title' => '新增玩家'], ['field' => 'active_user_num','title' => '活跃玩家'], ['field' => 'pay_user_num', 'title' => '付费人数'], ['field' => 'reg_pay_num', 'title' => '新增付费人数'], ['field' => 'pay_money', 'title' => '充值金额'], ['field' => 'reg_pay_money', 'title' => '新增充值金额'], ['field' => 'arpu', 'title' => 'ARPU'], ['field' => 'arppu', 'title' => 'ARPPU'], ], // 字段处理 'handle_fields' => [ [ 'field' => 'game_id', 'handler' => 'mapGameName', 'target_field' => 'game_name', 'extra' => [ 'table_name' => 'cy_game', 'field_key' => 'name', 'where_key' => 'id', ], ], [ 'field' => 'complex_id', 'handler' => 'mapComplexName', 'target_field' => 'complex_name', 'extra' => [ 'table_name' => 'nw_complex_channel', 'field_key' => 'name', 'where_key' => 'id', ], ], ], ]; if ((new MakeReportGo())->addTask('admin.complexSummary', $sql, session_id(), $extend)) { $this->jsonResult('', 1, '报表生成的任务已经提交, 报表生成完成后,会及时通知您,请耐心稍等'); } else { $this->jsonResult('', 0, '报表生成任务不可重复提交,如遇到无法导出情况,建议修改查询条件解除当前状态,提交重新生成报表任务!'); } } } }