|  | @@ -967,6 +967,206 @@ public class RoleManageServiceImpl implements IRoleManageService {
 | 
											
												
													
														|  |          return new Page<>(list, pager);
 |  |          return new Page<>(list, pager);
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +    @Override
 | 
											
												
													
														|  | 
 |  | +    public Page<Map> ipInfoListOfPage(RoleIpInfoParamDTO dto) {
 | 
											
												
													
														|  | 
 |  | +        //创建查询条件
 | 
											
												
													
														|  | 
 |  | +        Criteria criA = getSqlByQuery(dto);
 | 
											
												
													
														|  | 
 |  | +        //分页对象
 | 
											
												
													
														|  | 
 |  | +        Pager pager = dao.createPager(dto.getPageNum(), dto.getPageSize());
 | 
											
												
													
														|  | 
 |  | +        //查询总记录数
 | 
											
												
													
														|  | 
 |  | +        Sql countSql = Sqls.create(getIpInfoListCountSql(criA));
 | 
											
												
													
														|  | 
 |  | +        countSql.setCallback(Sqls.callback.integer());
 | 
											
												
													
														|  | 
 |  | +        dao.execute(countSql);
 | 
											
												
													
														|  | 
 |  | +        pager.setRecordCount(countSql.getInt());
 | 
											
												
													
														|  | 
 |  | +        //主表添加排序条件
 | 
											
												
													
														|  | 
 |  | +        if (StringUtils.isBlank(dto.getSortType())) {
 | 
											
												
													
														|  | 
 |  | +            dto.setSortType(OrderByEnum.DESC.getOrderType());
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +        if (StringUtils.isBlank(dto.getSortFiled())) {
 | 
											
												
													
														|  | 
 |  | +            criA.getOrderBy().orderBy("a.create_time", dto.getSortType());
 | 
											
												
													
														|  | 
 |  | +        } else {
 | 
											
												
													
														|  | 
 |  | +            criA.getOrderBy().orderBy(dto.getSortFiled(), dto.getSortType());
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +        //列表sql
 | 
											
												
													
														|  | 
 |  | +        String ipInfoListSql = getIpInfoListSql(criA);
 | 
											
												
													
														|  | 
 |  | +        Sql sql = Sqls.create(ipInfoListSql);
 | 
											
												
													
														|  | 
 |  | +        sql.setCallback(Sqls.callback.maps());
 | 
											
												
													
														|  | 
 |  | +        sql.setPager(pager);
 | 
											
												
													
														|  | 
 |  | +        dao.execute(sql);
 | 
											
												
													
														|  | 
 |  | +        //查询结果
 | 
											
												
													
														|  | 
 |  | +        List<Map> list = sql.getList(Map.class);
 | 
											
												
													
														|  | 
 |  | +        return new Page<>(list, pager);
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    private String getIpInfoListSql(Criteria criA) {
 | 
											
												
													
														|  | 
 |  | +        return """
 | 
											
												
													
														|  | 
 |  | +                    WITH
 | 
											
												
													
														|  | 
 |  | +                login_data AS (
 | 
											
												
													
														|  | 
 |  | +                  SELECT
 | 
											
												
													
														|  | 
 |  | +                    role_id, game_id, user_id, ip
 | 
											
												
													
														|  | 
 |  | +                  FROM dm_game_order.t_user_login_log
 | 
											
												
													
														|  | 
 |  | +                  WHERE
 | 
											
												
													
														|  | 
 |  | +                    game_id IN (35,36,10035)
 | 
											
												
													
														|  | 
 |  | +                    AND role_id != 'null'
 | 
											
												
													
														|  | 
 |  | +                    AND ip IS NOT NULL AND ip != 'null' AND ip != ''
 | 
											
												
													
														|  | 
 |  | +                ),
 | 
											
												
													
														|  | 
 |  | +                user_role_counts AS (
 | 
											
												
													
														|  | 
 |  | +                  SELECT user_id, COUNT(DISTINCT role_id) AS user_role_count
 | 
											
												
													
														|  | 
 |  | +                  FROM login_data
 | 
											
												
													
														|  | 
 |  | +                  GROUP BY user_id
 | 
											
												
													
														|  | 
 |  | +                ),
 | 
											
												
													
														|  | 
 |  | +                ip_relationships AS (
 | 
											
												
													
														|  | 
 |  | +                  SELECT
 | 
											
												
													
														|  | 
 |  | +                    a.role_id,
 | 
											
												
													
														|  | 
 |  | +                    COUNT(DISTINCT b.user_id) AS user_count,
 | 
											
												
													
														|  | 
 |  | +                    COUNT(DISTINCT b.role_id) AS role_count
 | 
											
												
													
														|  | 
 |  | +                  FROM login_data a
 | 
											
												
													
														|  | 
 |  | +                  LEFT JOIN login_data b ON a.ip = b.ip
 | 
											
												
													
														|  | 
 |  | +                  GROUP BY a.role_id
 | 
											
												
													
														|  | 
 |  | +                ),
 | 
											
												
													
														|  | 
 |  | +                role_ip_roles AS (
 | 
											
												
													
														|  | 
 |  | +                  SELECT
 | 
											
												
													
														|  | 
 |  | +                    r.role_id,
 | 
											
												
													
														|  | 
 |  | +                    COUNT(DISTINCT all_roles.role_id) AS role_count
 | 
											
												
													
														|  | 
 |  | +                  FROM login_data r
 | 
											
												
													
														|  | 
 |  | +                  JOIN login_data all_roles ON r.ip = all_roles.ip
 | 
											
												
													
														|  | 
 |  | +                  GROUP BY r.role_id
 | 
											
												
													
														|  | 
 |  | +                )
 | 
											
												
													
														|  | 
 |  | +                                
 | 
											
												
													
														|  | 
 |  | +                                
 | 
											
												
													
														|  | 
 |  | +                                
 | 
											
												
													
														|  | 
 |  | +                SELECT
 | 
											
												
													
														|  | 
 |  | +                  a.*,
 | 
											
												
													
														|  | 
 |  | +                  GREATEST(e.role_count - urc.user_role_count, 0) AS ip_role_count_filter,
 | 
											
												
													
														|  | 
 |  | +                  GREATEST(f.role_count - urc.user_role_count, 0) AS role_user_ip_count_filter,
 | 
											
												
													
														|  | 
 |  | +                  game.game_name
 | 
											
												
													
														|  | 
 |  | +                FROM game_ads.role_ip_monitor a
 | 
											
												
													
														|  | 
 |  | +                LEFT JOIN (
 | 
											
												
													
														|  | 
 |  | +                  SELECT role_id, game_id, user_id, COUNT(DISTINCT ip) AS ip_count
 | 
											
												
													
														|  | 
 |  | +                  FROM login_data
 | 
											
												
													
														|  | 
 |  | +                  GROUP BY role_id, game_id, user_id
 | 
											
												
													
														|  | 
 |  | +                ) c ON a.role_id = c.role_id AND a.game_id = c.game_id AND a.user_id = c.user_id
 | 
											
												
													
														|  | 
 |  | +                LEFT JOIN ip_relationships d ON a.role_id = d.role_id
 | 
											
												
													
														|  | 
 |  | +                LEFT JOIN ip_relationships e ON a.role_id = e.role_id
 | 
											
												
													
														|  | 
 |  | +                LEFT JOIN role_ip_roles f ON a.role_id = f.role_id
 | 
											
												
													
														|  | 
 |  | +                LEFT JOIN user_role_counts urc ON a.user_id = urc.user_id
 | 
											
												
													
														|  | 
 |  | +                LEFT JOIN dm_game_order.t_game game ON a.game_id = game.id AND game.source_system = 'ZX_ONE'
 | 
											
												
													
														|  | 
 |  | +                """ + criA;
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    private Criteria getSqlByQuery(RoleIpInfoParamDTO dto) {
 | 
											
												
													
														|  | 
 |  | +        Criteria criA = Cnd.cri();
 | 
											
												
													
														|  | 
 |  | +        if (CollectionUtils.isNotEmpty(dto.getUserId())) {
 | 
											
												
													
														|  | 
 |  | +            //玩家id
 | 
											
												
													
														|  | 
 |  | +            criA.where().andInList("a.user_id", dto.getUserId());
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +        if (StringUtils.isNotEmpty(dto.getUserName())) {
 | 
											
												
													
														|  | 
 |  | +            //玩家名称
 | 
											
												
													
														|  | 
 |  | +            criA.where().andLike("a.user_name", dto.getUserName());
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +        if (StringUtils.isNotEmpty(dto.getServerName())) {
 | 
											
												
													
														|  | 
 |  | +            //区服名称
 | 
											
												
													
														|  | 
 |  | +            criA.where().andLike("a.server_name", dto.getServerName());
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +        if (CollectionUtils.isNotEmpty(dto.getServerId())) {
 | 
											
												
													
														|  | 
 |  | +            //区服id
 | 
											
												
													
														|  | 
 |  | +            criA.where().andInStrList("a.server_id", dto.getServerId());
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +        if (StringUtils.isNotEmpty(dto.getGameName())) {
 | 
											
												
													
														|  | 
 |  | +            //游戏名称
 | 
											
												
													
														|  | 
 |  | +            criA.where().andLike("a.game_name", dto.getGameName());
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +        if (CollectionUtils.isNotEmpty(dto.getGameId())) {
 | 
											
												
													
														|  | 
 |  | +            //游戏id
 | 
											
												
													
														|  | 
 |  | +            criA.where().andInList("a.game_id", dto.getGameId());
 | 
											
												
													
														|  | 
 |  | +        }else {
 | 
											
												
													
														|  | 
 |  | +            //游戏id
 | 
											
												
													
														|  | 
 |  | +            criA.where().andInList("a.game_id", Arrays.asList(35L,36L,10035L));
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +        if (StringUtils.isNotEmpty(dto.getRoleId())) {
 | 
											
												
													
														|  | 
 |  | +            //角色id
 | 
											
												
													
														|  | 
 |  | +            criA.where().andEquals("a.role_id", dto.getRoleId());
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +        if (StringUtils.isNotEmpty(dto.getRoleName())) {
 | 
											
												
													
														|  | 
 |  | +            //角色名称
 | 
											
												
													
														|  | 
 |  | +            criA.where().andLike("a.role_name", dto.getRoleName());
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +        //角色等级区间筛选
 | 
											
												
													
														|  | 
 |  | +        if (dto.getRoleLevelMin() != null) {
 | 
											
												
													
														|  | 
 |  | +            criA.where().andGTE("a.role_level", dto.getRoleLevelMin());
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +        if (dto.getRoleLevelMax() != null) {
 | 
											
												
													
														|  | 
 |  | +            criA.where().andLTE("a.role_level", dto.getRoleLevelMax());
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +        //角色创建时间
 | 
											
												
													
														|  | 
 |  | +        if (dto.getCreateTimeMin() != null && dto.getCreateTimeMax() != null) {
 | 
											
												
													
														|  | 
 |  | +            criA.where().andBetween("a.create_time", dto.getCreateTimeMin().atTime(LocalTime.MIN), dto.getCreateTimeMax().atTime(LocalTime.MAX));
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +        //注册ip
 | 
											
												
													
														|  | 
 |  | +        if (StringUtils.isNotEmpty(dto.getRegIp())) {
 | 
											
												
													
														|  | 
 |  | +            criA.where().andEquals("a.ip", dto.getRegIp());
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +        return criA;
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    private String getIpInfoListCountSql(Criteria criA) {
 | 
											
												
													
														|  | 
 |  | +        return """
 | 
											
												
													
														|  | 
 |  | +                SELECT COUNT(1) FROM (
 | 
											
												
													
														|  | 
 |  | +                WITH
 | 
											
												
													
														|  | 
 |  | +                login_data AS (
 | 
											
												
													
														|  | 
 |  | +                  SELECT
 | 
											
												
													
														|  | 
 |  | +                    role_id, game_id, user_id, ip
 | 
											
												
													
														|  | 
 |  | +                  FROM dm_game_order.t_user_login_log
 | 
											
												
													
														|  | 
 |  | +                  WHERE
 | 
											
												
													
														|  | 
 |  | +                    game_id IN (35,36,10035)
 | 
											
												
													
														|  | 
 |  | +                    AND role_id != 'null'
 | 
											
												
													
														|  | 
 |  | +                    AND ip IS NOT NULL AND ip != 'null' AND ip != ''
 | 
											
												
													
														|  | 
 |  | +                ),
 | 
											
												
													
														|  | 
 |  | +                user_role_counts AS (
 | 
											
												
													
														|  | 
 |  | +                  SELECT user_id, COUNT(DISTINCT role_id) AS user_role_count
 | 
											
												
													
														|  | 
 |  | +                  FROM login_data
 | 
											
												
													
														|  | 
 |  | +                  GROUP BY user_id
 | 
											
												
													
														|  | 
 |  | +                ),
 | 
											
												
													
														|  | 
 |  | +                ip_relationships AS (
 | 
											
												
													
														|  | 
 |  | +                  SELECT
 | 
											
												
													
														|  | 
 |  | +                    a.role_id,
 | 
											
												
													
														|  | 
 |  | +                    COUNT(DISTINCT b.user_id) AS user_count,
 | 
											
												
													
														|  | 
 |  | +                    COUNT(DISTINCT b.role_id) AS role_count
 | 
											
												
													
														|  | 
 |  | +                  FROM login_data a
 | 
											
												
													
														|  | 
 |  | +                  LEFT JOIN login_data b ON a.ip = b.ip
 | 
											
												
													
														|  | 
 |  | +                  GROUP BY a.role_id
 | 
											
												
													
														|  | 
 |  | +                ),
 | 
											
												
													
														|  | 
 |  | +                role_ip_roles AS (
 | 
											
												
													
														|  | 
 |  | +                  SELECT
 | 
											
												
													
														|  | 
 |  | +                    r.role_id,
 | 
											
												
													
														|  | 
 |  | +                    COUNT(DISTINCT all_roles.role_id) AS role_count
 | 
											
												
													
														|  | 
 |  | +                  FROM login_data r
 | 
											
												
													
														|  | 
 |  | +                  JOIN login_data all_roles ON r.ip = all_roles.ip
 | 
											
												
													
														|  | 
 |  | +                  GROUP BY r.role_id
 | 
											
												
													
														|  | 
 |  | +                )
 | 
											
												
													
														|  | 
 |  | +                                
 | 
											
												
													
														|  | 
 |  | +                                
 | 
											
												
													
														|  | 
 |  | +                                
 | 
											
												
													
														|  | 
 |  | +                SELECT
 | 
											
												
													
														|  | 
 |  | +                  a.*,
 | 
											
												
													
														|  | 
 |  | +                  GREATEST(e.role_count - urc.user_role_count, 0) AS ip_role_count_filter,
 | 
											
												
													
														|  | 
 |  | +                  GREATEST(f.role_count - urc.user_role_count, 0) AS role_user_ip_count_filter,
 | 
											
												
													
														|  | 
 |  | +                  game.game_name
 | 
											
												
													
														|  | 
 |  | +                FROM game_ads.role_ip_monitor a
 | 
											
												
													
														|  | 
 |  | +                LEFT JOIN (
 | 
											
												
													
														|  | 
 |  | +                  SELECT role_id, game_id, user_id, COUNT(DISTINCT ip) AS ip_count
 | 
											
												
													
														|  | 
 |  | +                  FROM login_data
 | 
											
												
													
														|  | 
 |  | +                  GROUP BY role_id, game_id, user_id
 | 
											
												
													
														|  | 
 |  | +                ) c ON a.role_id = c.role_id AND a.game_id = c.game_id AND a.user_id = c.user_id
 | 
											
												
													
														|  | 
 |  | +                LEFT JOIN ip_relationships d ON a.role_id = d.role_id
 | 
											
												
													
														|  | 
 |  | +                LEFT JOIN ip_relationships e ON a.role_id = e.role_id
 | 
											
												
													
														|  | 
 |  | +                LEFT JOIN role_ip_roles f ON a.role_id = f.role_id
 | 
											
												
													
														|  | 
 |  | +                LEFT JOIN user_role_counts urc ON a.user_id = urc.user_id
 | 
											
												
													
														|  | 
 |  | +                LEFT JOIN dm_game_order.t_game game ON a.game_id = game.id AND game.source_system = 'ZX_ONE'
 | 
											
												
													
														|  | 
 |  | +                ) a
 | 
											
												
													
														|  | 
 |  | +                """ + criA;
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |      private Criteria getSqlByQuery(RoleLevelParamDTO dto) {
 |  |      private Criteria getSqlByQuery(RoleLevelParamDTO dto) {
 | 
											
												
													
														|  |          Criteria criA = Cnd.cri();
 |  |          Criteria criA = Cnd.cri();
 | 
											
												
													
														|  |          if(dto.getGsId()!=null){
 |  |          if(dto.getGsId()!=null){
 |