Преглед изворни кода

游戏首日复充-用户详情修改

Letianhua пре 1 година
родитељ
комит
d128ee9e7d

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

@@ -56,4 +56,10 @@ public class FirstNewUserAgainTrendVO {
     @ApiModelProperty(notes = "不展示")
     private String sourceSystem;
 
+    /**
+     * 数据归因:1-子游戏维度; 2-父游戏维度
+     */
+    @ApiModelProperty(notes = "数据归因:1-子游戏维度; 2-父游戏维度")
+    private Long gameDimension;
+
 }

+ 159 - 33
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/GameDataServiceImpl.java

@@ -1703,7 +1703,7 @@ public class GameDataServiceImpl implements IGameDataService {
      * 通过反射赋值游戏首日复充数据
      *
      */
-    private void formatFirstNewUserAgain(GameDataFirstNewUserAgainVO vo, Long[] usersId) {
+    private void formatFirstNewUserAgain(GameDataFirstNewUserAgainVO vo, Long[] usersId, GameDataFirstNewUserAgainDTO dto) {
         if (CollectionUtils.isEmpty(firstNewUserAgainFieldMapList)) {
             return;
         }
@@ -1718,6 +1718,7 @@ public class GameDataServiceImpl implements IGameDataService {
                         .usersId(usersId)
                         .timeType(name)
                         .sourceSystem(vo.getSourceSystem())
+                        .gameDimension(dto.getGameDimension() == null ? 1L : dto.getGameDimension())
                         .build());
             } catch (IllegalAccessException e) {
                 throw new RuntimeException(e);
@@ -1729,7 +1730,8 @@ public class GameDataServiceImpl implements IGameDataService {
      * 通过反射赋值游戏首日复充总计数据
      *
      */
-    private void formatFirstNewUserAgainTotal(GameDataFirstNewUserAgainTotalVO vo, Long[] usersIdTotal) {
+    private void formatFirstNewUserAgainTotal(GameDataFirstNewUserAgainTotalVO vo,
+                                              Long[] usersIdTotal, GameDataFirstNewUserAgainTotalDTO dto) {
         if (CollectionUtils.isEmpty(firstNewUserAgainTotalFieldMapList)) {
             return;
         }
@@ -1749,6 +1751,7 @@ public class GameDataServiceImpl implements IGameDataService {
                                 BigDecimal.valueOf(count.doubleValue() / da1Count.doubleValue()).setScale(4, RoundingMode.HALF_UP))
                         .timeType(name)
                         .usersId(usersIdTotal)
+                        .gameDimension(dto.getGameDimension() == null ? 1L : dto.getGameDimension())
                         .build());
             } catch (IllegalAccessException e) {
                 throw new RuntimeException(e);
@@ -4388,7 +4391,8 @@ public class GameDataServiceImpl implements IGameDataService {
                         .toArray(Long[]::new);
             }
             //将string转成 FirstNewUserAgainTrendVO 对象
-            formatFirstNewUserAgain(vo, usersID);
+            formatFirstNewUserAgain(vo, usersID, dto);
+
             return vo;
         }).collect(Collectors.toList());
 
@@ -4482,7 +4486,7 @@ public class GameDataServiceImpl implements IGameDataService {
         //voAgainData有值时进行映射的取值处理
         if (StringUtils.isNotBlank(voAgainData.getDa1())) {
             //计算游戏首日复充总计
-            formatFirstNewUserAgainTotal(voAgainData, usersIdTotal);
+            formatFirstNewUserAgainTotal(voAgainData, usersIdTotal, dto);
         }
         //将两个对象的属性结合
         copyNullProperties(voAgainData, voGameData);
@@ -4501,6 +4505,10 @@ public class GameDataServiceImpl implements IGameDataService {
 
         //得到需要查询的usersID内容
         FirstNewUserAgainTrendVO againTrendVO = dto.getAgainTrendVO();
+        if (againTrendVO.getGameDimension() == null) {
+            //默认子游戏维度
+            againTrendVO.setGameDimension(1L);
+        }
         //处理时间条件
         String timeType = againTrendVO.getTimeType();
         //用来处理日期的字符串
@@ -4529,35 +4537,41 @@ public class GameDataServiceImpl implements IGameDataService {
         }
         //拼接排序条件
         //如果没有排序条件给默认值
-        if (StringUtils.isBlank(dto.getSortType())) {
-            dto.setSortType(OrderByEnum.DESC.getOrderType());
-        }
-        if (StringUtils.isBlank(dto.getSortFiled())) {
-            queryStr.append(" ORDER BY today_total_amount DESC, player_id DESC");
-        } else {
-            queryStr.append("""
+        if (againTrendVO.getGameDimension() == 1L) {
+            if (StringUtils.isBlank(dto.getSortType())) {
+                dto.setSortType(OrderByEnum.DESC.getOrderType());
+            }
+            if (StringUtils.isBlank(dto.getSortFiled())) {
+                queryStr.append(" ORDER BY today_total_amount DESC, player_id DESC");
+            } else {
+                queryStr.append("""
                      ORDER BY %s %s, player_id DESC
                     """.formatted(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dto.getSortFiled()),
-                    dto.getSortType()));
+                        dto.getSortType()));
+            }
+        } else {
+            //父游戏维度
+            if (StringUtils.isBlank(dto.getSortType())) {
+                dto.setSortType(OrderByEnum.DESC.getOrderType());
+            }
+            if (StringUtils.isBlank(dto.getSortFiled())) {
+                queryStr.append(" ORDER BY today_total_amount DESC, parent_player_id DESC");
+            } else {
+                queryStr.append("""
+                     ORDER BY %s %s, parent_player_id DESC
+                    """.formatted(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dto.getSortFiled()),
+                        dto.getSortType()));
+            }
         }
         //得到用户id数组
         Long[] usersId = againTrendVO.getUsersId();
         //查询具体的数据
-        Sql userDetilsSql = Sqls.create("""
-                SELECT
-                    player_id,
-                    reg_agent_id,
-                    reg_agent_name,
-                    server_name,
-                    role_name,
-                    $amount as today_total_amount,
-                    player_os
-                FROM
-                    game_ads.ads_player_recharge_ranking
-                WHERE player_id IN (@usersId)
-                and dt = DATE_ADD(DATE(reg_user_time),
-                """ + queryStr
-                );
+        Sql userDetilsSql;
+        if (againTrendVO.getGameDimension() == 1L) {
+            userDetilsSql = Sqls.create(userDetailSql() + queryStr);
+        } else {
+            userDetilsSql = Sqls.create(userDetailSqlForParent() + queryStr);
+        }
         //设置参数
         if ("total".equals(timeType)) {
             userDetilsSql.vars().set("amount", "total_amount");
@@ -4591,15 +4605,28 @@ public class GameDataServiceImpl implements IGameDataService {
      * @return map
      */
     private Map findUsersId(GameDataFirstNewUserAgainDTO dto) {
+
+        //默认查询子游戏维度
+        if (dto.getGameDimension() == null) {
+            dto.setGameDimension(1L);
+        }
+        //默认查询字段
+        String gameColumn = "reg_game_id";
+        String classifyColumn = "classify";
+        if (dto.getGameDimension() == 2L) {
+            gameColumn = "parent_game_id";
+            classifyColumn = "parent_game_classify";
+        }
+
         //查询每个游戏的注册首日充值用户id,在玩家充值排行榜里查找
         Criteria findUsersCri = Cnd.cri();
         //拼接游戏ID
         if (dto.getGameId() != null) {
-            findUsersCri.where().andInList("reg_game_id", dto.getGameId());
+            findUsersCri.where().andInList(gameColumn, dto.getGameId());
         }
         //拼接游戏应用类型
         if (dto.getClassify() != null) {
-            findUsersCri.where().andEquals("classify", dto.getClassify());
+            findUsersCri.where().andEquals(classifyColumn, dto.getClassify());
         }
         //拼接SDK来源
         if (StringUtils.isNotBlank(dto.getSourceSystem())) {
@@ -4615,7 +4642,12 @@ public class GameDataServiceImpl implements IGameDataService {
         } else if ("nature".equals(dto.getTableTypes())) {
             findUsersCri.where().andEquals("reg_agent_id", 0);
         }
-        Sql findUsersIdSql = Sqls.create(findUsersIdSql(findUsersCri));
+        Sql findUsersIdSql;
+        if (dto.getGameDimension() == 1L) {
+            findUsersIdSql = Sqls.create(findUsersIdSql(findUsersCri));
+        } else {
+            findUsersIdSql = Sqls.create(findUsersIdSqlForParent(findUsersCri));
+        }
         //自定义回传
         findUsersIdSql.setCallback((connection, resultSet, sql) -> {
             Map<String, String> tempMap = new HashMap<>();
@@ -4637,15 +4669,28 @@ public class GameDataServiceImpl implements IGameDataService {
      * @return map
      */
     private String findUsersIdTotal(GameDataFirstNewUserAgainTotalDTO dto) {
+
+        //默认查询子游戏维度
+        if (dto.getGameDimension() == null) {
+            dto.setGameDimension(1L);
+        }
+        //默认查询字段
+        String gameColumn = "reg_game_id";
+        String classifyColumn = "classify";
+        if (dto.getGameDimension() == 2L) {
+            gameColumn = "parent_game_id";
+            classifyColumn = "parent_game_classify";
+        }
+
         //查询每个游戏的注册首日充值用户id,在玩家充值排行榜里查找
         Criteria findUsersCri = Cnd.cri();
         //拼接游戏ID
         if (dto.getGameId() != null) {
-            findUsersCri.where().andEquals("reg_game_id", dto.getGameId());
+            findUsersCri.where().andInList(gameColumn, dto.getGameId());
         }
         //拼接游戏应用类型
         if (dto.getClassify() != null) {
-            findUsersCri.where().andEquals("classify", dto.getClassify());
+            findUsersCri.where().andEquals(classifyColumn, dto.getClassify());
         }
         //拼接SDK来源
         if (StringUtils.isNotBlank(dto.getSourceSystem())) {
@@ -4661,7 +4706,12 @@ public class GameDataServiceImpl implements IGameDataService {
         } else if ("nature".equals(dto.getTableTypes())) {
             findUsersCri.where().andEquals("reg_agent_id", 0);
         }
-        Sql findUsersIdTotalSql = Sqls.create(findUsersIdTotalSql(findUsersCri));
+        Sql findUsersIdTotalSql;
+        if (dto.getGameDimension() == 1L) {
+            findUsersIdTotalSql = Sqls.create(findUsersIdTotalSql(findUsersCri));
+        } else {
+            findUsersIdTotalSql = Sqls.create(findUsersIdTotalSqlForParent(findUsersCri));
+        }
         //自定义回传
         findUsersIdTotalSql.setCallback(Sqls.callback.str());
         //运行sql
@@ -8244,6 +8294,25 @@ public class GameDataServiceImpl implements IGameDataService {
                         """;
     }
 
+    /**
+     * 找出每个游戏注册时间内的注册当天且充值的用户id-父游戏维度
+     *
+     * @return String
+     */
+    private String findUsersIdSqlForParent(Criteria cri) {
+        return """
+                SELECT
+                    CONCAT(parent_game_id,'/',DATE(reg_user_time)) as game_id_date,
+                    GROUP_CONCAT(CONVERT (parent_player_id, varchar), "/") as amount_users_id
+                FROM
+                    game_ads_parent.ads_player_recharge_ranking_parent
+                """ + cri +
+                """
+                    AND dt = DATE(reg_user_time)
+                GROUP BY parent_game_id, DATE(reg_user_time)
+                        """;
+    }
+
     /**
      * 找出每个游戏注册时间内的注册当天且充值的用户id(总计一栏)
      *
@@ -8261,6 +8330,23 @@ public class GameDataServiceImpl implements IGameDataService {
                 """;
     }
 
+    /**
+     * 找出每个游戏注册时间内的注册当天且充值的用户id(总计一栏)-父游戏维度
+     *
+     * @return String
+     */
+    private String findUsersIdTotalSqlForParent(Criteria cri) {
+        return """
+                SELECT
+                    GROUP_CONCAT(CONVERT (parent_player_id, varchar), "/") as amount_users_id
+                FROM
+                    game_ads_parent.ads_player_recharge_ranking_parent
+                """ + cri +
+                """
+                    AND dt = DATE(reg_user_time)
+                """;
+    }
+
     private List<H5NatureUserVO> getH5NatureUserVOList(GameDataH5DTO dto, Map<String, Object> importDayNMap, GameDataH5VO item) {
         Sql natureGameSql = Sqls.queryEntity("""
                 select
@@ -8774,6 +8860,46 @@ public class GameDataServiceImpl implements IGameDataService {
                 """;
     }
 
+    /**
+     * 用户详情sql-子游戏维度
+     */
+    private String userDetailSql() {
+        return """
+                SELECT
+                    player_id,
+                    reg_agent_id,
+                    reg_agent_name,
+                    server_name,
+                    role_name,
+                    $amount as today_total_amount,
+                    player_os
+                FROM
+                    game_ads.ads_player_recharge_ranking
+                WHERE player_id IN (@usersId)
+                and dt = DATE_ADD(DATE(reg_user_time),
+                """;
+    }
+
+    /**
+     * 用户详情sql-子游戏维度
+     */
+    private String userDetailSqlForParent() {
+        return """
+                SELECT
+                    parent_player_id as player_id,
+                    reg_agent_id,
+                    reg_agent_name,
+                    server_name,
+                    role_name,
+                    $amount as today_total_amount,
+                    player_os
+                FROM
+                    game_ads_parent.ads_player_recharge_ranking_parent
+                WHERE parent_player_id IN (@usersId)
+                and dt = DATE_ADD(DATE(reg_user_time),
+                """;
+    }
+
     /**
      * DayN内部类
      */