searchByAuth($where); $where = $this->getCommonWhereRaw($params); if (!empty($params['pay_channel_id'])) { $where .= " AND pay_channel_id IN (" . implode(',', $params['pay_channel_id']) . ")"; } $channelIncomeQuery = Db::connect('db_game_log')->table('sdk_order_success'); $channelIncomeQuery->whereRaw($where); $channelIncomeQuery->field('game_id,auth_id,pay_channel_id,sum(money) as money'); $channelIncomeQuery->group('pay_channel_id'); $columns = [ [ 'title' => '游戏ID', 'dataIndex' => 'game_id', 'width' => 80, 'align' => 'center', ], [ 'title' => '游戏名称', 'dataIndex' => 'game_name', 'width' => 150, 'align' => 'center', ], [ 'title' => '负责人', 'dataIndex' => 'auth_name', 'width' => 100, 'align' => 'center', ], [ 'title' => '合计', 'dataIndex' => 'money', 'width' => 100, 'align' => 'center', ], ]; $payChannelList = Db::connect('db_center')->table('pay_channel') ->where('status', 1); if (!empty($params['pay_channel_id'])) { $payChannelList = $payChannelList->where('id', 'in', $params['pay_channel_id']); } $payChannelList = $payChannelList->select()->toArray(); foreach ($payChannelList as $payChannel) { $title = $payChannel['name']; $payChannelId = $payChannel['id']; $columns[] = [ 'title' => $title, 'dataIndex' => 'pay_channel_id_' . $payChannelId, 'width' => 140, 'align' => 'center', ]; } $data = $channelIncomeQuery->select()->toArray(); $data = $this->trandformListColumn($data, ['game', 'pay_channel', 'auth']); foreach ($data as $key => $value) { $data[$key]['pay_channel_id_' . $value['pay_channel_id']] = $value['money']; } // 按game_id分组合并数据 $mergedData = []; foreach ($data as $item) { $gameId = $item['game_id']; if (!isset($mergedData[$gameId])) { $mergedData[$gameId] = [ 'game_id' => $gameId, 'game_name' => $item['game_name'], 'auth_id' => $item['auth_id'], 'auth_name' => $item['auth_name'], 'money' => 0 ]; // 初始化所有pay_channel_id金额为0 foreach ($payChannelList as $channel) { $mergedData[$gameId]['pay_channel_id_' . $channel['id']] = 0; } } // 累加合计金额 $mergedData[$gameId]['money'] += floatval($item['money']); // 设置对应渠道金额 $channelKey = 'pay_channel_id_' . $item['pay_channel_id']; $mergedData[$gameId][$channelKey] = $item[$channelKey]; } // 添加合计行 $totalRow = [ 'game_id' => '合计', 'game_name' => '', 'money' => 0 ]; // 初始化所有渠道金额为0 foreach ($payChannelList as $channel) { $totalRow['pay_channel_id_' . $channel['id']] = 0; } // 计算合计数据 foreach ($mergedData as $row) { $totalRow['money'] += floatval($row['money']); foreach ($payChannelList as $channel) { $channelKey = 'pay_channel_id_' . $channel['id']; $totalRow[$channelKey] += floatval($row[$channelKey]); } } return [ 'columns' => $columns, 'data' => array_values($mergedData), 'totalRow' => $totalRow ]; } }