Browse Source

:fix:修改玩家列表bug

zhangxianyu 11 months ago
parent
commit
959fb6cf36

+ 152 - 4
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/PlayerDataServiceImpl.java

@@ -49,6 +49,7 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
 
     /**
      * 玩家列表
+     *
      * @param dto PlayerDataListDTO
      * @return Page<PlayerDataVO>
      */
@@ -217,6 +218,7 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
 
     /**
      * 玩家角色列表
+     *
      * @param dto PlayerRoleDataListDTO
      * @return Page<PlayerRoleDataVO>
      */
@@ -353,7 +355,7 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
             if ("null".equals(vo.getCountry())) {
                 vo.setCountry(null);
             }
-        return vo;
+            return vo;
         }).collect(Collectors.toList());
 
         return new Page<>(list, pager);
@@ -361,6 +363,7 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
 
     /**
      * 玩家角色列表总计一栏
+     *
      * @param dto PlayerRoleDataListDTO
      * @return PlayerRoleDataVO
      */
@@ -464,7 +467,7 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
             cri.where().andEquals("source_system", dto.getSourceSystem());
         }
         //查询sql
-        Sql sql = Sqls.create(getUserRoleDataTotalSql() + cri);
+        Sql sql = Sqls.create(getUserRoleDataTotalSql2(cri));
         sql.setCallback(Sqls.callback.entities());
         sql.setEntity(dao.getEntity(PlayerRoleDataVO.class));
         //执行sql 得到结果
@@ -475,6 +478,7 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
 
     /**
      * 玩家登陆日志列表
+     *
      * @param dto PlayerLoginLogDataListDTO
      * @return Page<Map>
      */
@@ -543,9 +547,9 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
         sql.setPager(pager);
         //获取结果
         dao.execute(sql);
-        List<Map> list = sql.getList(Map.class).stream().map( map -> {
+        List<Map> list = sql.getList(Map.class).stream().map(map -> {
             //获取游戏类型
-            String gameClassify = GameCategoryEnum.getNameByCategory(Long.valueOf((Integer)map.get("classify")));
+            String gameClassify = GameCategoryEnum.getNameByCategory(Long.valueOf((Integer) map.get("classify")));
             if (StringUtils.isNotBlank(gameClassify)) {
                 map.put("classify", gameClassify);
             }
@@ -568,6 +572,7 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
 
     /**
      * 登陆IP玩家列表
+     *
      * @param dto PlayerBannedListDTO
      * @return Page<Map>
      */
@@ -615,6 +620,7 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
 
     /**
      * 查询玩家列表数据SQL
+     *
      * @return String
      */
     private String getPlayerDataListSql() {
@@ -747,6 +753,7 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
 
     /**
      * 查询记录的条数SQL
+     *
      * @return String
      */
     private String getPlayerDataListCountSql() {
@@ -879,6 +886,7 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
 
     /**
      * 玩家角色列表查询sql
+     *
      * @return String
      */
     private String getUserRoleDataListSql() {
@@ -1006,6 +1014,7 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
 
     /**
      * 玩家角色列表查询sql(总记录数)
+     *
      * @return String
      */
     private String getUserRoleDataListCountSql() {
@@ -1133,6 +1142,7 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
 
     /**
      * 玩家角色列表总计一栏sql
+     *
      * @return String
      */
     private String getUserRoleDataTotalSql() {
@@ -1258,8 +1268,143 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
                 """;
     }
 
+
+    /**
+     * 玩家角色列表总计一栏sql
+     *
+     * @return String
+     */
+    private String getUserRoleDataTotalSql2(Criteria cri) {
+        return """
+                  SELECT 
+                    SUM(recharge_money) as recharge_money,
+                 	SUM(recharge_count) as recharge_count
+                 	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 , -- 注册渠道名
+                		IFNULL(c.pitcher_id, 0) as pitcher_id , -- 投手ID
+                  		IFNULL(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.country, -- 国家属性
+                		a.combat_num as role_power, -- 角色攻击力
+                		a.role_vip as role_vip_level, -- 角色vip
+                		a.os , -- 角色操作系统
+                		a.create_time as create_time, -- 角色创建时间
+                		k.active_time as 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_burst b
+                	on a.source_system = b.source_system AND a.user_id = b.id AND a.create_time >= b.create_time AND a.create_time < b.end_time
+                	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,
+                			user_id,
+                			real_amount,
+                			pay_time,
+                			ROW_NUMBER()over(partition by role_id , user_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 a.user_id = g.user_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 (
+                			SELECT
+                				*
+                			FROM dm_game_order.t_game_server_merge
+                			WHERE is_delete = 0
+                		) 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,
+                			create_time as active_time,
+                			role_id ,
+                			ROW_NUMBER()over(partition by user_id, source_system order by create_time desc) as num
+                		FROM dm_game_order.t_user_login_log
+                	) i on a.source_system = i.source_system AND a.user_id = i.user_id AND i.num = 1
+                	LEFT JOIN (
+                		SELECT
+                			-- 累计充值金额、累计充值次数
+                	    	role_id,
+                	    	user_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 , user_id , source_system
+                	) j on a.source_system = j.source_system AND a.role_id = j.role_id AND a.user_id = j.user_id
+                	LEFT JOIN (
+                		SELECT
+                			source_system ,
+                			user_id,
+                			game_id,
+                			active_time,
+                			role_id ,
+                			ROW_NUMBER()over(partition by role_id ,user_id, source_system order by active_time desc) as num
+                		FROM game_dw.dw_active_log
+                	) k on a.source_system = k.source_system AND a.user_id = k.user_id AND a.role_id = k.role_id AND k.num = 1
+                ) a   """ + cri + """
+                )abc
+                """;
+    }
+
     /**
      * 玩家登陆日志查询列表
+     *
      * @return String
      */
     private String getPlayerLoginLogDataSql() {
@@ -1305,6 +1450,7 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
 
     /**
      * 玩家登陆日志记录数
+     *
      * @return String
      */
     private String getPlayerLoginLogDataCountSql() {
@@ -1350,6 +1496,7 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
 
     /**
      * 获取所有用户sql
+     *
      * @return String
      */
     private String getUserMapSql() {
@@ -1382,6 +1529,7 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
 
     /**
      * 获取所有用户记录数sql
+     *
      * @return String
      */
     private String getUserMapCountSql() {