|  | @@ -18,6 +18,7 @@ import lombok.NoArgsConstructor;
 | 
	
		
			
				|  |  |  import lombok.extern.slf4j.Slf4j;
 | 
	
		
			
				|  |  |  import org.apache.commons.collections4.CollectionUtils;
 | 
	
		
			
				|  |  |  import org.apache.commons.lang3.ArrayUtils;
 | 
	
		
			
				|  |  | +import org.apache.commons.lang3.ObjectUtils;
 | 
	
		
			
				|  |  |  import org.apache.commons.lang3.StringUtils;
 | 
	
		
			
				|  |  |  import org.nutz.dao.Cnd;
 | 
	
		
			
				|  |  |  import org.nutz.dao.Dao;
 | 
	
	
		
			
				|  | @@ -287,11 +288,53 @@ public class GameDataServiceImpl implements IGameDataService {
 | 
	
		
			
				|  |  |          dao.execute(sqlCount);
 | 
	
		
			
				|  |  |          pager.setRecordCount(sqlCount.getInt());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        //查询出每个游戏的注册查询时间内,注册当天且充值的所有用户id
 | 
	
		
			
				|  |  | +        //只查询Day1的数据
 | 
	
		
			
				|  |  | +        //不选游戏查询的结果 --> (gameId/日期, userId)
 | 
	
		
			
				|  |  | +        //选游戏查询的结果 --> (日期, userId)
 | 
	
		
			
				|  |  | +        Map<String, String> gameDateUsersIdMap = findUsersIdForGameData(dto);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          List<GameDataDayVO> gameDataDayVOList = list.stream().map(vo -> {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            Long[] usersID = ArrayUtils.EMPTY_LONG_OBJECT_ARRAY;
 | 
	
		
			
				|  |  | +            //默认查询的数据-不选择游戏
 | 
	
		
			
				|  |  | +            if (CollectionUtils.isEmpty(dto.getGameId())) {
 | 
	
		
			
				|  |  | +                //将gameId和需要查询的注册时间拼接
 | 
	
		
			
				|  |  | +                String gameIdDate = vo.getGameId() + "/" + vo.getCostDate();
 | 
	
		
			
				|  |  | +                //取出所有usersId
 | 
	
		
			
				|  |  | +                if (gameDateUsersIdMap.containsKey(gameIdDate)) {
 | 
	
		
			
				|  |  | +                    //string[] -> Long[]
 | 
	
		
			
				|  |  | +                    usersID = Arrays.stream(gameDateUsersIdMap.get(gameIdDate)
 | 
	
		
			
				|  |  | +                                    .split("/"))
 | 
	
		
			
				|  |  | +                            .map(Long::parseLong)
 | 
	
		
			
				|  |  | +                            .toArray(Long[]::new);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            } else {
 | 
	
		
			
				|  |  | +                //取出所有usersId
 | 
	
		
			
				|  |  | +                if (gameDateUsersIdMap.containsKey(vo.getCostDate().toString())) {
 | 
	
		
			
				|  |  | +                    //string[] -> Long[]
 | 
	
		
			
				|  |  | +                    usersID = Arrays.stream(gameDateUsersIdMap.get(vo.getCostDate().toString())
 | 
	
		
			
				|  |  | +                                    .split("/"))
 | 
	
		
			
				|  |  | +                            .map(Long::parseLong)
 | 
	
		
			
				|  |  | +                            .toArray(Long[]::new);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  |              formatDayNGroupByDt(vo);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            FirstNewUserAgainTrendVO againTrendVO = FirstNewUserAgainTrendVO.builder()
 | 
	
		
			
				|  |  | +                    .gameDimension(dto.getGameDimension())
 | 
	
		
			
				|  |  | +                    .sourceSystem(dto.getSourceSystem())
 | 
	
		
			
				|  |  | +                    .timeType("da1")
 | 
	
		
			
				|  |  | +                    .rechargeCount(vo.getAmountD1Trend().getRechargeUserCount())
 | 
	
		
			
				|  |  | +                    .usersId(usersID)
 | 
	
		
			
				|  |  | +                    .build();
 | 
	
		
			
				|  |  | +            vo.setUserDetails(againTrendVO);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |              return vo;
 | 
	
		
			
				|  |  |          }).collect(Collectors.toList());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        //添加数据
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          //返回list结果 封装到page对象里
 | 
	
		
			
				|  |  |          return new Page<>(gameDataDayVOList, pager);
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -376,8 +419,48 @@ public class GameDataServiceImpl implements IGameDataService {
 | 
	
		
			
				|  |  |          dao.execute(sqlCount);
 | 
	
		
			
				|  |  |          pager.setRecordCount(sqlCount.getInt());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        //查询出每个游戏的注册查询时间内,注册当天且充值的所有用户id
 | 
	
		
			
				|  |  | +        //只查询Day1的数据
 | 
	
		
			
				|  |  | +        //不选游戏查询的结果 --> (gameId/日期, userId)
 | 
	
		
			
				|  |  | +        //选游戏查询的结果 --> (日期, userId)
 | 
	
		
			
				|  |  | +        Map<String, String> gameDateUsersIdMap = findUsersIdForGameData(dto);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          List<GameDataDayVO> gameDataDayVOList = list.stream().map(vo -> {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            Long[] usersID = ArrayUtils.EMPTY_LONG_OBJECT_ARRAY;
 | 
	
		
			
				|  |  | +            //默认查询的数据-不选择游戏
 | 
	
		
			
				|  |  | +            if (CollectionUtils.isEmpty(dto.getGameId())) {
 | 
	
		
			
				|  |  | +                //将gameId和需要查询的注册时间拼接
 | 
	
		
			
				|  |  | +                String gameIdDate = vo.getGameId() + "/" + vo.getCostDate();
 | 
	
		
			
				|  |  | +                //取出所有usersId
 | 
	
		
			
				|  |  | +                if (gameDateUsersIdMap.containsKey(gameIdDate)) {
 | 
	
		
			
				|  |  | +                    //string[] -> Long[]
 | 
	
		
			
				|  |  | +                    usersID = Arrays.stream(gameDateUsersIdMap.get(gameIdDate)
 | 
	
		
			
				|  |  | +                                    .split("/"))
 | 
	
		
			
				|  |  | +                            .map(Long::parseLong)
 | 
	
		
			
				|  |  | +                            .toArray(Long[]::new);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            } else {
 | 
	
		
			
				|  |  | +                //取出所有usersId
 | 
	
		
			
				|  |  | +                if (gameDateUsersIdMap.containsKey(vo.getCostDate().toString())) {
 | 
	
		
			
				|  |  | +                    //string[] -> Long[]
 | 
	
		
			
				|  |  | +                    usersID = Arrays.stream(gameDateUsersIdMap.get(vo.getCostDate().toString())
 | 
	
		
			
				|  |  | +                                    .split("/"))
 | 
	
		
			
				|  |  | +                            .map(Long::parseLong)
 | 
	
		
			
				|  |  | +                            .toArray(Long[]::new);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  |              formatDayNGroupByDt(vo);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            FirstNewUserAgainTrendVO againTrendVO = FirstNewUserAgainTrendVO.builder()
 | 
	
		
			
				|  |  | +                    .gameDimension(dto.getGameDimension())
 | 
	
		
			
				|  |  | +                    .sourceSystem(dto.getSourceSystem())
 | 
	
		
			
				|  |  | +                    .timeType("da1")
 | 
	
		
			
				|  |  | +                    .rechargeCount(vo.getAmountD1Trend().getRechargeUserCount())
 | 
	
		
			
				|  |  | +                    .usersId(usersID)
 | 
	
		
			
				|  |  | +                    .build();
 | 
	
		
			
				|  |  | +            vo.setUserDetails(againTrendVO);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |              return vo;
 | 
	
		
			
				|  |  |          }).collect(Collectors.toList());
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -613,7 +696,26 @@ public class GameDataServiceImpl implements IGameDataService {
 | 
	
		
			
				|  |  |          GameDataDayTotalVO vo = gameDataDayTotalsql.getObject(GameDataDayTotalVO.class);
 | 
	
		
			
				|  |  |          if (vo.getAmountD1() != null) {
 | 
	
		
			
				|  |  |              formatDayNTotal(vo);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            //得到所有userID
 | 
	
		
			
				|  |  | +            Long[] usersIdTotal = ArrayUtils.EMPTY_LONG_OBJECT_ARRAY;
 | 
	
		
			
				|  |  | +            //得到所有用户的id整合字符串
 | 
	
		
			
				|  |  | +            String usersIdTotalStr = findUsersIdTotalForGameData(dto);
 | 
	
		
			
				|  |  | +            if (StringUtils.isNotBlank(usersIdTotalStr)) {
 | 
	
		
			
				|  |  | +                usersIdTotal = Arrays.stream(usersIdTotalStr.split("/"))
 | 
	
		
			
				|  |  | +                        .map(Long::parseLong)
 | 
	
		
			
				|  |  | +                        .toArray(Long[]::new);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            FirstNewUserAgainTrendVO againTrendVO = FirstNewUserAgainTrendVO.builder()
 | 
	
		
			
				|  |  | +                    .gameDimension(dto.getGameDimension())
 | 
	
		
			
				|  |  | +                    .sourceSystem(dto.getSourceSystem())
 | 
	
		
			
				|  |  | +                    .timeType("da1")
 | 
	
		
			
				|  |  | +                    .rechargeCount(vo.getAmountD1Trend().getRechargeUserCount())
 | 
	
		
			
				|  |  | +                    .usersId(usersIdTotal)
 | 
	
		
			
				|  |  | +                    .build();
 | 
	
		
			
				|  |  | +            vo.setUserDetails(againTrendVO);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          return vo;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -2512,6 +2614,7 @@ public class GameDataServiceImpl implements IGameDataService {
 | 
	
		
			
				|  |  |                      SELECT
 | 
	
		
			
				|  |  |                          dt as cost_date,
 | 
	
		
			
				|  |  |                          source_system,
 | 
	
		
			
				|  |  | +                        MAX(game_id) as game_id,
 | 
	
		
			
				|  |  |                          GROUP_CONCAT(game_name) as game_name,
 | 
	
		
			
				|  |  |                          IFNULL(SUM(cost), 0) cost,
 | 
	
		
			
				|  |  |                          IFNULL(SUM(buy_reg_num), 0) reg_num,
 | 
	
	
		
			
				|  | @@ -2565,6 +2668,7 @@ public class GameDataServiceImpl implements IGameDataService {
 | 
	
		
			
				|  |  |                      SELECT
 | 
	
		
			
				|  |  |                          dt as cost_date,
 | 
	
		
			
				|  |  |                          source_system,
 | 
	
		
			
				|  |  | +                        MAX(game_id) as game_id,
 | 
	
		
			
				|  |  |                          GROUP_CONCAT(game_name) as game_name,
 | 
	
		
			
				|  |  |                          IFNULL(SUM(cost), 0) cost,
 | 
	
		
			
				|  |  |                          IFNULL(SUM(nature_reg_num), 0) reg_num,
 | 
	
	
		
			
				|  | @@ -2619,6 +2723,7 @@ public class GameDataServiceImpl implements IGameDataService {
 | 
	
		
			
				|  |  |                  SELECT
 | 
	
		
			
				|  |  |                      dt as cost_date,
 | 
	
		
			
				|  |  |                      source_system,
 | 
	
		
			
				|  |  | +                    MAX(game_id) as game_id,
 | 
	
		
			
				|  |  |                      GROUP_CONCAT(game_name) as game_name,
 | 
	
		
			
				|  |  |                      IFNULL(SUM(cost), 0) cost,
 | 
	
		
			
				|  |  |                      IFNULL(SUM(reg_num), 0) reg_num,
 | 
	
	
		
			
				|  | @@ -2681,6 +2786,7 @@ public class GameDataServiceImpl implements IGameDataService {
 | 
	
		
			
				|  |  |                      SELECT
 | 
	
		
			
				|  |  |                          dt as cost_date,
 | 
	
		
			
				|  |  |                          source_system,
 | 
	
		
			
				|  |  | +                        MAX(parent_game_id) as game_id,
 | 
	
		
			
				|  |  |                          GROUP_CONCAT(parent_game_name) as game_name,
 | 
	
		
			
				|  |  |                          IFNULL(SUM(cost), 0) cost,
 | 
	
		
			
				|  |  |                          IFNULL(SUM(buy_reg_num), 0) reg_num,
 | 
	
	
		
			
				|  | @@ -2734,6 +2840,7 @@ public class GameDataServiceImpl implements IGameDataService {
 | 
	
		
			
				|  |  |                      SELECT
 | 
	
		
			
				|  |  |                          dt as cost_date,
 | 
	
		
			
				|  |  |                          source_system,
 | 
	
		
			
				|  |  | +                        MAX(parent_game_id) as game_id,
 | 
	
		
			
				|  |  |                          GROUP_CONCAT(parent_game_name) as game_name,
 | 
	
		
			
				|  |  |                          IFNULL(SUM(cost), 0) cost,
 | 
	
		
			
				|  |  |                          IFNULL(SUM(nature_reg_num), 0) reg_num,
 | 
	
	
		
			
				|  | @@ -2788,6 +2895,7 @@ public class GameDataServiceImpl implements IGameDataService {
 | 
	
		
			
				|  |  |                  SELECT
 | 
	
		
			
				|  |  |                      dt as cost_date,
 | 
	
		
			
				|  |  |                      source_system,
 | 
	
		
			
				|  |  | +                    MAX(parent_game_id) as game_id,
 | 
	
		
			
				|  |  |                      GROUP_CONCAT(parent_game_name) as game_name,
 | 
	
		
			
				|  |  |                      IFNULL(SUM(cost), 0) cost,
 | 
	
		
			
				|  |  |                      IFNULL(SUM(reg_num), 0) reg_num,
 | 
	
	
		
			
				|  | @@ -5003,6 +5111,9 @@ public class GameDataServiceImpl implements IGameDataService {
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      public Page<GameDataUserDetailsVO> getUserDetails(GameDataUserDetailsDTO dto) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        if (dto.getAgainTrendVO() == null || StringUtils.isBlank(dto.getAgainTrendVO().getTimeType())) {
 | 
	
		
			
				|  |  | +            return new Page<>(null, dto.toPage());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |          //得到需要查询的usersID内容
 | 
	
		
			
				|  |  |          FirstNewUserAgainTrendVO againTrendVO = dto.getAgainTrendVO();
 | 
	
		
			
				|  |  |          if (againTrendVO.getGameDimension() == null) {
 | 
	
	
		
			
				|  | @@ -5121,7 +5232,7 @@ public class GameDataServiceImpl implements IGameDataService {
 | 
	
		
			
				|  |  |          //查询每个游戏的注册首日充值用户id,在玩家充值排行榜里查找
 | 
	
		
			
				|  |  |          Criteria findUsersCri = Cnd.cri();
 | 
	
		
			
				|  |  |          //拼接游戏ID
 | 
	
		
			
				|  |  | -        if (dto.getGameId() != null) {
 | 
	
		
			
				|  |  | +        if (CollectionUtils.isNotEmpty(dto.getGameId())) {
 | 
	
		
			
				|  |  |              findUsersCri.where().andInList(gameColumn, dto.getGameId());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          //拼接游戏应用类型
 | 
	
	
		
			
				|  | @@ -5142,11 +5253,20 @@ public class GameDataServiceImpl implements IGameDataService {
 | 
	
		
			
				|  |  |          } else if ("nature".equals(dto.getTableTypes())) {
 | 
	
		
			
				|  |  |              findUsersCri.where().andEquals("reg_agent_id", 0);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | +        //拼接分组条件
 | 
	
		
			
				|  |  | +        Criteria groupByCri = Cnd.cri();
 | 
	
		
			
				|  |  | +        if (dto.getGameDimension() == 2L) {
 | 
	
		
			
				|  |  | +            //父维度
 | 
	
		
			
				|  |  | +            groupByCri.getGroupBy().groupBy("parent_game_id", "DATE(reg_user_time)");
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +            //子维度
 | 
	
		
			
				|  |  | +            groupByCri.getGroupBy().groupBy("reg_game_id", "DATE(reg_user_time)");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |          Sql findUsersIdSql;
 | 
	
		
			
				|  |  |          if (dto.getGameDimension() == 1L) {
 | 
	
		
			
				|  |  | -            findUsersIdSql = Sqls.create(findUsersIdSql(findUsersCri));
 | 
	
		
			
				|  |  | +            findUsersIdSql = Sqls.create(findUsersIdSql(findUsersCri, groupByCri));
 | 
	
		
			
				|  |  |          } else {
 | 
	
		
			
				|  |  | -            findUsersIdSql = Sqls.create(findUsersIdSqlForParent(findUsersCri));
 | 
	
		
			
				|  |  | +            findUsersIdSql = Sqls.create(findUsersIdSqlForParent(findUsersCri, groupByCri));
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          //自定义回传
 | 
	
		
			
				|  |  |          findUsersIdSql.setCallback((connection, resultSet, sql) -> {
 | 
	
	
		
			
				|  | @@ -5162,6 +5282,147 @@ public class GameDataServiceImpl implements IGameDataService {
 | 
	
		
			
				|  |  |          return findUsersIdSql.getObject(Map.class);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 查询出每个游戏的注册查询时间内,注册当天且充值的所有用户id-游戏每日
 | 
	
		
			
				|  |  | +     *
 | 
	
		
			
				|  |  | +     * @param dto 前端查询参数
 | 
	
		
			
				|  |  | +     * @return map
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    private Map findUsersIdForGameData(GameDataDayDTO dto) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        //默认查询子游戏维度
 | 
	
		
			
				|  |  | +        if (dto.getGameDimension() == null) {
 | 
	
		
			
				|  |  | +            dto.setGameDimension(1L);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //默认查询字段
 | 
	
		
			
				|  |  | +        String gameColumn = "reg_game_id";
 | 
	
		
			
				|  |  | +        String classifyColumn = "classify";
 | 
	
		
			
				|  |  | +        if (dto.getGameDimension() == 2L) {
 | 
	
		
			
				|  |  | +            gameColumn = "parent_game_id";
 | 
	
		
			
				|  |  | +            classifyColumn = "parent_game_classify";
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        //查询每个游戏的注册首日充值用户id,在玩家充值排行榜里查找
 | 
	
		
			
				|  |  | +        Criteria findUsersCri = Cnd.cri();
 | 
	
		
			
				|  |  | +        //拼接游戏ID
 | 
	
		
			
				|  |  | +        if (CollectionUtils.isNotEmpty(dto.getGameId())) {
 | 
	
		
			
				|  |  | +            findUsersCri.where().andInList(gameColumn, dto.getGameId());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //拼接游戏应用类型
 | 
	
		
			
				|  |  | +        if (dto.getGameClassify() != null) {
 | 
	
		
			
				|  |  | +            findUsersCri.where().andEquals(classifyColumn, dto.getGameClassify());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //拼接SDK来源
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
 | 
	
		
			
				|  |  | +            findUsersCri.where().andEquals("source_system", dto.getSourceSystem());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //拼接查询时间
 | 
	
		
			
				|  |  | +        if (dto.getRegisteredBeginDate() != null && dto.getRegisteredEndDate() != null) {
 | 
	
		
			
				|  |  | +            findUsersCri.where().andBetween("DATE(reg_user_time)", dto.getRegisteredBeginDate(), dto.getRegisteredEndDate());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //不同数据类型 查询条件不同 buy、nature、total
 | 
	
		
			
				|  |  | +        if ("buy".equals(dto.getTableTypes())) {
 | 
	
		
			
				|  |  | +            findUsersCri.where().andNotEquals("reg_agent_id", 0);
 | 
	
		
			
				|  |  | +        } else if ("nature".equals(dto.getTableTypes())) {
 | 
	
		
			
				|  |  | +            findUsersCri.where().andEquals("reg_agent_id", 0);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        Sql findUsersIdSql;
 | 
	
		
			
				|  |  | +        Criteria groupByCri = Cnd.cri();
 | 
	
		
			
				|  |  | +        //如果是默认查询,需要按游戏、日期分组
 | 
	
		
			
				|  |  | +        if (CollectionUtils.isEmpty(dto.getGameId())) {
 | 
	
		
			
				|  |  | +            //拼接分组条件
 | 
	
		
			
				|  |  | +            if (dto.getGameDimension() == 2L) {
 | 
	
		
			
				|  |  | +                //父维度
 | 
	
		
			
				|  |  | +                groupByCri.getGroupBy().groupBy("parent_game_id", "DATE(reg_user_time)");
 | 
	
		
			
				|  |  | +                findUsersIdSql = Sqls.create(findUsersIdSqlForParent(findUsersCri, groupByCri));
 | 
	
		
			
				|  |  | +            } else {
 | 
	
		
			
				|  |  | +                //子维度
 | 
	
		
			
				|  |  | +                groupByCri.getGroupBy().groupBy("reg_game_id", "DATE(reg_user_time)");
 | 
	
		
			
				|  |  | +                findUsersIdSql = Sqls.create(findUsersIdSql(findUsersCri, groupByCri));
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +            //选择游戏后,只按照日期分组
 | 
	
		
			
				|  |  | +            //拼接分组条件
 | 
	
		
			
				|  |  | +            groupByCri.getGroupBy().groupBy("DATE(reg_user_time)");
 | 
	
		
			
				|  |  | +            if (dto.getGameDimension() == 1L) {
 | 
	
		
			
				|  |  | +                findUsersIdSql = Sqls.create(findUsersIdSqlForGameData(findUsersCri, groupByCri));
 | 
	
		
			
				|  |  | +            } else {
 | 
	
		
			
				|  |  | +                findUsersIdSql = Sqls.create(findUsersIdSqlForParentForGameData(findUsersCri, groupByCri));
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //自定义回传
 | 
	
		
			
				|  |  | +        findUsersIdSql.setCallback((connection, resultSet, sql) -> {
 | 
	
		
			
				|  |  | +            Map<String, String> tempMap = new HashMap<>();
 | 
	
		
			
				|  |  | +            while (resultSet.next()) {
 | 
	
		
			
				|  |  | +                tempMap.put(resultSet.getString(1), resultSet.getString(2));
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            return tempMap;
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +        //运行sql
 | 
	
		
			
				|  |  | +        dao.execute(findUsersIdSql);
 | 
	
		
			
				|  |  | +        //返回结果
 | 
	
		
			
				|  |  | +        return findUsersIdSql.getObject(Map.class);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 查询出每个游戏的注册查询时间内,注册当天且充值的所有用户id(游戏每日总计)
 | 
	
		
			
				|  |  | +     *
 | 
	
		
			
				|  |  | +     * @param dto 前端查询参数
 | 
	
		
			
				|  |  | +     * @return map
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    private String findUsersIdTotalForGameData(GameDataDayTotalDTO dto) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        //默认查询子游戏维度
 | 
	
		
			
				|  |  | +        if (dto.getGameDimension() == null) {
 | 
	
		
			
				|  |  | +            dto.setGameDimension(1L);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //默认查询字段
 | 
	
		
			
				|  |  | +        String gameColumn = "reg_game_id";
 | 
	
		
			
				|  |  | +        String classifyColumn = "classify";
 | 
	
		
			
				|  |  | +        if (dto.getGameDimension() == 2L) {
 | 
	
		
			
				|  |  | +            gameColumn = "parent_game_id";
 | 
	
		
			
				|  |  | +            classifyColumn = "parent_game_classify";
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        //查询每个游戏的注册首日充值用户id,在玩家充值排行榜里查找
 | 
	
		
			
				|  |  | +        Criteria findUsersCri = Cnd.cri();
 | 
	
		
			
				|  |  | +        //拼接游戏ID
 | 
	
		
			
				|  |  | +        if (CollectionUtils.isNotEmpty(dto.getGameId())) {
 | 
	
		
			
				|  |  | +            findUsersCri.where().andInList(gameColumn, dto.getGameId());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //拼接游戏应用类型
 | 
	
		
			
				|  |  | +        if (dto.getGameClassify() != null) {
 | 
	
		
			
				|  |  | +            findUsersCri.where().andEquals(classifyColumn, dto.getGameClassify());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //拼接SDK来源
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
 | 
	
		
			
				|  |  | +            findUsersCri.where().andEquals("source_system", dto.getSourceSystem());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //拼接查询时间
 | 
	
		
			
				|  |  | +        if (dto.getRegisteredBeginDate() != null && dto.getRegisteredEndDate() != null) {
 | 
	
		
			
				|  |  | +            findUsersCri.where().andBetween("DATE(reg_user_time)", dto.getRegisteredBeginDate(), dto.getRegisteredEndDate());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //不同数据类型 查询条件不同 buy、nature、total
 | 
	
		
			
				|  |  | +        if ("buy".equals(dto.getTableTypes())) {
 | 
	
		
			
				|  |  | +            findUsersCri.where().andNotEquals("reg_agent_id", 0);
 | 
	
		
			
				|  |  | +        } else if ("nature".equals(dto.getTableTypes())) {
 | 
	
		
			
				|  |  | +            findUsersCri.where().andEquals("reg_agent_id", 0);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        Sql findUsersIdTotalSql;
 | 
	
		
			
				|  |  | +        if (dto.getGameDimension() == 1L) {
 | 
	
		
			
				|  |  | +            findUsersIdTotalSql = Sqls.create(findUsersIdTotalSql(findUsersCri));
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +            findUsersIdTotalSql = Sqls.create(findUsersIdTotalSqlForParent(findUsersCri));
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //自定义回传
 | 
	
		
			
				|  |  | +        findUsersIdTotalSql.setCallback(Sqls.callback.str());
 | 
	
		
			
				|  |  | +        //运行sql
 | 
	
		
			
				|  |  | +        dao.execute(findUsersIdTotalSql);
 | 
	
		
			
				|  |  | +        //返回结果
 | 
	
		
			
				|  |  | +        return findUsersIdTotalSql.getString();
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  |       * 查询出每个游戏的注册查询时间内,注册当天且充值的所有用户id(总计一栏)
 | 
	
		
			
				|  |  |       *
 | 
	
	
		
			
				|  | @@ -5185,7 +5446,7 @@ public class GameDataServiceImpl implements IGameDataService {
 | 
	
		
			
				|  |  |          //查询每个游戏的注册首日充值用户id,在玩家充值排行榜里查找
 | 
	
		
			
				|  |  |          Criteria findUsersCri = Cnd.cri();
 | 
	
		
			
				|  |  |          //拼接游戏ID
 | 
	
		
			
				|  |  | -        if (dto.getGameId() != null) {
 | 
	
		
			
				|  |  | +        if (CollectionUtils.isNotEmpty(dto.getGameId())) {
 | 
	
		
			
				|  |  |              findUsersCri.where().andInList(gameColumn, dto.getGameId());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          //拼接游戏应用类型
 | 
	
	
		
			
				|  | @@ -8780,7 +9041,7 @@ public class GameDataServiceImpl implements IGameDataService {
 | 
	
		
			
				|  |  |       *
 | 
	
		
			
				|  |  |       * @return String
 | 
	
		
			
				|  |  |       */
 | 
	
		
			
				|  |  | -    private String findUsersIdSql(Criteria cri) {
 | 
	
		
			
				|  |  | +    private String findUsersIdSql(Criteria cri, Criteria groupByCri) {
 | 
	
		
			
				|  |  |          return """
 | 
	
		
			
				|  |  |                  SELECT
 | 
	
		
			
				|  |  |                      CONCAT(reg_game_id,'/',DATE(reg_user_time)) as game_id_date,
 | 
	
	
		
			
				|  | @@ -8789,9 +9050,8 @@ public class GameDataServiceImpl implements IGameDataService {
 | 
	
		
			
				|  |  |                      game_ads.ads_player_recharge_ranking
 | 
	
		
			
				|  |  |                  """ + cri +
 | 
	
		
			
				|  |  |                  """
 | 
	
		
			
				|  |  | -                    AND dt = DATE(reg_user_time)
 | 
	
		
			
				|  |  | -                GROUP BY reg_game_id, DATE(reg_user_time)
 | 
	
		
			
				|  |  | -                        """;
 | 
	
		
			
				|  |  | +                    and dt = DATE(reg_user_time) 
 | 
	
		
			
				|  |  | +                """ + groupByCri;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      /**
 | 
	
	
		
			
				|  | @@ -8799,7 +9059,7 @@ public class GameDataServiceImpl implements IGameDataService {
 | 
	
		
			
				|  |  |       *
 | 
	
		
			
				|  |  |       * @return String
 | 
	
		
			
				|  |  |       */
 | 
	
		
			
				|  |  | -    private String findUsersIdSqlForParent(Criteria cri) {
 | 
	
		
			
				|  |  | +    private String findUsersIdSqlForParent(Criteria cri, Criteria groupByCri) {
 | 
	
		
			
				|  |  |          return """
 | 
	
		
			
				|  |  |                  SELECT
 | 
	
		
			
				|  |  |                      CONCAT(parent_game_id,'/',DATE(reg_user_time)) as game_id_date,
 | 
	
	
		
			
				|  | @@ -8808,13 +9068,48 @@ public class GameDataServiceImpl implements IGameDataService {
 | 
	
		
			
				|  |  |                      game_ads_parent.ads_player_recharge_ranking_parent
 | 
	
		
			
				|  |  |                  """ + cri +
 | 
	
		
			
				|  |  |                  """
 | 
	
		
			
				|  |  | -                    AND dt = DATE(reg_user_time)
 | 
	
		
			
				|  |  | -                GROUP BY parent_game_id, DATE(reg_user_time)
 | 
	
		
			
				|  |  | -                        """;
 | 
	
		
			
				|  |  | +                    and dt = DATE(reg_user_time) 
 | 
	
		
			
				|  |  | +                """ + groupByCri;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 找出每个游戏注册时间内的注册当天且充值的用户id-游戏每日
 | 
	
		
			
				|  |  | +     *
 | 
	
		
			
				|  |  | +     * @return String
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    private String findUsersIdSqlForGameData(Criteria cri, Criteria groupByCri) {
 | 
	
		
			
				|  |  | +        return """
 | 
	
		
			
				|  |  | +                SELECT
 | 
	
		
			
				|  |  | +                    DATE(reg_user_time) as reg_user_time,
 | 
	
		
			
				|  |  | +                    GROUP_CONCAT(CONVERT (player_id, varchar), "/") as amount_users_id
 | 
	
		
			
				|  |  | +                FROM
 | 
	
		
			
				|  |  | +                    game_ads.ads_player_recharge_ranking
 | 
	
		
			
				|  |  | +                """ + cri +
 | 
	
		
			
				|  |  | +                """
 | 
	
		
			
				|  |  | +                    and dt = DATE(reg_user_time) 
 | 
	
		
			
				|  |  | +                """ + groupByCri;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 找出每个游戏注册时间内的注册当天且充值的用户id-游戏每日-父游戏维度
 | 
	
		
			
				|  |  | +     *
 | 
	
		
			
				|  |  | +     * @return String
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    private String findUsersIdSqlForParentForGameData(Criteria cri, Criteria groupByCri) {
 | 
	
		
			
				|  |  | +        return """
 | 
	
		
			
				|  |  | +                SELECT
 | 
	
		
			
				|  |  | +                    DATE(reg_user_time) as reg_user_time,
 | 
	
		
			
				|  |  | +                    GROUP_CONCAT(CONVERT (parent_player_id, varchar), "/") as amount_users_id
 | 
	
		
			
				|  |  | +                FROM
 | 
	
		
			
				|  |  | +                    game_ads_parent.ads_player_recharge_ranking_parent
 | 
	
		
			
				|  |  | +                """ + cri +
 | 
	
		
			
				|  |  | +                """
 | 
	
		
			
				|  |  | +                    and dt = DATE(reg_user_time) 
 | 
	
		
			
				|  |  | +                """ + groupByCri;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  | -     * 找出每个游戏注册时间内的注册当天且充值的用户id(总计一栏)
 | 
	
		
			
				|  |  | +     * 找出每个游戏注册时间内的注册当天且充值的用户id(总计)
 | 
	
		
			
				|  |  |       *
 | 
	
		
			
				|  |  |       * @return String
 | 
	
		
			
				|  |  |       */
 | 
	
	
		
			
				|  | @@ -9416,7 +9711,9 @@ public class GameDataServiceImpl implements IGameDataService {
 | 
	
		
			
				|  |  |                      server_name,
 | 
	
		
			
				|  |  |                      role_name,
 | 
	
		
			
				|  |  |                      $amount as today_total_amount,
 | 
	
		
			
				|  |  | -                    player_os
 | 
	
		
			
				|  |  | +                    player_os,
 | 
	
		
			
				|  |  | +                    total_amount_count,
 | 
	
		
			
				|  |  | +                    ROW_NUMBER() over(order by today_total_amount desc, total_amount_count desc, player_id desc) as num
 | 
	
		
			
				|  |  |                  FROM
 | 
	
		
			
				|  |  |                      game_ads.ads_player_recharge_ranking
 | 
	
		
			
				|  |  |                  WHERE player_id IN (@usersId)
 | 
	
	
		
			
				|  | @@ -9436,7 +9733,9 @@ public class GameDataServiceImpl implements IGameDataService {
 | 
	
		
			
				|  |  |                      server_name,
 | 
	
		
			
				|  |  |                      role_name,
 | 
	
		
			
				|  |  |                      $amount as today_total_amount,
 | 
	
		
			
				|  |  | -                    player_os
 | 
	
		
			
				|  |  | +                    player_os,
 | 
	
		
			
				|  |  | +                    total_amount_count,
 | 
	
		
			
				|  |  | +                    ROW_NUMBER() over(order by today_total_amount desc, total_amount_count desc, parent_player_id desc) as num
 | 
	
		
			
				|  |  |                  FROM
 | 
	
		
			
				|  |  |                      game_ads_parent.ads_player_recharge_ranking_parent
 | 
	
		
			
				|  |  |                  WHERE parent_player_id IN (@usersId)
 |