|
@@ -1608,12 +1608,13 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
*
|
|
*
|
|
* @param vo
|
|
* @param vo
|
|
*/
|
|
*/
|
|
- private void formatFirstNewUserAgainTotal(GameDataFirstNewUserAgainTotalVO vo) {
|
|
|
|
|
|
+ private void formatFirstNewUserAgainTotal(GameDataFirstNewUserAgainTotalVO vo, Long[] usersIdTotal) {
|
|
if (CollectionUtils.isEmpty(firstNewUserAgainTotalFieldMapList)) {
|
|
if (CollectionUtils.isEmpty(firstNewUserAgainTotalFieldMapList)) {
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
firstNewUserAgainTotalFieldMapList.forEach(againTotalFieldMap -> {
|
|
firstNewUserAgainTotalFieldMapList.forEach(againTotalFieldMap -> {
|
|
try {
|
|
try {
|
|
|
|
+ String name = againTotalFieldMap.getT1().getName();
|
|
String[] temps = ((String) againTotalFieldMap.getT1().get(vo)).split("/");
|
|
String[] temps = ((String) againTotalFieldMap.getT1().get(vo)).split("/");
|
|
//总充值人数
|
|
//总充值人数
|
|
Long count = Long.valueOf(temps[1]);
|
|
Long count = Long.valueOf(temps[1]);
|
|
@@ -1625,6 +1626,8 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
.rechargeCount(count)
|
|
.rechargeCount(count)
|
|
.percentage(da1Count == 0L ? BigDecimal.ZERO :
|
|
.percentage(da1Count == 0L ? BigDecimal.ZERO :
|
|
BigDecimal.valueOf(count.doubleValue() / da1Count.doubleValue()).setScale(4, RoundingMode.HALF_UP))
|
|
BigDecimal.valueOf(count.doubleValue() / da1Count.doubleValue()).setScale(4, RoundingMode.HALF_UP))
|
|
|
|
+ .timeType(name)
|
|
|
|
+ .usersId(usersIdTotal)
|
|
.build());
|
|
.build());
|
|
} catch (IllegalAccessException e) {
|
|
} catch (IllegalAccessException e) {
|
|
throw new RuntimeException(e);
|
|
throw new RuntimeException(e);
|
|
@@ -3304,8 +3307,12 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
dao.execute(sqlAgainData);
|
|
dao.execute(sqlAgainData);
|
|
//得到每日总计对象
|
|
//得到每日总计对象
|
|
GameDataFirstNewUserAgainTotalVO voAgainData = sqlAgainData.getObject(GameDataFirstNewUserAgainTotalVO.class);
|
|
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);
|
|
copyNullProperties(voAgainData, voGameData);
|
|
//返回
|
|
//返回
|
|
@@ -3326,18 +3333,28 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
//处理时间条件
|
|
//处理时间条件
|
|
String timeType = againTrendVO.getTimeType();
|
|
String timeType = againTrendVO.getTimeType();
|
|
//用来处理日期的字符串
|
|
//用来处理日期的字符串
|
|
- StringBuilder daysStr = new StringBuilder(StringUtils.EMPTY);
|
|
|
|
|
|
+ StringBuilder queryStr = new StringBuilder(StringUtils.EMPTY);
|
|
if (timeType.startsWith("da")) {
|
|
if (timeType.startsWith("da")) {
|
|
- daysStr.append("""
|
|
|
|
|
|
+ queryStr.append("""
|
|
INTERVAL %s day)""".formatted(
|
|
INTERVAL %s day)""".formatted(
|
|
Integer.parseInt(timeType.substring(2)) - 1));
|
|
Integer.parseInt(timeType.substring(2)) - 1));
|
|
} else if (timeType.startsWith("m")) {
|
|
} else if (timeType.startsWith("m")) {
|
|
- daysStr.append("""
|
|
|
|
|
|
+ queryStr.append("""
|
|
INTERVAL %s month)""".formatted(timeType.substring(1)));
|
|
INTERVAL %s month)""".formatted(timeType.substring(1)));
|
|
} else if (timeType.startsWith("y")) {
|
|
} else if (timeType.startsWith("y")) {
|
|
- daysStr.append(" INTERVAL 1 year)");
|
|
|
|
|
|
+ queryStr.append(" INTERVAL 1 year)");
|
|
} else {
|
|
} 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数组
|
|
//得到用户id数组
|
|
Long[] usersId = againTrendVO.getUsersId();
|
|
Long[] usersId = againTrendVO.getUsersId();
|
|
@@ -3354,9 +3371,8 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
FROM
|
|
FROM
|
|
game_ads.ads_player_recharge_ranking
|
|
game_ads.ads_player_recharge_ranking
|
|
WHERE player_id IN (@usersId)
|
|
WHERE player_id IN (@usersId)
|
|
- and source_system = @sourceSystem
|
|
|
|
and dt = DATE_ADD(reg_user_time,
|
|
and dt = DATE_ADD(reg_user_time,
|
|
- """ + daysStr);
|
|
|
|
|
|
+ """ + queryStr);
|
|
//设置参数
|
|
//设置参数
|
|
if ("total".equals(timeType)) {
|
|
if ("total".equals(timeType)) {
|
|
userDetilsSql.vars().set("amount", "total_amount");
|
|
userDetilsSql.vars().set("amount", "total_amount");
|
|
@@ -3364,7 +3380,6 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
userDetilsSql.vars().set("amount", "today_total_amount");
|
|
userDetilsSql.vars().set("amount", "today_total_amount");
|
|
}
|
|
}
|
|
userDetilsSql.params().set("usersId", usersId);
|
|
userDetilsSql.params().set("usersId", usersId);
|
|
- userDetilsSql.params().set("sourceSystem", againTrendVO.getSourceSystem());
|
|
|
|
//设置回传对象
|
|
//设置回传对象
|
|
userDetilsSql.setCallback(Sqls.callback.entities());
|
|
userDetilsSql.setCallback(Sqls.callback.entities());
|
|
userDetilsSql.setEntity(dao.getEntity(GameDataUserDetailsVO.class));
|
|
userDetilsSql.setEntity(dao.getEntity(GameDataUserDetailsVO.class));
|
|
@@ -3425,6 +3440,46 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
return findUsersIdSql.getObject(Map.class);
|
|
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
|
|
* ltv每日数据查询sql
|
|
*
|
|
*
|
|
@@ -5707,6 +5762,7 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
LEFT JOIN (
|
|
LEFT JOIN (
|
|
SELECT
|
|
SELECT
|
|
game_id,
|
|
game_id,
|
|
|
|
+ game_name,
|
|
dt,
|
|
dt,
|
|
buy_da1 as da1,
|
|
buy_da1 as da1,
|
|
buy_da2 as da2,
|
|
buy_da2 as da2,
|
|
@@ -5755,7 +5811,7 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
""" + cri +
|
|
""" + cri +
|
|
"""
|
|
"""
|
|
) b
|
|
) 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)) {
|
|
} else if ("nature".equals(type)) {
|
|
return """
|
|
return """
|
|
@@ -5818,6 +5874,7 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
LEFT JOIN (
|
|
LEFT JOIN (
|
|
SELECT
|
|
SELECT
|
|
game_id,
|
|
game_id,
|
|
|
|
+ game_name,
|
|
dt,
|
|
dt,
|
|
nature_da1 as da1,
|
|
nature_da1 as da1,
|
|
nature_da2 as da2,
|
|
nature_da2 as da2,
|
|
@@ -5866,7 +5923,7 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
""" + cri +
|
|
""" + cri +
|
|
"""
|
|
"""
|
|
) b
|
|
) 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
|
|
//总量 total
|
|
@@ -5930,6 +5987,7 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
LEFT JOIN (
|
|
LEFT JOIN (
|
|
SELECT
|
|
SELECT
|
|
game_id,
|
|
game_id,
|
|
|
|
+ game_name,
|
|
dt,
|
|
dt,
|
|
da1,
|
|
da1,
|
|
da2,
|
|
da2,
|
|
@@ -5978,7 +6036,7 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
""" + cri +
|
|
""" + cri +
|
|
"""
|
|
"""
|
|
) b
|
|
) 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) {
|
|
private List<H5NatureUserVO> getH5NatureUserVOList(GameDataH5DTO dto, Map<String, Object> importDayNMap, GameDataH5VO item) {
|
|
Sql natureGameSql = Sqls.queryEntity("""
|
|
Sql natureGameSql = Sqls.queryEntity("""
|