|  | @@ -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
 |