Kaynağa Gözat

游戏数据修改

Letianhua 1 yıl önce
ebeveyn
işleme
5a608b52c7

+ 39 - 1
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/GameDataServiceImpl.java

@@ -265,7 +265,7 @@ public class GameDataServiceImpl implements IGameDataService {
         pager.setRecordCount(sqlCount.getInt());
 
         List<GameDataDayVO> gameDataDayVOList = list.stream().map(vo -> {
-            formatDayN(vo);
+            formatDayNGroupByDt(vo);
             return vo;
         }).collect(Collectors.toList());
 
@@ -1330,6 +1330,44 @@ public class GameDataServiceImpl implements IGameDataService {
         });
     }
 
+    /**
+     * 通过反射赋值每日总计趋势(游戏每日按日期聚合数据)
+     *
+     */
+    private void formatDayNGroupByDt(GameDataDayVO vo) {
+        if (CollectionUtils.isEmpty(dayNFieldMapList)) {
+            return;
+        }
+        dayNFieldMapList.forEach(dayNTotalFieldMap -> {
+            try {
+                //得到需要计算的值
+                String[] temps = ((String) dayNTotalFieldMap.getT1().get(vo)).split("/");
+                //dn的金额总计
+                BigDecimal dNAmount = new BigDecimal(temps[0]);
+                //d1-dn的金额总计
+                BigDecimal d1ToDNTotalAmount = new BigDecimal(temps[1]);
+                //d1-dn的消耗总计(排除了未到时间的cost)
+                BigDecimal d1ToDNTotalCost = new BigDecimal(temps[3]);
+                //d1的金额总计(排除了未到时间的d1)
+                BigDecimal d1Amount = new BigDecimal(temps[4]);
+                //赋值
+                dayNTotalFieldMap.getT2().set(vo, RechargeTrendVO.builder()
+                        .rechargeMoney(dNAmount)
+                        .rechargeUserCount(Long.valueOf(temps[2]))
+                        .increase(d1ToDNTotalCost.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO :
+                                dNAmount.divide(d1ToDNTotalCost, 4, RoundingMode.HALF_UP))
+                        .back(d1ToDNTotalCost.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO :
+                                d1ToDNTotalAmount.divide(d1ToDNTotalCost, 4, RoundingMode.HALF_UP))
+                        .multiples(d1Amount.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO :
+                                d1ToDNTotalAmount.divide(d1Amount, 4, RoundingMode.HALF_UP))
+                        .build());
+
+            } catch (IllegalAccessException e) {
+                throw new RuntimeException(e);
+            }
+        });
+    }
+
     /**
      * 通过反射赋值每日总计趋势
      *

+ 54 - 2
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/PitcherDataServiceImpl.java

@@ -541,11 +541,25 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
         //执行sql
         dao.execute(sql);
         //设置总记录数
-        pager.setRecordCount(dao.count(AdsGamePitcherDay.class, cri));
+        Sql sqlCount = Sqls.create(
+                """
+                    SELECT
+                    	COUNT(1)
+                    FROM (
+                    	SELECT
+                    		COUNT(*)
+                    	FROM game_ads.ads_game_pitcher_day
+                """ + cri +
+                """
+                    ) a
+                """);
+        sqlCount.setCallback(Sqls.callback.integer());
+        dao.execute(sqlCount);
+        pager.setRecordCount(sqlCount.getInt());
         //处理dayN数据
         List<PitcherGameDataDayVO> tempList = sql.getList(PitcherGameDataDayVO.class);
         List<PitcherGameDataDayVO> list = tempList.stream().map(vo -> {
-            formatPitcherGameDataDayDayN(vo);
+            formatPitcherGameDataDayGroupByDtAndPitcherDayN(vo);
             return vo;
         }).collect(Collectors.toList());
         //返回结果
@@ -1637,6 +1651,44 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
         });
     }
 
+    /**
+     * 处理投手游戏每日的DayN(投手游戏每日按日期,投手聚合)
+     *
+     * @param vo PitcherGameDataDayTotalVO
+     */
+    private void formatPitcherGameDataDayGroupByDtAndPitcherDayN(PitcherGameDataDayVO vo) {
+        if (CollectionUtils.isEmpty(pitcherGameDayNFieldMapList)) {
+            return;
+        }
+        pitcherGameDayNFieldMapList.forEach(dayNTotalFieldMap -> {
+            try {
+                //得到需要计算的值
+                String[] temps = ((String) dayNTotalFieldMap.getT1().get(vo)).split("/");
+                //dn的金额总计
+                BigDecimal dNAmount = new BigDecimal(temps[0]);
+                //d1-dn的金额总计
+                BigDecimal d1ToDNTotalAmount = new BigDecimal(temps[1]);
+                //d1-dn的消耗总计(排除了未到时间的cost)
+                BigDecimal d1ToDNTotalCost = new BigDecimal(temps[3]);
+                //d1的金额总计(排除了未到时间的d1)
+                BigDecimal d1Amount = new BigDecimal(temps[4]);
+                //赋值
+                dayNTotalFieldMap.getT2().set(vo, RechargeTrendVO.builder()
+                        .rechargeMoney(dNAmount)
+                        .rechargeUserCount(Long.valueOf(temps[2]))
+                        .increase(d1ToDNTotalCost.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO :
+                                dNAmount.divide(d1ToDNTotalCost, 4, RoundingMode.HALF_UP))
+                        .back(d1ToDNTotalCost.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO :
+                                d1ToDNTotalAmount.divide(d1ToDNTotalCost, 4, RoundingMode.HALF_UP))
+                        .multiples(d1Amount.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO :
+                                d1ToDNTotalAmount.divide(d1Amount, 4, RoundingMode.HALF_UP))
+                        .build());
+            } catch (Exception e) {
+                throw new BaseException("映射出错");
+            }
+        });
+    }
+
     /**
      * 处理投手每日总计的DayN(投手每日总计)
      *