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 ]; } /** * 广告账号对账 */ public function getAdCost($params) { $bmIds = $params['bm_id']; $advertiserId = $params['advertiser_id']; $advertiserName = $params['advertiser_name']; $date = $params['date']; $advertiserIds = []; if(!empty($bmIds)){ $advertiserIds = Db::connect('db_advert') ->table('ad_advertiser_list') ->where('bmid', 'in', implode(',', $bmIds)) ->where('status', 1) ->select()->toArray(); $advertiserIds = array_column($advertiserIds, 'advertiser_id'); $advertiserId = implode(',', $advertiserIds); } echo Db::connect('db_advert') ->table('media_cost') ->field('media_cost.advertiser_id as advertiser_id, SUM(money) as money, SUM(ori_money) as ori_money, ad_advertiser_list.advertiser_name as advertiser_name') ->where('media_cost.advertiser_id', 'in', $advertiserId) ->whereTime('tdate', 'between', $date) ->leftJoin('ad_advertiser_list', 'media_cost.advertiser_id = ad_advertiser_list.advertiser_id') ->group('advertiser_name, advertiser_id')->buildSql(); $query = Db::connect('db_advert') ->table('media_cost') ->field('media_cost.advertiser_id as advertiser_id, SUM(money) as money, SUM(ori_money) as ori_money, ad_advertiser_list.advertiser_name as advertiser_name') ->whereTime('tdate', 'between', $date) ->leftJoin('ad_advertiser_list', 'media_cost.advertiser_id = ad_advertiser_list.advertiser_id'); if(!empty($advertiserId)){ $query->where('media_cost.advertiser_id', 'in', $advertiserId); } // 根据账号ID查询消耗 $adCost = $query->group('advertiser_name, advertiser_id')->select()->toArray(); $ori_money = 0; $money = 0; foreach($adCost as &$item){ $item['fandain'] = getRound($item['ori_money'], $item['money'], 2); $ori_money += $item['ori_money']; $money += $item['money']; } $totalRow = [ 'advertiser_name' => '合计', 'ori_money' => $ori_money, 'money' => $money, ]; return [ 'data' => $adCost, 'totalRow' => $totalRow ]; } }