|  | @@ -203,11 +203,11 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          if (StringUtils.isNotBlank(dto.getUserName())) {
 | 
	
		
			
				|  |  |              //玩家账号
 | 
	
		
			
				|  |  | -            cri.where().andEquals("user_name", dto.getUserName());
 | 
	
		
			
				|  |  | +            cri.where().andEquals("username", dto.getUserName());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          if (StringUtils.isNotBlank(dto.getNickname())) {
 | 
	
		
			
				|  |  |              //玩家昵称
 | 
	
		
			
				|  |  | -            cri.where().andLike("nickName", dto.getNickname());
 | 
	
		
			
				|  |  | +            cri.where().andLike("nickname", dto.getNickname());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          if (StringUtils.isNotBlank(dto.getRegIp())) {
 | 
	
		
			
				|  |  |              //玩家注册IP
 | 
	
	
		
			
				|  | @@ -220,6 +220,9 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
 | 
	
		
			
				|  |  |          if (StringUtils.isNotBlank(dto.getRoleName())) {
 | 
	
		
			
				|  |  |              cri.where().andLike("role_name", dto.getRoleName());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotBlank(dto.getRoleId())) {
 | 
	
		
			
				|  |  | +            cri.where().andEquals("role_id", dto.getRoleId());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |          if (dto.getCpId() != null) {
 | 
	
		
			
				|  |  |              cri.where().andEquals("cp_id", dto.getCpId());
 | 
	
		
			
				|  |  |          }
 | 
	
	
		
			
				|  | @@ -228,7 +231,7 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          if (dto.getGameCategoryId() != null) {
 | 
	
		
			
				|  |  |              //游戏应用类型
 | 
	
		
			
				|  |  | -            cri.where().andEquals("game_classify", dto.getGameCategoryId());
 | 
	
		
			
				|  |  | +            cri.where().andEquals("game_category_id", dto.getGameCategoryId());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          if (StringUtils.isNotBlank(dto.getAccountId())) {
 | 
	
		
			
				|  |  |              //推广账号ID
 | 
	
	
		
			
				|  | @@ -254,7 +257,7 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
 | 
	
		
			
				|  |  |              cri.where().andNotEquals("recharge_money", 0);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          if (dto.getVipLevel() != null) {
 | 
	
		
			
				|  |  | -            cri.where().andEquals("vip_level", dto.getVipLevel());
 | 
	
		
			
				|  |  | +            cri.where().andEquals("role_vip_level", dto.getVipLevel());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          if (dto.getRoleLevelMin() != null) {
 | 
	
		
			
				|  |  |              //玩家最小等级
 | 
	
	
		
			
				|  | @@ -266,7 +269,7 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          if (dto.getBeginDate() != null && dto.getEndDate() != null) {
 | 
	
		
			
				|  |  |              //角色创建时间
 | 
	
		
			
				|  |  | -            cri.where().andBetween("DATE(role_create_time)", dto.getBeginDate(), dto.getEndDate());
 | 
	
		
			
				|  |  | +            cri.where().andBetween("DATE(create_time)", dto.getBeginDate(), dto.getEndDate());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          if (dto.getRechargeBeginDate() != null && dto.getRechargeEndDate() != null) {
 | 
	
		
			
				|  |  |              //最近充值时间
 | 
	
	
		
			
				|  | @@ -274,15 +277,18 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          if (dto.getRegTimeBeginDate() != null && dto.getRegTimeEndDate() != null) {
 | 
	
		
			
				|  |  |              //玩家注册时间
 | 
	
		
			
				|  |  | -            cri.where().andBetween("DATE(user_reg_time)", dto.getRegTimeBeginDate(), dto.getRegTimeEndDate());
 | 
	
		
			
				|  |  | +            cri.where().andBetween("DATE(reg_time)", dto.getRegTimeBeginDate(), dto.getRegTimeEndDate());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          if (dto.getRegPayIntervalTimeMin() != null) {
 | 
	
		
			
				|  |  |              //充值到注册的最小间隔时间(分)
 | 
	
		
			
				|  |  | -            cri.where().andGTE("TIMESTAMPDIFF(MINUTE, user_reg_time, last_recharge_time)", dto.getRegPayIntervalTimeMin());
 | 
	
		
			
				|  |  | +            cri.where().andGTE("TIMESTAMPDIFF(MINUTE, reg_time, last_recharge_time)", dto.getRegPayIntervalTimeMin());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          if (dto.getRegPayIntervalTimeMax() != null) {
 | 
	
		
			
				|  |  |              //充值到注册的最大间隔时间(分)
 | 
	
		
			
				|  |  | -            cri.where().andLTE("TIMESTAMPDIFF(MINUTE, user_reg_time, last_recharge_time)", dto.getRegPayIntervalTimeMax());
 | 
	
		
			
				|  |  | +            cri.where().andLTE("TIMESTAMPDIFF(MINUTE, reg_time, last_recharge_time)", dto.getRegPayIntervalTimeMax());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
 | 
	
		
			
				|  |  | +            cri.where().andEquals("source_system", dto.getSourceSystem());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          //pager对象
 | 
	
		
			
				|  |  |          Pager pager = dao.createPager(dto.getPageNum(), dto.getPageSize());
 | 
	
	
		
			
				|  | @@ -298,7 +304,7 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          if (StringUtils.isBlank(dto.getSortFiled())) {
 | 
	
		
			
				|  |  |              //默认游戏角色创建时间排序
 | 
	
		
			
				|  |  | -            cri.getOrderBy().orderBy("role_create_time", dto.getSortType());
 | 
	
		
			
				|  |  | +            cri.getOrderBy().orderBy("create_time", dto.getSortType());
 | 
	
		
			
				|  |  |          } else {
 | 
	
		
			
				|  |  |              cri.getOrderBy().orderBy(dto.getSortFiled(), dto.getSortFiled());
 | 
	
		
			
				|  |  |          }
 | 
	
	
		
			
				|  | @@ -309,7 +315,13 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
 | 
	
		
			
				|  |  |          sql.setPager(pager);
 | 
	
		
			
				|  |  |          //执行sql 得到结果
 | 
	
		
			
				|  |  |          dao.execute(sql);
 | 
	
		
			
				|  |  | -        List<PlayerRoleDataVO> list = sql.getList(PlayerRoleDataVO.class);
 | 
	
		
			
				|  |  | +        List<PlayerRoleDataVO> list = sql.getList(PlayerRoleDataVO.class).stream().map(vo -> {
 | 
	
		
			
				|  |  | +            String gameClassify = GameCategoryEnum.getNameByCategory(vo.getGameCategoryId());
 | 
	
		
			
				|  |  | +            if (StringUtils.isNotBlank(gameClassify)) {
 | 
	
		
			
				|  |  | +                vo.setGameCategoryName(gameClassify);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        return vo;
 | 
	
		
			
				|  |  | +        }).collect(Collectors.toList());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          return new Page<>(list, pager);
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -524,41 +536,42 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
 | 
	
		
			
				|  |  |                  	*
 | 
	
		
			
				|  |  |                  FROM (
 | 
	
		
			
				|  |  |                  	SELECT
 | 
	
		
			
				|  |  | +                		a.id, -- 主键id
 | 
	
		
			
				|  |  |                  		a.source_system , -- SDK来源
 | 
	
		
			
				|  |  |                  		a.user_id , -- 玩家ID
 | 
	
		
			
				|  |  |                  		b.username , -- 玩家账号
 | 
	
		
			
				|  |  |                  		b.nickname , -- 玩家昵称
 | 
	
		
			
				|  |  | -                		b.ip , -- 玩家注册IP
 | 
	
		
			
				|  |  | -                		b.create_time , -- 玩家注册时间
 | 
	
		
			
				|  |  | +                		b.ip as reg_ip, -- 玩家注册IP
 | 
	
		
			
				|  |  | +                		b.create_time as reg_time, -- 玩家注册时间
 | 
	
		
			
				|  |  |                  		b.agent_id , -- 注册渠道ID
 | 
	
		
			
				|  |  |                  		IF(b.agent_id = 0, '自然量', c.agent_name) as agent_name , -- 注册渠道名
 | 
	
		
			
				|  |  |                  		c.pitcher_id , -- 投手ID
 | 
	
		
			
				|  |  | -                		d.zx_pitcher_name , -- 投手名
 | 
	
		
			
				|  |  | +                		d.zx_pitcher_name as pitcher_name, -- 投手名
 | 
	
		
			
				|  |  |                  		c.account_id , -- 推广账号ID
 | 
	
		
			
				|  |  |                  		c.account_name , -- 推广账号名
 | 
	
		
			
				|  |  |                  		c.account_type , -- 推广账号类型
 | 
	
		
			
				|  |  |                  		a.game_id , -- 角色注册游戏ID
 | 
	
		
			
				|  |  |                  		e.game_name , -- 游戏名
 | 
	
		
			
				|  |  | +                		e.classify as game_category_id, -- 游戏应用类型
 | 
	
		
			
				|  |  |                  		e.cp_id , -- cpID
 | 
	
		
			
				|  |  |                  		f.cp_name , -- cp名字
 | 
	
		
			
				|  |  | -                		e.classify , -- 游戏应用类型
 | 
	
		
			
				|  |  |                  		h.server_id , -- 角色注册区服ID
 | 
	
		
			
				|  |  |                  		h.server_name , -- 区服名
 | 
	
		
			
				|  |  |                  		h.origin_server_id , -- 原始区服ID
 | 
	
		
			
				|  |  | -                		h.origin_server_name , -- 原始区服名
 | 
	
		
			
				|  |  | +                		h.origin_server_name as source_server_name, -- 原始区服名
 | 
	
		
			
				|  |  |                  		a.role_id , -- 角色ID
 | 
	
		
			
				|  |  |                  		a.role_name , -- 角色名
 | 
	
		
			
				|  |  |                  		a.role_level , -- 角色等级
 | 
	
		
			
				|  |  | -                		a.combat_num , -- 角色攻击力
 | 
	
		
			
				|  |  | -                		a.role_vip , -- 角色vip
 | 
	
		
			
				|  |  | +                		a.combat_num as role_power, -- 角色攻击力
 | 
	
		
			
				|  |  | +                		a.role_vip as role_vip_level, -- 角色vip
 | 
	
		
			
				|  |  |                  		a.os , -- 角色操作系统
 | 
	
		
			
				|  |  | -                		a.create_time, -- 角色创建时间
 | 
	
		
			
				|  |  | +                		a.create_time as create_time, -- 角色创建时间
 | 
	
		
			
				|  |  |                  		a.update_time, -- 角色最近更新时间
 | 
	
		
			
				|  |  | -                		g.pay_time, -- 角色最近充值时间
 | 
	
		
			
				|  |  | -                		TIMESTAMPDIFF(SECOND, b.create_time, g.pay_time) as pay_until_reg, -- 最近充值距注册时间差(秒)
 | 
	
		
			
				|  |  | -                		i.active_time, -- 玩家最近登陆时间
 | 
	
		
			
				|  |  | -                		j.amount , -- 角色充值金额
 | 
	
		
			
				|  |  | -                		j.amount_count -- 角色充值次数
 | 
	
		
			
				|  |  | +                		g.pay_time as last_recharge_time, -- 角色最近充值时间
 | 
	
		
			
				|  |  | +                		TIMESTAMPDIFF(SECOND, b.create_time, g.pay_time) as reg_pay_time_diff, -- 最近充值距注册时间差(秒)
 | 
	
		
			
				|  |  | +                		i.active_time as last_login_time, -- 玩家最近登陆时间
 | 
	
		
			
				|  |  | +                		j.amount as recharge_money, -- 角色充值金额
 | 
	
		
			
				|  |  | +                		j.amount_count as recharge_count -- 角色充值次数
 | 
	
		
			
				|  |  |                  	FROM dm_game_order.t_game_user_role a
 | 
	
		
			
				|  |  |                  	LEFT JOIN dm_game_order.t_game_user b on a.source_system = b.source_system AND a.user_id = b.id
 | 
	
		
			
				|  |  |                  	LEFT JOIN dm_game_order.t_pitcher_agent c on b.source_system = c.source_system AND b.agent_id = c.id
 | 
	
	
		
			
				|  | @@ -596,7 +609,16 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
 | 
	
		
			
				|  |  |                  		)a LEFT JOIN dm_game_order.t_game_server_merge b
 | 
	
		
			
				|  |  |                  		on a.source_system = b.source_system AND a.super_game_id = b.game_id AND a.server_id = b.server_id
 | 
	
		
			
				|  |  |                  	) h on a.source_system = h.source_system AND a.server_id = h.server_id AND a.game_id = h.game_id
 | 
	
		
			
				|  |  | -                	LEFT JOIN game_dw.dw_active_log i on a.source_system = i.source_system AND a.user_id = i.user_id AND a.game_id = i.game_id
 | 
	
		
			
				|  |  | +                	LEFT JOIN (
 | 
	
		
			
				|  |  | +                		SELECT
 | 
	
		
			
				|  |  | +                			source_system ,
 | 
	
		
			
				|  |  | +                			user_id,
 | 
	
		
			
				|  |  | +                			game_id,
 | 
	
		
			
				|  |  | +                			active_time,
 | 
	
		
			
				|  |  | +                			role_id ,
 | 
	
		
			
				|  |  | +                			ROW_NUMBER()over(partition by role_id , source_system order by active_time desc) as num
 | 
	
		
			
				|  |  | +                		FROM game_dw.dw_active_log
 | 
	
		
			
				|  |  | +                	) i on a.source_system = i.source_system AND a.role_id = i.role_id AND a.user_id = i.user_id AND a.game_id = i.game_id AND i.num = 1
 | 
	
		
			
				|  |  |                  	LEFT JOIN (
 | 
	
		
			
				|  |  |                  		SELECT
 | 
	
		
			
				|  |  |                  			-- 累计充值金额、累计充值次数
 | 
	
	
		
			
				|  | @@ -618,6 +640,109 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
 | 
	
		
			
				|  |  |       */
 | 
	
		
			
				|  |  |      private String getUserRoleDataListCountSql() {
 | 
	
		
			
				|  |  |          return """
 | 
	
		
			
				|  |  | +                SELECT
 | 
	
		
			
				|  |  | +                    COUNT(1)
 | 
	
		
			
				|  |  | +                FROM (
 | 
	
		
			
				|  |  | +                    SELECT
 | 
	
		
			
				|  |  | +                    	*
 | 
	
		
			
				|  |  | +                    FROM (
 | 
	
		
			
				|  |  | +                    	SELECT
 | 
	
		
			
				|  |  | +                    		a.id, -- 主键id
 | 
	
		
			
				|  |  | +                    		a.source_system , -- SDK来源
 | 
	
		
			
				|  |  | +                    		a.user_id , -- 玩家ID
 | 
	
		
			
				|  |  | +                    		b.username , -- 玩家账号
 | 
	
		
			
				|  |  | +                    		b.nickname , -- 玩家昵称
 | 
	
		
			
				|  |  | +                    		b.ip as reg_ip, -- 玩家注册IP
 | 
	
		
			
				|  |  | +                    		b.create_time as reg_time, -- 玩家注册时间
 | 
	
		
			
				|  |  | +                    		b.agent_id , -- 注册渠道ID
 | 
	
		
			
				|  |  | +                    		IF(b.agent_id = 0, '自然量', c.agent_name) as agent_name , -- 注册渠道名
 | 
	
		
			
				|  |  | +                    		c.pitcher_id , -- 投手ID
 | 
	
		
			
				|  |  | +                    		d.zx_pitcher_name as pitcher_name, -- 投手名
 | 
	
		
			
				|  |  | +                    		c.account_id , -- 推广账号ID
 | 
	
		
			
				|  |  | +                    		c.account_name , -- 推广账号名
 | 
	
		
			
				|  |  | +                    		c.account_type , -- 推广账号类型
 | 
	
		
			
				|  |  | +                    		a.game_id , -- 角色注册游戏ID
 | 
	
		
			
				|  |  | +                    		e.game_name , -- 游戏名
 | 
	
		
			
				|  |  | +                    		e.classify as game_category_id, -- 游戏应用类型
 | 
	
		
			
				|  |  | +                    		e.cp_id , -- cpID
 | 
	
		
			
				|  |  | +                    		f.cp_name , -- cp名字
 | 
	
		
			
				|  |  | +                    		h.server_id , -- 角色注册区服ID
 | 
	
		
			
				|  |  | +                    		h.server_name , -- 区服名
 | 
	
		
			
				|  |  | +                    		h.origin_server_id , -- 原始区服ID
 | 
	
		
			
				|  |  | +                    		h.origin_server_name as source_server_name, -- 原始区服名
 | 
	
		
			
				|  |  | +                    		a.role_id , -- 角色ID
 | 
	
		
			
				|  |  | +                    		a.role_name , -- 角色名
 | 
	
		
			
				|  |  | +                    		a.role_level , -- 角色等级
 | 
	
		
			
				|  |  | +                    		a.combat_num as role_power, -- 角色攻击力
 | 
	
		
			
				|  |  | +                    		a.role_vip as role_vip_level, -- 角色vip
 | 
	
		
			
				|  |  | +                    		a.os , -- 角色操作系统
 | 
	
		
			
				|  |  | +                    		a.create_time as create_time, -- 角色创建时间
 | 
	
		
			
				|  |  | +                    		a.update_time, -- 角色最近更新时间
 | 
	
		
			
				|  |  | +                    		g.pay_time as last_recharge_time, -- 角色最近充值时间
 | 
	
		
			
				|  |  | +                    		TIMESTAMPDIFF(SECOND, b.create_time, g.pay_time) as reg_pay_time_diff, -- 最近充值距注册时间差(秒)
 | 
	
		
			
				|  |  | +                    		i.active_time as last_login_time, -- 玩家最近登陆时间
 | 
	
		
			
				|  |  | +                    		j.amount as recharge_money, -- 角色充值金额
 | 
	
		
			
				|  |  | +                    		j.amount_count as recharge_count -- 角色充值次数
 | 
	
		
			
				|  |  | +                    	FROM dm_game_order.t_game_user_role a
 | 
	
		
			
				|  |  | +                    	LEFT JOIN dm_game_order.t_game_user b on a.source_system = b.source_system AND a.user_id = b.id
 | 
	
		
			
				|  |  | +                    	LEFT JOIN dm_game_order.t_pitcher_agent c on b.source_system = c.source_system AND b.agent_id = c.id
 | 
	
		
			
				|  |  | +                    	LEFT JOIN dm_game_order.t_pitcher_map d on c.source_system = d.source_system AND c.pitcher_id = d.zx_pitcher_id
 | 
	
		
			
				|  |  | +                    	LEFT JOIN dm_game_order.t_game e on a.source_system = e.source_system AND a.game_id = e.id
 | 
	
		
			
				|  |  | +                    	LEFT JOIN dm_game_order.t_cp f on e.source_system = f.source_system AND e.cp_id = f.id
 | 
	
		
			
				|  |  | +                    	LEFT JOIN (
 | 
	
		
			
				|  |  | +                    		SELECT
 | 
	
		
			
				|  |  | +                    			-- 角色最近充值时间、角色最近充值金额
 | 
	
		
			
				|  |  | +                    			source_system,
 | 
	
		
			
				|  |  | +                    			role_id,
 | 
	
		
			
				|  |  | +                    			real_amount,
 | 
	
		
			
				|  |  | +                    			pay_time,
 | 
	
		
			
				|  |  | +                    			ROW_NUMBER()over(partition by role_id , source_system order by pay_time desc) as num
 | 
	
		
			
				|  |  | +                    		FROM dm_game_order.t_game_order
 | 
	
		
			
				|  |  | +                    		WHERE status =2
 | 
	
		
			
				|  |  | +                    	) g on a.source_system = g.source_system AND a.role_id = g.role_id AND g.num = 1
 | 
	
		
			
				|  |  | +                    	LEFT JOIN (
 | 
	
		
			
				|  |  | +                    		SELECT
 | 
	
		
			
				|  |  | +                    			a.source_system,
 | 
	
		
			
				|  |  | +                    			a.game_id, -- 子游戏ID
 | 
	
		
			
				|  |  | +                    			a.server_id, -- 区服ID
 | 
	
		
			
				|  |  | +                    			a.server_name, -- 区服名(冠名后)
 | 
	
		
			
				|  |  | +                    			ifnull(b.server_id,a.server_id) as origin_server_id, -- 原始区服ID
 | 
	
		
			
				|  |  | +                    			ifnull(b.server_name,a.server_name) as origin_server_name -- 原始区服名
 | 
	
		
			
				|  |  | +                    		from (
 | 
	
		
			
				|  |  | +                    			SELECT
 | 
	
		
			
				|  |  | +                    				a.game_id ,
 | 
	
		
			
				|  |  | +                    				a.server_id ,
 | 
	
		
			
				|  |  | +                    				a.server_name ,
 | 
	
		
			
				|  |  | +                    				b.super_game_id,
 | 
	
		
			
				|  |  | +                    				a.source_system
 | 
	
		
			
				|  |  | +                    			FROM dm_game_order.t_game_server a
 | 
	
		
			
				|  |  | +                    			LEFT JOIN dm_game_order.t_game b on a.source_system = b.source_system AND a.game_id = b.id
 | 
	
		
			
				|  |  | +                    		)a LEFT JOIN dm_game_order.t_game_server_merge b
 | 
	
		
			
				|  |  | +                    		on a.source_system = b.source_system AND a.super_game_id = b.game_id AND a.server_id = b.server_id
 | 
	
		
			
				|  |  | +                    	) h on a.source_system = h.source_system AND a.server_id = h.server_id AND a.game_id = h.game_id
 | 
	
		
			
				|  |  | +                    	LEFT JOIN (
 | 
	
		
			
				|  |  | +                    		SELECT
 | 
	
		
			
				|  |  | +                    			source_system ,
 | 
	
		
			
				|  |  | +                    			user_id,
 | 
	
		
			
				|  |  | +                    			game_id,
 | 
	
		
			
				|  |  | +                    			active_time,
 | 
	
		
			
				|  |  | +                    			role_id ,
 | 
	
		
			
				|  |  | +                    			ROW_NUMBER()over(partition by role_id , source_system order by active_time desc) as num
 | 
	
		
			
				|  |  | +                    		FROM game_dw.dw_active_log
 | 
	
		
			
				|  |  | +                    	) i on a.source_system = i.source_system AND a.role_id = i.role_id AND a.user_id = i.user_id AND a.game_id = i.game_id AND i.num = 1
 | 
	
		
			
				|  |  | +                    	LEFT JOIN (
 | 
	
		
			
				|  |  | +                    		SELECT
 | 
	
		
			
				|  |  | +                    			-- 累计充值金额、累计充值次数
 | 
	
		
			
				|  |  | +                    	    	role_id,
 | 
	
		
			
				|  |  | +                    	    	source_system,
 | 
	
		
			
				|  |  | +                    	    	SUM(real_amount) as amount ,
 | 
	
		
			
				|  |  | +                    	    	COUNT(user_id) as amount_count
 | 
	
		
			
				|  |  | +                    		FROM dm_game_order.t_game_order
 | 
	
		
			
				|  |  | +                    		WHERE status =2
 | 
	
		
			
				|  |  | +                    		GROUP BY role_id , source_system
 | 
	
		
			
				|  |  | +                    	) j on a.source_system = j.source_system AND a.role_id = j.role_id
 | 
	
		
			
				|  |  | +                    ) a
 | 
	
		
			
				|  |  | +                ) a
 | 
	
		
			
				|  |  |                  """;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 |