浏览代码

修改内容:用户详情

lth 1 年之前
父节点
当前提交
0ef0832d2c

+ 5 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/GameDataUserDetailsDTO.java

@@ -25,5 +25,10 @@ public class GameDataUserDetailsDTO extends BasePage {
     @ApiModelProperty(notes = "首日复充趋势对象")
     private FirstNewUserAgainTrendVO againTrendVO;
 
+    /**
+     * SDK来源
+     */
+    @ApiModelProperty(notes = "SDK来源")
+    private String sourceSystem;
 
 }

+ 87 - 13
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/GameDataServiceImpl.java

@@ -1608,12 +1608,13 @@ public class GameDataServiceImpl implements IGameDataService {
      *
      * @param vo
      */
-    private void formatFirstNewUserAgainTotal(GameDataFirstNewUserAgainTotalVO vo) {
+    private void formatFirstNewUserAgainTotal(GameDataFirstNewUserAgainTotalVO vo, Long[] usersIdTotal) {
         if (CollectionUtils.isEmpty(firstNewUserAgainTotalFieldMapList)) {
             return;
         }
         firstNewUserAgainTotalFieldMapList.forEach(againTotalFieldMap -> {
             try {
+                String name = againTotalFieldMap.getT1().getName();
                 String[] temps = ((String) againTotalFieldMap.getT1().get(vo)).split("/");
                 //总充值人数
                 Long count = Long.valueOf(temps[1]);
@@ -1625,6 +1626,8 @@ public class GameDataServiceImpl implements IGameDataService {
                         .rechargeCount(count)
                         .percentage(da1Count == 0L ? BigDecimal.ZERO :
                                 BigDecimal.valueOf(count.doubleValue() / da1Count.doubleValue()).setScale(4, RoundingMode.HALF_UP))
+                        .timeType(name)
+                        .usersId(usersIdTotal)
                         .build());
             } catch (IllegalAccessException e) {
                 throw new RuntimeException(e);
@@ -3304,8 +3307,12 @@ public class GameDataServiceImpl implements IGameDataService {
         dao.execute(sqlAgainData);
         //得到每日总计对象
         GameDataFirstNewUserAgainTotalVO voAgainData = sqlAgainData.getObject(GameDataFirstNewUserAgainTotalVO.class);
+        //得到所有userID
+        Long[] usersIdTotal = Arrays.stream(findUsersIdTotal(dto).split("/"))
+                .map(Long::parseLong)
+                .toArray(Long[]::new);
         //计算游戏首日复充总计
-        formatFirstNewUserAgainTotal(voAgainData);
+        formatFirstNewUserAgainTotal(voAgainData, usersIdTotal);
         //将两个对象的属性结合
         copyNullProperties(voAgainData, voGameData);
         //返回
@@ -3326,18 +3333,28 @@ public class GameDataServiceImpl implements IGameDataService {
         //处理时间条件
         String timeType = againTrendVO.getTimeType();
         //用来处理日期的字符串
-        StringBuilder daysStr = new StringBuilder(StringUtils.EMPTY);
+        StringBuilder queryStr = new StringBuilder(StringUtils.EMPTY);
         if (timeType.startsWith("da")) {
-            daysStr.append(""" 
+            queryStr.append(""" 
                     INTERVAL %s day)""".formatted(
                             Integer.parseInt(timeType.substring(2)) - 1));
         } else if (timeType.startsWith("m")) {
-            daysStr.append(""" 
+            queryStr.append(""" 
                     INTERVAL %s month)""".formatted(timeType.substring(1)));
         } else if (timeType.startsWith("y")) {
-            daysStr.append(" INTERVAL 1 year)");
+            queryStr.append(" INTERVAL 1 year)");
         } else {
-            daysStr.append(" INTERVAL 0 day)");
+            queryStr.append(" INTERVAL 0 day)");
+        }
+        //拼接sourceSystem条件
+        if (againTrendVO.getSourceSystem() != null) {
+            queryStr.append(" and source_system = '")
+                    .append(againTrendVO.getSourceSystem())
+                    .append("'");
+        } else if (dto.getSourceSystem() != null) {
+            queryStr.append(" and source_system = '")
+                    .append(dto.getSourceSystem())
+                    .append("'");
         }
         //得到用户id数组
         Long[] usersId = againTrendVO.getUsersId();
@@ -3354,9 +3371,8 @@ public class GameDataServiceImpl implements IGameDataService {
                 FROM
                     game_ads.ads_player_recharge_ranking
                 WHERE player_id IN (@usersId)
-                and source_system = @sourceSystem
                 and dt = DATE_ADD(reg_user_time,
-                """ + daysStr);
+                """ + queryStr);
         //设置参数
         if ("total".equals(timeType)) {
             userDetilsSql.vars().set("amount", "total_amount");
@@ -3364,7 +3380,6 @@ public class GameDataServiceImpl implements IGameDataService {
             userDetilsSql.vars().set("amount", "today_total_amount");
         }
         userDetilsSql.params().set("usersId", usersId);
-        userDetilsSql.params().set("sourceSystem", againTrendVO.getSourceSystem());
         //设置回传对象
         userDetilsSql.setCallback(Sqls.callback.entities());
         userDetilsSql.setEntity(dao.getEntity(GameDataUserDetailsVO.class));
@@ -3425,6 +3440,46 @@ public class GameDataServiceImpl implements IGameDataService {
         return findUsersIdSql.getObject(Map.class);
     }
 
+    /**
+     * 查询出每个游戏的注册查询时间内,注册当天且充值的所有用户id(总计一栏)
+     *
+     * @param dto 前端查询参数
+     * @return map
+     */
+    private String findUsersIdTotal(GameDataFirstNewUserAgainTotalDTO dto) {
+        //查询每个游戏的注册首日充值用户id,在玩家充值排行榜里查找
+        Criteria findUsersCri = Cnd.cri();
+        //拼接游戏ID
+        if (dto.getGameId() != null) {
+            findUsersCri.where().andEquals("reg_game_id", dto.getGameId());
+        }
+        //拼接游戏应用类型
+        if (dto.getClassify() != null) {
+            findUsersCri.where().andEquals("classify", dto.getClassify());
+        }
+        //拼接SDK来源
+        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
+            findUsersCri.where().andEquals("source_system", dto.getSourceSystem());
+        }
+        //拼接查询时间
+        if (dto.getRegisteredBeginDate() != null && dto.getRegisteredEndDate() != null) {
+            findUsersCri.where().andBetween("reg_user_time", dto.getRegisteredBeginDate(), dto.getRegisteredEndDate());
+        }
+        //不同数据类型 查询条件不同 buy、nature、total
+        if ("buy".equals(dto.getTableTypes())) {
+            findUsersCri.where().andNotEquals("reg_agent_id", 0);
+        } else if ("nature".equals(dto.getTableTypes())) {
+            findUsersCri.where().andEquals("reg_agent_id", 0);
+        }
+        Sql findUsersIdTotalSql = Sqls.create(findUsersIdTotalSql(findUsersCri));
+        //自定义回传
+        findUsersIdTotalSql.setCallback(Sqls.callback.str());
+        //运行sql
+        dao.execute(findUsersIdTotalSql);
+        //返回结果
+        return findUsersIdTotalSql.getString();
+    }
+
     /**
      * ltv每日数据查询sql
      *
@@ -5707,6 +5762,7 @@ public class GameDataServiceImpl implements IGameDataService {
                             LEFT JOIN (
                                 SELECT
                                     game_id,
+                                    game_name,
                                     dt,
                                     buy_da1 as da1,
                                     buy_da2 as da2,
@@ -5755,7 +5811,7 @@ public class GameDataServiceImpl implements IGameDataService {
                             """ + cri +
                     """
                                 ) b
-                            ON a.game_id = b.game_id and a.cost_date = b.dt
+                            ON a.game_id = b.game_id and a.cost_date = b.dt and a.game_name = b.game_name
                             """;
         } else if ("nature".equals(type)) {
             return """
@@ -5818,6 +5874,7 @@ public class GameDataServiceImpl implements IGameDataService {
                             LEFT JOIN (
                                 SELECT
                                     game_id,
+                                    game_name,
                                     dt,
                                     nature_da1 as da1,
                                     nature_da2 as da2,
@@ -5866,7 +5923,7 @@ public class GameDataServiceImpl implements IGameDataService {
                             """ + cri +
                     """
                                     ) b
-                                ON a.game_id = b.game_id and a.cost_date = b.dt
+                                ON a.game_id = b.game_id and a.cost_date = b.dt and a.game_name = b.game_name
                             """;
         }
         //总量 total
@@ -5930,6 +5987,7 @@ public class GameDataServiceImpl implements IGameDataService {
                         LEFT JOIN (
                             SELECT
                                 game_id,
+                                game_name,
                                 dt,
                                 da1,
                                 da2,
@@ -5978,7 +6036,7 @@ public class GameDataServiceImpl implements IGameDataService {
                         """ + cri +
                 """
                             ) b
-                        ON a.game_id = b.game_id and a.cost_date = b.dt
+                        ON a.game_id = b.game_id and a.cost_date = b.dt and a.game_name = b.game_name
                         """;
     }
 
@@ -6056,6 +6114,22 @@ public class GameDataServiceImpl implements IGameDataService {
                         """;
     }
 
+    /**
+     * 找出每个游戏注册时间内的注册当天且充值的用户id(总计一栏)
+     *
+     * @return String
+     */
+    private String findUsersIdTotalSql(Criteria cri) {
+        return """
+                SELECT
+                    GROUP_CONCAT(CONVERT (player_id, varchar), "/") as amount_users_id
+                FROM
+                    game_ads.ads_player_recharge_ranking
+                """ + cri +
+                """
+                    AND dt = reg_user_time
+                """;
+    }
 
     private List<H5NatureUserVO> getH5NatureUserVOList(GameDataH5DTO dto, Map<String, Object> importDayNMap, GameDataH5VO item) {
         Sql natureGameSql = Sqls.queryEntity("""