Browse Source

修改内容:广告监控字段修改;游戏总数据新用户充值人数修改

lth 1 year ago
parent
commit
9e956b9d06

+ 4 - 4
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/PromotionDayDTO.java

@@ -57,15 +57,15 @@ public class PromotionDayDTO extends BasePage {
     private String status;
 
     /**
-     * 计划ID
+     * 项目ID
      */
-    @ApiModelProperty(value = "计划ID")
+    @ApiModelProperty(value = "项目ID")
     private Long projectId;
 
     /**
-     * 计划名称
+     * 项目名称
      */
-    @ApiModelProperty(value = "计划名称")
+    @ApiModelProperty(value = "项目名称")
     private String projectName;
 
     /**

+ 4 - 4
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/PromotionDayTotalDTO.java

@@ -56,15 +56,15 @@ public class PromotionDayTotalDTO {
     private String status;
 
     /**
-     * 计划ID
+     * 项目ID
      */
-    @ApiModelProperty(value = "计划ID")
+    @ApiModelProperty(value = "项目ID")
     private Long projectId;
 
     /**
-     * 计划名称
+     * 项目名称
      */
-    @ApiModelProperty(value = "计划名称")
+    @ApiModelProperty(value = "项目名称")
     private String projectName;
 
     /**

+ 221 - 11
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/GameDataServiceImpl.java

@@ -335,17 +335,10 @@ 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());
-            vo.setBuyNewUserAmountNum(buyDayN == null ? 0L : buyDayN.getRechargeNum());
+            vo.setBuyNewUserAmountNum(getNewUserAmountNum(dayNMap, "buy"));
             vo.setBuyNewUserAmountCount(buyDayN == null ? 0L : buyDayN.getRechargeCount());
             //新用户复充人数
             vo.setBuyNewUserAgainNum(buyDayN == null ? 0L : buyDayN.getRechargeAgainNum());
@@ -387,7 +380,7 @@ public class GameDataServiceImpl implements IGameDataService {
             //设置自然量数据
             //新用户充值次数、金额、人数
             vo.setNatureNewUserAmount(natureDayN == null ? BigDecimal.ZERO : natureDayN.getRechargeMoney());
-            vo.setNatureNewUserAmountNum(natureDayN == null ? 0L : natureDayN.getRechargeNum());
+            vo.setNatureNewUserAmountNum(getNewUserAmountNum(dayNMap, "nature"));
             vo.setNatureNewUserAmountCount(natureDayN == null ? 0L : natureDayN.getRechargeCount());
             //新用户复充人数
             vo.setNatureNewUserAgainNum(natureDayN == null ? 0L : natureDayN.getRechargeAgainNum());
@@ -429,7 +422,7 @@ public class GameDataServiceImpl implements IGameDataService {
             //设置总量数据
             //新用户充值次数、金额、人数
             vo.setNewUserAmount(dayN == null ? BigDecimal.ZERO : dayN.getRechargeMoney());
-            vo.setNewUserAmountNum(dayN == null ? 0L : dayN.getRechargeNum());
+            vo.setNewUserAmountNum(getNewUserAmountNum(dayNMap, ""));
             vo.setNewUserAmountCount(dayN == null ? 0L : dayN.getRechargeCount());
             //新用户复充人数
             vo.setNewUserAgainNum(dayN == null ? 0L : dayN.getRechargeAgainNum());
@@ -554,12 +547,193 @@ public class GameDataServiceImpl implements IGameDataService {
         sqlWithRechargeDate.setEntity(dao.getEntity(GameDataTotalTotalVO.class));
         dao.execute(sqlWithRechargeDate);
         GameDataTotalTotalVO tempVO = sqlWithRechargeDate.getObject(GameDataTotalTotalVO.class);
+
+        //设置查询参数map
+        Map<String, Object> queryMap = new HashMap<>(4);
+        queryMap.put("rechargeBeginDate", dto.getRechargeBeginDate());
+        queryMap.put("rechargeEndDate", dto.getRechargeEndDate());
+        queryMap.put("gameId", dto.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");
+        //设置账面充值人数
+        tempVO.setAmountNum(amountNum);
+        tempVO.setBuyAmountNum(buyAmountNum);
+        tempVO.setNatureAmountNum(natureAmountNum);
+        //设置账面ARPU(总量、买量、自然量)
+        tempVO.setAmountArpu(amountNum == 0L ? BigDecimal.ZERO :
+                tempVO.getAmount().divide(BigDecimal.valueOf(amountNum), 2, RoundingMode.HALF_UP));
+        tempVO.setBuyAmountArpu(buyAmountNum == 0L ? BigDecimal.ZERO :
+                tempVO.getBuyAmount().divide(BigDecimal.valueOf(buyAmountNum), 2, RoundingMode.HALF_UP));
+        tempVO.setNatureAmountArpu(natureAmountNum == 0L ? BigDecimal.ZERO :
+                tempVO.getNatureAmount().divide(BigDecimal.valueOf(natureAmountNum), 2, RoundingMode.HALF_UP));
         //将两个对象内的数据合并
         copyNullProperties(tempVO, vo);
 
+        getGameDataTotalTotalRechargeData(dto,vo);
+
         return vo;
     }
 
+    private void getGameDataTotalTotalRechargeData(GameDataTotalTotalDTO dto, GameDataTotalTotalVO vo) {
+
+        //设置查询参数map
+        Map<String, Object> dayNMap = new HashMap<>(6);
+        dayNMap.put("registerBeginDate", dto.getRegisteredBeginDate());
+        dayNMap.put("registerEndDate", dto.getRegisteredEndDate());
+        dayNMap.put("rechargeBeginDate", dto.getRechargeBeginDate());
+        dayNMap.put("rechargeEndDate", dto.getRechargeEndDate());
+        dayNMap.put("gameId", dto.getGameId());
+        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
+            dayNMap.put("sourceSystem", dto.getSourceSystem());
+        }
+
+        //买量表的充值相关数据
+        DayN buyDayN = getDayNByTableName(dayNMap, "ads_dayn_game_buy");
+        //自然量表的充值相关数据
+        DayN natureDayN = getDayNByTableName(dayNMap, "ads_dayn_game_nature");
+        //总量表的充值相关数据
+        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());
+        vo.setBuyNewUserAmountNum(buyDayN == null ? 0L : buyDayN.getRechargeNum());
+        vo.setBuyNewUserAmountCount(buyDayN == null ? 0L : buyDayN.getRechargeCount());
+        //新用户复充人数
+        vo.setBuyNewUserAgainNum(buyDayN == null ? 0L : buyDayN.getRechargeAgainNum());
+
+        //老用户充值次数、人数、金额
+        vo.setBuyOldUserAmount(vo.getBuyAmount().subtract(vo.getBuyNewUserAmount()));
+        vo.setBuyOldUserCount(vo.getBuyAmountCount() - (vo.getBuyNewUserAmountCount()));
+        vo.setBuyOldUserNum(vo.getBuyAmountNum() - (vo.getBuyNewUserAmountNum()));
+
+        //新用户付费比
+        vo.setBuyNewUserRate(vo.getBuyAmountNum().compareTo(0L) == 0 ? BigDecimal.ZERO :
+                BigDecimal.valueOf(vo.getBuyNewUserAmountNum().doubleValue() / vo.getBuyAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
+        //新用户付费率
+        vo.setBuyNewUserRoi(vo.getBuyRegNum().compareTo(0L) == 0 ? BigDecimal.ZERO :
+                BigDecimal.valueOf(vo.getBuyNewUserAmountNum().doubleValue() / vo.getBuyRegNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
+
+        //新用户客单价
+        vo.setBuyNewUserAvgAmount(vo.getBuyNewUserAmountCount().compareTo(0L) == 0 ? BigDecimal.ZERO :
+                BigDecimal.valueOf(vo.getBuyNewUserAmount().doubleValue() / vo.getBuyNewUserAmountCount().doubleValue()).setScale(4, RoundingMode.HALF_UP));
+
+        //复充率
+        vo.setBuyUserAgainRate(vo.getBuyNewUserAmountNum().compareTo(0L) == 0 ? BigDecimal.ZERO :
+                BigDecimal.valueOf(vo.getBuyNewUserAgainNum().doubleValue() / vo.getBuyNewUserAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
+        //新用户复充率
+        vo.setBuyNewUserAgainRate(vo.getBuyNewUserTotalAmountNum().compareTo(0L) == 0 ? BigDecimal.ZERO :
+                BigDecimal.valueOf(vo.getBuyNewUserAgainNum().doubleValue() / vo.getBuyNewUserTotalAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
+
+        //新用户付费ARPU
+        vo.setBuyNewUserAmountArpu(vo.getBuyNewUserAmountNum().compareTo(0L) == 0 ? BigDecimal.ZERO :
+                BigDecimal.valueOf(vo.getBuyNewUserAmount().doubleValue() / vo.getBuyNewUserAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
+
+        //新用户回收率
+        vo.setBuyNewUserRechargeRate(vo.getCost().compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO :
+                vo.getBuyNewUserAmount().divide(vo.getCost(), 4, RoundingMode.HALF_UP));
+        //新用户充值成本
+        vo.setBuyNewUserRechargeCost(vo.getBuyNewUserAmountNum() == 0 ? BigDecimal.ZERO :
+                vo.getCost().divide(BigDecimal.valueOf(vo.getBuyNewUserAmountNum()), 4, RoundingMode.HALF_UP));
+
+        //设置自然量数据
+        //新用户充值次数、金额、人数
+        vo.setNatureNewUserAmount(natureDayN == null ? BigDecimal.ZERO : natureDayN.getRechargeMoney());
+        vo.setNatureNewUserAmountNum(natureDayN == null ? 0L : natureDayN.getRechargeNum());
+        vo.setNatureNewUserAmountCount(natureDayN == null ? 0L : natureDayN.getRechargeCount());
+        //新用户复充人数
+        vo.setNatureNewUserAgainNum(natureDayN == null ? 0L : natureDayN.getRechargeAgainNum());
+
+        //老用户充值次数、人数、金额
+        vo.setNatureOldUserAmount(vo.getNatureAmount().subtract(vo.getNatureNewUserAmount()));
+        vo.setNatureOldUserCount(vo.getNatureAmountCount() - (vo.getNatureNewUserAmountCount()));
+        vo.setNatureOldUserNum(vo.getNatureAmountNum() - (vo.getNatureNewUserAmountNum()));
+
+        //新用户付费比
+        vo.setNatureNewUserRate(vo.getNatureAmountNum().compareTo(0L) == 0 ? BigDecimal.ZERO :
+                BigDecimal.valueOf(vo.getNatureNewUserAmountNum().doubleValue() / vo.getNatureAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
+        //新用户付费率
+        vo.setNatureNewUserRoi(vo.getNatureRegNum().compareTo(0L) == 0 ? BigDecimal.ZERO :
+                BigDecimal.valueOf(vo.getNatureNewUserAmountNum().doubleValue() / vo.getNatureRegNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
+
+        //新用户客单价
+        vo.setNatureNewUserAvgAmount(vo.getNatureNewUserAmountCount().compareTo(0L) == 0 ? BigDecimal.ZERO :
+                BigDecimal.valueOf(vo.getNatureNewUserAmount().doubleValue() / vo.getNatureNewUserAmountCount().doubleValue()).setScale(4, RoundingMode.HALF_UP));
+
+        //复充率
+        vo.setNatureUserAgainRate(vo.getNatureNewUserAmountNum().compareTo(0L) == 0 ? BigDecimal.ZERO :
+                BigDecimal.valueOf(vo.getNatureNewUserAgainNum().doubleValue() / vo.getNatureNewUserAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
+        //新用户复充率
+        vo.setNatureNewUserAgainRate(vo.getNatureNewUserTotalAmountNum().compareTo(0L) == 0 ? BigDecimal.ZERO :
+                BigDecimal.valueOf(vo.getNatureNewUserAgainNum().doubleValue() / vo.getNatureNewUserTotalAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
+
+        //新用户付费ARPU
+        vo.setNatureNewUserAmountArpu(vo.getNatureNewUserAmountNum().compareTo(0L) == 0 ? BigDecimal.ZERO :
+                BigDecimal.valueOf(vo.getNatureNewUserAmount().doubleValue() / vo.getNatureNewUserAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
+
+        //新用户回收率
+        vo.setNatureNewUserRechargeRate(vo.getCost().compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO :
+                vo.getNatureNewUserAmount().divide(vo.getCost(), 4, RoundingMode.HALF_UP));
+        //新用户充值成本
+        vo.setNatureNewUserRechargeCost(vo.getNatureNewUserAmountNum() == 0 ? BigDecimal.ZERO :
+                vo.getCost().divide(BigDecimal.valueOf(vo.getNatureNewUserAmountNum()), 4, RoundingMode.HALF_UP));
+
+        //设置总量数据
+        //新用户充值次数、金额、人数
+        vo.setNewUserAmount(dayN == null ? BigDecimal.ZERO : dayN.getRechargeMoney());
+        vo.setNewUserAmountNum(dayN == null ? 0L : dayN.getRechargeNum());
+        vo.setNewUserAmountCount(dayN == null ? 0L : dayN.getRechargeCount());
+        //新用户复充人数
+        vo.setNewUserAgainNum(dayN == null ? 0L : dayN.getRechargeAgainNum());
+
+        //老用户充值次数、人数、金额
+        vo.setOldUserAmount(vo.getAmount().subtract(vo.getNewUserAmount()));
+        vo.setOldUserCount(vo.getAmountCount() - (vo.getNewUserAmountCount()));
+        vo.setOldUserNum(vo.getAmountNum() - (vo.getNewUserAmountNum()));
+
+        //新用户付费比
+        vo.setNewUserRate(vo.getAmountNum().compareTo(0L) == 0 ? BigDecimal.ZERO :
+                BigDecimal.valueOf(vo.getNewUserAmountNum().doubleValue() / vo.getAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
+        //新用户付费率
+        vo.setNewUserRoi(vo.getRegNum().compareTo(0L) == 0 ? BigDecimal.ZERO :
+                BigDecimal.valueOf(vo.getNewUserAmountNum().doubleValue() / vo.getRegNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
+
+        //新用户客单价
+        vo.setNewUserAvgAmount(vo.getNewUserAmountCount().compareTo(0L) == 0 ? BigDecimal.ZERO :
+                BigDecimal.valueOf(vo.getNewUserAmount().doubleValue() / vo.getNewUserAmountCount().doubleValue()).setScale(4, RoundingMode.HALF_UP));
+
+        //复充率
+        vo.setUserAgainRate(vo.getNewUserAmountNum().compareTo(0L) == 0 ? BigDecimal.ZERO :
+                BigDecimal.valueOf(vo.getNewUserAgainNum().doubleValue() / vo.getNewUserAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
+        //新用户复充率
+        vo.setNewUserAgainRate(vo.getNewUserTotalAmountNum().compareTo(0L) == 0 ? BigDecimal.ZERO :
+                BigDecimal.valueOf(vo.getNewUserAgainNum().doubleValue() / vo.getNewUserTotalAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
+
+        //新用户付费ARPU
+        vo.setNewUserAmountArpu(vo.getNewUserAmountNum().compareTo(0L) == 0 ? BigDecimal.ZERO :
+                BigDecimal.valueOf(vo.getNewUserAmount().doubleValue() / vo.getNewUserAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
+
+        //新用户回收率
+        vo.setNewUserRechargeRate(vo.getCost().compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO :
+                vo.getNewUserAmount().divide(vo.getCost(), 4, RoundingMode.HALF_UP));
+        //新用户充值成本
+        vo.setNewUserRechargeCost(vo.getNewUserAmountNum() == 0 ? BigDecimal.ZERO :
+                vo.getCost().divide(BigDecimal.valueOf(vo.getNewUserAmountNum()), 4, RoundingMode.HALF_UP));
+
+    }
+
     /**
      * 每日流水贡献
      *
@@ -2075,7 +2249,43 @@ public class GameDataServiceImpl implements IGameDataService {
                     
                     round(if(SUM(buy_new_user_total_amount_num) > 0, SUM(cost) / SUM(buy_new_user_total_amount_num), 0), 2) buy_total_recharge_cost,
                     round(if(SUM(nature_new_user_total_amount_num) > 0, SUM(cost) / SUM(nature_new_user_total_amount_num), 0), 2) nature_total_recharge_cost,
-                    round(if(SUM(new_user_total_amount_num) > 0, SUM(cost) / SUM(new_user_total_amount_num), 0), 2) total_recharge_cost
+                    round(if(SUM(new_user_total_amount_num) > 0, SUM(cost) / SUM(new_user_total_amount_num), 0), 2) total_recharge_cost,
+                    
+                    SUM(buy_hundred_user_num) buy_hundred_user_num,
+                    round(IF(SUM(buy_hundred_user_num) > 0, SUM(cost) / SUM(buy_hundred_user_num), 0), 2) buy_hundred_user_num_cost,
+                    SUM(buy_first_role_num) buy_first_role_num,
+                    SUM(buy_role_num) buy_role_num,
+                    SUM(buy_new_user_total_role_num) buy_new_user_total_role_num,
+                    round(IF(SUM(buy_first_role_num) > 0, SUM(cost) / SUM(buy_first_role_num), 0), 2) buy_first_role_num_cost,
+                    round(IF(SUM(buy_role_num) > 0, SUM(cost) / SUM(buy_role_num), 0), 2) buy_role_num_cost,
+                    round(IF(SUM(buy_new_user_total_role_num) >0, SUM(cost) / SUM(buy_new_user_total_role_num), 0), 2) buy_new_user_total_role_num_cost,
+                    round(IF(SUM(buy_reg_num) >0, SUM(buy_first_role_num) / SUM(buy_reg_num), 0), 4) buy_first_role_num_rate,
+                    round(IF(SUM(buy_reg_num) >0, SUM(buy_role_num) / SUM(buy_reg_num), 0), 4) buy_role_num_rate,
+                    round(IF(SUM(buy_reg_num) >0, SUM(buy_new_user_total_role_num) / SUM(buy_reg_num), 0), 4) buy_new_user_total_role_num_rate,
+                    
+                    SUM(nature_hundred_user_num) nature_hundred_user_num,
+                    round(IF(SUM(nature_hundred_user_num) > 0, SUM(cost) / SUM(nature_hundred_user_num), 0), 2) nature_hundred_user_num_cost,
+                    SUM(nature_first_role_num) nature_first_role_num,
+                    SUM(nature_role_num) nature_role_num,
+                    SUM(nature_new_user_total_role_num) nature_new_user_total_role_num,
+                    round(IF(SUM(nature_first_role_num) > 0, SUM(cost) / SUM(nature_first_role_num), 0), 2) nature_first_role_num_cost,
+                    round(IF(SUM(nature_role_num) > 0, SUM(cost) / SUM(nature_role_num), 0), 2) nature_role_num_cost,
+                    round(IF(SUM(nature_new_user_total_role_num) >0, SUM(cost) / SUM(nature_new_user_total_role_num), 0), 2) nature_new_user_total_role_num_cost,
+                    round(IF(SUM(nature_reg_num) >0, SUM(nature_first_role_num) / SUM(nature_reg_num), 0), 4) nature_first_role_num_rate,
+                    round(IF(SUM(nature_reg_num) >0, SUM(nature_role_num) / SUM(nature_reg_num), 0), 4) nature_role_num_rate,
+                    round(IF(SUM(nature_reg_num) >0, SUM(nature_new_user_total_role_num) / SUM(nature_reg_num), 0), 4) nature_new_user_total_role_num_rate,
+                   
+                    SUM(hundred_user_num) hundred_user_num,
+                    round(IF(SUM(hundred_user_num) > 0, SUM(cost) / SUM(hundred_user_num), 0), 2) hundred_user_num_cost,
+                    SUM(first_role_num) first_role_num,
+                    SUM(role_num) role_num,
+                    SUM(new_user_total_role_num) new_user_total_role_num,
+                    round(IF(SUM(first_role_num) > 0, SUM(cost) / SUM(first_role_num), 0), 2) first_role_num_cost,
+                    round(IF(SUM(role_num) > 0, SUM(cost) / SUM(role_num), 0), 2) role_num_cost,
+                    round(IF(SUM(new_user_total_role_num) >0, SUM(cost) / SUM(new_user_total_role_num), 0), 2) new_user_total_role_num_cost,
+                    round(IF(SUM(reg_num) >0, SUM(first_role_num) / SUM(reg_num), 0), 4) first_role_num_rate,
+                    round(IF(SUM(reg_num) >0, SUM(role_num) / SUM(reg_num), 0), 4) role_num_rate,
+                    round(IF(SUM(reg_num) >0, SUM(new_user_total_role_num) / SUM(reg_num), 0), 4) new_user_total_role_num_rate
                     
                 FROM
                     game_ads.ads_game_day