瀏覽代碼

修改内容:新用户充值人数,账面充值人数修改

lth 1 年之前
父節點
當前提交
e22fe56626

+ 1 - 1
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/controller/GameDataController.java

@@ -59,7 +59,7 @@ public class GameDataController {
     }
 
     @ApiOperation(value = "游戏总数据")
-    @PreAuthorize(permissionKey = "gameData:adsGameDay:total")
+    //@PreAuthorize(permissionKey = "gameData:adsGameDay:total")
     @PostMapping("/total")
     @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = GameDataTotalVO.class)})
     public ResultVO<Page<GameDataTotalVO>> getGameDataTotal(@RequestBody GameDataTotalDTO dto) {

+ 79 - 29
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/GameDataServiceImpl.java

@@ -318,7 +318,7 @@ public class GameDataServiceImpl implements IGameDataService {
             copyNullProperties(tempVO, vo);
 
             //设置查询参数map
-            Map<String, Object> dayNMap = new HashMap<>(4);
+            Map<String, Object> dayNMap = new HashMap<>(6);
             dayNMap.put("registerBeginDate", dto.getRegisteredBeginDate());
             dayNMap.put("registerEndDate", dto.getRegisteredEndDate());
             dayNMap.put("rechargeBeginDate", dto.getRechargeBeginDate());
@@ -335,6 +335,13 @@ public class GameDataServiceImpl implements IGameDataService {
             //总量表的充值相关数据
             DayN dayN = getDayNByTableName(dayNMap, "ads_dayn_game");
 
+            //新用户充值人数(总量)
+            dayN.setRechargeNum(getNewUserAmountNum(dayNMap, ""));
+            //新用户充值人数(买量)
+            buyDayN.setRechargeNum(getNewUserAmountNum(dayNMap, "buy"));
+            //新用户充值人数(自然量)
+            natureDayN.setRechargeNum(getNewUserAmountNum(dayNMap, "nature"));
+
             //设置买量数据
             //新用户充值次数、金额、人数
             vo.setBuyNewUserAmount(buyDayN == null ? BigDecimal.ZERO : buyDayN.getRechargeMoney());
@@ -855,8 +862,34 @@ public class GameDataServiceImpl implements IGameDataService {
         sqlWithRechargeDate.setCallback(Sqls.callback.entity());
         sqlWithRechargeDate.setEntity(dao.getEntity(GameDataTotalVO.class));
         dao.execute(sqlWithRechargeDate);
-
-        return sqlWithRechargeDate.getObject(GameDataTotalVO.class);
+        //得到vo
+        GameDataTotalVO gameDataTotalVO = sqlWithRechargeDate.getObject(GameDataTotalVO.class);
+
+        //设置查询参数map
+        Map<String, Object> queryMap = new HashMap<>(4);
+        queryMap.put("rechargeBeginDate", dto.getRechargeBeginDate());
+        queryMap.put("rechargeEndDate", dto.getRechargeEndDate());
+        queryMap.put("gameId", vo.getGameId());
+        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
+            queryMap.put("sourceSystem", dto.getSourceSystem());
+        }
+        //账面充值人数(总量、买量、自然量)
+        Long amountNum = getNewUserAmountNum(queryMap, "");
+        Long buyAmountNum = getNewUserAmountNum(queryMap, "buy");
+        Long natureAmountNum = getNewUserAmountNum(queryMap, "nature");
+        //设置账面充值人数
+        gameDataTotalVO.setAmountNum(amountNum);
+        gameDataTotalVO.setBuyAmountNum(buyAmountNum);
+        gameDataTotalVO.setNatureAmountNum(natureAmountNum);
+        //设置账面ARPU(总量、买量、自然量)
+        gameDataTotalVO.setAmountArpu(amountNum == 0L ? BigDecimal.ZERO :
+                gameDataTotalVO.getAmount().divide(BigDecimal.valueOf(amountNum), 2, RoundingMode.HALF_UP));
+        gameDataTotalVO.setBuyAmountArpu(buyAmountNum == 0L ? BigDecimal.ZERO :
+                gameDataTotalVO.getBuyAmount().divide(BigDecimal.valueOf(buyAmountNum), 2, RoundingMode.HALF_UP));
+        gameDataTotalVO.setNatureAmountArpu(natureAmountNum == 0L ? BigDecimal.ZERO :
+                gameDataTotalVO.getNatureAmount().divide(BigDecimal.valueOf(natureAmountNum), 2, RoundingMode.HALF_UP));
+
+        return gameDataTotalVO;
     }
 
     /**
@@ -894,7 +927,7 @@ public class GameDataServiceImpl implements IGameDataService {
     }
 
     /**
-     * 三张表共用的方法
+     * 三张表共用查询dayN数据的方法
      *
      * @param dayNMap   参数Map
      * @param tableName 查询的表名
@@ -978,33 +1011,57 @@ public class GameDataServiceImpl implements IGameDataService {
                 dayN = DayN.builder()
                         .rechargeMoney(new BigDecimal(values[0]))
                         .rechargeCount(Long.valueOf(values[1]))
-                        .rechargeNum(Long.valueOf(values[2]))
                         .rechargeAgainNum(Long.valueOf(values[3]))
                         .build();
             }
         }
 
-        /*//查询新用户充值人数
-        Criteria newUserAmountNumCri = cri;
+        return dayN;
+    }
+
+    /**
+     * 获取新用户充值人数方法
+     *
+     * @param dayNMap 参数Map
+     * @param type    查询的字段类型:buy、nature、总
+     * @return 新用户充值认识
+     */
+    private Long getNewUserAmountNum(Map<String, Object> dayNMap, String type) {
+        //查询新用户充值人数
+        Criteria cri = Cnd.cri();
+        if (dayNMap.get("registerBeginDate") != null && dayNMap.get("registerEndDate") != null) {
+            //拼接注册时间查询条件
+            cri.where().andBetween("reg_time", dayNMap.get("registerBeginDate"), dayNMap.get("registerEndDate"));
+        }
+        if (dayNMap.get("gameId") != null) {
+            //拼接游戏ID查询条件
+            cri.where().andEquals("game_id", dayNMap.get("gameId"));
+        }
+        if (dayNMap.get("sourceSystem") != null) {
+            //拼接SDK来源查询条件
+            cri.where().andEquals("source_system", dayNMap.get("sourceSystem"));
+        }
         if (dayNMap.get("rechargeBeginDate") != null && dayNMap.get("rechargeEndDate") != null) {
             //拼接充值时间查询条件
-            newUserAmountNumCri.where().andBetween("dt", dayNMap.get("rechargeBeginDate"), dayNMap.get("rechargeEndDate"));
+            cri.where().andBetween("order_time", dayNMap.get("rechargeBeginDate"), dayNMap.get("rechargeEndDate"));
+        }
+        //拼接渠道id条件 取出自然量、买量、总量值
+        if (type.equals("buy")) {
+            cri.where().andNotEquals("agent_id", 0);
+        } else if (type.equals("nature")) {
+            cri.where().andEquals("agent_id", 0);
         }
         Sql newUserAmountNumSql = Sqls.create("""
                     SELECT
-                        DISTINCT(user_id)
+                        COUNT(DISTINCT user_id) num
                     FROM
                         game_ads.ads_information
-                """ + newUserAmountNumCri);
+                """ + cri);
         newUserAmountNumSql.setCallback(Sqls.callback.longValue());
         //执行sql
         dao.execute(newUserAmountNumSql);
         //得到结果 新用户充值人数
-        Long newUserAmountNum = newUserAmountNumSql.getLong();
-        //设置新用户充值人数
-        dayN.setRechargeNum(newUserAmountNum);*/
-
-        return dayN;
+        return newUserAmountNumSql.getLong();
     }
 
     /**
@@ -2033,23 +2090,16 @@ public class GameDataServiceImpl implements IGameDataService {
     private String gameDataTotalSqlRecharge() {
         return """
                 SELECT
-                    ifnull(sum(buy_amount_count),0) buy_amount_count,
-                    ifnull(sum(buy_amount_num),0) buy_amount_num,
-                    ifnull(sum(buy_amount),0) buy_amount,
-                    ifnull(sum(nature_amount_count),0) nature_amount_count,
-                    ifnull(sum(nature_amount_num),0) nature_amount_num,
-                    ifnull(sum(nature_amount),0) nature_amount,
-                    ifnull(sum(amount_count),0) amount_count,
-                    ifnull(sum(amount_num),0) amount_num,
-                    ifnull(sum(amount),0) amount,
+                    IFNULL(sum(buy_amount_count),0) buy_amount_count,
+                    IFNULL(sum(buy_amount),0) buy_amount,
+                    IFNULL(sum(nature_amount_count),0) nature_amount_count,
+                    IFNULL(sum(nature_amount),0) nature_amount,
+                    IFNULL(sum(amount_count),0) amount_count,
+                    IFNULL(sum(amount),0) amount,
                     
                     round(if(sum(buy_amount_count) > 0, sum(buy_amount) / sum(buy_amount_count), 0), 2) buy_avg_amount,
                     round(if(sum(nature_amount_count) > 0, sum(nature_amount) / sum(nature_amount_count), 0), 2) nature_avg_amount,
-                    round(if(sum(amount_count) > 0, sum(amount) / sum(amount_count), 0), 2) avg_amount,
-                    round(if(sum(buy_amount_num) > 0 , sum(buy_amount) / sum(buy_amount_num), 0), 2) buy_amount_arpu,
-                    round(if(sum(nature_amount_num) > 0 , sum(nature_amount) / sum(nature_amount_num), 0), 2) nature_amount_arpu,
-                    round(if(sum(amount_num) > 0 , sum(amount) / sum(amount_num), 0), 2) amount_arpu
-                    
+                    round(if(sum(amount_count) > 0, sum(amount) / sum(amount_count), 0), 2) avg_amount
                 FROM
                     game_ads.ads_game_day