Browse Source

Merge branch 'package' of GameCenter/game-center into dev

zhimo 1 năm trước cách đây
mục cha
commit
3006197ff4

+ 1 - 1
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/controller/PlayerDataController.java

@@ -39,7 +39,7 @@ public class PlayerDataController {
     }
 
     @ApiOperation("玩家角色列表")
-    //@PreAuthorize(permissionKey = "playerData:role:list")
+    @PreAuthorize(permissionKey = "playerData:role:list")
     @PostMapping("/role/list")
     public ResultVO<Page<PlayerRoleDataVO>> getPlayerRoleDataList(@RequestBody PlayerRoleDataListDTO dto) {
         return ResultVO.ok(playerDataService.getPlayerRoleDataList(dto));

+ 6 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/PlayerRoleDataListDTO.java

@@ -52,6 +52,12 @@ public class PlayerRoleDataListDTO extends BasePage {
     @ApiModelProperty(notes = "游戏角色")
     private String roleName;
 
+    /**
+     * 游戏角色id
+     */
+    @ApiModelProperty(notes = "游戏角色id")
+    private String roleId;
+
     /**
      * cp名称对应的id
      */

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

@@ -204,12 +204,12 @@ public class PlayerRoleDataVO {
      * 归因推广账号类型(1:腾讯、2:头条)
      */
     @ApiModelProperty(notes = "归因推广账号类型(1:腾讯、2:头条)")
-    private Integer accountType;
+    private String accountType;
 
     /**
-     * 注册充值时间差
+     * 注册充值时间差(秒)
      */
-    @ApiModelProperty(notes = "注册充值时间差")
+    @ApiModelProperty(notes = "注册充值时间差(秒)")
     private Long regPayTimeDiff;
 
 }

+ 149 - 24
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/PlayerDataServiceImpl.java

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

+ 42 - 42
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/PromotionDayServiceImpl.java

@@ -1551,7 +1551,7 @@ public class PromotionDayServiceImpl implements IAdsPromotionDayService {
                 		IFNULL(SUM(d15), 0) as d15,
                 		IFNULL(SUM(mini_game_register_users), 0) as mini_game_register_users,
                         IFNULL(SUM(mini_game_register_cost), 0) as mini_game_register_cost,
-                        IFNULL(SUM(mini_game_register_rate), 0) as mini_game_register_rate,
+                        ROUND(IF(SUM(click_count) > 0, SUM(mini_game_register_users) / SUM(click_count), 0), 4) as mini_game_register_rate,
                         IFNULL(SUM(mini_game_paying_count), 0) as mini_game_paying_count,
                         IFNULL(SUM(mini_game_paying_amount), 0) as mini_game_paying_amount,
                         IFNULL(SUM(mini_game_paying_users_d1), 0) as mini_game_paying_users_d1,
@@ -1583,46 +1583,46 @@ public class PromotionDayServiceImpl implements IAdsPromotionDayService {
                 		game_ads.ads_adgroup_day
                 """ + criA +
                 """
-                	 ) b
-                LEFT JOIN(
-                	SELECT
-                	*
-                	FROM(
-                	SELECT
-                	    ROW_NUMBER()over(partition by promotion_id order by dt desc) as num,
-                	    promotion_id,
-                	    status,
-                	    creative_preview,
-                	    landing_type,
-                	    pricing,
-                	    cpa_bid,
-                	    roi_goal,
-                	    budget,
-                	    concat(start_time,'/',end_time) as schedule_time,
-                	    notes,
-                	    service,
-                	    balance,
-                	    promotion_total_cost,
-                	    convert_target,
-                	    reg_total_num,
-                	    role_total_num,
-                	    reg_total_cost,
-                	    role_total_cost,
-                	    role_total_rate,
-                	    total_amount_count,
-                	    total_amount_num,
-                	    total_amount,
-                	    promotion_total_roi,
-                	    ROUND(IF(total_amount_count > 0, promotion_total_cost / total_amount_count, 0), 2) as total_amount_count_cost,
-                	    total_recharge_cost
-                	FROM
-                		game_ads.ads_adgroup_day
-                	""" + criB +
-                """
-                 ) a
-                WHERE a.num = 1) c
-            ON b.promotion_id = c.promotion_id
-            """;
+                         ) b
+                    LEFT JOIN(
+                        SELECT
+                        *
+                        FROM(
+                        SELECT
+                            ROW_NUMBER()over(partition by promotion_id order by dt desc) as num,
+                            promotion_id,
+                            status,
+                            creative_preview,
+                            landing_type,
+                            pricing,
+                            cpa_bid,
+                            roi_goal,
+                            budget,
+                            concat(start_time,'/',end_time) as schedule_time,
+                            notes,
+                            service,
+                            balance,
+                            promotion_total_cost,
+                            convert_target,
+                            reg_total_num,
+                            role_total_num,
+                            reg_total_cost,
+                            role_total_cost,
+                            role_total_rate,
+                            total_amount_count,
+                            total_amount_num,
+                            total_amount,
+                            promotion_total_roi,
+                            ROUND(IF(total_amount_count > 0, promotion_total_cost / total_amount_count, 0), 2) as total_amount_count_cost,
+                            total_recharge_cost
+                        FROM
+                            game_ads.ads_adgroup_day
+                        """ + criB +
+                    """
+                     ) a
+                    WHERE a.num = 1) c
+                ON b.promotion_id = c.promotion_id
+                """;
     }
 
     /**
@@ -1694,7 +1694,7 @@ public class PromotionDayServiceImpl implements IAdsPromotionDayService {
                 	IFNULL(SUM(d15), 0) as d15,
                 	IFNULL(SUM(mini_game_register_users), 0) as mini_game_register_users,
                     IFNULL(SUM(mini_game_register_cost), 0) as mini_game_register_cost,
-                    IFNULL(SUM(mini_game_register_rate), 0) as mini_game_register_rate,
+                    ROUND(IF(SUM(click_count) > 0 , SUM(mini_game_register_users) / SUM(click_count), 0), 4) as mini_game_register_rate,
                     IFNULL(SUM(mini_game_paying_count), 0) as mini_game_paying_count,
                     IFNULL(SUM(mini_game_paying_amount), 0) as mini_game_paying_amount,
                     IFNULL(SUM(mini_game_paying_users_d1), 0) as mini_game_paying_users_d1,

+ 40 - 23
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/RoleManageServiceImpl.java

@@ -164,8 +164,9 @@ public class RoleManageServiceImpl implements IRoleManageService {
 
         //是否查询合服数据(默认查询合服数据)
         Boolean isQueryMerge = true;
-        if (dto.getIsMergeServer() != null) {
-            isQueryMerge = dto.getIsMergeServer();
+        //如果不传值,查看的是原始服数据
+        if (dto.getIsMergeServer() == null || dto.getIsMergeServer() == Boolean.FALSE) {
+            isQueryMerge = false;
         }
         //是否查询超父游戏数据(默认查询超父游戏数据)
         Boolean isSuperParentGame = true;
@@ -1880,9 +1881,9 @@ public class RoleManageServiceImpl implements IRoleManageService {
                 		super_game_id , -- 超父游戏ID
                 		MAX(super_game_name) as super_game_name , -- 超父游戏名
                 		server_id, -- 区服ID
-                		IFNULL(MAX(h.server_name), MAX(a.server_name)) as server_name, -- 区服名
-                		MAX(dt) as dt, -- 开服日期
-                		TIMESTAMPDIFF(DAY, MAX(dt), NOW()) start_day, -- 开服天数
+                		IFNULL(MAX(i.server_name), MAX(a.server_name)) as server_name, -- 区服名
+                		MIN(dt) as dt, -- 开服日期
+                		TIMESTAMPDIFF(DAY, MIN(dt), NOW()) start_day, -- 开服天数
                 		boss_server_id, -- 合服ID
                 		MAX(boss_server_name) as boss_server_name, -- 合服名
                 		MAX(merge_time) as merge_time , -- 合服时间
@@ -1918,7 +1919,7 @@ public class RoleManageServiceImpl implements IRoleManageService {
                 			MAX(super_game_name) as super_game_name , -- 超父游戏名
                 			server_id, -- 区服ID
                 			MAX(server_name) as server_name, -- 区服名
-                			MAX(dt) as dt, -- 开服日期
+                			MIN(dt) as dt, -- 开服日期
                 			boss_server_id, -- 合服ID
                 			MAX(boss_server_name) as boss_server_name, -- 合服名
                 			MAX(merge_time) as merge_time , -- 合服时间
@@ -1943,7 +1944,7 @@ public class RoleManageServiceImpl implements IRoleManageService {
                 				MAX(super_game_name) as super_game_name , -- 超父游戏名
                 				server_id, -- 区服ID
                 				MAX(server_name) as server_name, -- 区服名
-                				MAX(`date`) as dt, -- 开服日期
+                				MIN(`date`) as dt, -- 开服日期
                 				boss_server_id, -- 合服ID
                 				MAX(boss_server_name) as boss_server_name, -- 合服名
                 				MAX(merge_time) as merge_time , -- 合服时间
@@ -2091,6 +2092,14 @@ public class RoleManageServiceImpl implements IRoleManageService {
                 			is_merge -- 是否参与过合服
                 		FROM dm_game_order.t_game_server_merge
                 	) h on a.source_system = h.h_source_system AND a.boss_server_id = h.h_server_id AND a.super_game_id = h.h_game_id
+                	LEFT JOIN (
+                		SELECT
+                			source_system as i_source_system,
+                			game_id as i_game_id,
+                			server_id as i_server_id,
+                			server_name
+                		FROM dm_game_order.t_game_server_merge
+                	) i on a.source_system = i.i_source_system AND a.server_id = i.i_server_id AND a.super_game_id = i.i_game_id
                 	GROUP BY source_system,server_id,boss_server_id,super_game_id
                 ) a
                 """;
@@ -2115,9 +2124,9 @@ public class RoleManageServiceImpl implements IRoleManageService {
                     		super_game_id , -- 超父游戏ID
                     		MAX(super_game_name) as super_game_name , -- 超父游戏名
                     		server_id, -- 区服ID
-                    		IFNULL(MAX(h.server_name), MAX(a.server_name)) as server_name, -- 区服名
-                    		MAX(dt) as dt, -- 开服日期
-                    		TIMESTAMPDIFF(DAY, MAX(dt), NOW()) start_day, -- 开服天数
+                    		IFNULL(MAX(i.server_name), MAX(a.server_name)) as server_name, -- 区服名
+                    		MIN(dt) as dt, -- 开服日期
+                    		TIMESTAMPDIFF(DAY, MIN(dt), NOW()) start_day, -- 开服天数
                     		boss_server_id, -- 合服ID
                     		MAX(boss_server_name) as boss_server_name, -- 合服名
                     		MAX(merge_time) as merge_time , -- 合服时间
@@ -2153,7 +2162,7 @@ public class RoleManageServiceImpl implements IRoleManageService {
                     			MAX(super_game_name) as super_game_name , -- 超父游戏名
                     			server_id, -- 区服ID
                     			MAX(server_name) as server_name, -- 区服名
-                    			MAX(dt) as dt, -- 开服日期
+                    			MIN(dt) as dt, -- 开服日期
                     			boss_server_id, -- 合服ID
                     			MAX(boss_server_name) as boss_server_name, -- 合服名
                     			MAX(merge_time) as merge_time , -- 合服时间
@@ -2178,7 +2187,7 @@ public class RoleManageServiceImpl implements IRoleManageService {
                     				MAX(super_game_name) as super_game_name , -- 超父游戏名
                     				server_id, -- 区服ID
                     				MAX(server_name) as server_name, -- 区服名
-                    				MAX(`date`) as dt, -- 开服日期
+                    				MIN(`date`) as dt, -- 开服日期
                     				boss_server_id, -- 合服ID
                     				MAX(boss_server_name) as boss_server_name, -- 合服名
                     				MAX(merge_time) as merge_time , -- 合服时间
@@ -2326,6 +2335,14 @@ public class RoleManageServiceImpl implements IRoleManageService {
                     			is_merge -- 是否参与过合服
                     		FROM dm_game_order.t_game_server_merge
                     	) h on a.source_system = h.h_source_system AND a.boss_server_id = h.h_server_id AND a.super_game_id = h.h_game_id
+                    	LEFT JOIN (
+                    		SELECT
+                    			source_system as i_source_system,
+                    			game_id as i_game_id,
+                    			server_id as i_server_id,
+                    			server_name
+                    		FROM dm_game_order.t_game_server_merge
+                    	) i on a.source_system = i.i_source_system AND a.server_id = i.i_server_id AND a.super_game_id = i.i_game_id
                     	GROUP BY source_system,server_id,boss_server_id,super_game_id
                     ) a
                 """ + cri+
@@ -2351,8 +2368,8 @@ public class RoleManageServiceImpl implements IRoleManageService {
                 		MAX(super_game_name) as super_game_name , -- 超父游戏名
                 		boss_server_id as server_id, -- 合服ID
                 		IFNULL(MAX(h.server_name), MAX(a.boss_server_name)) as server_name, -- 合服名
-                		MAX(merge_time) as dt, -- 合服时间
-                		TIMESTAMPDIFF(DAY, MAX(merge_time), NOW()) start_day, -- 开服天数
+                		MIN(merge_time) as dt, -- 合服时间
+                		TIMESTAMPDIFF(DAY, MIN(merge_time), NOW()) start_day, -- 开服天数
                 		MAX(sum_server_count) as sum_server_count, -- 合服次数
                 		IFNULL(MAX(h.is_merge), 0) as is_merge, -- 是否参与过合服
                 		MAX(b.main_server_id) as main_server_id, -- 主服ID
@@ -2413,7 +2430,7 @@ public class RoleManageServiceImpl implements IRoleManageService {
                 				MAX(server_name) as server_name, -- 区服名
                 				boss_server_id, -- 合服ID
                 				MAX(boss_server_name) as boss_server_name, -- 合服名
-                				MAX(merge_time) as merge_time , -- 合服时间
+                				MIN(merge_time) as merge_time , -- 合服时间
                 				MAX(sum_server_count) as sum_server_count, -- 合服次数
                 				SUM(server_combat_num) as server_combat_num, -- 区服战力
                 			    SUM(total_amount) as total_amount, -- 总付费金额
@@ -2437,7 +2454,7 @@ public class RoleManageServiceImpl implements IRoleManageService {
                 					MAX(server_name) as server_name, -- 区服名
                 					boss_server_id, -- 合服ID
                 					MAX(boss_server_name) as boss_server_name, -- 合服名
-                					MAX(merge_time) as merge_time , -- 合服时间
+                					MIN(merge_time) as merge_time , -- 合服时间
                 					MAX(sum_server_count) as sum_server_count, -- 合服次数
                 					MAX(server_combat_num) as server_combat_num, -- 区服战力
                 					MAX(total_amount) as total_amount, -- 总付费金额
@@ -2646,8 +2663,8 @@ public class RoleManageServiceImpl implements IRoleManageService {
                     		MAX(super_game_name) as super_game_name , -- 超父游戏名
                     		boss_server_id as server_id, -- 合服ID
                     		IFNULL(MAX(h.server_name), MAX(a.boss_server_name)) as server_name, -- 合服名
-                    		MAX(merge_time) as dt, -- 合服时间
-                    		TIMESTAMPDIFF(DAY, MAX(merge_time), NOW()) start_day, -- 开服天数
+                    		MIN(merge_time) as dt, -- 合服时间
+                    		TIMESTAMPDIFF(DAY, MIN(merge_time), NOW()) start_day, -- 开服天数
                     		MAX(sum_server_count) as sum_server_count, -- 合服次数
                     		IFNULL(MAX(h.is_merge), 0) as is_merge, -- 是否参与过合服
                     		MAX(b.main_server_id) as main_server_id, -- 主服ID
@@ -2686,7 +2703,7 @@ public class RoleManageServiceImpl implements IRoleManageService {
                     			MAX(server_name) as server_name, -- 区服名
                     			boss_server_id, -- 合服ID
                     			MAX(boss_server_name) as boss_server_name, -- 合服名
-                    			MAX(merge_time) as merge_time , -- 合服时间
+                    			MIN(merge_time) as merge_time , -- 合服时间
                     			MAX(sum_server_count) as sum_server_count, -- 合服次数
                     			SUM(server_combat_num) as server_combat_num, -- 区服战力
                     		    SUM(total_amount) as total_amount, -- 总付费金额
@@ -2708,7 +2725,7 @@ public class RoleManageServiceImpl implements IRoleManageService {
                     				MAX(server_name) as server_name, -- 区服名
                     				boss_server_id, -- 合服ID
                     				MAX(boss_server_name) as boss_server_name, -- 合服名
-                    				MAX(merge_time) as merge_time , -- 合服时间
+                    				MIN(merge_time) as merge_time , -- 合服时间
                     				MAX(sum_server_count) as sum_server_count, -- 合服次数
                     				SUM(server_combat_num) as server_combat_num, -- 区服战力
                     			    SUM(total_amount) as total_amount, -- 总付费金额
@@ -2732,7 +2749,7 @@ public class RoleManageServiceImpl implements IRoleManageService {
                     					MAX(server_name) as server_name, -- 区服名
                     					boss_server_id, -- 合服ID
                     					MAX(boss_server_name) as boss_server_name, -- 合服名
-                    					MAX(merge_time) as merge_time , -- 合服时间
+                    					MIN(merge_time) as merge_time , -- 合服时间
                     					MAX(sum_server_count) as sum_server_count, -- 合服次数
                     					MAX(server_combat_num) as server_combat_num, -- 区服战力
                     					MAX(total_amount) as total_amount, -- 总付费金额
@@ -3034,7 +3051,7 @@ public class RoleManageServiceImpl implements IRoleManageService {
                 			source_system ,
                 			server_id ,
                 			super_game_id ,
-                			MAX(`date`) as dt,
+                			MIN(`date`) as dt,
                 			MAX(merge_time) as merge_time ,
                 			role_id ,
                 			MAX(role_name) as role_name,
@@ -3073,7 +3090,7 @@ public class RoleManageServiceImpl implements IRoleManageService {
                 			source_system ,
                 			boss_server_id ,
                 			super_game_id ,
-                			MAX(merge_time) as merge_time ,
+                			MIN(merge_time) as merge_time ,
                 			role_id ,
                 			MAX(role_name) as role_name,
                 			MAX(role_level) as role_level ,

+ 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服务启动成功 <区服bug修改> ( ´・・)ノ(._.`) \n" +
                 "___  ___  ___   _   _   ___  _____  _____ \n" +
                 "|  \\/  | / _ \\ | \\ | | / _ \\|  __ \\|  ___|\n" +
                 "| .  . |/ /_\\ \\|  \\| |/ /_\\ \\ |  \\/| |__  \n" +

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

@@ -96,8 +96,8 @@ public class GameServerServiceImpl extends ServiceImpl<GameServerMapper, GameSer
                 .isDelete(DeleteEnum.NO.getCode())
                 .createBy(param.getId() == null ? SecurityUtil.getUserId() : null)
                 .createTime(param.getId() == null ? LocalDateTime.now() : null)
-                .isSourceServer(Boolean.TRUE)
-                .isMerge(Boolean.FALSE)
+                .isSourceServer(param.getId() == null ? Boolean.TRUE : null)
+                .isMerge(param.getId() == null ? Boolean.FALSE : null)
                 .updateBy(SecurityUtil.getUserId())
                 .updateTime(LocalDateTime.now())
                 .build();
@@ -267,7 +267,7 @@ public class GameServerServiceImpl extends ServiceImpl<GameServerMapper, GameSer
     @Override
     public List<GameServerVO> getServerList(Long gameId, Boolean isMerge) {
         return super.list(new LambdaQueryWrapper<GameServer>()
-                .select(GameServer::getServerId, GameServer::getServerName, GameServer :: getIsSourceServer)
+                .select(GameServer::getServerId, GameServer::getServerName, GameServer::getIsSourceServer)
                 .eq(GameServer::getGameId, gameId)
                 .eq(isMerge != null, GameServer::getIsMerge, isMerge)
                 .orderByAsc(GameServer::getStartTime)