|
@@ -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内部类
|
|
|
*/
|