| 
					
				 | 
			
			
				@@ -335,20 +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()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            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()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setBuyNewUserAgainNum(getNewUserAmountAgainNum(dayNMap, "buy")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //老用户充值次数、人数、金额 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             vo.setBuyOldUserAmount(vo.getBuyAmount().subtract(vo.getBuyNewUserAmount())); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -387,10 +380,10 @@ 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()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setNatureNewUserAgainNum(getNewUserAmountAgainNum(dayNMap, "nature")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //老用户充值次数、人数、金额 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             vo.setNatureOldUserAmount(vo.getNatureAmount().subtract(vo.getNatureNewUserAmount())); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -429,10 +422,10 @@ 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()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setNewUserAgainNum(getNewUserAmountAgainNum(dayNMap, "")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //老用户充值次数、人数、金额 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             vo.setOldUserAmount(vo.getAmount().subtract(vo.getNewUserAmount())); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -554,12 +547,191 @@ 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; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 游戏总数据总计的新用户充值人数相关值得计算方法 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param dto 前端查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param 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"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //设置买量数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //新用户充值次数、金额、人数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        vo.setBuyNewUserAmount(buyDayN == null ? BigDecimal.ZERO : buyDayN.getRechargeMoney()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        vo.setBuyNewUserAmountNum(getNewUserAmountNum(dayNMap, "buy")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        vo.setBuyNewUserAmountCount(buyDayN == null ? 0L : buyDayN.getRechargeCount()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //新用户复充人数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        vo.setBuyNewUserAgainNum(getNewUserAmountAgainNum(dayNMap, "buy")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //老用户充值次数、人数、金额 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        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(getNewUserAmountNum(dayNMap, "nature")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        vo.setNatureNewUserAmountCount(natureDayN == null ? 0L : natureDayN.getRechargeCount()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //新用户复充人数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        vo.setNatureNewUserAgainNum(getNewUserAmountAgainNum(dayNMap, "nature")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //老用户充值次数、人数、金额 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        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(getNewUserAmountNum(dayNMap, "")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        vo.setNewUserAmountCount(dayN == null ? 0L : dayN.getRechargeCount()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //新用户复充人数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        vo.setNewUserAgainNum(getNewUserAmountAgainNum(dayNMap, "")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //老用户充值次数、人数、金额 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        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)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 每日流水贡献 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1011,7 +1183,6 @@ public class GameDataServiceImpl implements IGameDataService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 dayN = DayN.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         .rechargeMoney(new BigDecimal(values[0])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         .rechargeCount(Long.valueOf(values[1])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        .rechargeAgainNum(Long.valueOf(values[3])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         .build(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1024,7 +1195,7 @@ public class GameDataServiceImpl implements IGameDataService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param dayNMap 参数Map 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param type    查询的字段类型:buy、nature、总 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @return 新用户充值认识 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return 新用户充值人数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private Long getNewUserAmountNum(Map<String, Object> dayNMap, String type) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //查询新用户充值人数 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1064,6 +1235,59 @@ public class GameDataServiceImpl implements IGameDataService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return newUserAmountNumSql.getLong(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 获取新用户复充人数方法 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param dayNMap 参数列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param type    查询字段类型: buy、nature、总量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return 新用户复充人数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Long getNewUserAmountAgainNum(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) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //拼接充值时间查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            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 newUserAmountAgainNumSql = Sqls.create(""" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SELECT 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        COUNT(a.num) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    FROM( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        SELECT 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        	COUNT(user_id) num 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        FROM 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        	game_ads.ads_information 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                """ + cri + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                           GROUP BY user_id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                           HAVING COUNT(user_id) > 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                           ) a; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        """); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        newUserAmountAgainNumSql.setCallback(Sqls.callback.longValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //执行sql 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dao.execute(newUserAmountAgainNumSql); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //得到结果 新用户充值人数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return newUserAmountAgainNumSql.getLong(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 通过反射来获取Cn的值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -2075,7 +2299,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 
			 |