Browse Source

Merge remote-tracking branch 'origin/package' into package

shishaosong 1 year ago
parent
commit
b418191b1e
20 changed files with 2189 additions and 161 deletions
  1. 36 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/controller/GameListController.java
  2. 3 2
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/controller/RoleManageController.java
  3. 13 7
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/RoleCombatRankingDTO.java
  4. 7 1
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/RoleRechargeRankingDTO.java
  5. 41 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/GameListVO.java
  6. 0 6
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/PlayerRoleDataVO.java
  7. 9 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/IGameListService.java
  8. 2 2
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/AdsOrderDetailService.java
  9. 111 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/GameListServiceImpl.java
  10. 237 13
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/PlayerDataServiceImpl.java
  11. 1682 107
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/RoleManageServiceImpl.java
  12. 1 1
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/ManageApplication.java
  13. 9 1
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/controller/GameServerController.java
  14. 6 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/GameChoiceVO.java
  15. 6 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/GameServerVO.java
  16. 4 4
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IGameServerService.java
  17. 12 7
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GameServerServiceImpl.java
  18. 2 2
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GameServiceImpl.java
  19. 7 7
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GameUserRoleServiceImpl.java
  20. 1 1
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/UserServiceImpl.java

+ 36 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/controller/GameListController.java

@@ -0,0 +1,36 @@
+package com.zanxiang.game.data.serve.controller;
+
+import com.zanxiang.erp.security.annotation.PreAuthorize;
+import com.zanxiang.game.data.serve.pojo.vo.GameListVO;
+import com.zanxiang.game.data.serve.service.IGameListService;
+import com.zanxiang.module.util.pojo.ResultVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author tianhua
+ * @time 2023/9/25
+ * @Description 游戏列表接口 查看所有游戏、父游戏、超父游戏列表(ZX_ONE)
+ **/
+@Api(tags = {"游戏展示列表"})
+@RestController
+@RequestMapping("/gameList")
+@Slf4j
+public class GameListController {
+
+    @Autowired
+    private IGameListService gameListService;
+
+    @ApiOperation(value = "所有游戏列表")
+    @PreAuthorize(permissionKey = "gameData:gameList:game")
+    @GetMapping("/list")
+    public ResultVO<GameListVO> getGameDataDay() {
+        return ResultVO.ok(gameListService.getGameList());
+    }
+
+}

+ 3 - 2
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/controller/RoleManageController.java

@@ -1,5 +1,6 @@
 package com.zanxiang.game.data.serve.controller;
 
+import com.zanxiang.erp.security.annotation.PreAuthorize;
 import com.zanxiang.game.data.serve.pojo.dto.RoleCombatRankingDTO;
 import com.zanxiang.game.data.serve.pojo.dto.RoleRechargeRankingDTO;
 import com.zanxiang.game.data.serve.service.IRoleManageService;
@@ -31,14 +32,14 @@ public class RoleManageController {
     private IRoleManageService roleManageService;
 
     @ApiOperation(value = "角色充值排行榜")
-    //@PreAuthorize(permissionKey = "roleManage:recharge:role")
+    @PreAuthorize(permissionKey = "roleManage:recharge:role")
     @PostMapping("/rechargeRanking")
     public ResultVO<Page<Map>> getRoleRechargeRanking(@RequestBody RoleRechargeRankingDTO dto) {
         return ResultVO.ok(roleManageService.getRoleRechargeRanking(dto));
     }
 
     @ApiOperation(value = "角色战力排行榜")
-    //@PreAuthorize(permissionKey = "roleManage:combat:role")
+    @PreAuthorize(permissionKey = "roleManage:combat:role")
     @PostMapping("/combatRanking")
     public ResultVO<Page<Map>> getRoleCombatRanking(@RequestBody RoleCombatRankingDTO dto) {
         return ResultVO.ok(roleManageService.getRoleCombatRanking(dto));

+ 13 - 7
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/RoleCombatRankingDTO.java

@@ -28,22 +28,22 @@ public class RoleCombatRankingDTO extends BasePage {
     private LocalDate endDate;
 
     /**
-     * 游戏ID
+     * 游戏ID
      */
-    @ApiModelProperty(value = "游戏ID")
-    private Long gameId;
+    @ApiModelProperty(value = "游戏ID(父游戏)")
+    private Long parentGameId;
 
     /**
-     * 游戏ID
+     * 超父游戏ID
      */
-    @ApiModelProperty(value = "主游戏ID")
-    private Long parentGameId;
+    @ApiModelProperty(value = "超父游戏ID(超父游戏)")
+    private Long superParentGameId;
 
     /**
      * 区服ID(列表)
      */
     @ApiModelProperty(value = "区服ID(列表)")
-    private List<Long> serverIds;
+    private List<String> serverIds;
 
     /**
      * 排名的范围
@@ -51,6 +51,12 @@ public class RoleCombatRankingDTO extends BasePage {
     @ApiModelProperty(value = "排名的范围(每个区服显示多少排名)")
     private Long rankingNum;
 
+    /**
+     * 是否合服
+     */
+    @ApiModelProperty(value = "是否合服:true -> 合服 ; false -> 不合服")
+    private Boolean isMergeServer;
+
     /**
      * 排序字段
      */

+ 7 - 1
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/RoleRechargeRankingDTO.java

@@ -49,7 +49,13 @@ public class RoleRechargeRankingDTO extends BasePage {
      * 区服ID(列表)
      */
     @ApiModelProperty(value = "区服ID(列表)")
-    private List<Long> serverIds;
+    private List<String> serverIds;
+
+    /**
+     * 是否合服
+     */
+    @ApiModelProperty(value = "是否合服:true -> 合服 ; false -> 不合服")
+    private Boolean isMergeServer;
 
     /**
      * 角色名

+ 41 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/GameListVO.java

@@ -0,0 +1,41 @@
+package com.zanxiang.game.data.serve.pojo.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author tianhua
+ * @time 2023/9/25
+ * @Description 游戏列表VO
+ **/
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class GameListVO {
+
+    /**
+     * 游戏列表
+     */
+    @ApiModelProperty(value = "游戏列表")
+    private List<Map> gameList;
+
+    /**
+     * 父游戏列表
+     */
+    @ApiModelProperty(value = "父游戏列表")
+    private List<Map> parentGameList;
+
+    /**
+     * 超父游戏列表
+     */
+    @ApiModelProperty(value = "超父游戏列表")
+    private List<Map> superGameList;
+
+}

+ 0 - 6
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/PlayerRoleDataVO.java

@@ -152,12 +152,6 @@ public class PlayerRoleDataVO {
     @ApiModelProperty(notes = "充值金额")
     private BigDecimal rechargeMoney;
 
-    /**
-     * 平台币余额
-     */
-    @ApiModelProperty(notes = "平台币余额")
-    private BigDecimal platformCoin;
-
     /**
      * 充值次数
      */

+ 9 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/IGameListService.java

@@ -0,0 +1,9 @@
+package com.zanxiang.game.data.serve.service;
+
+import com.zanxiang.game.data.serve.pojo.vo.GameListVO;
+
+public interface IGameListService {
+
+    GameListVO getGameList();
+
+}

+ 2 - 2
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/AdsOrderDetailService.java

@@ -109,11 +109,11 @@ public class AdsOrderDetailService implements IAdsOrderDetailService {
         }
         if (dto.getRegTimeStart() != null && dto.getRegTimeEnd() != null) {
             //玩家注册时间
-            cri.where().andBetween("reg_time", dto.getRegTimeStart(), dto.getRegTimeEnd());
+            cri.where().andBetween("DATE(reg_time)", dto.getRegTimeStart(), dto.getRegTimeEnd());
         }
         if (dto.getPayTimeStart() != null && dto.getPayTimeEnd() != null) {
             //支付时间,订单充值时间
-            cri.where().andBetween("pay_time", dto.getPayTimeStart(), dto.getPayTimeEnd());
+            cri.where().andBetween("DATE(pay_time)", dto.getPayTimeStart(), dto.getPayTimeEnd());
         }
         if (dto.getRegPayIntervalTimeMin() != null) {
             cri.where().andGTE("TIMESTAMPDIFF(MINUTE, reg_time, pay_time)", dto.getRegPayIntervalTimeMin());

+ 111 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/GameListServiceImpl.java

@@ -0,0 +1,111 @@
+package com.zanxiang.game.data.serve.service.impl;
+
+import com.zanxiang.game.data.serve.pojo.vo.GameListVO;
+import com.zanxiang.game.data.serve.service.IGameListService;
+import lombok.extern.slf4j.Slf4j;
+import org.nutz.dao.Dao;
+import org.nutz.dao.Sqls;
+import org.nutz.dao.sql.Sql;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Map;
+
+/**
+ * @author tianhua
+ * @time 2023/9/25
+ * @Description
+ **/
+@Service
+@Slf4j
+public class GameListServiceImpl implements IGameListService {
+
+    @Autowired
+    private Dao dao;
+
+    @Override
+    public GameListVO getGameList() {
+        //查询游戏列表
+        Sql gameListSql = Sqls.create("""
+                SELECT
+                	id,
+                	game_name,
+                	parent_game_id,
+                	parent_game_name,
+                	super_game_id,
+                	super_game_name
+                FROM (
+                	SELECT
+                		a.source_system ,
+                		a.id,
+                		a.game_name,
+                		IFNULL(a.parent_id, a.id) as parent_game_id ,
+                		IFNULL(b.game_name, a.game_name ) as parent_game_name,
+                		IFNULL(a.super_game_id, a.id) as super_game_id ,
+                		IFNULL(c.name, a.game_name ) as super_game_name
+                	FROM dm_game_order.t_game a
+                	LEFT JOIN dm_game_order.t_game b
+                	on a.source_system = b.source_system AND a.parent_id = b.id
+                	LEFT JOIN dm_game_order.t_game_super c
+                	on a.source_system = c.source_system AND a.super_game_id = c.id
+                ) a
+                WHERE a.source_system = 'ZX_ONE'
+                GROUP BY id, game_name, parent_game_id, source_system, parent_game_name, super_game_id, super_game_name;
+                """);
+        gameListSql.setCallback(Sqls.callback.maps());
+        dao.execute(gameListSql);
+
+        //查询父游戏列表
+        Sql parentGameListSql = Sqls.create("""
+                SELECT
+                	parent_game_id,
+                	parent_game_name,
+                	super_game_id,
+                	super_game_name
+                FROM (
+                	SELECT
+                		a.source_system ,
+                		IFNULL(a.parent_id, a.id) as parent_game_id ,
+                		IFNULL(b.game_name, a.game_name ) as parent_game_name,
+                		IFNULL(a.super_game_id, a.id) as super_game_id ,
+                		IFNULL(c.name, a.game_name ) as super_game_name
+                	FROM dm_game_order.t_game a
+                	LEFT JOIN dm_game_order.t_game b
+                	on a.source_system = b.source_system AND a.parent_id = b.id
+                	LEFT JOIN dm_game_order.t_game_super c
+                	on a.source_system = c.source_system AND a.super_game_id = c.id
+                ) a
+                WHERE a.source_system = 'ZX_ONE'
+                GROUP BY parent_game_id, source_system, parent_game_name, super_game_id, super_game_name;
+                """);
+        parentGameListSql.setCallback(Sqls.callback.maps());
+        dao.execute(parentGameListSql);
+
+        //查询超父游戏列表
+        Sql superGameListSql = Sqls.create("""
+                SELECT
+                	super_game_id,
+                	super_game_name
+                FROM (
+                	SELECT
+                		a.source_system ,
+                		IFNULL(a.super_game_id, a.id) as super_game_id ,
+                		IFNULL(b.name, a.game_name ) as super_game_name
+                	FROM dm_game_order.t_game a
+                	LEFT JOIN dm_game_order.t_game_super b
+                	on a.source_system = b.source_system AND a.super_game_id = b.id
+                ) a
+                WHERE a.source_system = 'ZX_ONE'
+                GROUP BY super_game_id, source_system, super_game_name;
+                """);
+        superGameListSql.setCallback(Sqls.callback.maps());
+        dao.execute(superGameListSql);
+
+        return GameListVO.builder()
+                .gameList(gameListSql.getList(Map.class))
+                .parentGameList(parentGameListSql.getList(Map.class))
+                .superGameList(superGameListSql.getList(Map.class))
+                .build();
+    }
+
+}

+ 237 - 13
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/PlayerDataServiceImpl.java

@@ -97,7 +97,7 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
         }
         if (dto.getRechargeBeginDate() != null && dto.getRechargeEndDate() != null) {
             //充值时间
-            cri.where().andBetween("last_recharge_time", dto.getRechargeBeginDate(), dto.getRechargeEndDate());
+            cri.where().andBetween("DATE(last_recharge_time)", dto.getRechargeBeginDate(), dto.getRechargeEndDate());
         }
         //判断是否充值
         if (BooleanUtils.isFalse(dto.getIsRecharge())) {
@@ -120,7 +120,7 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
         }
         if (dto.getBeginDate() != null && dto.getEndDate() != null) {
             //注册时间
-            cri.where().andBetween("create_time", dto.getBeginDate(), dto.getEndDate());
+            cri.where().andBetween("DATE(create_time)", dto.getBeginDate(), dto.getEndDate());
         }
         if (dto.getRegPayIntervalTimeMin() != null) {
             //充值到注册的最小间隔时间(分)
@@ -196,7 +196,122 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
      */
     @Override
     public Page<PlayerRoleDataVO> getPlayerRoleDataList(PlayerRoleDataListDTO dto) {
-        return null;
+        //查询条件
+        Criteria cri = Cnd.cri();
+        if (dto.getUserId() != null) {
+            cri.where().andEquals("user_id", dto.getUserId());
+        }
+        if (StringUtils.isNotBlank(dto.getUserName())) {
+            //玩家账号
+            cri.where().andEquals("user_name", dto.getUserName());
+        }
+        if (StringUtils.isNotBlank(dto.getNickname())) {
+            //玩家昵称
+            cri.where().andLike("nickName", dto.getNickname());
+        }
+        if (StringUtils.isNotBlank(dto.getRegIp())) {
+            //玩家注册IP
+            cri.where().andEquals("reg_ip", dto.getRegIp());
+        }
+        if (StringUtils.isNotBlank(dto.getServerName())) {
+            //游戏区服
+            cri.where().andLike("server_name", dto.getServerName());
+        }
+        if (StringUtils.isNotBlank(dto.getRoleName())) {
+            cri.where().andLike("role_name", dto.getRoleName());
+        }
+        if (dto.getCpId() != null) {
+            cri.where().andEquals("cp_id", dto.getCpId());
+        }
+        if (dto.getGameId() != null) {
+            cri.where().andEquals("game_id", dto.getGameId());
+        }
+        if (dto.getGameCategoryId() != null) {
+            //游戏应用类型
+            cri.where().andEquals("game_classify", dto.getGameCategoryId());
+        }
+        if (StringUtils.isNotBlank(dto.getAccountId())) {
+            //推广账号ID
+            cri.where().andEquals("account_id", dto.getAccountId());
+        }
+        if (dto.getChannelId() != null) {
+            //渠道ID
+            cri.where().andEquals("agent_id", dto.getChannelId());
+        }
+        if (StringUtils.isNotBlank(dto.getPitcherId())) {
+            cri.where().andEquals("pitcher_id", dto.getPitcherId());
+        }
+        if (StringUtils.isNotBlank(dto.getOs())) {
+            cri.where().andEquals("os", dto.getOs());
+        }
+        //判断是否充值
+        if (BooleanUtils.isFalse(dto.getIsRecharge())) {
+            //未充值 充值金额为0
+            cri.where().andEquals("recharge_money", 0);
+        }
+        if (BooleanUtils.isTrue(dto.getIsRecharge())) {
+            //充值金额大于0
+            cri.where().andNotEquals("recharge_money", 0);
+        }
+        if (dto.getVipLevel() != null) {
+            cri.where().andEquals("vip_level", dto.getVipLevel());
+        }
+        if (dto.getRoleLevelMin() != null) {
+            //玩家最小等级
+            cri.where().andGTE("role_level", dto.getRoleLevelMin());
+        }
+        if (dto.getRoleLevelMax() != null) {
+            //玩家最大等级
+            cri.where().andLTE("role_level", dto.getRoleLevelMax());
+        }
+        if (dto.getBeginDate() != null && dto.getEndDate() != null) {
+            //角色创建时间
+            cri.where().andBetween("DATE(role_create_time)", dto.getBeginDate(), dto.getEndDate());
+        }
+        if (dto.getRechargeBeginDate() != null && dto.getRechargeEndDate() != null) {
+            //最近充值时间
+            cri.where().andBetween("DATE(last_recharge_time)", dto.getRechargeBeginDate(), dto.getRechargeEndDate());
+        }
+        if (dto.getRegTimeBeginDate() != null && dto.getRegTimeEndDate() != null) {
+            //玩家注册时间
+            cri.where().andBetween("DATE(user_reg_time)", dto.getRegTimeBeginDate(), dto.getRegTimeEndDate());
+        }
+        if (dto.getRegPayIntervalTimeMin() != null) {
+            //充值到注册的最小间隔时间(分)
+            cri.where().andGTE("TIMESTAMPDIFF(MINUTE, user_reg_time, last_recharge_time)", dto.getRegPayIntervalTimeMin());
+        }
+        if (dto.getRegPayIntervalTimeMax() != null) {
+            //充值到注册的最大间隔时间(分)
+            cri.where().andLTE("TIMESTAMPDIFF(MINUTE, user_reg_time, last_recharge_time)", dto.getRegPayIntervalTimeMax());
+        }
+        //pager对象
+        Pager pager = dao.createPager(dto.getPageNum(), dto.getPageSize());
+        //总记录数
+        Sql countSql = Sqls.create(getUserRoleDataListCountSql() + cri);
+        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())) {
+            //默认游戏角色创建时间排序
+            cri.getOrderBy().orderBy("role_create_time", dto.getSortType());
+        } else {
+            cri.getOrderBy().orderBy(dto.getSortFiled(), dto.getSortFiled());
+        }
+        //查询sql
+        Sql sql = Sqls.create(getUserRoleDataListSql() + cri);
+        sql.setCallback(Sqls.callback.entities());
+        sql.setEntity(dao.getEntity(PlayerRoleDataVO.class));
+        sql.setPager(pager);
+        //执行sql 得到结果
+        dao.execute(sql);
+        List<PlayerRoleDataVO> list = sql.getList(PlayerRoleDataVO.class);
+
+        return new Page<>(list, pager);
     }
 
     /**
@@ -252,12 +367,13 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
                             c.role_num
                             from (
                                 select
-                                        source_system ,
-                                        user_id ,
-                                        role_name ,
-                                        create_time ,
-                                        ROW_NUMBER() OVER(PARTITION BY user_id,source_system order by create_time desc) as num
-                                    from dm_game_order.t_user_login_log
+                                    source_system ,
+                                    user_id ,
+                                    role_name ,
+                                    create_time,
+                                    update_time ,
+                                    ROW_NUMBER() OVER(PARTITION BY user_id,source_system order by update_time  desc) as num
+                                from dm_game_order.t_game_user_role
                                 ) a
                             left join (
                                 select
@@ -350,13 +466,14 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
                             a.num,
                             c.role_num
                             from (
-                                select
+                                    select
                                         source_system ,
                                         user_id ,
                                         role_name ,
-                                        create_time ,
-                                        ROW_NUMBER() OVER(PARTITION BY user_id,source_system order by create_time desc) as num
-                                    from dm_game_order.t_user_login_log
+                                        create_time,
+                                        update_time ,
+                                        ROW_NUMBER() OVER(PARTITION BY user_id,source_system order by update_time  desc) as num
+                                    from dm_game_order.t_game_user_role
                                 ) a
                             left join (
                                 select
@@ -397,4 +514,111 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
                 """;
     }
 
+    /**
+     * 玩家角色列表查询sql
+     * @return String
+     */
+    private String getUserRoleDataListSql() {
+        return """
+                SELECT
+                	*
+                FROM (
+                	SELECT
+                		a.source_system , -- SDK来源
+                		a.user_id , -- 玩家ID
+                		b.username , -- 玩家账号
+                		b.nickname , -- 玩家昵称
+                		b.ip , -- 玩家注册IP
+                		b.create_time , -- 玩家注册时间
+                		b.agent_id , -- 注册渠道ID
+                		IF(b.agent_id = 0, '自然量', c.agent_name) as agent_name , -- 注册渠道名
+                		c.pitcher_id , -- 投手ID
+                		d.zx_pitcher_name , -- 投手名
+                		c.account_id , -- 推广账号ID
+                		c.account_name , -- 推广账号名
+                		c.account_type , -- 推广账号类型
+                		a.game_id , -- 角色注册游戏ID
+                		e.game_name , -- 游戏名
+                		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 , -- 原始区服名
+                		a.role_id , -- 角色ID
+                		a.role_name , -- 角色名
+                		a.role_level , -- 角色等级
+                		a.combat_num , -- 角色攻击力
+                		a.role_vip , -- 角色vip
+                		a.os , -- 角色操作系统
+                		a.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 -- 角色充值次数
+                	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 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
+                			-- 累计充值金额、累计充值次数
+                	    	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
+                """;
+    }
+
+    /**
+     * 玩家角色列表查询sql(总记录数)
+     * @return String
+     */
+    private String getUserRoleDataListCountSql() {
+        return """
+                """;
+    }
+
 }

+ 1682 - 107
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/RoleManageServiceImpl.java

@@ -8,6 +8,7 @@ import com.zanxiang.game.data.serve.pojo.enums.OrderByEnum;
 import com.zanxiang.game.data.serve.service.IRoleManageService;
 import com.zanxiang.game.data.serve.utils.Page;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.nutz.dao.Cnd;
@@ -19,6 +20,7 @@ import org.nutz.dao.sql.Sql;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -46,11 +48,19 @@ public class RoleManageServiceImpl implements IRoleManageService {
      */
     @Override
     public Page<Map> getRoleRechargeRanking(RoleRechargeRankingDTO dto) {
+        //默认查询不合服的数据
+        if (dto.getIsMergeServer() == null) {
+            dto.setIsMergeServer(Boolean.FALSE);
+        }
         //创建查询条件 给主表使用
         Criteria criA = Cnd.cri();
         if (dto.getGameId() != null) {
             criA.where().andEquals("role_reg_game_id", dto.getGameId());
         }
+        if (dto.getParentGameId() != null) {
+            //角色注册父游戏
+            criA.where().andEquals("role_reg_parent_game_id", dto.getParentGameId());
+        }
         if (StringUtils.isNotBlank(dto.getSourceSystem())) {
             criA.where().andEquals("source_system", dto.getSourceSystem());
         }
@@ -60,9 +70,17 @@ public class RoleManageServiceImpl implements IRoleManageService {
         if (StringUtils.isNotBlank(dto.getRoleName())) {
             criA.where().andLike("role_name", dto.getRoleName());
         }
+        if (CollectionUtils.isNotEmpty(dto.getServerIds()) && !dto.getIsMergeServer()) {
+            //区服列表查询,不合服的区服
+            criA.where().andIn("server_id", dto.getServerIds().toArray(String[]::new));
+        }
+        if (CollectionUtils.isNotEmpty(dto.getServerIds()) && dto.getIsMergeServer()) {
+            //合服区服列表查询
+            criA.where().andIn("merge_server_id", dto.getServerIds().toArray(String[]::new));
+        }
         if (dto.getCreateRoleBeginDate() != null && dto.getCreateRoleEndDate() != null) {
             //角色创建时间
-            criA.where().andBetween("role_create_time", dto.getCreateRoleBeginDate(), dto.getCreateRoleEndDate());
+            criA.where().andBetween("DATE(role_create_time)", dto.getCreateRoleBeginDate(), dto.getCreateRoleEndDate());
         }
         if (dto.getVipLevel() != null) {
             criA.where().andEquals("vip_level", dto.getVipLevel());
@@ -71,28 +89,35 @@ public class RoleManageServiceImpl implements IRoleManageService {
             criA.where().andEquals("is_send_mail", dto.getIsSendMail());
         }
         if (dto.getIsChange() != null) {
-            criA.where().andEquals("is_change", dto.getIsChange());
+            //是否转端
+            criA.where().andEquals("is_change_game_type", dto.getIsChange());
         }
         if (StringUtils.isNotBlank(dto.getWeChatCompany())) {
-            criA.where().andLike("we_chat_company", dto.getWeChatCompany());
+            //企业微信号
+            criA.where().andLike("add_corp_user_id", dto.getWeChatCompany());
         }
         if (StringUtils.isNotBlank(dto.getWeChat())) {
-            criA.where().andLike("we_chat", dto.getWeChat());
+            //客户微信
+            criA.where().andLike("user_wechat", dto.getWeChat());
         }
         if (StringUtils.isNotBlank(dto.getPhone())) {
-            criA.where().andEquals("phone", dto.getPhone());
+            //客户手机号
+            criA.where().andEquals("user_phone", dto.getPhone());
         }
         if (dto.getGsId() != null) {
             criA.where().andEquals("gs_id", dto.getGsId());
         }
         if (dto.getPitcherId() != null) {
-            criA.where().andEquals("pitcher_id", dto.getPitcherId());
+            //投手
+            criA.where().andEquals("put_user_id", dto.getPitcherId());
         }
         if (dto.getOperatorId() != null) {
-            criA.where().andEquals("operator_id", dto.getOperatorId());
+            //运营
+            criA.where().andEquals("oper_user_id", dto.getOperatorId());
         }
         if (dto.getCustomerServerId() != null) {
-            criA.where().andEquals("customer_server_id", dto.getCustomerServerId());
+            //客服
+            criA.where().andEquals("customer_service_id", dto.getCustomerServerId());
         }
         //给充值时间查询条件
         Criteria criTodayAmount = Cnd.cri();
@@ -136,30 +161,32 @@ public class RoleManageServiceImpl implements IRoleManageService {
      */
     @Override
     public Page<Map> getRoleCombatRanking(RoleCombatRankingDTO dto) {
-        //查询条件
-        Criteria cri = Cnd.cri();
-        if (dto.getGameId() != null) {
-            //父游戏ID
-            cri.where().andEquals("parent_game_id", dto.getGameId());
-        }
-        if (dto.getBeginDate() != null && dto.getEndDate() != null) {
-            //拼接区服开服时间
-        }
-        if (dto.getServerIds() != null) {
-            cri.where().andInList("server_id", dto.getServerIds());
+
+        //是否查询合服数据(默认查询不合服数据)
+        Boolean isQueryMerge = dto.getIsMergeServer() != null && dto.getIsMergeServer();
+        //是否查询超父游戏数据(默认查询父游戏数据)
+        Boolean isSuperParentGame = false;
+        if (dto.getSuperParentGameId() != null) {
+            isSuperParentGame = true;
         }
-        if (dto.getRankingNum() != null) {
-            //排名的个数
-            cri.where().andEquals("rank_num", dto.getRankingNum());
+        //查询区服相关数据
+        if (isQueryMerge) {
+            if (isSuperParentGame) {
+                //查询合服-超父
+                return getMergeSuperParentData(dto);
+            } else {
+                //查询合服-父游戏
+                return getMergeParentData(dto);
+            }
+        } else {
+            if (isSuperParentGame) {
+                //查询原始服-超父
+                return getOriginSuperParentData(dto);
+            } else {
+                //查询原始服-父游戏
+                return getOriginParentData(dto);
+            }
         }
-        Sql serverDataSql = Sqls.create(getRoleCombatRankServerDataSql());
-        serverDataSql.setCallback(Sqls.callback.maps());
-        dao.execute(serverDataSql);
-        //执行结果
-        serverDataSql.getList(HashMap.class);
-
-
-        return null;
     }
 
     /**
@@ -193,6 +220,478 @@ public class RoleManageServiceImpl implements IRoleManageService {
         return dataMap;
     }
 
+    /**
+     * 原始服-父游戏
+     * @param dto RoleCombatRankingDTO
+     * @return Page<Map>
+     */
+    private Page<Map> getOriginParentData(RoleCombatRankingDTO dto) {
+        //查询条件
+        Criteria cri = Cnd.cri();
+        if (dto.getParentGameId() != null) {
+            //父游戏ID
+            cri.where().andEquals("parent_game_id", dto.getParentGameId());
+        }
+        if (dto.getBeginDate() != null && dto.getEndDate() != null) {
+            //原始服开服时间
+            cri.where().andBetween("dt", dto.getBeginDate(), dto.getEndDate());
+        }
+        if (CollectionUtils.isNotEmpty(dto.getServerIds())) {
+            //原始区服列表
+            cri.where().andIn("server_id", dto.getServerIds().toArray(String[]::new));
+        }
+        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
+            cri.where().andEquals("source_system", dto.getSourceSystem());
+        }
+        //拼接分组条件
+        cri.getGroupBy().groupBy("source_system" , "server_id" , "boss_server_id" , "parent_game_id" , "super_game_id");
+        //分页
+        Pager pager = dao.createPager(dto.getPageNum(), dto.getPageSize());
+        //查询总记录数
+        Sql countSql = Sqls.create(getRoleCombatRankServerDataSqlACount(cri));
+        countSql.setCallback(Sqls.callback.integer());
+        dao.execute(countSql);
+        pager.setRecordCount(countSql.getInt());
+        //排序条件
+        if (StringUtils.isBlank(dto.getSortType())) {
+            dto.setSortType(OrderByEnum.DESC.getOrderType());
+        }
+        if (StringUtils.isNotBlank(dto.getSortFiled())) {
+            cri.getOrderBy().orderBy(dto.getSortFiled(), dto.getSortType());
+        } else {
+            //默认排序
+            cri.getOrderBy().orderBy("dt", dto.getSortType());
+            cri.getOrderBy().orderBy("server_combat_num", dto.getSortType());
+        }
+        //区服数据
+        Sql sql = Sqls.create(getRoleCombatRankServerDataSqlA() + cri);
+        sql.setCallback(Sqls.callback.maps());
+        sql.setPager(pager);
+        dao.execute(sql);
+
+        //获取角色信息
+        //查询条件
+        Criteria criRole = Cnd.cri();
+        if (dto.getParentGameId() != null) {
+            //父游戏ID
+            criRole.where().andEquals("parent_game_id", dto.getParentGameId());
+        }
+        if (dto.getBeginDate() != null && dto.getEndDate() != null) {
+            //原始服开服时间
+            criRole.where().andBetween("dt", dto.getBeginDate(), dto.getEndDate());
+        }
+        if (CollectionUtils.isNotEmpty(dto.getServerIds())) {
+            //原始服区服列表
+            criRole.where().andIn("server_id", dto.getServerIds().toArray(String[]::new));
+        }
+        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
+            criRole.where().andEquals("source_system", dto.getSourceSystem());
+        }
+        if (dto.getRankingNum() != null) {
+            //排名的个数
+            criRole.where().andLTE("rank_num", dto.getRankingNum());
+        } else {
+            //排名的个数
+            criRole.where().andLTE("rank_num", 5);
+        }
+        Sql sqlRole = Sqls.create(getRoleCombatRankRoleDataSqlA() + criRole);
+        sqlRole.setCallback(Sqls.callback.maps());
+        dao.execute(sqlRole);
+        //得到数据Map   (原始服ID-合服ID-父游戏ID)- (角色信息)
+        Map<String, List<Map<String, Object>>> roleDataMap = new HashMap<>();
+        //得到结果
+        List<Map> listRole = sqlRole.getList(Map.class).stream().map(map -> {
+            StringBuilder sb = new StringBuilder(StringUtils.EMPTY);
+            sb.append(map.get("server_id"))
+                    .append("-")
+                    .append((String)map.get("boss_server_id"))
+                    .append("-")
+                    .append((String)map.get("parent_game_id"));
+            if (roleDataMap.get(sb.toString()) != null) {
+                //含有改主键 添加数据
+                roleDataMap.get(sb.toString()).add(map);
+            } else {
+                //不含有该主键
+                List<Map<String, Object>> tempList = new ArrayList<>();
+                tempList.add(map);
+                roleDataMap.put(String.valueOf(sb), tempList);
+            }
+            return map;
+        }).collect(Collectors.toList());
+
+        List<Map> list = sql.getList(Map.class).stream().map(map -> {
+            StringBuilder sb = new StringBuilder(StringUtils.EMPTY);
+            sb.append(map.get("server_id"))
+                    .append("-")
+                    .append((String)map.get("boss_server_id"))
+                    .append("-")
+                    .append((String)map.get("parent_game_id"));
+
+            if (roleDataMap.get(sb.toString()) != null) {
+                //将排名信息添加
+                map.put("role_rank_date", roleDataMap.get(sb.toString()));
+            }
+            return map;
+
+        }).collect(Collectors.toList());
+
+        return new Page<>(list, pager);
+    }
+
+    /**
+     * 合服-父游戏
+     * @param dto RoleCombatRankingDTO
+     * @return Page<Map>
+     */
+    private Page<Map> getMergeParentData(RoleCombatRankingDTO dto) {
+        //查询条件
+        Criteria cri = Cnd.cri();
+        if (dto.getParentGameId() != null) {
+            //父游戏ID
+            cri.where().andEquals("parent_game_id", dto.getParentGameId());
+        }
+        if (dto.getBeginDate() != null && dto.getEndDate() != null) {
+            //合服开服时间
+            cri.where().andBetween("DATE(merge_time)", dto.getBeginDate(), dto.getEndDate());
+        }
+        if (CollectionUtils.isNotEmpty(dto.getServerIds())) {
+            //合服区服列表
+            cri.where().andIn("boss_server_id", dto.getServerIds().toArray(String[]::new));
+        }
+        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
+            cri.where().andEquals("source_system", dto.getSourceSystem());
+        }
+        //拼接分组条件
+        cri.getGroupBy().groupBy("source_system" , "boss_server_id" , "parent_game_id" , "super_game_id");
+        //分页
+        Pager pager = dao.createPager(dto.getPageNum(), dto.getPageSize());
+        //查询总记录数
+        Sql countSql = Sqls.create(getRoleCombatRankServerDataSqlBCount(cri));
+        countSql.setCallback(Sqls.callback.integer());
+        dao.execute(countSql);
+        pager.setRecordCount(countSql.getInt());
+        //排序条件
+        if (StringUtils.isBlank(dto.getSortType())) {
+            dto.setSortType(OrderByEnum.DESC.getOrderType());
+        }
+        if (StringUtils.isNotBlank(dto.getSortFiled())) {
+            cri.getOrderBy().orderBy(dto.getSortFiled(), dto.getSortType());
+        } else {
+            //默认排序
+            cri.getOrderBy().orderBy("merge_time", dto.getSortType());
+            cri.getOrderBy().orderBy("server_combat_num", dto.getSortType());
+        }
+        //查询出区服相关数据
+        Sql sql = Sqls.create(getRoleCombatRankServerDataSqlB() + cri);
+        sql.setCallback(Sqls.callback.maps());
+        sql.setPager(pager);
+        dao.execute(sql);
+        //获取角色信息
+        //查询条件
+        Criteria criRole = Cnd.cri();
+        if (dto.getParentGameId() != null) {
+            //父游戏ID
+            criRole.where().andEquals("parent_game_id", dto.getParentGameId());
+        }
+        if (dto.getBeginDate() != null && dto.getEndDate() != null) {
+            //开服时间
+            criRole.where().andBetween("DATE(merge_time)", dto.getBeginDate(), dto.getEndDate());
+        }
+        if (CollectionUtils.isNotEmpty(dto.getServerIds())) {
+            //合服区服列表
+            criRole.where().andIn("boss_server_id", dto.getServerIds().toArray(String[]::new));
+        }
+        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
+            criRole.where().andEquals("source_system", dto.getSourceSystem());
+        }
+        if (dto.getRankingNum() != null) {
+            //排名的个数
+            criRole.where().andLTE("rank_num", dto.getRankingNum());
+        } else {
+            //排名的个数
+            criRole.where().andLTE("rank_num", 5);
+        }
+        Sql sqlRole = Sqls.create(getRoleCombatRankRoleDataSqlB() + criRole);
+        sqlRole.setCallback(Sqls.callback.maps());
+        dao.execute(sqlRole);
+        //得到数据Map   (合服ID-父游戏ID)- (角色信息)
+        Map<String, List<Map<String, Object>>> roleDataMap = new HashMap<>();
+        //获取到相关角色排名信息
+        List<Map> listRole = sqlRole.getList(Map.class).stream().map(dataMap -> {
+            //拼接主键信息
+            StringBuilder sb = new StringBuilder(StringUtils.EMPTY);
+            sb.append((String)dataMap.get("boss_server_id"))
+                    .append("-")
+                    .append((String)dataMap.get("parent_game_id"));
+            if (roleDataMap.get(sb.toString()) != null) {
+                //含有改主键 添加数据
+                roleDataMap.get(sb.toString()).add(dataMap);
+            } else {
+                //不含有该主键
+                List<Map<String, Object>> tempList = new ArrayList<>();
+                tempList.add(dataMap);
+                roleDataMap.put(String.valueOf(sb), tempList);
+            }
+            return dataMap;
+        }).collect(Collectors.toList());
+        //将排名信息拼接到区服信息上
+        List<Map> list = sql.getList(Map.class).stream().map(dataMap -> {
+            //主键
+            StringBuilder sb = new StringBuilder(StringUtils.EMPTY);
+            sb.append((String)dataMap.get("boss_server_id"))
+                    .append("-")
+                    .append((String)dataMap.get("parent_game_id"));
+            if (roleDataMap.get(sb.toString()) != null) {
+                //将排名信息添加
+                dataMap.put("role_rank_date", roleDataMap.get(sb.toString()));
+            }
+            //清除"null"字符串
+            if ("null".equals(dataMap.get("son_server_ids"))) {
+                dataMap.put("son_server_ids", StringUtils.EMPTY);
+            }
+            if ("null".equals(dataMap.get("source_server_ids"))) {
+                dataMap.put("source_server_ids", StringUtils.EMPTY);
+            }
+            return dataMap;
+        }).collect(Collectors.toList());
+
+        return new Page<>(list, pager);
+    }
+
+    /**
+     * 原始服-超父游戏
+     * @param dto RoleCombatRankingDTO
+     * @return Page<Map>
+     */
+    private Page<Map> getOriginSuperParentData(RoleCombatRankingDTO dto) {
+        //查询条件
+        Criteria cri = Cnd.cri();
+        if (dto.getParentGameId() != null) {
+            //超父游戏ID
+            cri.where().andEquals("super_game_id", dto.getParentGameId());
+        }
+        if (dto.getBeginDate() != null && dto.getEndDate() != null) {
+            //原始服开服时间
+            cri.where().andBetween("dt", dto.getBeginDate(), dto.getEndDate());
+        }
+        if (CollectionUtils.isNotEmpty(dto.getServerIds())) {
+            //原始区服列表
+            cri.where().andIn("server_id", dto.getServerIds().toArray(String[]::new));
+        }
+        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
+            cri.where().andEquals("source_system", dto.getSourceSystem());
+        }
+        //拼接分组条件
+        cri.getGroupBy().groupBy("source_system" , "server_id" , "boss_server_id" , "super_game_id");
+        //分页
+        Pager pager = dao.createPager(dto.getPageNum(), dto.getPageSize());
+        //查询总记录数
+        Sql countSql = Sqls.create(getRoleCombatRankServerDataSqlCCount(cri));
+        countSql.setCallback(Sqls.callback.integer());
+        dao.execute(countSql);
+        pager.setRecordCount(countSql.getInt());
+        //排序条件
+        if (StringUtils.isBlank(dto.getSortType())) {
+            dto.setSortType(OrderByEnum.DESC.getOrderType());
+        }
+        if (StringUtils.isNotBlank(dto.getSortFiled())) {
+            cri.getOrderBy().orderBy(dto.getSortFiled(), dto.getSortType());
+        } else {
+            //默认排序
+            cri.getOrderBy().orderBy("dt", dto.getSortType());
+            cri.getOrderBy().orderBy("server_combat_num", dto.getSortType());
+        }
+        //区服数据
+        Sql sql = Sqls.create(getRoleCombatRankServerDataSqlC() + cri);
+        sql.setCallback(Sqls.callback.maps());
+        sql.setPager(pager);
+        dao.execute(sql);
+
+        //获取角色信息
+        //查询条件
+        Criteria criRole = Cnd.cri();
+        if (dto.getParentGameId() != null) {
+            //超父游戏ID
+            criRole.where().andEquals("super_game_id", dto.getParentGameId());
+        }
+        if (dto.getBeginDate() != null && dto.getEndDate() != null) {
+            //原始服开服时间
+            criRole.where().andBetween("dt", dto.getBeginDate(), dto.getEndDate());
+        }
+        if (CollectionUtils.isNotEmpty(dto.getServerIds())) {
+            //原始服区服列表
+            criRole.where().andIn("server_id", dto.getServerIds().toArray(String[]::new));
+        }
+        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
+            criRole.where().andEquals("source_system", dto.getSourceSystem());
+        }
+        if (dto.getRankingNum() != null) {
+            //排名的个数
+            criRole.where().andLTE("rank_num", dto.getRankingNum());
+        } else {
+            //排名的个数
+            criRole.where().andLTE("rank_num", 5);
+        }
+        Sql sqlRole = Sqls.create(getRoleCombatRankRoleDataSqlC() + criRole);
+        sqlRole.setCallback(Sqls.callback.maps());
+        dao.execute(sqlRole);
+        //得到数据Map   (原始服ID-超父游戏ID)- (角色信息)
+        Map<String, List<Map<String, Object>>> roleDataMap = new HashMap<>();
+        //得到结果
+        List<Map> listRole = sqlRole.getList(Map.class).stream().map(map -> {
+            StringBuilder sb = new StringBuilder(StringUtils.EMPTY);
+            sb.append(map.get("server_id"))
+                    .append("-")
+                    .append((String)map.get("super_game_id"));
+            if (roleDataMap.get(sb.toString()) != null) {
+                //含有改主键 添加数据
+                roleDataMap.get(sb.toString()).add(map);
+            } else {
+                //不含有该主键
+                List<Map<String, Object>> tempList = new ArrayList<>();
+                tempList.add(map);
+                roleDataMap.put(String.valueOf(sb), tempList);
+            }
+            return map;
+        }).collect(Collectors.toList());
+
+        List<Map> list = sql.getList(Map.class).stream().map(map -> {
+            StringBuilder sb = new StringBuilder(StringUtils.EMPTY);
+            sb.append(map.get("server_id"))
+                    .append("-")
+                    .append((String)map.get("super_game_id"));
+
+            if (roleDataMap.get(sb.toString()) != null) {
+                //将排名信息添加
+                map.put("role_rank_date", roleDataMap.get(sb.toString()));
+            }
+            return map;
+
+        }).collect(Collectors.toList());
+
+        return new Page<>(list, pager);
+    }
+
+    /**
+     * 合服-超父游戏
+     * @param dto RoleCombatRankingDTO
+     * @return Page<Map>
+     */
+    private Page<Map> getMergeSuperParentData(RoleCombatRankingDTO dto) {
+        //查询条件
+        Criteria cri = Cnd.cri();
+        if (dto.getSuperParentGameId() != null) {
+            //超父游戏ID
+            cri.where().andEquals("super_game_id", dto.getSuperParentGameId());
+        }
+        if (dto.getBeginDate() != null && dto.getEndDate() != null) {
+            //合服开服时间
+            cri.where().andBetween("DATE(merge_time)", dto.getBeginDate(), dto.getEndDate());
+        }
+        if (CollectionUtils.isNotEmpty(dto.getServerIds())) {
+            //合服区服列表
+            cri.where().andIn("boss_server_id", dto.getServerIds().toArray(String[]::new));
+        }
+        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
+            cri.where().andEquals("source_system", dto.getSourceSystem());
+        }
+        //拼接分组条件
+        cri.getGroupBy().groupBy("source_system" , "boss_server_id" , "super_game_id");
+        //分页
+        Pager pager = dao.createPager(dto.getPageNum(), dto.getPageSize());
+        //查询总记录数
+        Sql countSql = Sqls.create(getRoleCombatRankServerDataSqlDCount(cri));
+        countSql.setCallback(Sqls.callback.integer());
+        dao.execute(countSql);
+        pager.setRecordCount(countSql.getInt());
+        //排序条件
+        if (StringUtils.isBlank(dto.getSortType())) {
+            dto.setSortType(OrderByEnum.DESC.getOrderType());
+        }
+        if (StringUtils.isNotBlank(dto.getSortFiled())) {
+            cri.getOrderBy().orderBy(dto.getSortFiled(), dto.getSortType());
+        } else {
+            //默认排序
+            cri.getOrderBy().orderBy("merge_time", dto.getSortType());
+            cri.getOrderBy().orderBy("server_combat_num", dto.getSortType());
+        }
+        //查询出区服相关数据
+        Sql sql = Sqls.create(getRoleCombatRankServerDataSqlD() + cri);
+        sql.setCallback(Sqls.callback.maps());
+        sql.setPager(pager);
+        dao.execute(sql);
+        //获取角色信息
+        //查询条件
+        Criteria criRole = Cnd.cri();
+        if (dto.getParentGameId() != null) {
+            //超父游戏ID
+            criRole.where().andEquals("super_game_id", dto.getSuperParentGameId());
+        }
+        if (dto.getBeginDate() != null && dto.getEndDate() != null) {
+            //开服时间
+            criRole.where().andBetween("DATE(merge_time)", dto.getBeginDate(), dto.getEndDate());
+        }
+        if (CollectionUtils.isNotEmpty(dto.getServerIds())) {
+            //合服区服列表
+            criRole.where().andIn("boss_server_id", dto.getServerIds().toArray(String[]::new));
+        }
+        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
+            criRole.where().andEquals("source_system", dto.getSourceSystem());
+        }
+        if (dto.getRankingNum() != null) {
+            //排名的个数
+            criRole.where().andLTE("rank_num", dto.getRankingNum());
+        } else {
+            //排名的个数
+            criRole.where().andLTE("rank_num", 5);
+        }
+        Sql sqlRole = Sqls.create(getRoleCombatRankRoleDataSqlD() + criRole);
+        sqlRole.setCallback(Sqls.callback.maps());
+        dao.execute(sqlRole);
+        //得到数据Map   (合服ID-超父游戏ID)- (角色信息)
+        Map<String, List<Map<String, Object>>> roleDataMap = new HashMap<>();
+        //获取到相关角色排名信息
+        List<Map> listRole = sqlRole.getList(Map.class).stream().map(dataMap -> {
+            //拼接主键信息
+            StringBuilder sb = new StringBuilder(StringUtils.EMPTY);
+            sb.append((String)dataMap.get("boss_server_id"))
+                    .append("-")
+                    .append((String)dataMap.get("super_game_id"));
+            if (roleDataMap.get(sb.toString()) != null) {
+                //含有改主键 添加数据
+                roleDataMap.get(sb.toString()).add(dataMap);
+            } else {
+                //不含有该主键
+                List<Map<String, Object>> tempList = new ArrayList<>();
+                tempList.add(dataMap);
+                roleDataMap.put(String.valueOf(sb), tempList);
+            }
+            return dataMap;
+        }).collect(Collectors.toList());
+        //将排名信息拼接到区服信息上
+        List<Map> list = sql.getList(Map.class).stream().map(dataMap -> {
+            //主键
+            StringBuilder sb = new StringBuilder(StringUtils.EMPTY);
+            sb.append((String)dataMap.get("boss_server_id"))
+                    .append("-")
+                    .append((String)dataMap.get("super_game_id"));
+            if (roleDataMap.get(sb.toString()) != null) {
+                //将排名信息添加
+                dataMap.put("role_rank_date", roleDataMap.get(sb.toString()));
+            }
+            //清除"null"字符串
+            if ("null".equals(dataMap.get("son_server_ids"))) {
+                dataMap.put("son_server_ids", StringUtils.EMPTY);
+            }
+            if ("null".equals(dataMap.get("source_server_ids"))) {
+                dataMap.put("source_server_ids", StringUtils.EMPTY);
+            }
+            return dataMap;
+        }).collect(Collectors.toList());
+
+        return new Page<>(list, pager);
+    }
+
     /**
      * 查询角色充值排行榜sql
      * @param criA 主表查询条件
@@ -237,7 +736,7 @@ public class RoleManageServiceImpl implements IRoleManageService {
                   		r.server_name as merge_server_name, -- 角色所在合服名
                 		IFNULL(f.real_amount, 0) as role_last_amount, -- 角色最近充值金额
                 		f.pay_time as role_last_pay_time, -- 角色最近充值时间
-                		g.active_time as role_active_time, -- 角色最近活跃时间
+                		g.update_time as role_active_time, -- 角色最近活跃时间
                 		IFNULL(h.real_amount, 0) as role_first_amount, -- 角色首次充值金额
                 		p.today_amount as today_amount, -- 角色当天充值金额
                 		TIMESTAMPDIFF(SECOND, a.create_time, f.pay_time) as role_reg_pay_time, -- 角色创建充值时间差(秒)
@@ -259,16 +758,16 @@ public class RoleManageServiceImpl implements IRoleManageService {
                 		i.user_pay_time as user_pay_time, -- 玩家最近充值时间
                 		TIMESTAMPDIFF(SECOND, i.user_create_time, i.user_pay_time) as user_reg_pay_time, -- 玩家注册充值时间差(秒)
                 		TIMESTAMPDIFF(SECOND, i.user_pay_time, NOW()) as user_pay_until_now, -- 玩家最近充值距今(秒)
-                		j.is_send_mail as is_send_mail, -- 是否发送邮件
+                		IFNULL(j.is_send_mail, 0) as is_send_mail, -- 是否发送邮件
                 		j.send_gift_id as send_gift_id, -- 最新发送礼包id
                 		k.gift_name as gift_name, -- 礼包名
-                		j.is_change_game_type as is_change_game_type, -- 是否转端 1-是;0-否
-                		j.is_add_corp_wechat as is_add_corp_wechat, -- 是否添加企微 1-是; 0-否
+                		IFNULL(j.is_change_game_type, 0) as is_change_game_type, -- 是否转端 1-是;0-否
+                		IFNULL(j.is_add_corp_wechat, 0) as is_add_corp_wechat, -- 是否添加企微 1-是; 0-否
                 		j.add_corp_user_id as add_corp_user_id, -- 企微号
                 		j.user_wechat as user_wechat, -- 客户微信号
                 		j.user_phone as user_phone, -- 客户手机号
-                		j.is_remove_game as is_remove_game, -- 是否退游 1-是;0-否
-                		j.is_wake_up as is_wake_up, -- 是否唤醒 1-是;0-否
+                		IFNULL(j.is_remove_game, 0) as is_remove_game, -- 是否退游 1-是;0-否
+                		IFNULL(j.is_wake_up, 0) as is_wake_up, -- 是否唤醒 1-是;0-否
                 		j.remark as remark, -- 备注
                 		j.gs_id as gs_id, -- GS_ID
                 		j.customer_service_id as customer_service_id, -- 客服ID
@@ -354,12 +853,12 @@ public class RoleManageServiceImpl implements IRoleManageService {
                 	) f on a.source_system = f.source_system AND a.role_id = f.role_id AND f.num = 1
                 	LEFT JOIN (
                 		-- 角色最近活跃时间
-                		SELECT
-                			source_system,
-                			role_id,
-                			active_time,
-                			ROW_NUMBER()over(partition by role_id , source_system order by active_time desc) as num
-                		FROM dm_game_order.t_active_log
+                  		SELECT
+                  		    source_system,
+                  		    role_id,
+                  		    update_time,
+                  		    ROW_NUMBER() OVER(PARTITION BY role_id , source_system order by update_time desc) as num
+                  		from dm_game_order.t_game_user_role
                 	) g on a.source_system = g.source_system AND a.role_id = g.role_id AND g.num = 1
                 	LEFT JOIN (
                 		SELECT
@@ -418,9 +917,9 @@ public class RoleManageServiceImpl implements IRoleManageService {
                             i.agent_id as agent_id,
                             IF(i.agent_id = 0 , '自然量', j.agent_name) as agent_name,
                             j.pitcher_id as put_user_id,
-                            l.active_time as user_active_time,
+                            l.update_time as user_active_time,
                             m.user_last_recharge_game_id as user_last_recharge_game_id,
-                            n.game_name as user_last_recharge_game_name, 
+                            n.game_name as user_last_recharge_game_name,
                             m.pay_time as user_pay_time -- 玩家最近充值时间
                         FROM
                         (
@@ -465,15 +964,15 @@ public class RoleManageServiceImpl implements IRoleManageService {
                             SELECT
                                 association_user_id,
                                 b.source_system,
-                                b.active_time,
-                                ROW_NUMBER()over(partition by association_user_id, b.source_system order by active_time desc) as num
+                                b.update_time,
+                                ROW_NUMBER()over(partition by association_user_id, b.source_system order by b.update_time desc) as num
                             FROM dm_game_order.t_game_user a
                             RIGHT JOIN (
                                 SELECT
-                                    source_system,
+                                    source_system ,
                                     user_id,
-                                    active_time
-                                FROM dm_game_order.t_active_log
+                                    update_time
+                                FROM dm_game_order.t_game_user_role
                             ) b ON a.source_system = b.source_system AND a.id = b.user_id
                         ) l ON i.association_user_id = l.association_user_id AND i.source_system = l.source_system AND l.num = 1
                         LEFT JOIN (
@@ -589,7 +1088,7 @@ public class RoleManageServiceImpl implements IRoleManageService {
                         r.server_name as merge_server_name, -- 角色所在合服名
                         IFNULL(f.real_amount, 0) as role_last_amount, -- 角色最近充值金额
                         f.pay_time as role_last_pay_time, -- 角色最近充值时间
-                        g.active_time as role_active_time, -- 角色最近活跃时间
+                        g.update_time as role_active_time, -- 角色最近活跃时间
                         IFNULL(h.real_amount, 0) as role_first_amount, -- 角色首次充值金额
                         p.today_amount as today_amount, -- 角色当天充值金额
                         TIMESTAMPDIFF(SECOND, a.create_time, f.pay_time) as role_reg_pay_time, -- 角色创建充值时间差(秒)
@@ -611,16 +1110,16 @@ public class RoleManageServiceImpl implements IRoleManageService {
                         i.user_pay_time as user_pay_time, -- 玩家最近充值时间
                         TIMESTAMPDIFF(SECOND, i.user_create_time, i.user_pay_time) as user_reg_pay_time, -- 玩家注册充值时间差(秒)
                         TIMESTAMPDIFF(SECOND, i.user_pay_time, NOW()) as user_pay_until_now, -- 玩家最近充值距今(秒)
-                        j.is_send_mail as is_send_mail, -- 是否发送邮件
+                        IFNULL(j.is_send_mail, 0) as is_send_mail, -- 是否发送邮件
                         j.send_gift_id as send_gift_id, -- 最新发送礼包id
                         k.gift_name as gift_name, -- 礼包名
-                        j.is_change_game_type as is_change_game_type, -- 是否转端 1-是;0-否
-                        j.is_add_corp_wechat as is_add_corp_wechat, -- 是否添加企微 1-是; 0-否
+                        IFNULL(j.is_change_game_type, 0) as is_change_game_type, -- 是否转端 1-是;0-否
+                        IFNULL(j.is_add_corp_wechat, 0) as is_add_corp_wechat, -- 是否添加企微 1-是; 0-否
                         j.add_corp_user_id as add_corp_user_id, -- 企微号
                         j.user_wechat as user_wechat, -- 客户微信号
                         j.user_phone as user_phone, -- 客户手机号
-                        j.is_remove_game as is_remove_game, -- 是否退游 1-是;0-否
-                        j.is_wake_up as is_wake_up, -- 是否唤醒 1-是;0-否
+                        IFNULL(j.is_remove_game, 0) as is_remove_game, -- 是否退游 1-是;0-否
+                        IFNULL(j.is_wake_up, 0) as is_wake_up, -- 是否唤醒 1-是;0-否
                         j.remark as remark, -- 备注
                         j.gs_id as gs_id, -- GS_ID
                         j.customer_service_id as customer_service_id, -- 客服ID
@@ -709,9 +1208,9 @@ public class RoleManageServiceImpl implements IRoleManageService {
                         SELECT
                             source_system,
                             role_id,
-                            active_time,
-                            ROW_NUMBER()over(partition by role_id , source_system order by active_time desc) as num
-                        FROM dm_game_order.t_active_log
+                            update_time,
+                            ROW_NUMBER() OVER(PARTITION BY role_id , source_system order by update_time desc) as num
+                        from dm_game_order.t_game_user_role
                     ) g on a.source_system = g.source_system AND a.role_id = g.role_id AND g.num = 1
                     LEFT JOIN (
                         SELECT
@@ -770,9 +1269,9 @@ public class RoleManageServiceImpl implements IRoleManageService {
                             i.agent_id as agent_id,
                             IF(i.agent_id = 0 , '自然量', j.agent_name) as agent_name,
                             j.pitcher_id as put_user_id,
-                            l.active_time as user_active_time,
+                            l.update_time as user_active_time,
                             m.user_last_recharge_game_id as user_last_recharge_game_id,
-                            n.game_name as user_last_recharge_game_name,\s
+                            n.game_name as user_last_recharge_game_name,
                             m.pay_time as user_pay_time -- 玩家最近充值时间
                         FROM
                         (
@@ -817,15 +1316,15 @@ public class RoleManageServiceImpl implements IRoleManageService {
                             SELECT
                                 association_user_id,
                                 b.source_system,
-                                b.active_time,
-                                ROW_NUMBER()over(partition by association_user_id, b.source_system order by active_time desc) as num
+                                b.update_time,
+                                ROW_NUMBER()over(partition by association_user_id, b.source_system order by b.update_time desc) as num
                             FROM dm_game_order.t_game_user a
                             RIGHT JOIN (
                                 SELECT
-                                    source_system,
+                                    source_system ,
                                     user_id,
-                                    active_time
-                                FROM dm_game_order.t_active_log
+                                    update_time
+                                FROM dm_game_order.t_game_user_role
                             ) b ON a.source_system = b.source_system AND a.id = b.user_id
                         ) l ON i.association_user_id = l.association_user_id AND i.source_system = l.source_system AND l.num = 1
                         LEFT JOIN (
@@ -897,53 +1396,1129 @@ public class RoleManageServiceImpl implements IRoleManageService {
                 """ + criA;
     }
 
-    private String getRoleCombatRankServerDataSql() {
+    /**
+     * 原始服-父游戏维度(区服相关信息)
+     * @return String
+     */
+    private String getRoleCombatRankServerDataSqlA() {
         return """
-                SUM(server_combat_num) as server_combat_num, -- 区服战力
-                SUM(new_user_count) as new_user_count, -- 新用户人数
-                SUM(create_role_count) as create_role_count, -- 创角人数
-                SUM(role_count) as role_count, -- 角色数量
-                SUM(total_num) as total_num, -- 总付费人数
-                SUM(total_amount) as total_amount, -- 总付费金额
-                SUM(ba1) as ba1, -- 今日付费金额
-                SUM(ba1_num) as ba1_num, -- 今日付费人数
-                SUM(ba1_count) as ba1_count, -- 今日付费次数
-                SUM(ba1_active_num) as ba1_active_num, -- 今日活跃人数
-                SUM(ba2) as ba2, -- 昨日付费金额
-                SUM(ba2_num) as ba2_num, -- 昨日付费人数
-                SUM(ba2_count) as ba2_count, -- 昨日付费次数
-                SUM(ba2_active_num) as ba2_active_num, -- 昨日活跃人数
-                SUM(ba3) as ba3, -- 前天付费金额
-                SUM(ba3_num) as ba3_num, -- 前天付费人数
-                SUM(ba3_count) as ba3_count, -- 前天付费次数
-                SUM(ba3_active_num) as ba3_active_num -- 前天活跃人数
+                SELECT
+                	-- 查询每个父游戏-原始区服维度的信息
+                	source_system,
+                	parent_game_id, -- 父游戏ID
+                	MAX(parent_game_name) as parent_game_name, -- 父游戏名
+                	super_game_id , -- 超父游戏ID
+                	MAX(super_game_name) as super_game_name , -- 超父游戏名
+                	server_id, -- 区服ID
+                	MAX(server_name) as server_name, -- 区服名
+                	MAX(dt) as dt, -- 开服时间
+                	boss_server_id, -- 合服ID
+                	MAX(boss_server_name) as boss_server_name, -- 合服名
+                	MAX(merge_time) as merge_time , -- 合服时间
+                	MAX(sum_server_count) as sum_server_count, -- 合服次数
+                	SUM(server_combat_num) as server_combat_num, -- 区服战力
+                    SUM(new_user_count) as new_user_count, -- 新用户人数
+                    SUM(create_role_count) as create_role_count, -- 创角人数
+                    SUM(role_count) as role_count, -- 角色数量
+                    SUM(total_num) as total_num, -- 总付费人数
+                    SUM(total_amount) as total_amount, -- 总付费金额
+                	ROUND(IF(SUM(total_num) > 0, SUM(total_amount) / SUM(total_num), 0), 2) as total_arppu, -- 总付费ARPPU
+                    ROUND(IF(SUM(create_role_count) > 0, SUM(total_num) / SUM(create_role_count), 0), 4) as amount_rate, -- 付费率
+                    SUM(ba1) as ba1, -- 今日付费金额
+                    SUM(ba1_num) as ba1_num, -- 今日付费人数
+                    SUM(ba1_count) as ba1_count, -- 今日付费次数
+                    SUM(ba1_active_num) as ba1_active_num, -- 今日活跃人数
+                    SUM(ba2) as ba2, -- 昨日付费金额
+                    SUM(ba2_num) as ba2_num, -- 昨日付费人数
+                    SUM(ba2_count) as ba2_count, -- 昨日付费次数
+                    SUM(ba2_active_num) as ba2_active_num, -- 昨日活跃人数
+                    SUM(ba3) as ba3, -- 前天付费金额
+                    SUM(ba3_num) as ba3_num, -- 前天付费人数
+                    SUM(ba3_count) as ba3_count, -- 前天付费次数
+                    SUM(ba3_active_num) as ba3_active_num -- 前天活跃人数
+                FROM (
+                	-- 子查询,查询每个子游戏-原始区服维度的信息
+                	SELECT
+                		source_system,
+                		game_id, -- 子游戏ID
+                		MAX(game_name) as game_name, -- 子游戏名
+                		parent_game_id, -- 父游戏ID
+                		MAX(parent_game_name) as parent_game_name, -- 父游戏名
+                		super_game_id , -- 超父游戏ID
+                		MAX(super_game_name) as super_game_name , -- 超父游戏名
+                		server_id, -- 区服ID
+                		MAX(server_name) as server_name, -- 区服名
+                		MAX(`date`) as dt, -- 开服日期
+                		boss_server_id, -- 合服ID
+                		MAX(boss_server_name) as boss_server_name, -- 合服名
+                		MAX(merge_time) as merge_time , -- 合服时间
+                		MAX(sum_server_count) as sum_server_count, -- 合服次数
+                		MAX(server_combat_num) as server_combat_num, -- 区服战力
+                		MAX(new_user_count) as new_user_count, -- 新用户人数
+                		MAX(create_role_count) as create_role_count, -- 创角人数
+                		MAX(role_count) as role_count, -- 角色数量
+                		MAX(total_num) as total_num, -- 总付费人数
+                		MAX(total_amount) as total_amount, -- 总付费金额
+                		MAX(ba1) as ba1, -- 今日付费金额
+                		MAX(ba1_num) as ba1_num, -- 今日付费人数
+                		MAX(ba1_count) as ba1_count, -- 今日付费次数
+                		MAX(ba1_active_num) as ba1_active_num, -- 今日活跃人数
+                		MAX(ba2) as ba2, -- 昨日付费金额
+                		MAX(ba2_num) as ba2_num, -- 昨日付费人数
+                		MAX(ba2_count) as ba2_count, -- 昨日付费次数
+                		MAX(ba2_active_num) as ba2_active_num, -- 昨日活跃人数
+                		MAX(ba3) as ba3, -- 前天付费金额
+                		MAX(ba3_num) as ba3_num, -- 前天付费人数
+                		MAX(ba3_count) as ba3_count, -- 前天付费次数
+                		MAX(ba3_active_num) as ba3_active_num -- 前天活跃人数
+                	FROM game_ads.ads_role_combat_num_ranking
+                	GROUP BY game_id ,parent_game_id ,super_game_id ,server_id ,boss_server_id ,source_system
+                ) a
                 """;
     }
 
-    private String getRoleCombatRankRoleDataSql() {
+    /**
+     * 原始服-父游戏维度(区服相关信息)(总记录数)
+     * @return String
+     */
+    private String getRoleCombatRankServerDataSqlACount(Criteria cri) {
         return """
-                SUM(parent_game_name) as parent_game_name,
-                SUM(server_name) as server_name, -- 区服名
-                SUM(boss_server_id) as boss_server_id, -- 合服ID
-                SUM(boss_server_name) as boss_server_name, -- 合服名
-                SUM(server_combat_num) as server_combat_num, -- 区服战力
-                SUM(new_user_count) as new_user_count, -- 新用户人数
-                SUM(create_role_count) as create_role_count, -- 创角人数
-                SUM(role_count) as role_count, -- 角色数量
-                SUM(total_num) as total_num, -- 总付费人数
-                SUM(total_amount) as total_amount, -- 总付费金额
-                SUM(ba1) as ba1, -- 今日付费金额
-                SUM(ba1_num) as ba1_num, -- 今日付费人数
-                SUM(ba1_count) as ba1_count, -- 今日付费次数
-                SUM(ba1_active_num) as ba1_active_num, -- 今日活跃人数
-                SUM(ba2) as ba2, -- 昨日付费金额
-                SUM(ba2_num) as ba2_num, -- 昨日付费人数
-                SUM(ba2_count) as ba2_count, -- 昨日付费次数
-                SUM(ba2_active_num) as ba2_active_num, -- 昨日活跃人数
-                SUM(ba3) as ba3, -- 前天付费金额
-                SUM(ba3_num) as ba3_num, -- 前天付费人数
-                SUM(ba3_count) as ba3_count, -- 前天付费次数
-                SUM(ba3_active_num) as ba3_active_num -- 前天活跃人数
+                SELECT
+                    COUNT(1)
+                FROM(
+                    SELECT
+                    	-- 查询每个父游戏-原始区服维度的信息
+                    	source_system,
+                    	parent_game_id, -- 父游戏ID
+                    	MAX(parent_game_name) as parent_game_name, -- 父游戏名
+                    	super_game_id , -- 超父游戏ID
+                    	MAX(super_game_name) as super_game_name , -- 超父游戏名
+                    	server_id, -- 区服ID
+                    	MAX(server_name) as server_name, -- 区服名
+                    	MAX(dt) as dt, -- 开服时间
+                    	boss_server_id, -- 合服ID
+                    	MAX(boss_server_name) as boss_server_name, -- 合服名
+                    	MAX(merge_time) as merge_time , -- 合服时间
+                    	MAX(sum_server_count) as sum_server_count, -- 合服次数
+                    	SUM(server_combat_num) as server_combat_num, -- 区服战力
+                        SUM(new_user_count) as new_user_count, -- 新用户人数
+                        SUM(create_role_count) as create_role_count, -- 创角人数
+                        SUM(role_count) as role_count, -- 角色数量
+                        SUM(total_num) as total_num, -- 总付费人数
+                        SUM(total_amount) as total_amount, -- 总付费金额
+                    	ROUND(IF(SUM(total_num) > 0, SUM(total_amount) / SUM(total_num), 0), 2) as total_arppu, -- 总付费ARPPU
+                        ROUND(IF(SUM(create_role_count) > 0, SUM(total_num) / SUM(create_role_count), 0), 4) as amount_rate, -- 付费率
+                        SUM(ba1) as ba1, -- 今日付费金额
+                        SUM(ba1_num) as ba1_num, -- 今日付费人数
+                        SUM(ba1_count) as ba1_count, -- 今日付费次数
+                        SUM(ba1_active_num) as ba1_active_num, -- 今日活跃人数
+                        SUM(ba2) as ba2, -- 昨日付费金额
+                        SUM(ba2_num) as ba2_num, -- 昨日付费人数
+                        SUM(ba2_count) as ba2_count, -- 昨日付费次数
+                        SUM(ba2_active_num) as ba2_active_num, -- 昨日活跃人数
+                        SUM(ba3) as ba3, -- 前天付费金额
+                        SUM(ba3_num) as ba3_num, -- 前天付费人数
+                        SUM(ba3_count) as ba3_count, -- 前天付费次数
+                        SUM(ba3_active_num) as ba3_active_num -- 前天活跃人数
+                    FROM (
+                    	-- 子查询,查询每个子游戏-原始区服维度的信息
+                    	SELECT
+                    		source_system,
+                    		game_id, -- 子游戏ID
+                    		MAX(game_name) as game_name, -- 子游戏名
+                    		parent_game_id, -- 父游戏ID
+                    		MAX(parent_game_name) as parent_game_name, -- 父游戏名
+                    		super_game_id , -- 超父游戏ID
+                    		MAX(super_game_name) as super_game_name , -- 超父游戏名
+                    		server_id, -- 区服ID
+                    		MAX(server_name) as server_name, -- 区服名
+                    		MAX(`date`) as dt, -- 开服日期
+                    		boss_server_id, -- 合服ID
+                    		MAX(boss_server_name) as boss_server_name, -- 合服名
+                    		MAX(merge_time) as merge_time , -- 合服时间
+                    		MAX(sum_server_count) as sum_server_count, -- 合服次数
+                    		MAX(server_combat_num) as server_combat_num, -- 区服战力
+                    		MAX(new_user_count) as new_user_count, -- 新用户人数
+                    		MAX(create_role_count) as create_role_count, -- 创角人数
+                    		MAX(role_count) as role_count, -- 角色数量
+                    		MAX(total_num) as total_num, -- 总付费人数
+                    		MAX(total_amount) as total_amount, -- 总付费金额
+                    		MAX(ba1) as ba1, -- 今日付费金额
+                    		MAX(ba1_num) as ba1_num, -- 今日付费人数
+                    		MAX(ba1_count) as ba1_count, -- 今日付费次数
+                    		MAX(ba1_active_num) as ba1_active_num, -- 今日活跃人数
+                    		MAX(ba2) as ba2, -- 昨日付费金额
+                    		MAX(ba2_num) as ba2_num, -- 昨日付费人数
+                    		MAX(ba2_count) as ba2_count, -- 昨日付费次数
+                    		MAX(ba2_active_num) as ba2_active_num, -- 昨日活跃人数
+                    		MAX(ba3) as ba3, -- 前天付费金额
+                    		MAX(ba3_num) as ba3_num, -- 前天付费人数
+                    		MAX(ba3_count) as ba3_count, -- 前天付费次数
+                    		MAX(ba3_active_num) as ba3_active_num -- 前天活跃人数
+                    	FROM game_ads.ads_role_combat_num_ranking
+                    	GROUP BY game_id ,parent_game_id ,super_game_id ,server_id ,boss_server_id ,source_system
+                    ) a
+                """ + cri+
+                """
+                ) a
+                """;
+    }
+
+    /**
+     * 合服-父游戏维度(区服相关信息)
+     * @return String
+     */
+    private String getRoleCombatRankServerDataSqlB() {
+        return """
+                SELECT
+                	-- 查询每个父游戏-合服服维度的信息
+                	source_system,
+                	parent_game_id, -- 父游戏ID
+                	MAX(parent_game_name) as parent_game_name, -- 父游戏名
+                	super_game_id , -- 超父游戏ID
+                	MAX(super_game_name) as super_game_name , -- 超父游戏名
+                	boss_server_id, -- 合服ID
+                	MAX(boss_server_name) as boss_server_name, -- 合服名
+                	MAX(merge_time) as merge_time , -- 合服时间
+                	TIMESTAMPDIFF(DAY, MAX(merge_time), NOW()) start_day, -- 开服天数
+                	MAX(sum_server_count) as sum_server_count, -- 合服次数
+                	MAX(b.main_server_id) as main_server_id, -- 主服ID
+                	MAX(b.main_server_name) as main_server_name, -- 主服名
+                	MAX(son_server_ids) as son_server_ids, -- 合服的子服ID列表
+                    MAX(source_server_ids) as source_server_ids, -- 子服ID列表
+                    MAX(source_server_ids_name) as source_server_ids_name, -- 子服名列表
+                	SUM(server_combat_num) as server_combat_num, -- 区服战力
+                    SUM(new_user_count) as new_user_count, -- 新用户人数
+                    SUM(create_role_count) as create_role_count, -- 创角人数
+                    SUM(role_count) as role_count, -- 角色数量
+                    SUM(total_num) as total_num, -- 总付费人数
+                    SUM(total_amount) as total_amount, -- 总付费金额
+                	ROUND(IF(SUM(total_num) > 0, SUM(total_amount) / SUM(total_num), 0), 2) as total_arppu, -- 总付费ARPPU
+                    ROUND(IF(SUM(create_role_count) > 0, SUM(total_num) / SUM(create_role_count), 0), 4) as amount_rate, -- 付费率
+                    SUM(ba1) as ba1, -- 今日付费金额
+                    SUM(ba1_num) as ba1_num, -- 今日付费人数
+                    SUM(ba1_count) as ba1_count, -- 今日付费次数
+                    SUM(ba1_active_num) as ba1_active_num, -- 今日活跃人数
+                    SUM(ba2) as ba2, -- 昨日付费金额
+                    SUM(ba2_num) as ba2_num, -- 昨日付费人数
+                    SUM(ba2_count) as ba2_count, -- 昨日付费次数
+                    SUM(ba2_active_num) as ba2_active_num, -- 昨日活跃人数
+                    SUM(ba3) as ba3, -- 前天付费金额
+                    SUM(ba3_num) as ba3_num, -- 前天付费人数
+                    SUM(ba3_count) as ba3_count, -- 前天付费次数
+                    SUM(ba3_active_num) as ba3_active_num -- 前天活跃人数
+                FROM (
+                	-- 子查询,查询每个子游戏-原始区服维度的信息
+                	SELECT
+                		source_system,
+                		game_id, -- 子游戏ID
+                		MAX(game_name) as game_name, -- 子游戏名
+                		parent_game_id, -- 父游戏ID
+                		MAX(parent_game_name) as parent_game_name, -- 父游戏名
+                		super_game_id , -- 超父游戏ID
+                		MAX(super_game_name) as super_game_name , -- 超父游戏名
+                		server_id, -- 区服ID
+                		MAX(server_name) as server_name, -- 区服名
+                		boss_server_id, -- 合服ID
+                		MAX(boss_server_name) as boss_server_name, -- 合服名
+                		MAX(merge_time) as merge_time , -- 合服时间
+                		MAX(sum_server_count) as sum_server_count, -- 合服次数
+                		MAX(server_combat_num) as server_combat_num, -- 区服战力
+                		MAX(new_user_count) as new_user_count, -- 新用户人数
+                		MAX(create_role_count) as create_role_count, -- 创角人数
+                		MAX(role_count) as role_count, -- 角色数量
+                		MAX(total_num) as total_num, -- 总付费人数
+                		MAX(total_amount) as total_amount, -- 总付费金额
+                		MAX(ba1) as ba1, -- 今日付费金额
+                		MAX(ba1_num) as ba1_num, -- 今日付费人数
+                		MAX(ba1_count) as ba1_count, -- 今日付费次数
+                		MAX(ba1_active_num) as ba1_active_num, -- 今日活跃人数
+                		MAX(ba2) as ba2, -- 昨日付费金额
+                		MAX(ba2_num) as ba2_num, -- 昨日付费人数
+                		MAX(ba2_count) as ba2_count, -- 昨日付费次数
+                		MAX(ba2_active_num) as ba2_active_num, -- 昨日活跃人数
+                		MAX(ba3) as ba3, -- 前天付费金额
+                		MAX(ba3_num) as ba3_num, -- 前天付费人数
+                		MAX(ba3_count) as ba3_count, -- 前天付费次数
+                		MAX(ba3_active_num) as ba3_active_num -- 前天活跃人数
+                	FROM game_ads.ads_role_combat_num_ranking
+                	GROUP BY game_id ,parent_game_id ,super_game_id ,server_id ,boss_server_id ,source_system
+                ) a
+                LEFT JOIN (
+                	SELECT
+                		a.source_system as b_source_system,
+                		a.server_id as b_server_id,
+                		a.game_id as b_game_id,
+                		MAX(a.server_name) as server_name  ,
+                		MAX(a.main_server_id) as main_server_id,
+                		MAX(c.server_name) as main_server_name,
+                		MAX(a.son_server_ids) as son_server_ids ,
+                		GROUP_CONCAT(a.source_server_ids, ',') as source_server_ids,
+                		GROUP_CONCAT(b.server_name , ',') as source_server_ids_name
+                	FROM dm_game_order.t_game_server_merge a
+                	LEFT JOIN dm_game_order.t_game_server_merge b on a.source_system = b.source_system AND a.game_id = b.game_id AND a.source_server_ids = b.server_id
+                	LEFT JOIN (
+                		SELECT
+                			source_system ,
+                			game_id ,
+                			server_id  ,
+                			MAX(server_name) as server_name
+                		FROM dm_game_order.t_game_server_merge
+                		GROUP BY server_id ,source_system ,game_id
+                	) c on a.source_system = c.source_system AND a.game_id = c.game_id AND a.main_server_id = c.server_id
+                	group by a.server_id , a.source_system , a.game_id
+                ) b ON a.source_system = b.b_source_system AND a.super_game_id = b.b_game_id AND a.boss_server_id = b.b_server_id
+                """;
+    }
+
+    /**
+     * 合服-父游戏维度(区服相关信息)(总记录数)
+     * @return String
+     */
+    private String getRoleCombatRankServerDataSqlBCount(Criteria cri) {
+        return """
+                SELECT
+                    COUNT(1)
+                FROM(
+                    SELECT
+                    	-- 查询每个父游戏-合服服维度的信息
+                    	source_system,
+                    	parent_game_id, -- 父游戏ID
+                    	MAX(parent_game_name) as parent_game_name, -- 父游戏名
+                    	super_game_id , -- 超父游戏ID
+                    	MAX(super_game_name) as super_game_name , -- 超父游戏名
+                    	boss_server_id, -- 合服ID
+                    	MAX(boss_server_name) as boss_server_name, -- 合服名
+                    	MAX(merge_time) as merge_time , -- 合服时间
+                    	TIMESTAMPDIFF(DAY, MAX(merge_time), NOW()) start_day, -- 开服天数
+                    	MAX(sum_server_count) as sum_server_count, -- 合服次数
+                    	MAX(b.main_server_id) as main_server_id, -- 主服ID
+                    	MAX(b.main_server_name) as main_server_name, -- 主服名
+                    	MAX(son_server_ids) as son_server_ids, -- 合服的子服ID列表
+                        MAX(source_server_ids) as source_server_ids, -- 子服ID列表
+                        MAX(source_server_ids_name) as source_server_ids_name, -- 子服名列表
+                    	SUM(server_combat_num) as server_combat_num, -- 区服战力
+                        SUM(new_user_count) as new_user_count, -- 新用户人数
+                        SUM(create_role_count) as create_role_count, -- 创角人数
+                        SUM(role_count) as role_count, -- 角色数量
+                        SUM(total_num) as total_num, -- 总付费人数
+                        SUM(total_amount) as total_amount, -- 总付费金额
+                    	ROUND(IF(SUM(total_num) > 0, SUM(total_amount) / SUM(total_num), 0), 2) as total_arppu, -- 总付费ARPPU
+                        ROUND(IF(SUM(create_role_count) > 0, SUM(total_num) / SUM(create_role_count), 0), 4) as amount_rate, -- 付费率
+                        SUM(ba1) as ba1, -- 今日付费金额
+                        SUM(ba1_num) as ba1_num, -- 今日付费人数
+                        SUM(ba1_count) as ba1_count, -- 今日付费次数
+                        SUM(ba1_active_num) as ba1_active_num, -- 今日活跃人数
+                        SUM(ba2) as ba2, -- 昨日付费金额
+                        SUM(ba2_num) as ba2_num, -- 昨日付费人数
+                        SUM(ba2_count) as ba2_count, -- 昨日付费次数
+                        SUM(ba2_active_num) as ba2_active_num, -- 昨日活跃人数
+                        SUM(ba3) as ba3, -- 前天付费金额
+                        SUM(ba3_num) as ba3_num, -- 前天付费人数
+                        SUM(ba3_count) as ba3_count, -- 前天付费次数
+                        SUM(ba3_active_num) as ba3_active_num -- 前天活跃人数
+                    FROM (
+                    	-- 子查询,查询每个子游戏-原始区服维度的信息
+                    	SELECT
+                    		source_system,
+                    		game_id, -- 子游戏ID
+                    		MAX(game_name) as game_name, -- 子游戏名
+                    		parent_game_id, -- 父游戏ID
+                    		MAX(parent_game_name) as parent_game_name, -- 父游戏名
+                    		super_game_id , -- 超父游戏ID
+                    		MAX(super_game_name) as super_game_name , -- 超父游戏名
+                    		server_id, -- 区服ID
+                    		MAX(server_name) as server_name, -- 区服名
+                    		boss_server_id, -- 合服ID
+                    		MAX(boss_server_name) as boss_server_name, -- 合服名
+                    		MAX(merge_time) as merge_time , -- 合服时间
+                    		MAX(sum_server_count) as sum_server_count, -- 合服次数
+                    		MAX(server_combat_num) as server_combat_num, -- 区服战力
+                    		MAX(new_user_count) as new_user_count, -- 新用户人数
+                    		MAX(create_role_count) as create_role_count, -- 创角人数
+                    		MAX(role_count) as role_count, -- 角色数量
+                    		MAX(total_num) as total_num, -- 总付费人数
+                    		MAX(total_amount) as total_amount, -- 总付费金额
+                    		MAX(ba1) as ba1, -- 今日付费金额
+                    		MAX(ba1_num) as ba1_num, -- 今日付费人数
+                    		MAX(ba1_count) as ba1_count, -- 今日付费次数
+                    		MAX(ba1_active_num) as ba1_active_num, -- 今日活跃人数
+                    		MAX(ba2) as ba2, -- 昨日付费金额
+                    		MAX(ba2_num) as ba2_num, -- 昨日付费人数
+                    		MAX(ba2_count) as ba2_count, -- 昨日付费次数
+                    		MAX(ba2_active_num) as ba2_active_num, -- 昨日活跃人数
+                    		MAX(ba3) as ba3, -- 前天付费金额
+                    		MAX(ba3_num) as ba3_num, -- 前天付费人数
+                    		MAX(ba3_count) as ba3_count, -- 前天付费次数
+                    		MAX(ba3_active_num) as ba3_active_num -- 前天活跃人数
+                    	FROM game_ads.ads_role_combat_num_ranking
+                    	GROUP BY game_id ,parent_game_id ,super_game_id ,server_id ,boss_server_id ,source_system
+                    ) a
+                    LEFT JOIN (
+                    	SELECT
+                    		a.source_system as b_source_system,
+                    		a.server_id as b_server_id,
+                    		a.game_id as b_game_id,
+                    		MAX(a.server_name) as server_name  ,
+                    		MAX(a.main_server_id) as main_server_id,
+                    		MAX(c.server_name) as main_server_name,
+                    		MAX(a.son_server_ids) as son_server_ids ,
+                    		GROUP_CONCAT(a.source_server_ids, ',') as source_server_ids,
+                    		GROUP_CONCAT(b.server_name , ',') as source_server_ids_name
+                    	FROM dm_game_order.t_game_server_merge a
+                    	LEFT JOIN dm_game_order.t_game_server_merge b on a.source_system = b.source_system AND a.game_id = b.game_id AND a.source_server_ids = b.server_id
+                    	LEFT JOIN (
+                    		SELECT
+                    			source_system ,
+                    			game_id ,
+                    			server_id  ,
+                    			MAX(server_name) as server_name
+                    		FROM dm_game_order.t_game_server_merge
+                    		GROUP BY server_id ,source_system ,game_id
+                    	) c on a.source_system = c.source_system AND a.game_id = c.game_id AND a.main_server_id = c.server_id
+                    	group by a.server_id , a.source_system , a.game_id
+                    ) b ON a.source_system = b.b_source_system AND a.super_game_id = b.b_game_id AND a.boss_server_id = b.b_server_id
+                """ + cri +
+                """
+                ) a
+                """;
+    }
+
+    /**
+     * 原始服-超父游戏维度(区服相关信息)
+     * @return String
+     */
+    private String getRoleCombatRankServerDataSqlC() {
+        return """
+                SELECT
+                	-- 查询每个超父游戏-原始区服维度的信息
+                	source_system,
+                	super_game_id , -- 超父游戏ID
+                	MAX(super_game_name) as super_game_name , -- 超父游戏名
+                	server_id, -- 区服ID
+                	MAX(server_name) as server_name, -- 区服名
+                	MAX(dt) as dt, -- 开服日期
+                	boss_server_id, -- 合服ID
+                	MAX(boss_server_name) as boss_server_name, -- 合服名
+                	MAX(merge_time) as merge_time , -- 合服时间
+                	MAX(sum_server_count) as sum_server_count, -- 合服次数
+                	SUM(server_combat_num) as server_combat_num, -- 区服战力
+                    SUM(new_user_count) as new_user_count, -- 新用户人数
+                    SUM(create_role_count) as create_role_count, -- 创角人数
+                    SUM(role_count) as role_count, -- 角色数量
+                    SUM(total_num) as total_num, -- 总付费人数
+                    SUM(total_amount) as total_amount, -- 总付费金额
+                    ROUND(IF(SUM(total_num) > 0, SUM(total_amount) / SUM(total_num), 0), 2) as total_arppu, -- 总付费ARPPU
+                    ROUND(IF(SUM(create_role_count) > 0, SUM(total_num) / SUM(create_role_count), 0), 4) as amount_rate, -- 付费率
+                    SUM(ba1) as ba1, -- 今日付费金额
+                    SUM(ba1_num) as ba1_num, -- 今日付费人数
+                    SUM(ba1_count) as ba1_count, -- 今日付费次数
+                    SUM(ba1_active_num) as ba1_active_num, -- 今日活跃人数
+                    SUM(ba2) as ba2, -- 昨日付费金额
+                    SUM(ba2_num) as ba2_num, -- 昨日付费人数
+                    SUM(ba2_count) as ba2_count, -- 昨日付费次数
+                    SUM(ba2_active_num) as ba2_active_num, -- 昨日活跃人数
+                    SUM(ba3) as ba3, -- 前天付费金额
+                    SUM(ba3_num) as ba3_num, -- 前天付费人数
+                    SUM(ba3_count) as ba3_count, -- 前天付费次数
+                    SUM(ba3_active_num) as ba3_active_num -- 前天活跃人数
+                FROM (
+                	SELECT
+                		-- 子查询,查询每个父游戏-原始区服维度的信息
+                		source_system,
+                		parent_game_id, -- 父游戏ID
+                		MAX(parent_game_name) as parent_game_name, -- 父游戏名
+                		super_game_id , -- 超父游戏ID
+                		MAX(super_game_name) as super_game_name , -- 超父游戏名
+                		server_id, -- 区服ID
+                		MAX(server_name) as server_name, -- 区服名
+                		MAX(dt) as dt, -- 开服日期
+                		boss_server_id, -- 合服ID
+                		MAX(boss_server_name) as boss_server_name, -- 合服名
+                		MAX(merge_time) as merge_time , -- 合服时间
+                		MAX(sum_server_count) as sum_server_count, -- 合服次数
+                		SUM(server_combat_num) as server_combat_num, -- 区服战力
+                	    SUM(new_user_count) as new_user_count, -- 新用户人数
+                	    SUM(create_role_count) as create_role_count, -- 创角人数
+                	    SUM(role_count) as role_count, -- 角色数量
+                	    SUM(total_num) as total_num, -- 总付费人数
+                	    SUM(total_amount) as total_amount, -- 总付费金额
+                	    SUM(ba1) as ba1, -- 今日付费金额
+                	    SUM(ba1_num) as ba1_num, -- 今日付费人数
+                	    SUM(ba1_count) as ba1_count, -- 今日付费次数
+                	    SUM(ba1_active_num) as ba1_active_num, -- 今日活跃人数
+                	    SUM(ba2) as ba2, -- 昨日付费金额
+                	    SUM(ba2_num) as ba2_num, -- 昨日付费人数
+                	    SUM(ba2_count) as ba2_count, -- 昨日付费次数
+                	    SUM(ba2_active_num) as ba2_active_num, -- 昨日活跃人数
+                	    SUM(ba3) as ba3, -- 前天付费金额
+                	    SUM(ba3_num) as ba3_num, -- 前天付费人数
+                	    SUM(ba3_count) as ba3_count, -- 前天付费次数
+                	    SUM(ba3_active_num) as ba3_active_num -- 前天活跃人数
+                	FROM (
+                		-- 子查询,查询每个子游戏-原始区服维度的信息
+                		SELECT
+                			source_system,
+                			game_id, -- 子游戏ID
+                			MAX(game_name) as game_name, -- 子游戏名
+                			parent_game_id, -- 父游戏ID
+                			MAX(parent_game_name) as parent_game_name, -- 父游戏名
+                			super_game_id , -- 超父游戏ID
+                			MAX(super_game_name) as super_game_name , -- 超父游戏名
+                			server_id, -- 区服ID
+                			MAX(server_name) as server_name, -- 区服名
+                			MAX(`date`) as dt, -- 开服日期
+                			boss_server_id, -- 合服ID
+                			MAX(boss_server_name) as boss_server_name, -- 合服名
+                			MAX(merge_time) as merge_time , -- 合服时间
+                			MAX(sum_server_count) as sum_server_count, -- 合服次数
+                			MAX(server_combat_num) as server_combat_num, -- 区服战力
+                			MAX(new_user_count) as new_user_count, -- 新用户人数
+                			MAX(create_role_count) as create_role_count, -- 创角人数
+                			MAX(role_count) as role_count, -- 角色数量
+                			MAX(total_num) as total_num, -- 总付费人数
+                			MAX(total_amount) as total_amount, -- 总付费金额
+                			MAX(ba1) as ba1, -- 今日付费金额
+                			MAX(ba1_num) as ba1_num, -- 今日付费人数
+                			MAX(ba1_count) as ba1_count, -- 今日付费次数
+                			MAX(ba1_active_num) as ba1_active_num, -- 今日活跃人数
+                			MAX(ba2) as ba2, -- 昨日付费金额
+                			MAX(ba2_num) as ba2_num, -- 昨日付费人数
+                			MAX(ba2_count) as ba2_count, -- 昨日付费次数
+                			MAX(ba2_active_num) as ba2_active_num, -- 昨日活跃人数
+                			MAX(ba3) as ba3, -- 前天付费金额
+                			MAX(ba3_num) as ba3_num, -- 前天付费人数
+                			MAX(ba3_count) as ba3_count, -- 前天付费次数
+                			MAX(ba3_active_num) as ba3_active_num -- 前天活跃人数
+                		FROM game_ads.ads_role_combat_num_ranking
+                		GROUP BY game_id ,parent_game_id ,super_game_id ,server_id ,boss_server_id ,source_system
+                	) a GROUP BY parent_game_id ,super_game_id ,server_id ,boss_server_id ,source_system
+                ) a
+                """;
+    }
+
+    /**
+     * 原始服-超父游戏维度(区服相关信息)(总记录数)
+     * @return String
+     */
+    private String getRoleCombatRankServerDataSqlCCount(Criteria cri) {
+        return """
+                SELECT
+                    COUNT(1)
+                FROM(
+                    SELECT
+                    	-- 查询每个超父游戏-原始区服维度的信息
+                    	source_system,
+                    	super_game_id , -- 超父游戏ID
+                    	MAX(super_game_name) as super_game_name , -- 超父游戏名
+                    	server_id, -- 区服ID
+                    	MAX(server_name) as server_name, -- 区服名
+                    	MAX(dt) as dt, -- 开服日期
+                    	boss_server_id, -- 合服ID
+                    	MAX(boss_server_name) as boss_server_name, -- 合服名
+                    	MAX(merge_time) as merge_time , -- 合服时间
+                    	MAX(sum_server_count) as sum_server_count, -- 合服次数
+                    	SUM(server_combat_num) as server_combat_num, -- 区服战力
+                        SUM(new_user_count) as new_user_count, -- 新用户人数
+                        SUM(create_role_count) as create_role_count, -- 创角人数
+                        SUM(role_count) as role_count, -- 角色数量
+                        SUM(total_num) as total_num, -- 总付费人数
+                        SUM(total_amount) as total_amount, -- 总付费金额
+                        ROUND(IF(SUM(total_num) > 0, SUM(total_amount) / SUM(total_num), 0), 2) as total_arppu, -- 总付费ARPPU
+                        ROUND(IF(SUM(create_role_count) > 0, SUM(total_num) / SUM(create_role_count), 0), 4) as amount_rate, -- 付费率
+                        SUM(ba1) as ba1, -- 今日付费金额
+                        SUM(ba1_num) as ba1_num, -- 今日付费人数
+                        SUM(ba1_count) as ba1_count, -- 今日付费次数
+                        SUM(ba1_active_num) as ba1_active_num, -- 今日活跃人数
+                        SUM(ba2) as ba2, -- 昨日付费金额
+                        SUM(ba2_num) as ba2_num, -- 昨日付费人数
+                        SUM(ba2_count) as ba2_count, -- 昨日付费次数
+                        SUM(ba2_active_num) as ba2_active_num, -- 昨日活跃人数
+                        SUM(ba3) as ba3, -- 前天付费金额
+                        SUM(ba3_num) as ba3_num, -- 前天付费人数
+                        SUM(ba3_count) as ba3_count, -- 前天付费次数
+                        SUM(ba3_active_num) as ba3_active_num -- 前天活跃人数
+                    FROM (
+                    	SELECT
+                    		-- 子查询,查询每个父游戏-原始区服维度的信息
+                    		source_system,
+                    		parent_game_id, -- 父游戏ID
+                    		MAX(parent_game_name) as parent_game_name, -- 父游戏名
+                    		super_game_id , -- 超父游戏ID
+                    		MAX(super_game_name) as super_game_name , -- 超父游戏名
+                    		server_id, -- 区服ID
+                    		MAX(server_name) as server_name, -- 区服名
+                    		MAX(dt) as dt, -- 开服日期
+                    		boss_server_id, -- 合服ID
+                    		MAX(boss_server_name) as boss_server_name, -- 合服名
+                    		MAX(merge_time) as merge_time , -- 合服时间
+                    		MAX(sum_server_count) as sum_server_count, -- 合服次数
+                    		SUM(server_combat_num) as server_combat_num, -- 区服战力
+                    	    SUM(new_user_count) as new_user_count, -- 新用户人数
+                    	    SUM(create_role_count) as create_role_count, -- 创角人数
+                    	    SUM(role_count) as role_count, -- 角色数量
+                    	    SUM(total_num) as total_num, -- 总付费人数
+                    	    SUM(total_amount) as total_amount, -- 总付费金额
+                    	    SUM(ba1) as ba1, -- 今日付费金额
+                    	    SUM(ba1_num) as ba1_num, -- 今日付费人数
+                    	    SUM(ba1_count) as ba1_count, -- 今日付费次数
+                    	    SUM(ba1_active_num) as ba1_active_num, -- 今日活跃人数
+                    	    SUM(ba2) as ba2, -- 昨日付费金额
+                    	    SUM(ba2_num) as ba2_num, -- 昨日付费人数
+                    	    SUM(ba2_count) as ba2_count, -- 昨日付费次数
+                    	    SUM(ba2_active_num) as ba2_active_num, -- 昨日活跃人数
+                    	    SUM(ba3) as ba3, -- 前天付费金额
+                    	    SUM(ba3_num) as ba3_num, -- 前天付费人数
+                    	    SUM(ba3_count) as ba3_count, -- 前天付费次数
+                    	    SUM(ba3_active_num) as ba3_active_num -- 前天活跃人数
+                    	FROM (
+                    		-- 子查询,查询每个子游戏-原始区服维度的信息
+                    		SELECT
+                    			source_system,
+                    			game_id, -- 子游戏ID
+                    			MAX(game_name) as game_name, -- 子游戏名
+                    			parent_game_id, -- 父游戏ID
+                    			MAX(parent_game_name) as parent_game_name, -- 父游戏名
+                    			super_game_id , -- 超父游戏ID
+                    			MAX(super_game_name) as super_game_name , -- 超父游戏名
+                    			server_id, -- 区服ID
+                    			MAX(server_name) as server_name, -- 区服名
+                    			MAX(`date`) as dt, -- 开服日期
+                    			boss_server_id, -- 合服ID
+                    			MAX(boss_server_name) as boss_server_name, -- 合服名
+                    			MAX(merge_time) as merge_time , -- 合服时间
+                    			MAX(sum_server_count) as sum_server_count, -- 合服次数
+                    			MAX(server_combat_num) as server_combat_num, -- 区服战力
+                    			MAX(new_user_count) as new_user_count, -- 新用户人数
+                    			MAX(create_role_count) as create_role_count, -- 创角人数
+                    			MAX(role_count) as role_count, -- 角色数量
+                    			MAX(total_num) as total_num, -- 总付费人数
+                    			MAX(total_amount) as total_amount, -- 总付费金额
+                    			MAX(ba1) as ba1, -- 今日付费金额
+                    			MAX(ba1_num) as ba1_num, -- 今日付费人数
+                    			MAX(ba1_count) as ba1_count, -- 今日付费次数
+                    			MAX(ba1_active_num) as ba1_active_num, -- 今日活跃人数
+                    			MAX(ba2) as ba2, -- 昨日付费金额
+                    			MAX(ba2_num) as ba2_num, -- 昨日付费人数
+                    			MAX(ba2_count) as ba2_count, -- 昨日付费次数
+                    			MAX(ba2_active_num) as ba2_active_num, -- 昨日活跃人数
+                    			MAX(ba3) as ba3, -- 前天付费金额
+                    			MAX(ba3_num) as ba3_num, -- 前天付费人数
+                    			MAX(ba3_count) as ba3_count, -- 前天付费次数
+                    			MAX(ba3_active_num) as ba3_active_num -- 前天活跃人数
+                    		FROM game_ads.ads_role_combat_num_ranking
+                    		GROUP BY game_id ,parent_game_id ,super_game_id ,server_id ,boss_server_id ,source_system
+                    	) a GROUP BY parent_game_id ,super_game_id ,server_id ,boss_server_id ,source_system
+                    ) a
+                """ + cri+
+                """
+                ) a
+                """;
+    }
+
+    /**
+     * 合服-超父游戏维度(区服相关信息)
+     * @return String
+     */
+    private String getRoleCombatRankServerDataSqlD() {
+        return """
+                SELECT
+                	-- 查询每个超父游戏-合服维度的信息
+                	source_system,
+                	super_game_id , -- 超父游戏ID
+                	MAX(super_game_name) as super_game_name , -- 超父游戏名
+                	boss_server_id, -- 合服ID
+                	MAX(boss_server_name) as boss_server_name, -- 合服名
+                	MAX(merge_time) as merge_time , -- 合服时间
+                	TIMESTAMPDIFF(DAY, MAX(merge_time), NOW()) start_day, -- 开服天数
+                	MAX(sum_server_count) as sum_server_count, -- 合服次数
+                	MAX(b.main_server_id) as main_server_id, -- 主服ID
+                	MAX(b.main_server_name) as main_server_name, -- 主服名
+                	MAX(son_server_ids) as son_server_ids, -- 合服的子服ID列表
+                    MAX(source_server_ids) as source_server_ids, -- 子服ID列表
+                    MAX(source_server_ids_name) as source_server_ids_name, -- 子服名列表
+                	SUM(server_combat_num) as server_combat_num, -- 区服战力
+                    SUM(new_user_count) as new_user_count, -- 新用户人数
+                    SUM(create_role_count) as create_role_count, -- 创角人数
+                    SUM(role_count) as role_count, -- 角色数量
+                    SUM(total_num) as total_num, -- 总付费人数
+                    SUM(total_amount) as total_amount, -- 总付费金额
+                    ROUND(IF(SUM(total_num) > 0, SUM(total_amount) / SUM(total_num), 0), 2) as total_arppu, -- 总付费ARPPU
+                    ROUND(IF(SUM(create_role_count) > 0, SUM(total_num) / SUM(create_role_count), 0), 4) as amount_rate, -- 付费率
+                    SUM(ba1) as ba1, -- 今日付费金额
+                    SUM(ba1_num) as ba1_num, -- 今日付费人数
+                    SUM(ba1_count) as ba1_count, -- 今日付费次数
+                    SUM(ba1_active_num) as ba1_active_num, -- 今日活跃人数
+                    SUM(ba2) as ba2, -- 昨日付费金额
+                    SUM(ba2_num) as ba2_num, -- 昨日付费人数
+                    SUM(ba2_count) as ba2_count, -- 昨日付费次数
+                    SUM(ba2_active_num) as ba2_active_num, -- 昨日活跃人数
+                    SUM(ba3) as ba3, -- 前天付费金额
+                    SUM(ba3_num) as ba3_num, -- 前天付费人数
+                    SUM(ba3_count) as ba3_count, -- 前天付费次数
+                    SUM(ba3_active_num) as ba3_active_num -- 前天活跃人数
+                FROM (
+                	SELECT
+                		-- 子查询,查询每个超父游戏-原始区服维度的信息
+                		source_system,
+                		super_game_id , -- 超父游戏ID
+                		MAX(super_game_name) as super_game_name , -- 超父游戏名
+                		server_id, -- 区服ID
+                		MAX(server_name) as server_name, -- 区服名
+                		boss_server_id, -- 合服ID
+                		MAX(boss_server_name) as boss_server_name, -- 合服名
+                		MAX(merge_time) as merge_time , -- 合服时间
+                		MAX(sum_server_count) as sum_server_count, -- 合服次数
+                		SUM(server_combat_num) as server_combat_num, -- 区服战力
+                	    SUM(new_user_count) as new_user_count, -- 新用户人数
+                	    SUM(create_role_count) as create_role_count, -- 创角人数
+                	    SUM(role_count) as role_count, -- 角色数量
+                	    SUM(total_num) as total_num, -- 总付费人数
+                	    SUM(total_amount) as total_amount, -- 总付费金额
+                	    SUM(ba1) as ba1, -- 今日付费金额
+                	    SUM(ba1_num) as ba1_num, -- 今日付费人数
+                	    SUM(ba1_count) as ba1_count, -- 今日付费次数
+                	    SUM(ba1_active_num) as ba1_active_num, -- 今日活跃人数
+                	    SUM(ba2) as ba2, -- 昨日付费金额
+                	    SUM(ba2_num) as ba2_num, -- 昨日付费人数
+                	    SUM(ba2_count) as ba2_count, -- 昨日付费次数
+                	    SUM(ba2_active_num) as ba2_active_num, -- 昨日活跃人数
+                	    SUM(ba3) as ba3, -- 前天付费金额
+                	    SUM(ba3_num) as ba3_num, -- 前天付费人数
+                	    SUM(ba3_count) as ba3_count, -- 前天付费次数
+                	    SUM(ba3_active_num) as ba3_active_num -- 前天活跃人数
+                	FROM (
+                		SELECT
+                			-- 子查询,查询每个父游戏-区服维度的信息
+                			source_system,
+                			parent_game_id, -- 父游戏ID
+                			MAX(parent_game_name) as parent_game_name, -- 父游戏名
+                			super_game_id , -- 超父游戏ID
+                			MAX(super_game_name) as super_game_name , -- 超父游戏名
+                			server_id, -- 区服ID
+                			MAX(server_name) as server_name, -- 区服名
+                			boss_server_id, -- 合服ID
+                			MAX(boss_server_name) as boss_server_name, -- 合服名
+                			MAX(merge_time) as merge_time , -- 合服时间
+                			MAX(sum_server_count) as sum_server_count, -- 合服次数
+                			SUM(server_combat_num) as server_combat_num, -- 区服战力
+                		    SUM(new_user_count) as new_user_count, -- 新用户人数
+                		    SUM(create_role_count) as create_role_count, -- 创角人数
+                		    SUM(role_count) as role_count, -- 角色数量
+                		    SUM(total_num) as total_num, -- 总付费人数
+                		    SUM(total_amount) as total_amount, -- 总付费金额
+                		    SUM(ba1) as ba1, -- 今日付费金额
+                		    SUM(ba1_num) as ba1_num, -- 今日付费人数
+                		    SUM(ba1_count) as ba1_count, -- 今日付费次数
+                		    SUM(ba1_active_num) as ba1_active_num, -- 今日活跃人数
+                		    SUM(ba2) as ba2, -- 昨日付费金额
+                		    SUM(ba2_num) as ba2_num, -- 昨日付费人数
+                		    SUM(ba2_count) as ba2_count, -- 昨日付费次数
+                		    SUM(ba2_active_num) as ba2_active_num, -- 昨日活跃人数
+                		    SUM(ba3) as ba3, -- 前天付费金额
+                		    SUM(ba3_num) as ba3_num, -- 前天付费人数
+                		    SUM(ba3_count) as ba3_count, -- 前天付费次数
+                		    SUM(ba3_active_num) as ba3_active_num -- 前天活跃人数
+                		FROM (
+                			-- 子查询,查询每个子游戏-原始区服维度的信息
+                			SELECT
+                				source_system,
+                				game_id, -- 子游戏ID
+                				MAX(game_name) as game_name, -- 子游戏名
+                				parent_game_id, -- 父游戏ID
+                				MAX(parent_game_name) as parent_game_name, -- 父游戏名
+                				super_game_id , -- 超父游戏ID
+                				MAX(super_game_name) as super_game_name , -- 超父游戏名
+                				server_id, -- 区服ID
+                				MAX(server_name) as server_name, -- 区服名
+                				boss_server_id, -- 合服ID
+                				MAX(boss_server_name) as boss_server_name, -- 合服名
+                				MAX(merge_time) as merge_time , -- 合服时间
+                				MAX(sum_server_count) as sum_server_count, -- 合服次数
+                				MAX(server_combat_num) as server_combat_num, -- 区服战力
+                				MAX(new_user_count) as new_user_count, -- 新用户人数
+                				MAX(create_role_count) as create_role_count, -- 创角人数
+                				MAX(role_count) as role_count, -- 角色数量
+                				MAX(total_num) as total_num, -- 总付费人数
+                				MAX(total_amount) as total_amount, -- 总付费金额
+                				MAX(ba1) as ba1, -- 今日付费金额
+                				MAX(ba1_num) as ba1_num, -- 今日付费人数
+                				MAX(ba1_count) as ba1_count, -- 今日付费次数
+                				MAX(ba1_active_num) as ba1_active_num, -- 今日活跃人数
+                				MAX(ba2) as ba2, -- 昨日付费金额
+                				MAX(ba2_num) as ba2_num, -- 昨日付费人数
+                				MAX(ba2_count) as ba2_count, -- 昨日付费次数
+                				MAX(ba2_active_num) as ba2_active_num, -- 昨日活跃人数
+                				MAX(ba3) as ba3, -- 前天付费金额
+                				MAX(ba3_num) as ba3_num, -- 前天付费人数
+                				MAX(ba3_count) as ba3_count, -- 前天付费次数
+                				MAX(ba3_active_num) as ba3_active_num -- 前天活跃人数
+                			FROM game_ads.ads_role_combat_num_ranking
+                			GROUP BY game_id ,parent_game_id ,super_game_id ,server_id ,boss_server_id ,source_system
+                		) a GROUP BY parent_game_id ,super_game_id ,server_id ,boss_server_id ,source_system
+                	) a GROUP BY super_game_id ,server_id ,boss_server_id ,source_system
+                ) a
+                LEFT JOIN (
+                	SELECT
+                		a.source_system as b_source_system,
+                		a.server_id as b_server_id,
+                		a.game_id as b_game_id,
+                		MAX(a.server_name) as server_name  ,
+                		MAX(a.main_server_id) as main_server_id,
+                		MAX(c.server_name) as main_server_name,
+                		MAX(a.son_server_ids) as son_server_ids ,
+                		GROUP_CONCAT(a.source_server_ids, ',') as source_server_ids,
+                		GROUP_CONCAT(b.server_name , ',') as source_server_ids_name
+                	FROM dm_game_order.t_game_server_merge a
+                	LEFT JOIN dm_game_order.t_game_server_merge b on a.source_system = b.source_system AND a.game_id = b.game_id AND a.source_server_ids = b.server_id
+                	LEFT JOIN (
+                		SELECT
+                			source_system ,
+                			game_id ,
+                			server_id  ,
+                			MAX(server_name) as server_name
+                		FROM dm_game_order.t_game_server_merge
+                		GROUP BY server_id ,source_system ,game_id
+                	) c on a.source_system = c.source_system AND a.game_id = c.game_id AND a.main_server_id = c.server_id
+                	group by a.server_id , a.source_system , a.game_id
+                ) b ON a.source_system = b.b_source_system AND a.super_game_id = b.b_game_id AND a.boss_server_id = b.b_server_id
+                """;
+    }
+
+    /**
+     * 合服-超父游戏维度(区服相关信息)(总记录数)
+     * @return String
+     */
+    private String getRoleCombatRankServerDataSqlDCount(Criteria cri) {
+        return """
+                SELECT
+                    COUNT(1)
+                FROM(
+                    SELECT
+                    	-- 查询每个超父游戏-合服维度的信息
+                    	source_system,
+                    	super_game_id , -- 超父游戏ID
+                    	MAX(super_game_name) as super_game_name , -- 超父游戏名
+                    	boss_server_id, -- 合服ID
+                    	MAX(boss_server_name) as boss_server_name, -- 合服名
+                    	MAX(merge_time) as merge_time , -- 合服时间
+                    	TIMESTAMPDIFF(DAY, MAX(merge_time), NOW()) start_day, -- 开服天数
+                    	MAX(sum_server_count) as sum_server_count, -- 合服次数
+                    	MAX(b.main_server_id) as main_server_id, -- 主服ID
+                    	MAX(b.main_server_name) as main_server_name, -- 主服名
+                    	MAX(son_server_ids) as son_server_ids, -- 合服的子服ID列表
+                        MAX(source_server_ids) as source_server_ids, -- 子服ID列表
+                        MAX(source_server_ids_name) as source_server_ids_name, -- 子服名列表
+                    	SUM(server_combat_num) as server_combat_num, -- 区服战力
+                        SUM(new_user_count) as new_user_count, -- 新用户人数
+                        SUM(create_role_count) as create_role_count, -- 创角人数
+                        SUM(role_count) as role_count, -- 角色数量
+                        SUM(total_num) as total_num, -- 总付费人数
+                        SUM(total_amount) as total_amount, -- 总付费金额
+                        ROUND(IF(SUM(total_num) > 0, SUM(total_amount) / SUM(total_num), 0), 2) as total_arppu, -- 总付费ARPPU
+                        ROUND(IF(SUM(create_role_count) > 0, SUM(total_num) / SUM(create_role_count), 0), 4) as amount_rate, -- 付费率
+                        SUM(ba1) as ba1, -- 今日付费金额
+                        SUM(ba1_num) as ba1_num, -- 今日付费人数
+                        SUM(ba1_count) as ba1_count, -- 今日付费次数
+                        SUM(ba1_active_num) as ba1_active_num, -- 今日活跃人数
+                        SUM(ba2) as ba2, -- 昨日付费金额
+                        SUM(ba2_num) as ba2_num, -- 昨日付费人数
+                        SUM(ba2_count) as ba2_count, -- 昨日付费次数
+                        SUM(ba2_active_num) as ba2_active_num, -- 昨日活跃人数
+                        SUM(ba3) as ba3, -- 前天付费金额
+                        SUM(ba3_num) as ba3_num, -- 前天付费人数
+                        SUM(ba3_count) as ba3_count, -- 前天付费次数
+                        SUM(ba3_active_num) as ba3_active_num -- 前天活跃人数
+                    FROM (
+                    	SELECT
+                    		-- 子查询,查询每个超父游戏-原始区服维度的信息
+                    		source_system,
+                    		super_game_id , -- 超父游戏ID
+                    		MAX(super_game_name) as super_game_name , -- 超父游戏名
+                    		server_id, -- 区服ID
+                    		MAX(server_name) as server_name, -- 区服名
+                    		boss_server_id, -- 合服ID
+                    		MAX(boss_server_name) as boss_server_name, -- 合服名
+                    		MAX(merge_time) as merge_time , -- 合服时间
+                    		MAX(sum_server_count) as sum_server_count, -- 合服次数
+                    		SUM(server_combat_num) as server_combat_num, -- 区服战力
+                    	    SUM(new_user_count) as new_user_count, -- 新用户人数
+                    	    SUM(create_role_count) as create_role_count, -- 创角人数
+                    	    SUM(role_count) as role_count, -- 角色数量
+                    	    SUM(total_num) as total_num, -- 总付费人数
+                    	    SUM(total_amount) as total_amount, -- 总付费金额
+                    	    SUM(ba1) as ba1, -- 今日付费金额
+                    	    SUM(ba1_num) as ba1_num, -- 今日付费人数
+                    	    SUM(ba1_count) as ba1_count, -- 今日付费次数
+                    	    SUM(ba1_active_num) as ba1_active_num, -- 今日活跃人数
+                    	    SUM(ba2) as ba2, -- 昨日付费金额
+                    	    SUM(ba2_num) as ba2_num, -- 昨日付费人数
+                    	    SUM(ba2_count) as ba2_count, -- 昨日付费次数
+                    	    SUM(ba2_active_num) as ba2_active_num, -- 昨日活跃人数
+                    	    SUM(ba3) as ba3, -- 前天付费金额
+                    	    SUM(ba3_num) as ba3_num, -- 前天付费人数
+                    	    SUM(ba3_count) as ba3_count, -- 前天付费次数
+                    	    SUM(ba3_active_num) as ba3_active_num -- 前天活跃人数
+                    	FROM (
+                    		SELECT
+                    			-- 子查询,查询每个父游戏-区服维度的信息
+                    			source_system,
+                    			parent_game_id, -- 父游戏ID
+                    			MAX(parent_game_name) as parent_game_name, -- 父游戏名
+                    			super_game_id , -- 超父游戏ID
+                    			MAX(super_game_name) as super_game_name , -- 超父游戏名
+                    			server_id, -- 区服ID
+                    			MAX(server_name) as server_name, -- 区服名
+                    			boss_server_id, -- 合服ID
+                    			MAX(boss_server_name) as boss_server_name, -- 合服名
+                    			MAX(merge_time) as merge_time , -- 合服时间
+                    			MAX(sum_server_count) as sum_server_count, -- 合服次数
+                    			SUM(server_combat_num) as server_combat_num, -- 区服战力
+                    		    SUM(new_user_count) as new_user_count, -- 新用户人数
+                    		    SUM(create_role_count) as create_role_count, -- 创角人数
+                    		    SUM(role_count) as role_count, -- 角色数量
+                    		    SUM(total_num) as total_num, -- 总付费人数
+                    		    SUM(total_amount) as total_amount, -- 总付费金额
+                    		    SUM(ba1) as ba1, -- 今日付费金额
+                    		    SUM(ba1_num) as ba1_num, -- 今日付费人数
+                    		    SUM(ba1_count) as ba1_count, -- 今日付费次数
+                    		    SUM(ba1_active_num) as ba1_active_num, -- 今日活跃人数
+                    		    SUM(ba2) as ba2, -- 昨日付费金额
+                    		    SUM(ba2_num) as ba2_num, -- 昨日付费人数
+                    		    SUM(ba2_count) as ba2_count, -- 昨日付费次数
+                    		    SUM(ba2_active_num) as ba2_active_num, -- 昨日活跃人数
+                    		    SUM(ba3) as ba3, -- 前天付费金额
+                    		    SUM(ba3_num) as ba3_num, -- 前天付费人数
+                    		    SUM(ba3_count) as ba3_count, -- 前天付费次数
+                    		    SUM(ba3_active_num) as ba3_active_num -- 前天活跃人数
+                    		FROM (
+                    			-- 子查询,查询每个子游戏-原始区服维度的信息
+                    			SELECT
+                    				source_system,
+                    				game_id, -- 子游戏ID
+                    				MAX(game_name) as game_name, -- 子游戏名
+                    				parent_game_id, -- 父游戏ID
+                    				MAX(parent_game_name) as parent_game_name, -- 父游戏名
+                    				super_game_id , -- 超父游戏ID
+                    				MAX(super_game_name) as super_game_name , -- 超父游戏名
+                    				server_id, -- 区服ID
+                    				MAX(server_name) as server_name, -- 区服名
+                    				boss_server_id, -- 合服ID
+                    				MAX(boss_server_name) as boss_server_name, -- 合服名
+                    				MAX(merge_time) as merge_time , -- 合服时间
+                    				MAX(sum_server_count) as sum_server_count, -- 合服次数
+                    				MAX(server_combat_num) as server_combat_num, -- 区服战力
+                    				MAX(new_user_count) as new_user_count, -- 新用户人数
+                    				MAX(create_role_count) as create_role_count, -- 创角人数
+                    				MAX(role_count) as role_count, -- 角色数量
+                    				MAX(total_num) as total_num, -- 总付费人数
+                    				MAX(total_amount) as total_amount, -- 总付费金额
+                    				MAX(ba1) as ba1, -- 今日付费金额
+                    				MAX(ba1_num) as ba1_num, -- 今日付费人数
+                    				MAX(ba1_count) as ba1_count, -- 今日付费次数
+                    				MAX(ba1_active_num) as ba1_active_num, -- 今日活跃人数
+                    				MAX(ba2) as ba2, -- 昨日付费金额
+                    				MAX(ba2_num) as ba2_num, -- 昨日付费人数
+                    				MAX(ba2_count) as ba2_count, -- 昨日付费次数
+                    				MAX(ba2_active_num) as ba2_active_num, -- 昨日活跃人数
+                    				MAX(ba3) as ba3, -- 前天付费金额
+                    				MAX(ba3_num) as ba3_num, -- 前天付费人数
+                    				MAX(ba3_count) as ba3_count, -- 前天付费次数
+                    				MAX(ba3_active_num) as ba3_active_num -- 前天活跃人数
+                    			FROM game_ads.ads_role_combat_num_ranking
+                    			GROUP BY game_id ,parent_game_id ,super_game_id ,server_id ,boss_server_id ,source_system
+                    		) a GROUP BY parent_game_id ,super_game_id ,server_id ,boss_server_id ,source_system
+                    	) a GROUP BY super_game_id ,server_id ,boss_server_id ,source_system
+                    ) a
+                    LEFT JOIN (
+                    	SELECT
+                    		a.source_system as b_source_system,
+                    		a.server_id as b_server_id,
+                    		a.game_id as b_game_id,
+                    		MAX(a.server_name) as server_name  ,
+                    		MAX(a.main_server_id) as main_server_id,
+                    		MAX(c.server_name) as main_server_name,
+                    		MAX(a.son_server_ids) as son_server_ids ,
+                    		GROUP_CONCAT(a.source_server_ids, ',') as source_server_ids,
+                    		GROUP_CONCAT(b.server_name , ',') as source_server_ids_name
+                    	FROM dm_game_order.t_game_server_merge a
+                    	LEFT JOIN dm_game_order.t_game_server_merge b on a.source_system = b.source_system AND a.game_id = b.game_id AND a.source_server_ids = b.server_id
+                    	LEFT JOIN (
+                    		SELECT
+                    			source_system ,
+                    			game_id ,
+                    			server_id  ,
+                    			MAX(server_name) as server_name
+                    		FROM dm_game_order.t_game_server_merge
+                    		GROUP BY server_id ,source_system ,game_id
+                    	) c on a.source_system = c.source_system AND a.game_id = c.game_id AND a.main_server_id = c.server_id
+                    	group by a.server_id , a.source_system , a.game_id
+                    ) b ON a.source_system = b.b_source_system AND a.super_game_id = b.b_game_id AND a.boss_server_id = b.b_server_id
+                """ + cri +
+                """
+                ) a
+                """;
+    }
+
+    /**
+     * 原始区服-父游戏维度(角色排行相关信息)
+     * @return String
+     */
+    private String getRoleCombatRankRoleDataSqlA() {
+        return """
+                SELECT
+                	*
+                FROM (
+                	SELECT
+                		source_system ,
+                		server_id ,
+                		boss_server_id,
+                		parent_game_id ,
+                		super_game_id ,
+                		dt,
+                		merge_time,
+                		role_id ,
+                		role_name,
+                		role_level ,
+                		role_vip ,
+                		combat_num ,
+                		ROW_NUMBER()over(partition by source_system ,server_id ,boss_server_id, parent_game_id, super_game_id order by combat_num desc) as rank_num
+                	FROM (
+                		SELECT
+                			source_system ,
+                			server_id ,
+                			boss_server_id,
+                			parent_game_id ,
+                			super_game_id ,
+                			MAX(`date`) as dt,
+                			MAX(merge_time) as merge_time ,
+                			role_id ,
+                			MAX(role_name) as role_name,
+                			MAX(role_level) as role_level ,
+                			MAX(role_vip) as role_vip ,
+                			MAX(combat_num) as combat_num
+                		FROM game_ads.ads_role_combat_num_ranking
+                		GROUP BY role_id , source_system ,parent_game_id ,super_game_id, server_id, boss_server_id
+                	) a
+                ) a
+                """;
+    }
+
+    /**
+     * 合服-父游戏维度(角色排行相关信息)
+     * @return String
+     */
+    private String getRoleCombatRankRoleDataSqlB() {
+        return """
+                SELECT
+                	*
+                FROM (
+                	SELECT
+                		source_system ,
+                		boss_server_id ,
+                		parent_game_id ,
+                		super_game_id ,
+                		merge_time,
+                		role_id ,
+                		role_name,
+                		role_level ,
+                		role_vip ,
+                		combat_num ,
+                		ROW_NUMBER()over(partition by source_system ,boss_server_id ,parent_game_id, super_game_id order by combat_num desc) as rank_num
+                	FROM (
+                		SELECT
+                			source_system ,
+                			boss_server_id ,
+                			parent_game_id ,
+                			super_game_id ,
+                			MAX(merge_time) as merge_time ,
+                			role_id ,
+                			MAX(role_name) as role_name,
+                			MAX(role_level) as role_level ,
+                			MAX(role_vip) as role_vip ,
+                			MAX(combat_num) as combat_num
+                		FROM game_ads.ads_role_combat_num_ranking
+                		GROUP BY role_id , source_system ,parent_game_id ,super_game_id, boss_server_id
+                	) a
+                ) a
+                """;
+    }
+
+    /**
+     * 原始区服-超父游戏维度(角色排行相关信息)
+     * @return String
+     */
+    private String getRoleCombatRankRoleDataSqlC() {
+        return """
+                SELECT
+                	*
+                FROM (
+                	SELECT
+                		source_system ,
+                		server_id ,
+                		super_game_id ,
+                		dt,
+                		merge_time,
+                		role_id ,
+                		role_name,
+                		role_level ,
+                		role_vip ,
+                		combat_num ,
+                		ROW_NUMBER()over(partition by source_system ,server_id ,super_game_id order by combat_num desc) as rank_num
+                	FROM (
+                		SELECT
+                			source_system ,
+                			server_id ,
+                			super_game_id ,
+                			MAX(`date`) as dt,
+                			MAX(merge_time) as merge_time ,
+                			role_id ,
+                			MAX(role_name) as role_name,
+                			MAX(role_level) as role_level ,
+                			MAX(role_vip) as role_vip ,
+                			MAX(combat_num) as combat_num
+                		FROM game_ads.ads_role_combat_num_ranking
+                		GROUP BY role_id , source_system ,super_game_id, server_id
+                	) a
+                ) a
+                """;
+    }
+
+    /**
+     * 合服-超父游戏维度(角色排行相关信息)
+     * @return String
+     */
+    private String getRoleCombatRankRoleDataSqlD() {
+        return """
+                SELECT
+                	*
+                FROM (
+                	SELECT
+                		source_system ,
+                		boss_server_id ,
+                		super_game_id ,
+                		merge_time,
+                		role_id ,
+                		role_name,
+                		role_level ,
+                		role_vip ,
+                		combat_num ,
+                		ROW_NUMBER()over(partition by source_system ,boss_server_id ,super_game_id order by combat_num desc) as rank_num
+                	FROM (
+                		SELECT
+                			source_system ,
+                			boss_server_id ,
+                			super_game_id ,
+                			MAX(merge_time) as merge_time ,
+                			role_id ,
+                			MAX(role_name) as role_name,
+                			MAX(role_level) as role_level ,
+                			MAX(role_vip) as role_vip ,
+                			MAX(combat_num) as combat_num
+                		FROM game_ads.ads_role_combat_num_ranking
+                		GROUP BY role_id , source_system ,super_game_id, boss_server_id
+                	) a
+                ) a
                 """;
     }
 

+ 1 - 1
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/ManageApplication.java

@@ -21,7 +21,7 @@ public class ManageApplication {
 
     public static void main(String[] args) {
         SpringApplication.run(ManageApplication.class, args);
-        System.out.println("赞象Manage服务启动成功 <区服导量调试修改> ( ´・・)ノ(._.`) \n" +
+        System.out.println("赞象Manage服务启动成功 <角色列表原始区服, 游戏选择列表修改> ( ´・・)ノ(._.`) \n" +
                 "___  ___  ___   _   _   ___  _____  _____ \n" +
                 "|  \\/  | / _ \\ | \\ | | / _ \\|  __ \\|  ___|\n" +
                 "| .  . |/ /_\\ \\|  \\| |/ /_\\ \\ |  \\/| |__  \n" +

+ 9 - 1
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/controller/GameServerController.java

@@ -84,6 +84,14 @@ public class GameServerController {
     @PreAuthorize(permissionKey = "manage:gameServer:unMergeServer")
     @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = GameServerVO.class)})
     public ResultVO<List<GameServerVO>> unMergeServerList(@RequestParam Long gameId) {
-        return ResultVO.ok(gameServerService.unMergeServerList(gameId));
+        return ResultVO.ok(gameServerService.getServerList(gameId, Boolean.FALSE));
+    }
+
+    @ApiOperation(value = "获取所有区服列表(无分页)")
+    @GetMapping(value = "/all/server/list")
+    @PreAuthorize(permissionKey = "manage:gameServer:allServer")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = GameServerVO.class)})
+    public ResultVO<List<GameServerVO>> allServerList(@RequestParam Long gameId) {
+        return ResultVO.ok(gameServerService.getServerList(gameId, null));
     }
 }

+ 6 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/GameChoiceVO.java

@@ -28,4 +28,10 @@ public class GameChoiceVO {
      */
     @ApiModelProperty(notes = "游戏应用类型id")
     private Long category;
+
+    /**
+     * 超父游戏id
+     */
+    @ApiModelProperty(notes = "超父游戏id")
+    private Long superGameId;
 }

+ 6 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/GameServerVO.java

@@ -23,4 +23,10 @@ public class GameServerVO {
     @ApiModelProperty(notes = "区服名称")
     private String serverName;
 
+    /**
+     * 是否原始服
+     */
+    @ApiModelProperty(notes = "是否原始服")
+    private Boolean isSourceServer;
+
 }

+ 4 - 4
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IGameServerService.java

@@ -10,7 +10,6 @@ import com.zanxiang.game.module.manage.pojo.vo.GameServerVO;
 import com.zanxiang.game.module.mybatis.entity.GameServer;
 
 import java.util.List;
-import java.util.Map;
 
 /**
  * @author : lingfeng
@@ -61,10 +60,11 @@ public interface IGameServerService extends IService<GameServer> {
     Boolean mergeServerAddUpdate(GameMergeServerParam param);
 
     /**
-     * 未参与合服的区服列表
+     * 获取区服列表
      *
-     * @param gameId 游戏id
+     * @param gameId  游戏id
+     * @param isMerge
      * @return {@link List}<{@link GameServerVO}>
      */
-    List<GameServerVO> unMergeServerList(Long gameId);
+    List<GameServerVO> getServerList(Long gameId, Boolean isMerge);
 }

+ 12 - 7
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GameServerServiceImpl.java

@@ -132,6 +132,7 @@ public class GameServerServiceImpl extends ServiceImpl<GameServerMapper, GameSer
                 .le(param.getEndTime() != null, GameServer::getStartTime, param.getEndTime() == null ? null : LocalDateTime.of(param.getEndTime(), LocalTime.MAX))
                 .eq(param.getIsSourceServer() != null, GameServer::getIsSourceServer, param.getIsSourceServer())
                 .orderByDesc(GameServer::getStartTime)
+                .orderByDesc(GameServer::getCreateTime)
         ).convert(this::toVo);
     }
 
@@ -188,12 +189,15 @@ public class GameServerServiceImpl extends ServiceImpl<GameServerMapper, GameSer
         }
         //合服原始服列表
         if (sourceServerIdArray != null) {
+            List<Integer> sourceServerIdList = Arrays.stream(sourceServerIdArray)
+                    .map(Integer::parseInt)
+                    .sorted().collect(Collectors.toList());
             List<GameServerListVO.ServerBean> sourceServerList = new ArrayList<>();
-            for (String sourceServerId : sourceServerIdArray) {
-                GameServer sourceServer = gameServerMap.get(sourceServerId);
+            for (Integer sourceServerId : sourceServerIdList) {
+                GameServer sourceServer = gameServerMap.get(sourceServerId.toString());
                 if (sourceServer != null) {
                     sourceServerList.add(GameServerListVO.ServerBean.builder()
-                            .serverId(sourceServerId)
+                            .serverId(sourceServerId.toString())
                             .serverName(sourceServer.getServerName())
                             .build());
                 }
@@ -214,7 +218,7 @@ public class GameServerServiceImpl extends ServiceImpl<GameServerMapper, GameSer
                 sourceServerIds.add(gameServer.getServerId());
                 return;
             }
-            if (Strings.isBlank(gameServer.getSourceServerIds())) {
+            if (Strings.isNotBlank(gameServer.getSourceServerIds())) {
                 Collections.addAll(sourceServerIds, gameServer.getSourceServerIds().split(","));
             }
         });
@@ -261,12 +265,13 @@ public class GameServerServiceImpl extends ServiceImpl<GameServerMapper, GameSer
     }
 
     @Override
-    public List<GameServerVO> unMergeServerList(Long gameId) {
+    public List<GameServerVO> getServerList(Long gameId, Boolean isMerge) {
         return super.list(new LambdaQueryWrapper<GameServer>()
-                .select(GameServer::getServerId, GameServer::getServerName)
+                .select(GameServer::getServerId, GameServer::getServerName, GameServer :: getIsSourceServer)
                 .eq(GameServer::getGameId, gameId)
-                .eq(GameServer::getIsMerge, Boolean.FALSE)
+                .eq(isMerge != null, GameServer::getIsMerge, isMerge)
                 .orderByAsc(GameServer::getStartTime)
+                .orderByAsc(GameServer::getCreateTime)
         ).stream().map(gameServer -> BeanUtil.copy(gameServer, GameServerVO.class))
                 .collect(Collectors.toList());
     }

+ 2 - 2
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GameServiceImpl.java

@@ -234,7 +234,7 @@ public class GameServiceImpl extends ServiceImpl<GameMapper, Game> implements IG
         }
         return super.list(new LambdaQueryWrapper<Game>()
                 .in(!SecurityUtil.isAdmin(), Game::getId, tuple2.getT2())
-                .select(Game::getId, Game::getName, Game::getCategory))
+                .select(Game::getId, Game::getName, Game::getCategory, Game::getSuperGameId))
                 .stream()
                 .map(game -> BeanUtil.copy(game, GameChoiceVO.class))
                 .collect(Collectors.toList());
@@ -251,11 +251,11 @@ public class GameServiceImpl extends ServiceImpl<GameMapper, Game> implements IG
     @Override
     public Map<Long, GameDTO> gameCondition(List<Long> gameIdList, Long cpId, Long gameId, Long gameCategoryId) {
         List<GameDTO> gameList = super.list(new LambdaQueryWrapper<Game>()
+                .select(Game::getId, Game::getCpId, Game::getName, Game::getCategory, Game::getSuperGameId)
                 .eq(cpId != null, Game::getCpId, cpId)
                 .in(CollectionUtils.isNotEmpty(gameIdList), Game::getId, gameIdList)
                 .eq(gameId != null, Game::getId, gameId)
                 .eq(gameCategoryId != null, Game::getCategory, gameCategoryId)
-                .select(Game::getId, Game::getCpId, Game::getName, Game::getCategory)
         ).stream().map(game -> BeanUtil.copy(game, GameDTO.class)).collect(Collectors.toList());
         if (CollectionUtils.isEmpty(gameList)) {
             return Collections.emptyMap();

+ 7 - 7
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GameUserRoleServiceImpl.java

@@ -199,6 +199,13 @@ public class GameUserRoleServiceImpl extends ServiceImpl<GameUserRoleMapper, Gam
             gameDTO = gameService.getById(gameUserRoleListVO.getGameId());
         }
         if (gameDTO != null) {
+            //设置源服务器名称
+            GameServer gameServer = gameServerService.getOne(new LambdaQueryWrapper<GameServer>()
+                    .eq(GameServer::getGameId, gameDTO.getSuperGameId())
+                    .eq(GameServer::getServerId, gameUserRole.getServerId()));
+            if (gameServer != null) {
+                gameUserRoleListVO.setSourceServerName(gameServer.getServerName());
+            }
             gameUserRoleListVO.setGameName(gameDTO.getName());
             gameUserRoleListVO.setCpId(gameDTO.getCpId());
             gameUserRoleListVO.setCpName(cpMap.get(gameDTO.getCpId()) == null ? null : cpMap.get(gameDTO.getCpId()).getCpName());
@@ -207,13 +214,6 @@ public class GameUserRoleServiceImpl extends ServiceImpl<GameUserRoleMapper, Gam
         }
         //注册充值时间差
         gameUserRoleListVO.setRegPayTimeDiff(DateUtils.getRegPayTimeDiff(gameUserRoleListVO.getRegTime(), gameUserRoleListVO.getLastRechargeTime()));
-        //设置源服务器名称
-        GameServer gameServer = gameServerService.getOne(new LambdaQueryWrapper<GameServer>()
-                .eq(GameServer::getGameId, gameUserRole.getGameId())
-                .eq(GameServer::getServerId, gameUserRole.getServerId()));
-        if (gameServer != null) {
-            gameUserRoleListVO.setSourceServerName(gameServer.getServerName());
-        }
         return gameUserRoleListVO;
     }
 

+ 1 - 1
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/UserServiceImpl.java

@@ -186,7 +186,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         Map<String, String> channelTransform = agentService.channelTransform(user.getChannel());
         if (channelTransform.containsKey("params")) {
             String[] params = channelTransform.get("params").split(":");
-            CorpExternalUserDTO corpExternalUser = corpExternalUserServiceRpc.getCorpExternalUser(params[0], params[1]);
+            CorpExternalUserDTO corpExternalUser = corpExternalUserServiceRpc.getCorpExternalUser(params[0], params[1]).getData();
             if (corpExternalUser != null) {
                 return BeanUtil.copy(corpExternalUser, UserWeChatVO.class);
             }