| 
					
				 | 
			
			
				@@ -1,24 +1,42 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 package com.zanxiang.game.data.serve.service.impl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.google.common.base.CaseFormat; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.google.gson.Gson; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.zanxiang.game.data.serve.pojo.dto.GameDataDayDTO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.zanxiang.game.data.serve.pojo.dto.GameDataTotalDTO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.zanxiang.game.data.serve.pojo.vo.GameDataDayVO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.zanxiang.game.data.serve.pojo.vo.GameDataTotalVO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.zanxiang.game.data.serve.pojo.dto.GameDataWaterDTO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.zanxiang.game.data.serve.pojo.entity.AdsEverydayWater; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.zanxiang.game.data.serve.pojo.enums.OrderByEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.zanxiang.game.data.serve.pojo.vo.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.zanxiang.game.data.serve.service.IGameDataService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.zanxiang.game.data.serve.utils.Page; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.zanxiang.module.util.DateUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import lombok.Builder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import lombok.Data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import lombok.extern.slf4j.Slf4j; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.apache.commons.lang3.StringUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.nutz.dao.Cnd; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.nutz.dao.Dao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.nutz.dao.Sqls; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.nutz.dao.entity.Entity; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.nutz.dao.pager.Pager; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.nutz.dao.sql.Criteria; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.nutz.dao.sql.Sql; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.nutz.dao.util.Daos; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.nutz.dao.util.cri.SimpleCriteria; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.beans.factory.annotation.Autowired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.stereotype.Service; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.util.CollectionUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.math.BigDecimal; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.math.BigInteger; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.math.RoundingMode; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.time.LocalDate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.ArrayList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.HashMap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.Map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.stream.Collectors; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * @author tianhua 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -32,6 +50,11 @@ public class GameDataServiceImpl implements IGameDataService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private Dao dao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 游戏每日数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param dto 前端传递查询参数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return 返回给前端的数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public Page<GameDataDayVO> getGameDataDay(GameDataDayDTO dto) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -71,18 +94,300 @@ public class GameDataServiceImpl implements IGameDataService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //设置查询总数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         pager.setRecordCount(list.size()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<GameDataDayVO> gameDataDayVOList = list.stream().map(vo -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //买量数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String[] buyAmountD1 = vo.getBuyAmountD1().split("/"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setBuyAmountD1Trend(RechargeTrendVO.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeMoney(new BigDecimal(buyAmountD1[0])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeUserCount(Long.valueOf(buyAmountD1[1])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .increase(new BigDecimal(buyAmountD1[2])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .back(new BigDecimal(buyAmountD1[3])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .multiples(new BigDecimal(buyAmountD1[4])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String[] buyAmountD3 = vo.getBuyAmountD3().split("/"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setBuyAmountD3Trend(RechargeTrendVO.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeMoney(new BigDecimal(buyAmountD3[0])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeUserCount(Long.valueOf(buyAmountD3[1])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .increase(new BigDecimal(buyAmountD3[2])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .back(new BigDecimal(buyAmountD3[3])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .multiples(new BigDecimal(buyAmountD3[4])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String[] buyAmountD5 = vo.getBuyAmountD5().split("/"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setBuyAmountD5Trend(RechargeTrendVO.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeMoney(new BigDecimal(buyAmountD5[0])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeUserCount(Long.valueOf(buyAmountD5[1])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .increase(new BigDecimal(buyAmountD5[2])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .back(new BigDecimal(buyAmountD5[3])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .multiples(new BigDecimal(buyAmountD5[4])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String[] buyAmountD7 = vo.getBuyAmountD7().split("/"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setBuyAmountD7Trend(RechargeTrendVO.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeMoney(new BigDecimal(buyAmountD7[0])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeUserCount(Long.valueOf(buyAmountD7[1])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .increase(new BigDecimal(buyAmountD7[2])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .back(new BigDecimal(buyAmountD7[3])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .multiples(new BigDecimal(buyAmountD7[4])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String[] buyAmountD15 = vo.getBuyAmountD15().split("/"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setBuyAmountD15Trend(RechargeTrendVO.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeMoney(new BigDecimal(buyAmountD15[0])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeUserCount(Long.valueOf(buyAmountD15[1])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .increase(new BigDecimal(buyAmountD15[2])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .back(new BigDecimal(buyAmountD15[3])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .multiples(new BigDecimal(buyAmountD15[4])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String[] buyAmountM1 = vo.getBuyAmountM1().split("/"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setBuyAmountM1Trend(RechargeTrendVO.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeMoney(new BigDecimal(buyAmountM1[0])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeUserCount(Long.valueOf(buyAmountM1[1])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .increase(new BigDecimal(buyAmountM1[2])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .back(new BigDecimal(buyAmountM1[3])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .multiples(new BigDecimal(buyAmountM1[4])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String[] buyAmountM2 = vo.getBuyAmountM2().split("/"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setBuyAmountM2Trend(RechargeTrendVO.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeMoney(new BigDecimal(buyAmountM2[0])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeUserCount(Long.valueOf(buyAmountM2[1])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .increase(new BigDecimal(buyAmountM2[2])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .back(new BigDecimal(buyAmountM2[3])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .multiples(new BigDecimal(buyAmountM2[4])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String[] buyAmountM3 = vo.getBuyAmountM3().split("/"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setBuyAmountM3Trend(RechargeTrendVO.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeMoney(new BigDecimal(buyAmountM3[0])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeUserCount(Long.valueOf(buyAmountM3[1])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .increase(new BigDecimal(buyAmountM3[2])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .back(new BigDecimal(buyAmountM3[3])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .multiples(new BigDecimal(buyAmountM3[4])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String[] buyAmountM6 = vo.getBuyAmountM6().split("/"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setBuyAmountM6Trend(RechargeTrendVO.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeMoney(new BigDecimal(buyAmountM6[0])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeUserCount(Long.valueOf(buyAmountM6[1])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .increase(new BigDecimal(buyAmountM6[2])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .back(new BigDecimal(buyAmountM6[3])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .multiples(new BigDecimal(buyAmountM6[4])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String[] buyAmountSum = vo.getBuyAmountSum().split("/"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setBuyAmountSumTrend(RechargeTrendVO.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeMoney(new BigDecimal(buyAmountSum[0])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeUserCount(Long.valueOf(buyAmountSum[1])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .increase(new BigDecimal(buyAmountSum[2])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .back(new BigDecimal(buyAmountSum[3])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .multiples(new BigDecimal(buyAmountSum[4])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //自然量数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String[] natureAmountD1 = vo.getNatureAmountD1().split("/"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setNatureAmountD1Trend(RechargeTrendVO.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeMoney(new BigDecimal(natureAmountD1[0])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeUserCount(Long.valueOf(natureAmountD1[1])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .increase(new BigDecimal(natureAmountD1[2])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .back(new BigDecimal(natureAmountD1[3])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .multiples(new BigDecimal(natureAmountD1[4])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String[] natureAmountD3 = vo.getNatureAmountD3().split("/"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setNatureAmountD3Trend(RechargeTrendVO.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeMoney(new BigDecimal(natureAmountD3[0])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeUserCount(Long.valueOf(natureAmountD3[1])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .increase(new BigDecimal(natureAmountD3[2])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .back(new BigDecimal(natureAmountD3[3])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .multiples(new BigDecimal(natureAmountD3[4])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String[] natureAmountD5 = vo.getNatureAmountD5().split("/"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setNatureAmountD5Trend(RechargeTrendVO.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeMoney(new BigDecimal(natureAmountD5[0])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeUserCount(Long.valueOf(natureAmountD5[1])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .increase(new BigDecimal(natureAmountD5[2])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .back(new BigDecimal(natureAmountD5[3])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .multiples(new BigDecimal(natureAmountD5[4])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String[] natureAmountD7 = vo.getNatureAmountD7().split("/"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setNatureAmountD7Trend(RechargeTrendVO.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeMoney(new BigDecimal(natureAmountD7[0])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeUserCount(Long.valueOf(natureAmountD7[1])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .increase(new BigDecimal(natureAmountD7[2])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .back(new BigDecimal(natureAmountD7[3])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .multiples(new BigDecimal(natureAmountD7[4])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String[] natureAmountD15 = vo.getNatureAmountD15().split("/"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setNatureAmountD15Trend(RechargeTrendVO.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeMoney(new BigDecimal(natureAmountD15[0])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeUserCount(Long.valueOf(natureAmountD15[1])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .increase(new BigDecimal(natureAmountD15[2])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .back(new BigDecimal(natureAmountD15[3])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .multiples(new BigDecimal(natureAmountD15[4])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String[] natureAmountM1 = vo.getNatureAmountM1().split("/"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setNatureAmountM1Trend(RechargeTrendVO.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeMoney(new BigDecimal(natureAmountM1[0])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeUserCount(Long.valueOf(natureAmountM1[1])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .increase(new BigDecimal(natureAmountM1[2])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .back(new BigDecimal(natureAmountM1[3])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .multiples(new BigDecimal(natureAmountM1[4])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String[] natureAmountM2 = vo.getNatureAmountM2().split("/"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setNatureAmountM2Trend(RechargeTrendVO.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeMoney(new BigDecimal(natureAmountM2[0])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeUserCount(Long.valueOf(natureAmountM2[1])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .increase(new BigDecimal(natureAmountM2[2])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .back(new BigDecimal(natureAmountM2[3])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .multiples(new BigDecimal(natureAmountM2[4])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String[] natureAmountM3 = vo.getNatureAmountM3().split("/"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setNatureAmountM3Trend(RechargeTrendVO.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeMoney(new BigDecimal(natureAmountM3[0])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeUserCount(Long.valueOf(natureAmountM3[1])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .increase(new BigDecimal(natureAmountM3[2])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .back(new BigDecimal(natureAmountM3[3])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .multiples(new BigDecimal(natureAmountM3[4])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String[] natureAmountM6 = vo.getNatureAmountM6().split("/"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setNatureAmountM6Trend(RechargeTrendVO.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeMoney(new BigDecimal(natureAmountM6[0])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeUserCount(Long.valueOf(natureAmountM6[1])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .increase(new BigDecimal(natureAmountM6[2])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .back(new BigDecimal(natureAmountM6[3])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .multiples(new BigDecimal(natureAmountM6[4])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String[] natureAmountSum = vo.getNatureAmountSum().split("/"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setNatureAmountSumTrend(RechargeTrendVO.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeMoney(new BigDecimal(natureAmountSum[0])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeUserCount(Long.valueOf(natureAmountSum[1])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .increase(new BigDecimal(natureAmountSum[2])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .back(new BigDecimal(natureAmountSum[3])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .multiples(new BigDecimal(natureAmountSum[4])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //总量数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String[] amountD1 = vo.getAmountD1().split("/"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setAmountD1Trend(RechargeTrendVO.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeMoney(new BigDecimal(amountD1[0])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeUserCount(Long.valueOf(amountD1[1])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .increase(new BigDecimal(amountD1[2])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .back(new BigDecimal(amountD1[3])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .multiples(new BigDecimal(amountD1[4])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String[] amountD3 = vo.getAmountD3().split("/"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setAmountD3Trend(RechargeTrendVO.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeMoney(new BigDecimal(amountD3[0])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeUserCount(Long.valueOf(amountD3[1])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .increase(new BigDecimal(amountD3[2])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .back(new BigDecimal(amountD3[3])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .multiples(new BigDecimal(amountD3[4])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String[] amountD5 = vo.getAmountD5().split("/"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setAmountD5Trend(RechargeTrendVO.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeMoney(new BigDecimal(amountD5[0])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeUserCount(Long.valueOf(amountD5[1])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .increase(new BigDecimal(amountD5[2])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .back(new BigDecimal(amountD5[3])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .multiples(new BigDecimal(amountD5[4])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String[] amountD7 = vo.getAmountD7().split("/"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setAmountD7Trend(RechargeTrendVO.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeMoney(new BigDecimal(amountD7[0])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeUserCount(Long.valueOf(amountD7[1])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .increase(new BigDecimal(amountD7[2])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .back(new BigDecimal(amountD7[3])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .multiples(new BigDecimal(amountD7[4])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String[] amountD15 = vo.getAmountD15().split("/"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setAmountD15Trend(RechargeTrendVO.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeMoney(new BigDecimal(amountD15[0])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeUserCount(Long.valueOf(amountD15[1])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .increase(new BigDecimal(amountD15[2])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .back(new BigDecimal(amountD15[3])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .multiples(new BigDecimal(amountD15[4])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String[] amountM1 = vo.getAmountM1().split("/"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setAmountM1Trend(RechargeTrendVO.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeMoney(new BigDecimal(amountM1[0])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeUserCount(Long.valueOf(amountM1[1])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .increase(new BigDecimal(amountM1[2])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .back(new BigDecimal(amountM1[3])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .multiples(new BigDecimal(amountM1[4])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String[] amountM2 = vo.getAmountM2().split("/"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setAmountM2Trend(RechargeTrendVO.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeMoney(new BigDecimal(amountM2[0])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeUserCount(Long.valueOf(amountM2[1])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .increase(new BigDecimal(amountM2[2])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .back(new BigDecimal(amountM2[3])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .multiples(new BigDecimal(amountM2[4])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String[] amountM3 = vo.getAmountM3().split("/"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setAmountM3Trend(RechargeTrendVO.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeMoney(new BigDecimal(amountM3[0])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeUserCount(Long.valueOf(amountM3[1])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .increase(new BigDecimal(amountM3[2])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .back(new BigDecimal(amountM3[3])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .multiples(new BigDecimal(amountM3[4])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String[] amountM6 = vo.getAmountM6().split("/"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setAmountM6Trend(RechargeTrendVO.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeMoney(new BigDecimal(amountM6[0])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeUserCount(Long.valueOf(amountM6[1])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .increase(new BigDecimal(amountM6[2])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .back(new BigDecimal(amountM6[3])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .multiples(new BigDecimal(amountM6[4])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String[] amountSum = vo.getAmountSum().split("/"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setAmountSumTrend(RechargeTrendVO.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeMoney(new BigDecimal(amountSum[0])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .rechargeUserCount(Long.valueOf(amountSum[1])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .increase(new BigDecimal(amountSum[2])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .back(new BigDecimal(amountSum[3])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .multiples(new BigDecimal(amountSum[4])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return vo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //返回list结果 封装到page对象里 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return new Page<>(list, pager); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return new Page<>(gameDataDayVOList, pager); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 游戏总数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param dto 前端传递的查询参数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return 返回给前端的数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public Page<GameDataTotalVO> getGameDataTotal(GameDataTotalDTO dto) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //如果注册时间参数为空,默认设置为当天 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //如果注册时间参数为空,默认设置查询当天数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (dto.getRegisteredBeginDate() == null || dto.getRechargeEndDate() == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             dto.setRegisteredBeginDate(LocalDate.now()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             dto.setRegisteredEndDate(LocalDate.now()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //如果充值时间参数为空,默认设置为注册时间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //如果充值时间参数为空,默认设置查询当天数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (dto.getRechargeBeginDate() == null || dto.getRechargeEndDate() == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             dto.setRechargeBeginDate(LocalDate.now()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             dto.setRechargeEndDate(LocalDate.now()); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -121,33 +426,135 @@ public class GameDataServiceImpl implements IGameDataService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //设置查询总数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         pager.setRecordCount(list.size()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /*//根据充值时间修改值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        list.stream().map(new Function<GameDataTotalVO, Object>() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //第一个参数 转换之前的参数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //第二个参数,转换之后的参数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //apply中的传入参数 就是流中的每一个数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //返回值类型就是需要转换之后的类型 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            public Object apply(GameDataTotalVO gameDataTotalVO) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //根据充值时间修改值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<GameDataTotalVO> gameDataTotalVOList = list.stream().map(vo -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //设置查询参数map 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Map<String, Object> dayNMap = new HashMap<>(4); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dayNMap.put("registerBeginDate", dto.getRegisteredBeginDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dayNMap.put("registerEndDate", dto.getRegisteredEndDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dayNMap.put("rechargeBeginDate", dto.getRechargeBeginDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dayNMap.put("rechargeEndDate", dto.getRechargeEndDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dayNMap.put("gameId", vo.getGameId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //联表查询根据充值时间查询出相关参数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //买量表的充值相关数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            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(buyDayN == null ? BigInteger.ZERO : buyDayN.getRechargeNum()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setBuyNewUserAmountCount(buyDayN == null ? BigInteger.ZERO : buyDayN.getRechargeCount()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //新用户复充人数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setBuyNewUserAgainNum(buyDayN == null ? BigInteger.ZERO : buyDayN.getRechargeAgainNum()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //设置新用户相关数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //老用户充值次数、人数、金额 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setBuyOldUserAmount(vo.getBuyAmount().subtract(vo.getBuyNewUserAmount())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setBuyOldUserCount(vo.getBuyAmountCount().subtract(vo.getBuyNewUserAmountCount())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setBuyOldUserNum(vo.getBuyAmountNum().subtract(vo.getBuyNewUserAmountNum())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //新用户付费比 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setBuyNewUserRate(vo.getBuyAmountNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    BigDecimal.valueOf(vo.getBuyNewUserAmountNum().doubleValue() / vo.getBuyAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //新用户付费率 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setBuyNewUserRoi(vo.getBuyRegNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    BigDecimal.valueOf(vo.getBuyNewUserAmountNum().doubleValue() / vo.getBuyRegNum().doubleValue()).setScale(4, RoundingMode.HALF_UP)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //联表查询新用户复充人数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //新用户客单价 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setBuyNewUserAvgAmount(vo.getBuyNewUserAmountCount().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    BigDecimal.valueOf(vo.getBuyNewUserAmount().doubleValue() / vo.getBuyNewUserAmountCount().doubleValue()).setScale(4, RoundingMode.HALF_UP)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //复充率 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setBuyUserAgainRate(vo.getBuyNewUserAmountNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    BigDecimal.valueOf(vo.getBuyNewUserAgainNum().doubleValue() / vo.getBuyNewUserAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //新用户复充率 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setBuyNewUserAgainRate(vo.getBuyNewUserTotalAmountNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    BigDecimal.valueOf(vo.getBuyNewUserAgainNum().doubleValue() / vo.getBuyNewUserTotalAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        });*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //新用户付费ARPU 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setBuyNewUserAmountArpu(vo.getBuyNewUserAmountNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    BigDecimal.valueOf(vo.getBuyNewUserAmount().doubleValue() / vo.getBuyNewUserAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //设置自然量数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //新用户充值次数、金额、人数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setNatureNewUserAmount(natureDayN == null ? BigDecimal.ZERO : natureDayN.getRechargeMoney()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setNatureNewUserAmountNum(natureDayN == null ? BigInteger.ZERO : natureDayN.getRechargeNum()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setNatureNewUserAmountCount(natureDayN == null ? BigInteger.ZERO : natureDayN.getRechargeCount()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //新用户复充人数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setNatureNewUserAgainNum(natureDayN == null ? BigInteger.ZERO : natureDayN.getRechargeAgainNum()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //老用户充值次数、人数、金额 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setNatureOldUserAmount(vo.getNatureAmount().subtract(vo.getNatureNewUserAmount())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setNatureOldUserCount(vo.getNatureAmountCount().subtract(vo.getNatureNewUserAmountCount())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setNatureOldUserNum(vo.getNatureAmountNum().subtract(vo.getNatureNewUserAmountNum())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //新用户付费比 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setNatureNewUserRate(vo.getNatureAmountNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    BigDecimal.valueOf(vo.getNatureNewUserAmountNum().doubleValue() / vo.getNatureAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //新用户付费率 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setNatureNewUserRoi(vo.getNatureRegNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    BigDecimal.valueOf(vo.getNatureNewUserAmountNum().doubleValue() / vo.getNatureRegNum().doubleValue()).setScale(4, RoundingMode.HALF_UP)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //新用户客单价 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setNatureNewUserAvgAmount(vo.getNatureNewUserAmountCount().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    BigDecimal.valueOf(vo.getNatureNewUserAmount().doubleValue() / vo.getNatureNewUserAmountCount().doubleValue()).setScale(4, RoundingMode.HALF_UP)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //复充率 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setNatureUserAgainRate(vo.getNatureNewUserAmountNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    BigDecimal.valueOf(vo.getNatureNewUserAgainNum().doubleValue() / vo.getNatureNewUserAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //新用户复充率 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setNatureNewUserAgainRate(vo.getNatureNewUserTotalAmountNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    BigDecimal.valueOf(vo.getNatureNewUserAgainNum().doubleValue() / vo.getNatureNewUserTotalAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //新用户付费ARPU 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setNatureNewUserAmountArpu(vo.getNatureNewUserAmountNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    BigDecimal.valueOf(vo.getNatureNewUserAmount().doubleValue() / vo.getNatureNewUserAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //设置总量数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //新用户充值次数、金额、人数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setNewUserAmount(dayN == null ? BigDecimal.ZERO : dayN.getRechargeMoney()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setNewUserAmountNum(dayN == null ? BigInteger.ZERO : dayN.getRechargeNum()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setNewUserAmountCount(dayN == null ? BigInteger.ZERO : dayN.getRechargeCount()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //新用户复充人数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setNewUserAgainNum(dayN == null ? BigInteger.ZERO : dayN.getRechargeAgainNum()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //老用户充值次数、人数、金额 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setOldUserAmount(vo.getAmount().subtract(vo.getNewUserAmount())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setOldUserCount(vo.getAmountCount().subtract(vo.getNewUserAmountCount())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setOldUserNum(vo.getAmountNum().subtract(vo.getNewUserAmountNum())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //新用户付费比 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setNewUserRate(vo.getAmountNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    BigDecimal.valueOf(vo.getNewUserAmountNum().doubleValue() / vo.getAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //新用户付费率 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setNewUserRoi(vo.getRegNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    BigDecimal.valueOf(vo.getNewUserAmountNum().doubleValue() / vo.getRegNum().doubleValue()).setScale(4, RoundingMode.HALF_UP)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //新用户客单价 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setNewUserAvgAmount(vo.getNewUserAmountCount().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    BigDecimal.valueOf(vo.getNewUserAmount().doubleValue() / vo.getNewUserAmountCount().doubleValue()).setScale(4, RoundingMode.HALF_UP)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //复充率 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setUserAgainRate(vo.getNewUserAmountNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    BigDecimal.valueOf(vo.getNewUserAgainNum().doubleValue() / vo.getNewUserAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //新用户复充率 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setNewUserAgainRate(vo.getNewUserTotalAmountNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    BigDecimal.valueOf(vo.getNewUserAgainNum().doubleValue() / vo.getNewUserTotalAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //新用户付费ARPU 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setNewUserAmountArpu(vo.getNewUserAmountNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    BigDecimal.valueOf(vo.getNewUserAmount().doubleValue() / vo.getNewUserAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return vo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //返回list结果封装到page对象里 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return new Page<>(list, pager); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return new Page<>(gameDataTotalVOList, pager); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 游戏每日数据SQL 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -156,122 +563,123 @@ public class GameDataServiceImpl implements IGameDataService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private String gameDataDaySql() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 SELECT 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                dt cost_date, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                game_name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                game_classify, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                buy_reg_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                nature_reg_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                reg_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                buy_first_new_user_amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                buy_first_new_user_amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                buy_first_new_user_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                buy_old_user_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                buy_old_user_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                buy_old_user_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                buy_amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                buy_amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                buy_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                buy_new_user_total_amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                buy_new_user_total_amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                buy_new_user_total_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                buy_first_roi, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                buy_today_roi, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                buy_new_user_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                buy_first_avg_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                buy_today_avg_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                buy_avg_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                buy_user_again_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                buy_reg_user_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                buy_first_amount_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                buy_today_amount_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                buy_amount_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                buy_amount_d1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                buy_amount_d3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                buy_amount_d5, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                buy_amount_d7, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                buy_amount_d15, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                buy_amount_m1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                buy_amount_m2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                buy_amount_m3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                buy_amount_m6, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                buy_amount_sum, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                nature_first_new_user_amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                nature_first_new_user_amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                nature_first_new_user_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                nature_old_user_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                nature_old_user_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                nature_old_user_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                nature_amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                nature_amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                nature_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                nature_new_user_total_amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                nature_new_user_total_amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                nature_new_user_total_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                nature_first_roi, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                nature_today_roi, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                nature_new_user_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                nature_first_avg_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                nature_today_avg_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                nature_avg_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                nature_user_again_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                nature_reg_user_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                nature_first_amount_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                nature_today_amount_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                nature_amount_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                nature_amount_d1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                nature_amount_d3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                nature_amount_d5, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                nature_amount_d7, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                nature_amount_d15, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                nature_amount_m1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                nature_amount_m2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                nature_amount_m3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                nature_amount_m6, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                nature_amount_sum, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    dt cost_date, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    game_name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    game_classify, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_reg_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    nature_reg_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    reg_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_first_new_user_amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_first_new_user_amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_first_new_user_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_old_user_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_old_user_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_old_user_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_new_user_total_amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_new_user_total_amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_new_user_total_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_first_roi, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_today_roi, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_new_user_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_first_avg_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_today_avg_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_avg_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_user_again_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_reg_user_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_first_amount_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_today_amount_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_amount_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_amount_d1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_amount_d3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_amount_d5, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_amount_d7, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_amount_d15, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_amount_m1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_amount_m2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_amount_m3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_amount_m6, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_amount_sum, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    nature_first_new_user_amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    nature_first_new_user_amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    nature_first_new_user_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    nature_old_user_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    nature_old_user_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    nature_old_user_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    nature_amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    nature_amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    nature_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    nature_new_user_total_amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    nature_new_user_total_amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    nature_new_user_total_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    nature_first_roi, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    nature_today_roi, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    nature_new_user_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    nature_first_avg_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    nature_today_avg_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    nature_avg_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    nature_user_again_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    nature_reg_user_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    nature_first_amount_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    nature_today_amount_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    nature_amount_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    nature_amount_d1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    nature_amount_d3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    nature_amount_d5, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    nature_amount_d7, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    nature_amount_d15, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    nature_amount_m1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    nature_amount_m2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    nature_amount_m3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    nature_amount_m6, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    nature_amount_sum, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    first_new_user_amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    first_new_user_amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    first_new_user_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    old_user_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    old_user_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    old_user_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    new_user_total_amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    new_user_total_amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    new_user_total_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    first_roi, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    today_roi, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    new_user_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    first_avg_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    today_avg_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    avg_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    user_again_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    reg_user_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    first_amount_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    today_amount_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d5, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d7, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d15, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_m1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_m2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_m3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_m6, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_sum 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                first_new_user_amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                first_new_user_amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                first_new_user_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                old_user_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                old_user_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                old_user_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                new_user_total_amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                new_user_total_amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                new_user_total_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                first_roi, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                today_roi, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                new_user_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                first_avg_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                today_avg_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                avg_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                user_again_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                reg_user_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                first_amount_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                today_amount_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                amount_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                amount_d1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                amount_d3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                amount_d5, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                amount_d7, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                amount_d15, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                amount_m1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                amount_m2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                amount_m3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                amount_m6, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                amount_sum 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                FROM ads_game_day 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                FROM 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ads_game_day 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 """; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * 游戏总数居SQL 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 游戏总数据SQL 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @return String 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -361,5 +769,229 @@ public class GameDataServiceImpl implements IGameDataService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 """; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 三张表共用的方法 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param dayNMap 参数Map 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param tableName 查询的表名 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return DayN数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private DayN getDayNByTableName(Map<String, Object> dayNMap, String tableName) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //构架SQL语句,查询相关DayN表获取相关充值数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Sql dayNSql = Sqls.create( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                   SELECT 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        dayN 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                   FROM 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        $tableName 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                   where 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        dt between @registerBeginDate and @registerEndDate 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        and game_id = @gameId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //sql语句传入参数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dayNSql.setParams(dayNMap); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //给定查询的表名 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dayNSql.vars().set("tableName", tableName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //设置回传 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dayNSql.setCallback(Sqls.callback.strList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //执行sql 获取数据到list中 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dao.execute(dayNSql); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //将数据库中获取的所有结果封装到一个List中 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<String> dayNList = dayNSql.getList(String.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //构建一个内部类 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        DayN dayN = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //解析dayNList 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!CollectionUtils.isEmpty(dayNList)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //将dayNList中json格式数据转换为 Map 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Gson gson = new Gson(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<Map<String, String>> jsonList = gson.fromJson(dayNList.toString(), ArrayList.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //用来存储数据的map 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Map<String, String> resMap = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //对应的参数说明:  日期:每天充值金额-充值次数-充值人数-新用户复充人数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            resMap.put("dayN", "0.00-0-0-0"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (Map<String, String> jsonMap : jsonList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                for (Map.Entry<String, String> entry : jsonMap.entrySet()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //key是充值日期 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    String key = entry.getKey(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    String value = entry.getValue(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //将value按“-”分割 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    String[] resValues = value.split("-"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //判断充值日期 在充值日期内的数据进行计算 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (DateUtil.parseLocalDate(key).compareTo((LocalDate) dayNMap.get("rechargeBeginDate")) >= 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            && DateUtil.parseLocalDate(key).compareTo((LocalDate) dayNMap.get("rechargeEndDate")) <= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //获取原先的dayN的值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        String[] oldValues = resMap.get("dayN").split("-"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //充值的金额 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        BigDecimal chargeMoney = new BigDecimal(oldValues[0]).add(new BigDecimal(resValues[0])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //充值的次数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        BigInteger count = new BigInteger(oldValues[1]).add(new BigInteger(resValues[1])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //充值的人数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        BigInteger num = new BigInteger(oldValues[2]).add(new BigInteger(resValues[2])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //新用户复充人数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        BigInteger againNum = new BigInteger(oldValues[3]).add(new BigInteger(resValues[3])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //合并成字符串 更新dayN的值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        String newValue = chargeMoney + "-" + count + "-" + num + "-" + againNum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        resMap.put("dayN", newValue); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //设置dayN的参数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!resMap.isEmpty() && !resMap.get("dayN").isEmpty()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String[] values = resMap.get("dayN").split("-"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                dayN = DayN.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .rechargeMoney(new BigDecimal(values[0])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .rechargeCount(new BigInteger(values[1])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .rechargeNum(new BigInteger(values[2])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .rechargeAgainNum(new BigInteger(values[3])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .build(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return dayN; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * DayN内部类 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Builder 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public static class DayN { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         * 充值金额 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        private BigDecimal rechargeMoney; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         * 充值次数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        private BigInteger rechargeCount; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         * 充值人数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        private BigInteger rechargeNum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         * 新用户复充人数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        private BigInteger rechargeAgainNum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public Page<GameDataWaterVO> getGameDataWater(GameDataWaterDTO dto) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (null == dto.getRechargeDate()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dto.setRechargeDate(LocalDate.now()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isBlank(dto.getSortFiled())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dto.setSortFiled("amount"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isBlank(dto.getSortType())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dto.setSortType(OrderByEnum.DESC.getOrderType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Pager pager = dao.createPager(dto.getPageNum(), dto.getPageSize()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 创建一个 Criteria 接口实例 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        SimpleCriteria cri = Cnd.cri(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isNotBlank(dto.getGameName())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andLike("game_name", dto.getGameName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isNotBlank(dto.getGameClassify())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andEquals("game_classify", dto.getGameClassify()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        cri.where().and("dt", "=", dto.getRechargeDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        cri.groupBy("game_id"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        cri.orderBy(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dto.getSortFiled()), dto.getSortType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Sql sql = Sqls.queryEntity(waterSql() + "$condition"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sql.setPager(pager); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Entity<GameDataWaterVO> entity = dao.getEntity(GameDataWaterVO.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sql.setEntity(entity).setCondition(cri); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dao.execute(sql); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Sql sqlCount = Sqls.queryEntity("select count(*) from ads_everyday_water " + "$condition"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sqlCount.setCondition(cri); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pager.setRecordCount((int) Daos.queryCount(dao, sqlCount)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<Long> gameIds = sql.getList(GameDataWaterVO.class).stream() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .map(GameDataWaterVO::getGameId) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (CollectionUtils.isEmpty(gameIds)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return new Page<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        SimpleCriteria templateCri = Cnd.cri(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        templateCri.where().and("dt", "=", dto.getRechargeDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        templateCri.where().andInList("game_id", gameIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Sql templateSql = Sqls.queryEntity(waterTemplateSql() + "$condition"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Entity<AdsEverydayWater> everydayWaterEntity = dao.getEntity(AdsEverydayWater.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        templateSql.setEntity(everydayWaterEntity).setCondition(templateCri); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dao.execute(templateSql); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<Long, List<AdsEverydayWater>> collect = templateSql.getList(AdsEverydayWater.class).stream().collect(Collectors.groupingBy(AdsEverydayWater::getGameId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<GameDataWaterVO> result = sql.getList(GameDataWaterVO.class).stream() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .map(item -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    List<AdsEverydayWater> adsEverydayWaters = collect.get(item.getGameId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (!CollectionUtils.isEmpty(adsEverydayWaters)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        List<RechargeTemplateVO> rechargeTemplateVOList = new ArrayList<>(10); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        List<PlayerTemplateVO> playerTemplateVOS = new ArrayList<>(10); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        adsEverydayWaters.forEach(adsEverydayWater -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            if (StringUtils.isNotBlank(adsEverydayWater.getAmountOrderBy())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                rechargeTemplateVOList.add(RechargeTemplateVO.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        .amountCount(adsEverydayWater.getAmountCount()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        .amountNum(adsEverydayWater.getAmountNum()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        .amountOrderBy(adsEverydayWater.getAmountOrderBy()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        .amountPost(adsEverydayWater.getAmountPost()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            if (StringUtils.isNotBlank(adsEverydayWater.getUserOrderBy())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                playerTemplateVOS.add(PlayerTemplateVO.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        .userId(adsEverydayWater.getUserId()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        .userAmount(adsEverydayWater.getUserAmount()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        .userOrderBy(adsEverydayWater.getUserOrderBy()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        .userName(adsEverydayWater.getUserName()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        .proportion( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                item.getAmount().compareTo(BigDecimal.ZERO) == 0 ? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                        BigDecimal.ZERO : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                        adsEverydayWater.getUserAmount().divide(item.getAmount(), 4, RoundingMode.DOWN) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        item.setRechargeTemplateVOList(rechargeTemplateVOList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        item.setPlayerTemplateVOS(playerTemplateVOS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    return item; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return new Page<>(result, pager); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String waterSql() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                select 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                game_id as id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                game_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                max(game_name) as game_name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                max(game_classify) as game_classify, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                max(amount) as amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                max(buy_amount) as buy_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                max(nature_amount) as nature_amount 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                from ads_everyday_water 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                """; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String waterTemplateSql() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                select 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                game_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                user_order_by, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                user_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                user_name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                user_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                amount_order_by, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                amount_post, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                amount_num 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                from ads_everyday_water 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                """; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |