|
@@ -818,14 +818,14 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
if (dto.getGameDimension() == 1L) {
|
|
if (dto.getGameDimension() == 1L) {
|
|
switch (dto.getTableTypes()) {
|
|
switch (dto.getTableTypes()) {
|
|
case "buy" -> dayNMap = tempDayNData(dto, "ads_dayn_game_buy");
|
|
case "buy" -> dayNMap = tempDayNData(dto, "ads_dayn_game_buy");
|
|
- case "nature" -> dayNMap = tempDayNData(dto, "ads_dayn_game_nature");
|
|
|
|
|
|
+ case "nature" -> dayNMap = tempDayNDataNature(dto, "ads_dayn_game_nature");
|
|
case "total" -> dayNMap = tempDayNData(dto, "ads_dayn_game");
|
|
case "total" -> dayNMap = tempDayNData(dto, "ads_dayn_game");
|
|
default -> dayNMap = tempDayNData(dto, "ads_dayn_game");
|
|
default -> dayNMap = tempDayNData(dto, "ads_dayn_game");
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
switch (dto.getTableTypes()) {
|
|
switch (dto.getTableTypes()) {
|
|
case "buy" -> dayNMap = tempDayNData(dto, "game_ads_parent.ads_dayn_game_buy_parent");
|
|
case "buy" -> dayNMap = tempDayNData(dto, "game_ads_parent.ads_dayn_game_buy_parent");
|
|
- case "nature" -> dayNMap = tempDayNData(dto, "game_ads_parent.ads_dayn_game_nature_parent");
|
|
|
|
|
|
+ case "nature" -> dayNMap = tempDayNDataNature(dto, "game_ads_parent.ads_dayn_game_nature_parent");
|
|
case "total" -> dayNMap = tempDayNData(dto, "game_ads_parent.ads_dayn_game_parent");
|
|
case "total" -> dayNMap = tempDayNData(dto, "game_ads_parent.ads_dayn_game_parent");
|
|
default -> dayNMap = tempDayNData(dto, "game_ads_parent.ads_dayn_game_parent");
|
|
default -> dayNMap = tempDayNData(dto, "game_ads_parent.ads_dayn_game_parent");
|
|
}
|
|
}
|
|
@@ -1082,7 +1082,7 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
if (dto.getGameDimension() == 1L) {
|
|
if (dto.getGameDimension() == 1L) {
|
|
switch (dto.getTableTypes()) {
|
|
switch (dto.getTableTypes()) {
|
|
case "buy" -> dayN = getDayNByTableName(dayNMap, "ads_dayn_game_buy");
|
|
case "buy" -> dayN = getDayNByTableName(dayNMap, "ads_dayn_game_buy");
|
|
- case "nature" -> dayN = getDayNByTableName(dayNMap, "ads_dayn_game_nature");
|
|
|
|
|
|
+ case "nature" -> dayN = getDayNByTableNameNature(dayNMap, "ads_dayn_game_nature");
|
|
case "total" -> dayN = getDayNByTableName(dayNMap, "ads_dayn_game");
|
|
case "total" -> dayN = getDayNByTableName(dayNMap, "ads_dayn_game");
|
|
default -> dayN = getDayNByTableName(dayNMap, "ads_dayn_game");
|
|
default -> dayN = getDayNByTableName(dayNMap, "ads_dayn_game");
|
|
}
|
|
}
|
|
@@ -1090,7 +1090,7 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
//父游戏维度
|
|
//父游戏维度
|
|
switch (dto.getTableTypes()) {
|
|
switch (dto.getTableTypes()) {
|
|
case "buy" -> dayN = getDayNByTableName(dayNMap, "game_ads_parent.ads_dayn_game_buy_parent");
|
|
case "buy" -> dayN = getDayNByTableName(dayNMap, "game_ads_parent.ads_dayn_game_buy_parent");
|
|
- case "nature" -> dayN = getDayNByTableName(dayNMap, "game_ads_parent.ads_dayn_game_nature_parent");
|
|
|
|
|
|
+ case "nature" -> dayN = getDayNByTableNameNature(dayNMap, "game_ads_parent.ads_dayn_game_nature_parent");
|
|
case "total" -> dayN = getDayNByTableName(dayNMap, "game_ads_parent.ads_dayn_game_parent");
|
|
case "total" -> dayN = getDayNByTableName(dayNMap, "game_ads_parent.ads_dayn_game_parent");
|
|
default -> dayN = getDayNByTableName(dayNMap, "game_ads_parent.ads_dayn_game_parent");
|
|
default -> dayN = getDayNByTableName(dayNMap, "game_ads_parent.ads_dayn_game_parent");
|
|
}
|
|
}
|
|
@@ -1434,7 +1434,7 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
* @param tableName 表名
|
|
* @param tableName 表名
|
|
* @return Map
|
|
* @return Map
|
|
*/
|
|
*/
|
|
- private Map<String, DayN> tempDayNData(GameDataTotalDTO dto, String tableName) {
|
|
|
|
|
|
+ private Map<String, DayN> tempDayNDataNature(GameDataTotalDTO dto, String tableName) {
|
|
String gameColumn = "game_id";
|
|
String gameColumn = "game_id";
|
|
if (dto.getGameDimension() == 2L) {
|
|
if (dto.getGameDimension() == 2L) {
|
|
gameColumn = "parent_game_id";
|
|
gameColumn = "parent_game_id";
|
|
@@ -1502,7 +1502,7 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
//解析 dayN
|
|
//解析 dayN
|
|
Map<String, String> resMap = tempMap.get(adsDaynGame.getGameId());
|
|
Map<String, String> resMap = tempMap.get(adsDaynGame.getGameId());
|
|
//解析每个 adsDaynGame 的 dayN
|
|
//解析每个 adsDaynGame 的 dayN
|
|
- parseJsonData(adsDaynGame, resMap, dto);
|
|
|
|
|
|
+ parseJsonDataNature(adsDaynGame, resMap, dto);
|
|
//将解析的结果保存
|
|
//将解析的结果保存
|
|
tempMap.put(adsDaynGame.getGameId(), resMap);
|
|
tempMap.put(adsDaynGame.getGameId(), resMap);
|
|
}
|
|
}
|
|
@@ -1524,6 +1524,100 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
return gameIdToDayNMap;
|
|
return gameIdToDayNMap;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 生成DayN数据方法
|
|
|
|
+ *
|
|
|
|
+ * @param dto 前端查询参数
|
|
|
|
+ * @param tableName 表名
|
|
|
|
+ * @return Map
|
|
|
|
+ */
|
|
|
|
+ private Map<String, DayN> tempDayNData(GameDataTotalDTO dto, String tableName) {
|
|
|
|
+ String gameColumn = "game_id";
|
|
|
|
+ if (dto.getGameDimension() == 2L) {
|
|
|
|
+ gameColumn = "parent_game_id";
|
|
|
|
+ }
|
|
|
|
+ //创建查询条件
|
|
|
|
+ Criteria cri = Cnd.cri();
|
|
|
|
+ if (dto.getRegisteredBeginDate() != null && dto.getRegisteredEndDate() != null) {
|
|
|
|
+ //拼接注册时间查询条件
|
|
|
|
+ cri.where().andBetween("dt", dto.getRegisteredBeginDate(), dto.getRegisteredEndDate());
|
|
|
|
+ }
|
|
|
|
+ if (CollectionUtils.isNotEmpty(dto.getGameId())) {
|
|
|
|
+ //拼接游戏ID查询条件
|
|
|
|
+ cri.where().andInList(gameColumn, dto.getGameId());
|
|
|
|
+ }
|
|
|
|
+ if (StringUtils.isNotBlank(dto.getSourceSystem())) {
|
|
|
|
+ //拼接SDK来源查询条件
|
|
|
|
+ cri.where().andEquals("source_system", dto.getSourceSystem());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ Sql dayNSql;
|
|
|
|
+ if (dto.getGameDimension() == 1L) {
|
|
|
|
+ dayNSql = Sqls.create("""
|
|
|
|
+ SELECT
|
|
|
|
+ dt,
|
|
|
|
+ game_id,
|
|
|
|
+ source_system,
|
|
|
|
+ dayN as day_n
|
|
|
|
+ FROM
|
|
|
|
+ $tableName
|
|
|
|
+ """ + cri);
|
|
|
|
+ } else {
|
|
|
|
+ dayNSql = Sqls.create("""
|
|
|
|
+ SELECT
|
|
|
|
+ dt,
|
|
|
|
+ parent_game_id as game_id,
|
|
|
|
+ source_system,
|
|
|
|
+ dayN as day_n
|
|
|
|
+ FROM
|
|
|
|
+ $tableName
|
|
|
|
+ """ + cri);
|
|
|
|
+ }
|
|
|
|
+ //给定查询的表名
|
|
|
|
+ dayNSql.vars().set("tableName", tableName);
|
|
|
|
+ //设置回传
|
|
|
|
+ dayNSql.setCallback(Sqls.callback.entities());
|
|
|
|
+ dayNSql.setEntity(dao.getEntity(AdsDaynGame.class));
|
|
|
|
+ //执行sql 获取数据到list中
|
|
|
|
+ dao.execute(dayNSql);
|
|
|
|
+
|
|
|
|
+ //将数据库中获取的所有结果封装到一个List中
|
|
|
|
+ List<AdsDaynGame> list = dayNSql.getList(AdsDaynGame.class);
|
|
|
|
+
|
|
|
|
+ Map<String, Map<String, String>> tempMap = new HashMap<>();
|
|
|
|
+
|
|
|
|
+ //循环遍历 list 按照 gameId 进行存储
|
|
|
|
+ for (AdsDaynGame adsDaynGame : list) {
|
|
|
|
+ if (!tempMap.containsKey(adsDaynGame.getGameId())) {
|
|
|
|
+ //Map中没有改游戏的相关数据,初始化dayNMap
|
|
|
|
+ Map<String, String> resMap = new HashMap<>();
|
|
|
|
+ //对应的参数说明: 日期:每天充值金额-充值次数
|
|
|
|
+ resMap.put("dayN", "0.00-0");
|
|
|
|
+ //保存初始化结果
|
|
|
|
+ tempMap.put(adsDaynGame.getGameId(), resMap);
|
|
|
|
+ }
|
|
|
|
+ //解析 dayN
|
|
|
|
+ Map<String, String> resMap = tempMap.get(adsDaynGame.getGameId());
|
|
|
|
+ //解析每个 adsDaynGame 的 dayN
|
|
|
|
+ parseJsonData(adsDaynGame, resMap, dto);
|
|
|
|
+ //将解析的结果保存
|
|
|
|
+ tempMap.put(adsDaynGame.getGameId(), resMap);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //生成dayN对象
|
|
|
|
+ Map<String, DayN> gameIdToDayNMap = new HashMap<>();
|
|
|
|
+ for (Map.Entry<String, Map<String, String>> entry : tempMap.entrySet()) {
|
|
|
|
+ //根据解析出来的dayN值构建DayN对象
|
|
|
|
+ String[] values = entry.getValue().get("dayN").split("-");
|
|
|
|
+ gameIdToDayNMap.put(entry.getKey(), DayN.builder()
|
|
|
|
+ .rechargeMoney(new BigDecimal(values[0]))
|
|
|
|
+ .rechargeCount(Long.valueOf(values[1]))
|
|
|
|
+ .build());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return gameIdToDayNMap;
|
|
|
|
+ }
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 解析dayN json字符串数据
|
|
* 解析dayN json字符串数据
|
|
*
|
|
*
|
|
@@ -1531,7 +1625,7 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
* @param resMap 记录最终结果Map
|
|
* @param resMap 记录最终结果Map
|
|
* @param dto 前端查询条件
|
|
* @param dto 前端查询条件
|
|
*/
|
|
*/
|
|
- private void parseJsonData(AdsDaynGame adsDaynGame, Map<String, String> resMap, GameDataTotalDTO dto) {
|
|
|
|
|
|
+ private void parseJsonDataNature(AdsDaynGame adsDaynGame, Map<String, String> resMap, GameDataTotalDTO dto) {
|
|
//将每一个adsDaynGame中的dayN属性值 由json转为 Map 型
|
|
//将每一个adsDaynGame中的dayN属性值 由json转为 Map 型
|
|
Gson gson = new Gson();
|
|
Gson gson = new Gson();
|
|
Map<String, String> jsonList = gson.fromJson(adsDaynGame.getDayN(), Map.class);
|
|
Map<String, String> jsonList = gson.fromJson(adsDaynGame.getDayN(), Map.class);
|
|
@@ -1565,6 +1659,41 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 解析dayN json字符串数据
|
|
|
|
+ *
|
|
|
|
+ * @param adsDaynGame 对象
|
|
|
|
+ * @param resMap 记录最终结果Map
|
|
|
|
+ * @param dto 前端查询条件
|
|
|
|
+ */
|
|
|
|
+ private void parseJsonData(AdsDaynGame adsDaynGame, Map<String, String> resMap, GameDataTotalDTO dto) {
|
|
|
|
+ //将每一个adsDaynGame中的dayN属性值 由json转为 Map 型
|
|
|
|
+ Gson gson = new Gson();
|
|
|
|
+ Map<String, String> jsonList = gson.fromJson(adsDaynGame.getDayN(), Map.class);
|
|
|
|
+ //解析 jsonList
|
|
|
|
+ for (Map.Entry<String, String> entry : jsonList.entrySet()) {
|
|
|
|
+ //key是充值日期
|
|
|
|
+ String key = entry.getKey();
|
|
|
|
+ String value = entry.getValue();
|
|
|
|
+ //将value按“-”分割
|
|
|
|
+ String[] resValues = value.split("-");
|
|
|
|
+ //判断充值日期 在充值日期内的数据进行计算
|
|
|
|
+ if (DateUtil.parseLocalDate(key).compareTo(dto.getRechargeBeginDate()) >= 0
|
|
|
|
+ && DateUtil.parseLocalDate(key).compareTo(dto.getRechargeEndDate()) <= 0) {
|
|
|
|
+ //获取原先的dayN的值
|
|
|
|
+ String[] oldValues = resMap.get("dayN").split("-");
|
|
|
|
+ //充值的金额
|
|
|
|
+ BigDecimal chargeMoney = new BigDecimal(oldValues[0]).add(new BigDecimal(resValues[0])).setScale(2, RoundingMode.HALF_UP);
|
|
|
|
+ //充值的次数
|
|
|
|
+ long count = Long.parseLong(oldValues[1]) + Long.parseLong(resValues[1]);
|
|
|
|
+ //合并成字符串 更新dayN的值
|
|
|
|
+ String newValue = chargeMoney + "-" + count;
|
|
|
|
+ resMap.put("dayN", newValue);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 主表 账面相关 查询条件
|
|
* 主表 账面相关 查询条件
|
|
*
|
|
*
|
|
@@ -1740,7 +1869,7 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
* @param tableName 查询的表名
|
|
* @param tableName 查询的表名
|
|
* @return DayN数据
|
|
* @return DayN数据
|
|
*/
|
|
*/
|
|
- private DayN getDayNByTableName(Map<String, Object> dayNMap, String tableName) {
|
|
|
|
|
|
+ private DayN getDayNByTableNameNature(Map<String, Object> dayNMap, String tableName) {
|
|
//查询的游戏维度
|
|
//查询的游戏维度
|
|
Long gameDimension = (Long) dayNMap.get("gameDimension");
|
|
Long gameDimension = (Long) dayNMap.get("gameDimension");
|
|
|
|
|
|
@@ -1841,6 +1970,106 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
return dayN;
|
|
return dayN;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 三张表共用查询dayN数据的方法
|
|
|
|
+ *
|
|
|
|
+ * @param dayNMap 参数Map
|
|
|
|
+ * @param tableName 查询的表名
|
|
|
|
+ * @return DayN数据
|
|
|
|
+ */
|
|
|
|
+ private DayN getDayNByTableName(Map<String, Object> dayNMap, String tableName) {
|
|
|
|
+ //查询的游戏维度
|
|
|
|
+ Long gameDimension = (Long) dayNMap.get("gameDimension");
|
|
|
|
+
|
|
|
|
+ //创建查询条件
|
|
|
|
+ Criteria cri = Cnd.cri();
|
|
|
|
+ if (dayNMap.get("registerBeginDate") != null && dayNMap.get("registerEndDate") != null) {
|
|
|
|
+ //拼接注册时间查询条件
|
|
|
|
+ cri.where().andBetween("dt", dayNMap.get("registerBeginDate"), dayNMap.get("registerEndDate"));
|
|
|
|
+ }
|
|
|
|
+ if (CollectionUtils.isNotEmpty((List<?>) dayNMap.get("gameId"))) {
|
|
|
|
+ if (gameDimension == 1L) {
|
|
|
|
+ // 子游戏维度
|
|
|
|
+ cri.where().andInList("game_id", (List<Long>) dayNMap.get("gameId"));
|
|
|
|
+ } else {
|
|
|
|
+ // 父游戏维度
|
|
|
|
+ cri.where().andInList("parent_game_id", (List<Long>) dayNMap.get("gameId"));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (dayNMap.get("sourceSystem") != null) {
|
|
|
|
+ //拼接SDK来源查询条件
|
|
|
|
+ cri.where().andEquals("source_system", dayNMap.get("sourceSystem"));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ Sql dayNSql = Sqls.create("""
|
|
|
|
+ SELECT
|
|
|
|
+ dayN
|
|
|
|
+ FROM
|
|
|
|
+ $tableName
|
|
|
|
+ """ + cri);
|
|
|
|
+
|
|
|
|
+ //sql语句传入参数
|
|
|
|
+ dayNSql.setParams(dayNMap);
|
|
|
|
+ //给定查询的表名
|
|
|
|
+ dayNSql.vars().set("tableName", tableName);
|
|
|
|
+ //设置回传
|
|
|
|
+ dayNSql.setCallback(Sqls.callback.strList());
|
|
|
|
+ //执行sql 获取数据到list中
|
|
|
|
+ dao.execute(dayNSql);
|
|
|
|
+
|
|
|
|
+ //将数据库中获取的所有结果封装到一个List中
|
|
|
|
+ List<String> dayNList = dayNSql.getList(String.class);
|
|
|
|
+ //构建一个内部类
|
|
|
|
+ DayN dayN = null;
|
|
|
|
+ //解析dayNList
|
|
|
|
+ if (!CollectionUtils.isEmpty(dayNList)) {
|
|
|
|
+ //将dayNList中json格式数据转换为 Map
|
|
|
|
+ Gson gson = new Gson();
|
|
|
|
+ List<Map<String, String>> jsonList = gson.fromJson(dayNList.toString(), ArrayList.class);
|
|
|
|
+ //用来存储数据的map
|
|
|
|
+ Map<String, String> resMap = new HashMap<>();
|
|
|
|
+ //对应的参数说明: 日期:每天充值金额-充值次数-充值人数-新用户复充人数
|
|
|
|
+ resMap.put("dayN", "0.00-0-0-0");
|
|
|
|
+ for (Map<String, String> jsonMap : jsonList) {
|
|
|
|
+ for (Map.Entry<String, String> entry : jsonMap.entrySet()) {
|
|
|
|
+ //key是充值日期
|
|
|
|
+ String key = entry.getKey();
|
|
|
|
+ String value = entry.getValue();
|
|
|
|
+ //将value按“-”分割
|
|
|
|
+ String[] resValues = value.split("-");
|
|
|
|
+ //判断充值日期 在充值日期内的数据进行计算
|
|
|
|
+ if (DateUtil.parseLocalDate(key).compareTo((LocalDate) dayNMap.get("rechargeBeginDate")) >= 0
|
|
|
|
+ && DateUtil.parseLocalDate(key).compareTo((LocalDate) dayNMap.get("rechargeEndDate")) <= 0) {
|
|
|
|
+ //获取原先的dayN的值
|
|
|
|
+ String[] oldValues = resMap.get("dayN").split("-");
|
|
|
|
+ //充值的金额
|
|
|
|
+ BigDecimal chargeMoney = new BigDecimal(oldValues[0]).add(new BigDecimal(resValues[0]));
|
|
|
|
+ //充值的次数
|
|
|
|
+ long count = Long.parseLong(oldValues[1]) + Long.parseLong(resValues[1]);
|
|
|
|
+ //充值的人数
|
|
|
|
+ long num = Long.parseLong(oldValues[2]) + Long.parseLong(resValues[2]);
|
|
|
|
+ //新用户复充人数
|
|
|
|
+ long againNum = Long.parseLong(oldValues[3]) + Long.parseLong(resValues[3]);
|
|
|
|
+ //合并成字符串 更新dayN的值
|
|
|
|
+ String newValue = chargeMoney + "-" + count + "-" + num + "-" + againNum;
|
|
|
|
+ resMap.put("dayN", newValue);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ //设置dayN的参数
|
|
|
|
+ if (!resMap.isEmpty() && !resMap.get("dayN").isEmpty()) {
|
|
|
|
+ String[] values = resMap.get("dayN").split("-");
|
|
|
|
+ dayN = DayN.builder()
|
|
|
|
+ .rechargeMoney(new BigDecimal(values[0]))
|
|
|
|
+ .rechargeCount(Long.valueOf(values[1]))
|
|
|
|
+ .build();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return dayN;
|
|
|
|
+ }
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 通过反射来获取Cn的值
|
|
* 通过反射来获取Cn的值
|
|
*
|
|
*
|