| 
					
				 | 
			
			
				@@ -0,0 +1,2284 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+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.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.zanxiang.game.data.serve.pojo.entity.AdsGamePitcherDay; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.zanxiang.game.data.serve.pojo.entity.AdsPitcherDay; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.zanxiang.game.data.serve.pojo.entity.AdsPitcherGameDayn; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.zanxiang.game.data.serve.pojo.enums.OrderByEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.zanxiang.game.data.serve.pojo.vo.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.zanxiang.game.data.serve.service.IPitcherDataService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.zanxiang.game.data.serve.utils.Page; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.zanxiang.module.util.DateUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.zanxiang.module.util.exception.BaseException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import lombok.extern.slf4j.Slf4j; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.apache.commons.lang3.StringUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.apache.dubbo.common.utils.CollectionUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.nutz.dao.Cnd; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.nutz.dao.Dao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.nutz.dao.Sqls; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+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.springframework.beans.BeanUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.beans.BeanWrapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.beans.BeanWrapperImpl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.beans.factory.annotation.Autowired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.stereotype.Service; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import reactor.util.function.Tuple2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import reactor.util.function.Tuples; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.beans.PropertyDescriptor; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.lang.reflect.Field; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.lang.reflect.Modifier; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.math.BigDecimal; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.math.RoundingMode; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.time.LocalDate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.stream.Collectors; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @author tianhua 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @time 2023/8/15 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @Description 投手数据接口逻辑处理 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ **/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@Service 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@Slf4j 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+public class PitcherDataServiceImpl implements IPitcherDataService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //存储PitcherGameDataDayVO的映射 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private static final List<Tuple2<Field, Field>> pitcherGameDayNFieldMapList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //存储PitcherGameDataDayTotalVO的映射 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private static final List<Tuple2<Field, Field>> pitcherGameDayNTotalFieldMapList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //存储PitcherDataDayVO的映射 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private static final List<Tuple2<Field, Field>> pitcherDayNFieldMapList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //存储PitcherDataDayTotalVO的映射 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private static final List<Tuple2<Field, Field>> pitcherDayNTotalFieldMapList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //解析投手游戏每日数据及总计一栏相关的映射 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    static { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //解析PitcherGameDataDayVO的映射 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<String, Field> fieldMap = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<Field> dayNFieldList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Class<?> tempClazz = PitcherGameDataDayVO.class; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        while (tempClazz != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Field[] fields = tempClazz.getDeclaredFields(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (Field field : fields) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (Modifier.isFinal(field.getModifiers()) || Modifier.isStatic(field.getModifiers())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //属性前面的修饰符为static或final不加入map中 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                fieldMap.put(field.getName(), field); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (field.getType() == RechargeTrendVO.class) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //存储所有类型为RechargeTrendVO属性的映射 以Trend为结尾的 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    dayNFieldList.add(field); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            tempClazz = tempClazz.getSuperclass(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (dayNFieldList.isEmpty()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pitcherGameDayNFieldMapList = Collections.emptyList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pitcherGameDayNFieldMapList = new ArrayList<>(dayNFieldList.size()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (Field field : dayNFieldList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                field.setAccessible(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Field sourceField = fieldMap.get(field.getName().replace("Trend", "")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sourceField.setAccessible(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (sourceField != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    pitcherGameDayNFieldMapList.add(Tuples.of(sourceField, field)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //解析PitcherGameDataDayTotalVO映射 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<String, Field> fieldTotalMap = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<Field> dayNTotalFieldList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Class<?> tempTotalClazz = PitcherGameDataDayTotalVO.class; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        while (tempTotalClazz != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Field[] fields = tempTotalClazz.getDeclaredFields(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (Field field : fields) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (Modifier.isFinal(field.getModifiers()) || Modifier.isStatic(field.getModifiers())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //属性为static或final的不加入map 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                fieldTotalMap.put(field.getName(), field); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (field.getType() == RechargeTrendVO.class) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //只存储属性值类型为RechargeTrendVO的属性 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    dayNTotalFieldList.add(field); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            tempTotalClazz = tempTotalClazz.getSuperclass(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (dayNTotalFieldList.isEmpty()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pitcherGameDayNTotalFieldMapList = Collections.emptyList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pitcherGameDayNTotalFieldMapList = new ArrayList<>(dayNTotalFieldList.size()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (Field field : dayNTotalFieldList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                field.setAccessible(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Field sourceField = fieldTotalMap.get(field.getName().replace("Trend", "")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sourceField.setAccessible(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (sourceField != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    pitcherGameDayNTotalFieldMapList.add(Tuples.of(sourceField, field)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //解析投手每日数据及总计一栏相关的的映射 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    static { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //解析PitcherDataDayVO映射 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<String, Field> pitcherDayFieldMap = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<Field> pitcherDayDayNList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Class<?> pitcherDayClazz = PitcherDataDayVO.class; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        while (pitcherDayClazz != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Field[] fields = pitcherDayClazz.getDeclaredFields(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (Field field : fields) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (Modifier.isFinal(field.getModifiers()) || Modifier.isStatic(field.getModifiers())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                pitcherDayFieldMap.put(field.getName(), field); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (field.getType() == RechargeTrendVO.class) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    pitcherDayDayNList.add(field); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pitcherDayClazz = pitcherDayClazz.getSuperclass(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (pitcherDayDayNList.isEmpty()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pitcherDayNFieldMapList = Collections.emptyList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pitcherDayNFieldMapList = new ArrayList<>(pitcherDayDayNList.size()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (Field field : pitcherDayDayNList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                field.setAccessible(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Field soureField = pitcherDayFieldMap.get(field.getName().replace("Trend", "")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                soureField.setAccessible(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                pitcherDayNFieldMapList.add(Tuples.of(soureField, field)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //解析PitcherDataDayTotalVO映射 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<String, Field> pitcherDayTotalMap = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<Field> pitcherDayTotalList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Class<?> pitcherDayTotalClazz = PitcherDataDayTotalVO.class; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        while (pitcherDayTotalClazz != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Field[] fields = pitcherDayTotalClazz.getDeclaredFields(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (Field field : fields) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (Modifier.isFinal(field.getModifiers()) || Modifier.isStatic(field.getModifiers())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                pitcherDayTotalMap.put(field.getName(), field); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (field.getType() == RechargeTrendVO.class) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    pitcherDayTotalList.add(field); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pitcherDayTotalClazz = pitcherDayTotalClazz.getSuperclass(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (pitcherDayTotalList.isEmpty()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pitcherDayNTotalFieldMapList = Collections.emptyList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pitcherDayNTotalFieldMapList = new ArrayList<>(pitcherDayTotalList.size()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (Field field : pitcherDayTotalList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                field.setAccessible(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Field sourceField = pitcherDayTotalMap.get(field.getName().replace("Trend", "")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sourceField.setAccessible(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                pitcherDayNTotalFieldMapList.add(Tuples.of(sourceField, field)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Dao dao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 投手每日数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param dto PitcherDataDayDTO 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return Page<PitcherDataDayVO> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public Page<PitcherDataDayVO> getPitcherDataDay(PitcherDataDayDTO dto) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //不传递时间,默认查询当天 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (dto.getBeginDate() == null || dto.getEndDate() == null ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dto.setBeginDate(LocalDate.now()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dto.setEndDate(LocalDate.now()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //创建查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Criteria cri = Cnd.cri(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (dto.getPitcherId() != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andEquals("pitcher_id", dto.getPitcherId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isNotBlank(dto.getSourceSystem())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andEquals("source_system", dto.getSourceSystem()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (dto.getBeginDate() != null && dto.getEndDate() != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andBetween("dt", dto.getBeginDate(), dto.getEndDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //拼接排序条件,如果没有排序条件给默认值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isBlank(dto.getSortType())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dto.setSortType(OrderByEnum.DESC.getOrderType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isBlank(dto.getSortFiled())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.getOrderBy().orderBy("dt", dto.getSortType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.getOrderBy().orderBy("cost", dto.getSortType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.getOrderBy().orderBy(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dto.getSortFiled()), dto.getSortType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //Pager对象 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Pager pager = dao.createPager(dto.getPageNum(), dto.getPageSize()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //sql语句 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Sql sql = Sqls.create(pitcherDataDaySql() + cri); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //设置回传对象 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sql.setCallback(Sqls.callback.entities()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sql.setEntity(dao.getEntity(PitcherDataDayVO.class)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //设置pager 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sql.setPager(pager); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //执行sql 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dao.execute(sql); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //设置总记录数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pager.setRecordCount(dao.count(AdsPitcherDay.class, cri)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //处理dayN数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<PitcherDataDayVO> tempList = sql.getList(PitcherDataDayVO.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<PitcherDataDayVO> list = tempList.stream().map(vo -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            formatPitcherDataDayDayN(vo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return vo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //返回结果 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return new Page<>(list, pager); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 投手每日数据总计 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param dto PitcherDataDayTotalDTO 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return PitcherDataDayTotalVO 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public PitcherDataDayTotalVO getPitcherDataDayTotal(PitcherDataDayTotalDTO dto) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //不传递时间,默认查询当天 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (dto.getBeginDate() == null || dto.getEndDate() == null ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dto.setBeginDate(LocalDate.now()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dto.setEndDate(LocalDate.now()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //创建查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Criteria cri = Cnd.cri(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (dto.getPitcherId() != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andEquals("pitcher_id", dto.getPitcherId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isNotBlank(dto.getSourceSystem())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andEquals("source_system", dto.getSourceSystem()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (dto.getBeginDate() != null && dto.getEndDate() != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andBetween("dt", dto.getBeginDate(), dto.getEndDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //sql语句 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Sql sql = Sqls.create(pitcherDataDayTotalSql() + cri); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //设置回传对象 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sql.setCallback(Sqls.callback.entity()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sql.setEntity(dao.getEntity(PitcherDataDayTotalVO.class)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //执行sql 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dao.execute(sql); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        PitcherDataDayTotalVO vo = sql.getObject(PitcherDataDayTotalVO.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isNotBlank(vo.getAmountD1())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //处理dayN数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            formatPitcherDataDayTotalDayN(vo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return vo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 投手总数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param dto PitcherDataTotalDTO 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return Page<PitcherDataTotalVO> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public Page<PitcherDataTotalVO> getPitcherDataTotal(PitcherDataTotalDTO dto) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 投手总数据总计 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param dto PitcherDataTotalSumDTO 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return PitcherDataTotalSumVO 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public PitcherDataTotalSumVO getPitcherDataTotalSum(PitcherDataTotalSumDTO dto) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 投手游戏每日数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param dto PitcherGameDataDayDTO 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return Page<PitcherGameDataDayVO> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public Page<PitcherGameDataDayVO> getPitcherGameDataDay(PitcherGameDataDayDTO dto) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //不传递时间,默认查询当天 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (dto.getBeginDate() == null || dto.getEndDate() == null ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dto.setBeginDate(LocalDate.now()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dto.setEndDate(LocalDate.now()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //创建查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Criteria cri = Cnd.cri(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (dto.getPitcherId() != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andEquals("pitcher_id", dto.getPitcherId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isNotBlank(dto.getGameId())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andEquals("game_id", dto.getGameId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isNotBlank(dto.getSourceSystem())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andEquals("source_system", dto.getSourceSystem()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (dto.getBeginDate() != null && dto.getEndDate() != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andBetween("dt", dto.getBeginDate(), dto.getEndDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isNotBlank(dto.getGameCp())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andEquals("game_cp", dto.getGameCp()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (dto.getGameType() != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andEquals("game_type", dto.getGameType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //排序条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //拼接排序条件,如果没有排序条件给默认值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isBlank(dto.getSortType())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dto.setSortType(OrderByEnum.DESC.getOrderType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isBlank(dto.getSortFiled())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.getOrderBy().orderBy("dt", dto.getSortType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.getOrderBy().orderBy("cost", dto.getSortType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.getOrderBy().orderBy(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dto.getSortFiled()), dto.getSortType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //Pager对象 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Pager pager = dao.createPager(dto.getPageNum(), dto.getPageSize()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //sql语句 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Sql sql = Sqls.create(pitcherGameDataDaySql() + cri); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //设置回传对象 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sql.setCallback(Sqls.callback.entities()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sql.setEntity(dao.getEntity(PitcherGameDataDayVO.class)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //设置pager 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sql.setPager(pager); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //执行sql 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dao.execute(sql); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //设置总记录数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pager.setRecordCount(dao.count(AdsGamePitcherDay.class, cri)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //处理dayN数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<PitcherGameDataDayVO> tempList = sql.getList(PitcherGameDataDayVO.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<PitcherGameDataDayVO> list = tempList.stream().map(vo -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                formatPitcherGameDataDayDayN(vo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return vo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //返回结果 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return new Page<>(list, pager); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 投手游戏每日数据总计 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param dto PitcherGameDataDayTotalDTO 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return PitcherGameDataDayTotalVO 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public PitcherGameDataDayTotalVO getPitcherGameDataDayTotal(PitcherGameDataDayTotalDTO dto) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //不传递时间,默认查询当天 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (dto.getBeginDate() == null || dto.getEndDate() == null ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dto.setBeginDate(LocalDate.now()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dto.setEndDate(LocalDate.now()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //创建查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Criteria cri = Cnd.cri(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (dto.getPitcherId() != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andEquals("pitcher_id", dto.getPitcherId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isNotBlank(dto.getGameId())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andEquals("game_id", dto.getGameId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isNotBlank(dto.getSourceSystem())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andEquals("source_system", dto.getSourceSystem()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (dto.getBeginDate() != null && dto.getEndDate() != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andBetween("dt", dto.getBeginDate(), dto.getEndDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isNotBlank(dto.getGameCp())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andEquals("game_cp", dto.getGameCp()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (dto.getGameType() != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andEquals("game_type", dto.getGameType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //sql语句 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Sql sql = Sqls.create(pitcherGameDataDayTotalSql() + cri); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //设置回传对象 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sql.setCallback(Sqls.callback.entity()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sql.setEntity(dao.getEntity(PitcherGameDataDayTotalVO.class)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //执行sql 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dao.execute(sql); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        PitcherGameDataDayTotalVO vo = sql.getObject(PitcherGameDataDayTotalVO.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isNotBlank(vo.getAmountD1())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //处理dayN数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            formatPitcherGameDataDayTotalDayN(vo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return vo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 投手游戏总数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param dto PitcherGameDataTotalDTO 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return Page<PitcherGameDataTotalVO> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public Page<PitcherGameDataTotalVO> getPitcherGameDataTotal(PitcherGameDataTotalDTO dto) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //如果注册时间参数为空,默认设置查询当天数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (dto.getBeginDate() == null || dto.getEndDate() == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dto.setBeginDate(LocalDate.now()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dto.setEndDate(LocalDate.now()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //如果充值时间参数为空,默认设置查询当天数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (dto.getAmountBeginDate() == null || dto.getAmountEndDate() == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dto.setAmountBeginDate(LocalDate.now()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dto.setAmountEndDate(LocalDate.now()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //主表查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Criteria criA = myCri(dto, "criA", true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //账面相关查询条件 时间条件只和充值时间相关 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Criteria criB = myCri(dto, "criB", true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //账面人数相关 时间只需要充值时间条件,不需要注册时间条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Criteria criAmount = myCriRecharge(dto, false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //新用户充值人数和新用户复充人数 时间条件需要注册时间和充值时间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Criteria criNewUser = myCriRecharge(dto, true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //创角人数查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Criteria criRoleNum = myCriRole(dto); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //拼接排序条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Criteria orderByCri = Cnd.cri(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //如果没有排序条件给默认值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isBlank(dto.getSortType())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dto.setSortType(OrderByEnum.DESC.getOrderType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isBlank(dto.getSortFiled())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            orderByCri.getOrderBy().orderBy("pitcher_id", dto.getSortType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            orderByCri.getOrderBy().orderBy("cost", dto.getSortType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            orderByCri.getOrderBy().orderBy(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dto.getSortFiled()), dto.getSortType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //创建sql语句 执行sql 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Sql sql = Sqls.create(pitcherGameDataTotalSql(criA, criB, criAmount, criNewUser, criRoleNum) + orderByCri); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //设置自定义回显对象 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sql.setCallback(Sqls.callback.entities()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sql.setEntity(dao.getEntity(PitcherGameDataTotalVO.class)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Pager pager = dao.createPager(dto.getPageNum(), dto.getPageSize()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sql.setPager(pager); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //执行sql 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dao.execute(sql); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //得到结果集list 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<PitcherGameDataTotalVO> list = sql.getList(PitcherGameDataTotalVO.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //设置查询总数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Sql sqlCount = Sqls.queryEntity("select count(*) from game_ads.ads_game_pitcher_day" + criA); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pager.setRecordCount((int) Daos.queryCount(dao, sqlCount)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //获取所有筛选条件内的dayN数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<String, Map<String, String>> pitcherGameDataTotalDayNMap = tempDayNData(dto); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //根据充值时间修改值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<PitcherGameDataTotalVO> pitcherGameDataTotalVOList = list.stream().map(vo -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //包含pitcher下所有的游戏的dayn数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Map<String, String> gameIDToDayNData = pitcherGameDataTotalDayNMap.get(vo.getPitcherId().toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //取到dayN数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String dayNStr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (CollectionUtils.isEmptyMap(gameIDToDayNData)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                dayNStr = "0.00-0"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                dayNStr = gameIDToDayNData.get(vo.getGameId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (StringUtils.isBlank(dayNStr)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                dayNStr = "0.00-0"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //新用户充值金额 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setNewUserAmount(new BigDecimal(dayNStr.split("-")[0])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //新用户充值次数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setNewUserAmountCount(Long.parseLong(dayNStr.split("-")[1])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //老用户充值人数、次数、金额 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setOldAmount(vo.getAmount().subtract(vo.getNewUserAmount())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setOldAmountCount(vo.getAmountCount() - vo.getNewUserAmountCount()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setOldAmountNum(vo.getAmountNum() - vo.getNewUserAmountNum()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //新用户回收率 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setNewUserRoi(vo.getCost().compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    vo.getNewUserAmount().divide(vo.getCost(), 4, RoundingMode.HALF_UP)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //新用户客单价 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setNewUserAvg(vo.getNewUserAmountCount() == 0L ? BigDecimal.ZERO : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    vo.getNewUserAmount().divide(BigDecimal.valueOf(vo.getNewUserAmountCount()), 4, RoundingMode.HALF_UP)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //新用户ARPU 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vo.setNewUserArpu(vo.getNewUserAmountNum() == 0L ? BigDecimal.ZERO : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    vo.getNewUserAmount().divide(BigDecimal.valueOf(vo.getNewUserAmountNum()), 4, RoundingMode.HALF_UP)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return vo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //返回list结果封装到page对象里 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return new Page<>(pitcherGameDataTotalVOList, pager); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 投手游戏总数据总计 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param dto PitcherGameDataTotalSumDTO 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return PitcherGameDataTotalSumVO 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public PitcherGameDataTotalSumVO getPitcherGameDataTotalSum(PitcherGameDataTotalSumDTO dto) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //如果注册时间参数为空,默认设置查询当天数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (dto.getBeginDate() == null || dto.getEndDate() == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dto.setBeginDate(LocalDate.now()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dto.setEndDate(LocalDate.now()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //如果充值时间参数为空,默认设置查询当天数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (dto.getAmountBeginDate() == null || dto.getAmountEndDate() == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dto.setAmountBeginDate(LocalDate.now()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dto.setAmountEndDate(LocalDate.now()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //复制PitcherGameDataTotalSumDTO 到PitcherGameDataTotalDTO 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        PitcherGameDataTotalDTO totalDTO = new PitcherGameDataTotalDTO(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        copyNullProperties(dto, totalDTO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //主表查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Criteria criA = myCri(totalDTO, "criA", false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //账面相关查询条件 时间条件只和充值时间相关 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Criteria criB = myCri(totalDTO, "criB", false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //账面人数相关 时间只需要充值时间条件,不需要注册时间条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Criteria criAmount = myCriRecharge(totalDTO, false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //新用户充值人数和新用户复充人数 时间条件需要注册时间和充值时间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Criteria criNewUser = myCriRecharge(totalDTO, true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //创角人数查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Criteria criRoleNum = myCriRole(totalDTO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //创建sql语句 执行sql 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Sql sql = Sqls.create(pitcherGameDataTotalSumSql() + criA); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //设置自定义回显对象 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sql.setCallback(Sqls.callback.entity()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sql.setEntity(dao.getEntity(PitcherGameDataTotalSumVO.class)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //执行sql 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dao.execute(sql); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //得到结果 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        PitcherGameDataTotalSumVO vo = sql.getObject(PitcherGameDataTotalSumVO.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //得到账面相关数据、账面人数、新用户人数、新用户复充人数、创角人数数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        PitcherGameDataTotalSumVO tempVO = getPitcherGameDataTotalSumAmountData(criB, criAmount, criNewUser, criRoleNum); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //合并两个对象 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        copyNullProperties(tempVO, vo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //计算相关指标 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //新用户充值成本 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        vo.setNewUserAmountCost(vo.getNewUserAmountNum() == 0L ? BigDecimal.ZERO : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                vo.getCost().divide(BigDecimal.valueOf(vo.getNewUserAmountNum()), 2, RoundingMode.HALF_UP)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //新用户付费率 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        vo.setNewUserAmountRate(vo.getRegisterNum() == 0L ? BigDecimal.ZERO : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                BigDecimal.valueOf(vo.getNewUserAmountNum().doubleValue() / vo.getRegisterNum().doubleValue()).setScale(4, RoundingMode.HALF_UP)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //新用户付费比 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        vo.setNewUserAmountRatio(vo.getAmountNum() == 0L ? BigDecimal.ZERO : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                BigDecimal.valueOf(vo.getNewUserAmountNum().doubleValue() / vo.getAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //新用户复充率 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        vo.setNewUserAgainRate(vo.getNewUserTotalAmountNum() == 0L ? BigDecimal.ZERO : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                BigDecimal.valueOf(vo.getNewUserOrderAgain().doubleValue() / vo.getNewUserTotalAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //创角率 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        vo.setRoleNumRate(vo.getRegisterNum() == 0L ? BigDecimal.ZERO : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                BigDecimal.valueOf(vo.getRoleNum().doubleValue() / vo.getRegisterNum().doubleValue()).setScale(4, RoundingMode.HALF_UP)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //创角成本 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        vo.setRoleNumCost(vo.getRoleNum() == 0L ? BigDecimal.ZERO : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                vo.getCost().divide(BigDecimal.valueOf(vo.getRoleNum()), 2, RoundingMode.HALF_UP)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //获取所有筛选条件内的dayN数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String dayNStr = tempDayNDataTotal(totalDTO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //新用户充值金额 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        vo.setNewUserAmount(new BigDecimal(dayNStr.split("-")[0])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //新用户充值次数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        vo.setNewUserAmountCount(Long.parseLong(dayNStr.split("-")[1])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //老用户充值人数、次数、金额 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        vo.setOldAmount(vo.getAmount().subtract(vo.getNewUserAmount())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        vo.setOldAmountCount(vo.getAmountCount() - vo.getNewUserAmountCount()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        vo.setOldAmountNum(vo.getAmountNum() - vo.getNewUserAmountNum()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //新用户回收率 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        vo.setNewUserRoi(vo.getCost().compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                vo.getNewUserAmount().divide(vo.getCost(), 4, RoundingMode.HALF_UP)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //新用户客单价 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        vo.setNewUserAvg(vo.getNewUserAmountCount() == 0L ? BigDecimal.ZERO : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                vo.getNewUserAmount().divide(BigDecimal.valueOf(vo.getNewUserAmountCount()), 4, RoundingMode.HALF_UP)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //新用户ARPU 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        vo.setNewUserArpu(vo.getNewUserAmountNum() == 0L ? BigDecimal.ZERO : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                vo.getNewUserAmount().divide(BigDecimal.valueOf(vo.getNewUserAmountNum()), 4, RoundingMode.HALF_UP)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //结果 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return vo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 得到账面相关数据、账面人数、新用户人数、新用户复充人数、创角人数数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param criAmount 账面数据相关查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return PitcherGameDataTotalSumVO 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private PitcherGameDataTotalSumVO getPitcherGameDataTotalSumAmountData(Criteria criB, Criteria criAmount, Criteria criNewUser, Criteria criRoleNum) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //得到账面相关数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Sql sqlAmountData = Sqls.create(""" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                SELECT 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    IFNULL(SUM(amount), 0) as amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    IFNULL(SUM(amount_count), 0) as amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(amount_count) > 0 , SUM(amount) / SUM(amount_count), 0), 2) as paper_avg 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                FROM 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    game_ads.ads_game_pitcher_day 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                """ + criB); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //设置回传对象 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sqlAmountData.setCallback(Sqls.callback.entity()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sqlAmountData.setEntity(dao.getEntity(PitcherGameDataTotalSumVO.class)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //执行sql 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dao.execute(sqlAmountData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        PitcherGameDataTotalSumVO vo = sqlAmountData.getObject(PitcherGameDataTotalSumVO.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //账面人数数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Sql sqlAmountNum = Sqls.create(""" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                SELECT 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    IFNULL(COUNT(DISTINCT user_id), 0) amount_num 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                FROM 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    game_ads.ads_information 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                """ + criAmount + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                AND NOT agent_id = 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                """); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //设置回传对象 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sqlAmountNum.setCallback(Sqls.callback.longValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //执行sql 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dao.execute(sqlAmountNum); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //设置账面充值人数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        vo.setAmountNum(sqlAmountNum.getLong()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //账面ARPU 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        vo.setPaperArpu(vo.getAmountNum() == 0L ? BigDecimal.ZERO : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                vo.getAmount().divide(BigDecimal.valueOf(vo.getAmountNum()), 2, RoundingMode.HALF_UP)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //新用户充值人数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Sql sqlNewUserNum = Sqls.create(""" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                SELECT 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    COUNT(DISTINCT user_id) new_user_amount_num 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                FROM 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    game_ads.ads_information 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                """ + criNewUser + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                AND NOT agent_id = 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                """); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //设置回传对象 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sqlNewUserNum.setCallback(Sqls.callback.longValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //执行sql 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dao.execute(sqlNewUserNum); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //设置新用户充值人数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        vo.setNewUserAmountNum(sqlNewUserNum.getLong()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //新用户复充人数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Sql sqlNewUserAgainNum = Sqls.create(""" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                SELECT 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    COUNT(tempA.num) as new_user_order_again 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                FROM ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SELECT 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        COUNT(user_id) num 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    FROM 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        game_ads.ads_information 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    """ + criNewUser + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    AND NOT agent_id = 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    GROUP BY user_id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    HAVING 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        COUNT(user_id) > 1 ) tempA 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                """); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //设置回传对象 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sqlNewUserAgainNum.setCallback(Sqls.callback.longValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //执行sql 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dao.execute(sqlNewUserAgainNum); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //设置新用户充值人数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        vo.setNewUserOrderAgain(sqlNewUserAgainNum.getLong()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //创角人数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Sql sqlRoleNum = Sqls.create(""" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                SELECT 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    COUNT(DISTINCT role_user_id) as role_num 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                FROM 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    dw_create_role_detail 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                """ + criRoleNum + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                AND NOT user_agent_id = 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                """); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //设置回传对象 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sqlRoleNum.setCallback(Sqls.callback.longValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //执行sql 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dao.execute(sqlRoleNum); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //设置创角人数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        vo.setRoleNum(sqlRoleNum.getLong()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return vo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 所有为空值的属性都不copy 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param source 原数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param target 目标数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void copyNullProperties(Object source, Object target) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BeanUtils.copyProperties(source, target, getNullField(source)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 获取属性中为空的字段 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param target 目标对象 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return 不需要替换的字段数组 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private static String[] getNullField(Object target) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BeanWrapper beanWrapper = new BeanWrapperImpl(target); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        PropertyDescriptor[] propertyDescriptors = beanWrapper.getPropertyDescriptors(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Set<String> notNullFieldSet = new HashSet<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (propertyDescriptors.length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (PropertyDescriptor p : propertyDescriptors) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String name = p.getName(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Object value = beanWrapper.getPropertyValue(name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (Objects.isNull(value)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    notNullFieldSet.add(name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String[] notNullField = new String[notNullFieldSet.size()]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return notNullFieldSet.toArray(notNullField); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 主表 账面相关 查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param dto  前端传递的查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param type criA 查询主表  criB 查询账面相关 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param needGroupBy 是否需要分组条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return 查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Criteria myCri(PitcherGameDataTotalDTO dto, String type, Boolean needGroupBy) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //根据传入的dto拼接查询参数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Criteria cri = Cnd.cri(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isNotBlank(dto.getGameId())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //拼接游戏id查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andEquals("game_id", dto.getGameId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isNotBlank(dto.getGameCp())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //拼接游戏cp方 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andEquals("game_cp", dto.getGameCp()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (dto.getGameType() != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //拼接游戏类型查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andEquals("game_type", dto.getGameType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isNotBlank(dto.getSourceSystem())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //拼接SDK来源 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andEquals("source_system", dto.getSourceSystem()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (dto.getPitcherId() != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //拼接投手ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andEquals("pitcher_id", dto.getPitcherId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //根据type拼接不同的时间查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (type.equals("criA")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (dto.getBeginDate() != null && dto.getEndDate() != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //拼接注册日期查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                cri.where().andBetween("dt", dto.getBeginDate(), dto.getEndDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else if (type.equals("criB")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (dto.getAmountBeginDate() != null && dto.getAmountEndDate() != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //拼接充值日期查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                cri.where().andBetween("dt", dto.getAmountBeginDate(), dto.getAmountEndDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //拼接分组条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (needGroupBy) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.getGroupBy().groupBy("game_id", "pitcher_id"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return cri; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 账面充值人数、新用户充值人数、新用户复充人数的查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param dto         前端传递的查询条件参数实体 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param needRegTime 是否需要拼接注册时间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return 查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Criteria myCriRecharge(PitcherGameDataTotalDTO dto, Boolean needRegTime) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //根据传入的dto拼接查询参数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Criteria cri = Cnd.cri(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isNotBlank(dto.getGameId())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //拼接游戏id查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andEquals("game_id", dto.getGameId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isNotBlank(dto.getGameCp())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //拼接游戏cp方 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andEquals("cp_name", dto.getGameCp()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (dto.getGameType() != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //拼接游戏类型查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andEquals("classify", dto.getGameType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isNotBlank(dto.getSourceSystem())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //拼接SDK来源 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andEquals("source_system", dto.getSourceSystem()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (dto.getPitcherId() != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //拼接投手ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andEquals("pitcher_id", dto.getPitcherId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //拼接不同的时间查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (needRegTime && dto.getBeginDate() != null && dto.getEndDate() != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //拼接注册日期查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andBetween("reg_time", dto.getBeginDate(), dto.getEndDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (dto.getAmountBeginDate() != null && dto.getAmountEndDate() != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //拼接充值日期查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andBetween("order_time", dto.getAmountBeginDate(), dto.getAmountEndDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return cri; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 创角人数相关查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param dto 前端传递的查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return 查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Criteria myCriRole(PitcherGameDataTotalDTO dto) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //根据传入的dto拼接查询参数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Criteria cri = Cnd.cri(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isNotBlank(dto.getGameId())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //拼接游戏id查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andEquals("user_game_id", dto.getGameId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isNotBlank(dto.getGameCp())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //拼接游戏cp方 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andEquals("cp_name", dto.getGameCp()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (dto.getGameType() != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //拼接游戏类型查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andEquals("user_game_classify", dto.getGameType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isNotBlank(dto.getSourceSystem())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //拼接SDK来源 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andEquals("source_system", dto.getSourceSystem()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (dto.getPitcherId() != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //拼接投手ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andEquals("user_zx_pitcher_id", dto.getPitcherId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (dto.getBeginDate() != null && dto.getEndDate() != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //拼接注册日期查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andBetween("user_dt", dto.getBeginDate(), dto.getEndDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (dto.getAmountBeginDate() != null && dto.getAmountEndDate() != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //拼接充值日期查询条件 在充值时间内创角 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andBetween("DATE(role_create_time)", dto.getAmountBeginDate(), dto.getAmountEndDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return cri; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 生成DayN数据方法 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param dto       前端查询参数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return Map 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Map<String, Map<String, String>> tempDayNData(PitcherGameDataTotalDTO dto) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //创建查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Criteria cri = Cnd.cri(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (dto.getBeginDate() != null && dto.getEndDate() != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //拼接注册时间查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andBetween("dt", dto.getBeginDate(), dto.getEndDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isNotBlank(dto.getGameId())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //拼接游戏ID查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andEquals("game_id", dto.getGameId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isNotBlank(dto.getSourceSystem())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //拼接SDK来源查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andEquals("source_system", dto.getSourceSystem()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (dto.getPitcherId() != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andEquals("pitcher_id", dto.getPitcherId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Sql dayNSql = Sqls.create(""" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                SELECT 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    dt, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    game_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    pitcher_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    source_system, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    dayN 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                FROM 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    game_ads.ads_pitcher_game_dayn 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                """ + cri); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //设置回传 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dayNSql.setCallback(Sqls.callback.entities()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dayNSql.setEntity(dao.getEntity(AdsPitcherGameDayn.class)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //执行sql 获取数据到list中 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dao.execute(dayNSql); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //将数据库中获取的所有结果封装到一个List中 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<AdsPitcherGameDayn> list = dayNSql.getList(AdsPitcherGameDayn.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // pitcherId - <gameId, dayN> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<String, Map<String, String>> tempMap = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //循环遍历 list 按照 gameId 进行存储 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (AdsPitcherGameDayn adsPitcherGameDayn : list) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!tempMap.containsKey(adsPitcherGameDayn.getPitcherId())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //Map中没有该投手的相关数据,初始化dayNMap 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Map<String, String> resMap = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //保存初始化结果 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                tempMap.put(adsPitcherGameDayn.getPitcherId(), resMap); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //解析 dayN 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Map<String, String> resMap = tempMap.get(adsPitcherGameDayn.getPitcherId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!resMap.containsKey(adsPitcherGameDayn.getGameId())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //不含有该游戏信息,初始化数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                resMap.put(adsPitcherGameDayn.getGameId(), "0.00-0"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //解析每个 adsPitcherGameDayn 的 dayN 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            parseJsonData(adsPitcherGameDayn, resMap, dto); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //将解析的结果保存 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            tempMap.put(adsPitcherGameDayn.getPitcherId(), resMap); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return tempMap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 计算所有的dayN 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param dto       前端查询参数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return Map 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String tempDayNDataTotal(PitcherGameDataTotalDTO dto) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //创建查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Criteria cri = Cnd.cri(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (dto.getBeginDate() != null && dto.getEndDate() != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //拼接注册时间查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andBetween("dt", dto.getBeginDate(), dto.getEndDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isNotBlank(dto.getGameId())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //拼接游戏ID查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andEquals("game_id", dto.getGameId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isNotBlank(dto.getSourceSystem())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //拼接SDK来源查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andEquals("source_system", dto.getSourceSystem()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (dto.getPitcherId() != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cri.where().andEquals("pitcher_id", dto.getPitcherId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Sql dayNSql = Sqls.create(""" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                SELECT 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    dt, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    game_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    pitcher_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    source_system, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    dayN 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                FROM 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    game_ads.ads_pitcher_game_dayn 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                """ + cri); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //设置回传 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dayNSql.setCallback(Sqls.callback.entities()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dayNSql.setEntity(dao.getEntity(AdsPitcherGameDayn.class)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //执行sql 获取数据到list中 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dao.execute(dayNSql); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //将数据库中获取的所有结果封装到一个List中 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<AdsPitcherGameDayn> list = dayNSql.getList(AdsPitcherGameDayn.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //初始化dayN结果 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<String, String> resMap = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        resMap.put("dayN", "0.00-0"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //循环遍历 list 按照 gameId 进行存储 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (AdsPitcherGameDayn adsPitcherGameDayn : list) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //解析每个 adsPitcherGameDayn 的 dayN 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            parseJsonData(adsPitcherGameDayn, resMap, dto); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //返回结果 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return resMap.get("dayN"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 解析dayN json字符串数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param adsPitcherGameDayn 对象 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param resMap      记录最终结果Map 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param dto         前端查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void parseJsonData(AdsPitcherGameDayn adsPitcherGameDayn, Map<String, String> resMap, PitcherGameDataTotalDTO dto) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //将每一个adsDaynGame中的dayN属性值 由json转为 Map 型 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Gson gson = new Gson(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<String, String> jsonList = gson.fromJson(adsPitcherGameDayn.getDayn(), Map.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //解析 jsonList 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (Map.Entry<String, String> entry : jsonList.entrySet()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //key是充值日期 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String key = entry.getKey(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String value = entry.getValue(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //将value按“-”分割 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String[] resValues = value.split("-"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //判断充值日期 在充值日期内的数据进行计算 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (DateUtil.parseLocalDate(key).compareTo(dto.getAmountBeginDate()) >= 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    && DateUtil.parseLocalDate(key).compareTo(dto.getAmountEndDate()) <= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //获取原先的dayN的值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String[] oldValues; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (resMap.containsKey("dayN")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    oldValues = resMap.get("dayN").split("-"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    oldValues = resMap.get(adsPitcherGameDayn.getGameId()).split("-"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //充值的金额 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                BigDecimal chargeMoney = new BigDecimal(oldValues[0]).add(new BigDecimal(resValues[0])).setScale(2, RoundingMode.HALF_UP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //充值的次数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                long count = Long.parseLong(oldValues[1]) + Long.parseLong(resValues[1]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //合并成字符串 更新dayN的值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String newValue = chargeMoney + "-" + count; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (resMap.containsKey("dayN")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    resMap.put("dayN", newValue); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    resMap.put(adsPitcherGameDayn.getGameId(), newValue); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 处理投手游戏每日的DayN 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param vo PitcherGameDataDayVO 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void formatPitcherDataDayDayN(PitcherDataDayVO vo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (CollectionUtils.isEmpty(pitcherDayNFieldMapList)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pitcherDayNFieldMapList.forEach(dayNFieldMap -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String[] temps = ((String) dayNFieldMap.getT1().get(vo)).split("/"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                dayNFieldMap.getT2().set(vo, RechargeTrendVO.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .rechargeMoney(new BigDecimal(temps[0])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .rechargeUserCount(Long.valueOf(temps[1])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .increase(new BigDecimal(temps[2])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .back(new BigDecimal(temps[3])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .multiples(new BigDecimal(temps[4])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                throw new BaseException("映射出错"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 处理投手游戏每日的DayN 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param vo PitcherGameDataDayVO 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void formatPitcherGameDataDayDayN(PitcherGameDataDayVO vo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (CollectionUtils.isEmpty(pitcherGameDayNFieldMapList)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pitcherGameDayNFieldMapList.forEach(dayNFieldMap -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String[] temps = ((String) dayNFieldMap.getT1().get(vo)).split("/"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                dayNFieldMap.getT2().set(vo, RechargeTrendVO.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .rechargeMoney(new BigDecimal(temps[0])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .rechargeUserCount(Long.valueOf(temps[1])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .increase(new BigDecimal(temps[2])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .back(new BigDecimal(temps[3])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .multiples(new BigDecimal(temps[4])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                throw new BaseException("映射出错"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 处理投手每日总计的DayN 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param vo PitcherDataDayTotalVO 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void formatPitcherDataDayTotalDayN(PitcherDataDayTotalVO vo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (CollectionUtils.isEmpty(pitcherDayNTotalFieldMapList)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pitcherDayNTotalFieldMapList.forEach(dayNTotalFieldMap -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //得到需要计算的值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String[] temps = ((String) dayNTotalFieldMap.getT1().get(vo)).split("/"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //dn的金额总计 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                BigDecimal dNAmount = new BigDecimal(temps[0]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //d1-dn的金额总计 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                BigDecimal d1ToDNTotalAmount = new BigDecimal(temps[1]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //d1-dn的消耗总计(排除了未到时间的cost) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                BigDecimal d1ToDNTotalCost = new BigDecimal(temps[3]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //d1的金额总计(排除了未到时间的d1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                BigDecimal d1Amount = new BigDecimal(temps[4]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //赋值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                dayNTotalFieldMap.getT2().set(vo, RechargeTrendVO.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .rechargeMoney(dNAmount) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .rechargeUserCount(Long.valueOf(temps[2])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .increase(d1ToDNTotalCost.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                dNAmount.divide(d1ToDNTotalCost, 4, RoundingMode.HALF_UP)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .back(d1ToDNTotalCost.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                d1ToDNTotalAmount.divide(d1ToDNTotalCost, 4, RoundingMode.HALF_UP)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .multiples(d1Amount.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                d1ToDNTotalAmount.divide(d1Amount, 4, RoundingMode.HALF_UP)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                throw new BaseException("映射出错"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 处理投手游戏每日总计的DayN 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param vo PitcherGameDataDayTotalVO 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void formatPitcherGameDataDayTotalDayN(PitcherGameDataDayTotalVO vo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (CollectionUtils.isEmpty(pitcherGameDayNTotalFieldMapList)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pitcherGameDayNTotalFieldMapList.forEach(dayNTotalFieldMap -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //得到需要计算的值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String[] temps = ((String) dayNTotalFieldMap.getT1().get(vo)).split("/"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //dn的金额总计 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                BigDecimal dNAmount = new BigDecimal(temps[0]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //d1-dn的金额总计 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                BigDecimal d1ToDNTotalAmount = new BigDecimal(temps[1]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //d1-dn的消耗总计(排除了未到时间的cost) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                BigDecimal d1ToDNTotalCost = new BigDecimal(temps[3]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //d1的金额总计(排除了未到时间的d1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                BigDecimal d1Amount = new BigDecimal(temps[4]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //赋值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                dayNTotalFieldMap.getT2().set(vo, RechargeTrendVO.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .rechargeMoney(dNAmount) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .rechargeUserCount(Long.valueOf(temps[2])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .increase(d1ToDNTotalCost.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                dNAmount.divide(d1ToDNTotalCost, 4, RoundingMode.HALF_UP)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .back(d1ToDNTotalCost.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                d1ToDNTotalAmount.divide(d1ToDNTotalCost, 4, RoundingMode.HALF_UP)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .multiples(d1Amount.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                d1ToDNTotalAmount.divide(d1Amount, 4, RoundingMode.HALF_UP)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                throw new BaseException("映射出错"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 查询投手每日数据SQL 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return String 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String pitcherDataDaySql() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                SELECT 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    dt, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    source_system, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    pitcher_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    pitcher, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    plan_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    account_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    agent_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    register_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    first_new_user_amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    first_new_user_amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    first_new_user_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    old_amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    old_amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    old_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    new_user_total_amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    new_user_total_amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    new_user_total_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    hundred_user_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_new_user_total_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_new_user_total_amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_new_user_total_amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    reg_order_user_again, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    first_role_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    new_user_total_role_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    role_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    register_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    first_roi, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_roi, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    today_roi, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    gross_profit, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    first_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_user_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    today_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    first_avg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_avg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    today_avg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    paper_avg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    first_amount_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_amount_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    today_amount_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    today_again_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    new_reg_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    first_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    today_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    paper_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    hundred_user_num_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi4, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi5, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi6, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi7, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi8, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi9, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi10, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi11, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi12, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi13, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi14, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi15, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi17, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi18, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi19, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi20, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi21, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi22, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi23, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi25, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi26, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi27, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi28, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi29, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi30, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi60, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi90, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi180, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi1yaer, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi_total, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d4, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d5, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d6, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d7, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d8, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d9, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d10, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d11, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d12, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d13, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d14, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d15, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d17, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d18, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d19, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d20, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d21, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d22, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d23, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d25, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d26, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d27, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d28, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d29, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_m1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_m2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_m3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_m6, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_y1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_sum, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da4, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da5, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da6, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da7, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da8, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da9, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da10, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da11, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da12, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da13, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da14, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da15, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da17, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da18, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da19, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da20, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da21, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da22, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da23, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da25, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da26, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da27, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da28, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da29, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da30, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    m2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    m3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    m6, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    y1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    total, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da1_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da2_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da3_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da4_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da5_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da6_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da7_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da8_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da9_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da10_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da11_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da12_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da13_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da14_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da15_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da16_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da17_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da18_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da19_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da20_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da21_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da22_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da23_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da24_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da25_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da26_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da27_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da28_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da29_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da30_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    m2_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    m3_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    m6_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    y1_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    total_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    first_role_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    new_user_total_role_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    role_num_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    first_role_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    new_user_total_role_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    role_num_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    new_user_amount_ratio 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                FROM 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    game_ads.ads_pitcher_day 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                """; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 查询投手游戏每日数据SQL 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return String 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String pitcherGameDataDaySql() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                SELECT 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    dt, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    source_system, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    pitcher_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    game_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    pitcher, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    game_name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    game_cp, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    game_type, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    plan_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    account_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    agent_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    register_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    first_new_user_amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    first_new_user_amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    first_new_user_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    old_amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    old_amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    old_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    new_user_total_amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    new_user_total_amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    new_user_total_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    hundred_user_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_new_user_total_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_new_user_total_amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_new_user_total_amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    reg_order_user_again, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    first_role_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    new_user_total_role_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    role_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    register_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    first_roi, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_roi, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    today_roi, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    gross_profit, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    first_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_user_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    today_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    first_avg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_avg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    today_avg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    paper_avg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    first_amount_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buy_amount_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    today_amount_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    today_again_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    new_reg_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    first_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    today_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    paper_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    hundred_user_num_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi4, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi5, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi6, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi7, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi8, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi9, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi10, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi11, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi12, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi13, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi14, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi15, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi17, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi18, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi19, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi20, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi21, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi22, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi23, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi25, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi26, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi27, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi28, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi29, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi30, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi60, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi90, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi180, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi1yaer, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    roi_total, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d4, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d5, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d6, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d7, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d8, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d9, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d10, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d11, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d12, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d13, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d14, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d15, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d17, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d18, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d19, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d20, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d21, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d22, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d23, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d25, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d26, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d27, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d28, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_d29, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_m1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_m2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_m3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_m6, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_y1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    amount_sum, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da4, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da5, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da6, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da7, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da8, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da9, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da10, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da11, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da12, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da13, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da14, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da15, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da17, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da18, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da19, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da20, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da21, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da22, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da23, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da25, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da26, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da27, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da28, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da29, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da30, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    m2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    m3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    m6, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    y1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    total, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da1_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da2_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da3_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da4_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da5_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da6_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da7_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da8_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da9_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da10_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da11_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da12_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da13_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da14_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da15_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da16_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da17_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da18_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da19_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da20_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da21_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da22_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da23_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da24_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da25_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da26_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da27_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da28_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da29_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    da30_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    m2_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    m3_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    m6_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    y1_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    total_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    first_role_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    new_user_total_role_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    role_num_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    first_role_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    new_user_total_role_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    role_num_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    new_user_amount_ratio 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                FROM 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    game_ads.ads_game_pitcher_day 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                """; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 查询投手每日数据总计SQL 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return String 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String pitcherDataDayTotalSql() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                SELECT 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(cost) as cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(plan_count) as plan_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(account_count) as account_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(agent_count) as agent_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(register_num) as register_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(register_num) > 0, SUM(cost) / SUM(register_num), 0), 2) as register_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(first_role_num) as first_role_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(new_user_total_role_num) as new_user_total_role_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(role_num) as role_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(role_num) > 0 , SUM(cost) / SUM(role_num), 0), 2) as role_num_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(first_role_num) > 0 , SUM(cost) / SUM(first_role_num), 0), 2) as first_role_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(new_user_total_role_num) > 0 , SUM(cost) / SUM(new_user_total_role_num), 0), 2) as new_user_total_role_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(register_num) > 0 , SUM(first_role_num) / SUM(register_num), 0), 4) as first_role_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(register_num) > 0 , SUM(new_user_total_role_num) / SUM(register_num), 0), 4) as new_user_total_role_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(register_num) > 0 , SUM(role_num) / SUM(register_num), 0), 4) as role_num_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(first_new_user_amount_count) as first_new_user_amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(first_new_user_amount_num) as first_new_user_amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(first_new_user_amount) as first_new_user_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(amount_count) as amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(amount_num) as amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(amount) as amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(old_amount_count) as old_amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(old_amount_num) as old_amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(old_amount) as old_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(new_user_total_amount_count) as new_user_total_amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(new_user_total_amount_num) as new_user_total_amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(new_user_total_amount) as new_user_total_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(buy_new_user_total_amount) as buy_new_user_total_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(buy_new_user_total_amount_num) as buy_new_user_total_amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(buy_new_user_total_amount_count) as buy_new_user_total_amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0, SUM(first_new_user_amount) / SUM(cost), 0), 4) as first_roi, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0, SUM(buy_new_user_total_amount) / SUM(cost), 0), 4) as buy_roi, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0, SUM(new_user_total_amount) / SUM(cost), 0), 4) as today_roi, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    (SUM(new_user_total_amount) - SUM(cost)) as gross_profit, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(register_num) > 0, SUM(first_new_user_amount_num) / SUM(register_num), 0), 4) as first_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(register_num) > 0, SUM(buy_new_user_total_amount_num) / SUM(register_num), 0), 4) as buy_user_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(register_num) > 0, SUM(new_user_total_amount_num) / SUM(register_num), 0), 4) as today_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(amount_num) > 0, SUM(first_new_user_amount_num) / SUM(amount_num), 0), 4) as new_user_amount_ratio, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(first_new_user_amount_count) > 0 , SUM(first_new_user_amount) / SUM(first_new_user_amount_count), 0), 2) as first_avg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(buy_new_user_total_amount_count) > 0 , SUM(buy_new_user_total_amount) / SUM(buy_new_user_total_amount_count), 0), 2) as buy_avg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(new_user_total_amount_count) > 0 , SUM(new_user_total_amount) / SUM(new_user_total_amount_count), 0), 2) as today_avg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(amount_count) > 0 , SUM(amount) / SUM(amount_count), 0), 2) as paper_avg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(first_new_user_amount_num) > 0 , SUM(cost) / SUM(first_new_user_amount_num), 0), 2) as first_amount_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(buy_new_user_total_amount_num) > 0 , SUM(cost) / SUM(buy_new_user_total_amount_num), 0), 2) as buy_amount_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(new_user_total_amount_num) > 0 , SUM(cost) / SUM(new_user_total_amount_num), 0), 2) as today_amount_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(reg_order_user_again) as reg_order_user_again, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(new_user_total_amount_num) > 0 ,SUM(reg_order_user_again) / SUM(new_user_total_amount_num), 0), 4) as today_again_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(register_num) > 0 , SUM(new_user_total_amount) / SUM(register_num), 0), 2) as new_reg_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(first_new_user_amount_num) > 0 , SUM(first_new_user_amount) / SUM(first_new_user_amount_num), 0), 2) as first_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(new_user_total_amount_num) > 0 , SUM(new_user_total_amount) / SUM(new_user_total_amount_num), 0), 2) as today_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(amount_num) > 0 , SUM(amount) / SUM(amount_num), 0), 2) as paper_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(hundred_user_num) as hundred_user_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(hundred_user_num) > 0 , SUM(cost) / SUM(hundred_user_num), 0), 2) as hundred_user_num_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da1) / SUM(cost), 0), 4) as roi1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da2) / SUM(cost), 0), 4) as roi2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da3) / SUM(cost), 0), 4) as roi3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da4) / SUM(cost), 0), 4) as roi4, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da5) / SUM(cost), 0), 4) as roi5, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da6) / SUM(cost), 0), 4) as roi6, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da7) / SUM(cost), 0), 4) as roi7, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da8) / SUM(cost), 0), 4) as roi8, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da9) / SUM(cost), 0), 4) as roi9, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da10) / SUM(cost), 0), 4) as roi10, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da11) / SUM(cost), 0), 4) as roi11, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da12) / SUM(cost), 0), 4) as roi12, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da13) / SUM(cost), 0), 4) as roi13, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da14) / SUM(cost), 0), 4) as roi14, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da15) / SUM(cost), 0), 4) as roi15, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da16) / SUM(cost), 0), 4) as roi16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da17) / SUM(cost), 0), 4) as roi17, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da18) / SUM(cost), 0), 4) as roi18, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da19) / SUM(cost), 0), 4) as roi19, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da20) / SUM(cost), 0), 4) as roi20, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da21) / SUM(cost), 0), 4) as roi21, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da22) / SUM(cost), 0), 4) as roi22, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da23) / SUM(cost), 0), 4) as roi23, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da24) / SUM(cost), 0), 4) as roi24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da25) / SUM(cost), 0), 4) as roi25, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da26) / SUM(cost), 0), 4) as roi26, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da27) / SUM(cost), 0), 4) as roi27, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da28) / SUM(cost), 0), 4) as roi28, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da29) / SUM(cost), 0), 4) as roi29, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da30) / SUM(cost), 0), 4) as roi30, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(m2) / SUM(cost), 0), 4) as roi60, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(m3) / SUM(cost), 0), 4) as roi90, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(m6) / SUM(cost), 0), 4) as roi180, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(y1) / SUM(cost), 0), 4) as roi1yaer, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(total) / SUM(cost), 0), 4) as roi_total, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da1) as da1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da2) as da2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da3) as da3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da4) as da4, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da5) as da5, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da6) as da6, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da7) as da7, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da8) as da8, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da9) as da9, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da10) as da10, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da11) as da11, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da12) as da12, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da13) as da13, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da14) as da14, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da15) as da15, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da16) as da16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da17) as da17, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da18) as da18, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da19) as da19, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da20) as da20, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da21) as da21, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da22) as da22, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da23) as da23, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da24) as da24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da25) as da25, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da26) as da26, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da27) as da27, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da28) as da28, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da29) as da29, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da30) as da30, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(m2) as m2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(m3) as m3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(m6) as m6, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(y1) as y1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(total) as total, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da1_num) as da1_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da2_num) as da2_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da3_num) as da3_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da4_num) as da4_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da5_num) as da5_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da6_num) as da6_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da7_num) as da7_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da8_num) as da8_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da9_num) as da9_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da10_num) as da10_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da11_num) as da11_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da12_num) as da12_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da13_num) as da13_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da14_num) as da14_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da15_num) as da15_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da16_num) as da16_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da17_num) as da17_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da18_num) as da18_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da19_num) as da19_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da20_num) as da20_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da21_num) as da21_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da22_num) as da22_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da23_num) as da23_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da24_num) as da24_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da25_num) as da25_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da26_num) as da26_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da27_num) as da27_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da28_num) as da28_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da29_num) as da29_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da30_num) as da30_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(m2_num) as m2_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(m3_num) as m3_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(m6_num) as m6_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(y1_num) as y1_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(total_num) as total_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                """ + getPitcherGameDataDayTotalDayNsql() + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                FROM 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    game_ads.ads_pitcher_day 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                """; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 查询投手游戏每日数据总计SQL 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return String 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String pitcherGameDataDayTotalSql() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                SELECT 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(cost) as cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(plan_count) as plan_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(account_count) as account_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(agent_count) as agent_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(register_num) as register_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(register_num) > 0, SUM(cost) / SUM(register_num), 0), 2) as register_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(first_role_num) as first_role_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(new_user_total_role_num) as new_user_total_role_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(role_num) as role_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(role_num) > 0 , SUM(cost) / SUM(role_num), 0), 2) as role_num_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(first_role_num) > 0 , SUM(cost) / SUM(first_role_num), 0), 2) as first_role_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(new_user_total_role_num) > 0 , SUM(cost) / SUM(new_user_total_role_num), 0), 2) as new_user_total_role_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(register_num) > 0 , SUM(first_role_num) / SUM(register_num), 0), 4) as first_role_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(register_num) > 0 , SUM(new_user_total_role_num) / SUM(register_num), 0), 4) as new_user_total_role_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(register_num) > 0 , SUM(role_num) / SUM(register_num), 0), 4) as role_num_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(first_new_user_amount_count) as first_new_user_amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(first_new_user_amount_num) as first_new_user_amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(first_new_user_amount) as first_new_user_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(amount_count) as amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(amount_num) as amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(amount) as amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(old_amount_count) as old_amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(old_amount_num) as old_amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(old_amount) as old_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(new_user_total_amount_count) as new_user_total_amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(new_user_total_amount_num) as new_user_total_amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(new_user_total_amount) as new_user_total_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(buy_new_user_total_amount) as buy_new_user_total_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(buy_new_user_total_amount_num) as buy_new_user_total_amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(buy_new_user_total_amount_count) as buy_new_user_total_amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0, SUM(first_new_user_amount) / SUM(cost), 0), 4) as first_roi, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0, SUM(buy_new_user_total_amount) / SUM(cost), 0), 4) as buy_roi, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0, SUM(new_user_total_amount) / SUM(cost), 0), 4) as today_roi, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    (SUM(new_user_total_amount) - SUM(cost)) as gross_profit, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(register_num) > 0, SUM(first_new_user_amount_num) / SUM(register_num), 0), 4) as first_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(register_num) > 0, SUM(buy_new_user_total_amount_num) / SUM(register_num), 0), 4) as buy_user_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(register_num) > 0, SUM(new_user_total_amount_num) / SUM(register_num), 0), 4) as today_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(amount_num) > 0, SUM(first_new_user_amount_num) / SUM(amount_num), 0), 4) as new_user_amount_ratio, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(first_new_user_amount_count) > 0 , SUM(first_new_user_amount) / SUM(first_new_user_amount_count), 0), 2) as first_avg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(buy_new_user_total_amount_count) > 0 , SUM(buy_new_user_total_amount) / SUM(buy_new_user_total_amount_count), 0), 2) as buy_avg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(new_user_total_amount_count) > 0 , SUM(new_user_total_amount) / SUM(new_user_total_amount_count), 0), 2) as today_avg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(amount_count) > 0 , SUM(amount) / SUM(amount_count), 0), 2) as paper_avg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(first_new_user_amount_num) > 0 , SUM(cost) / SUM(first_new_user_amount_num), 0), 2) as first_amount_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(buy_new_user_total_amount_num) > 0 , SUM(cost) / SUM(buy_new_user_total_amount_num), 0), 2) as buy_amount_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(new_user_total_amount_num) > 0 , SUM(cost) / SUM(new_user_total_amount_num), 0), 2) as today_amount_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(reg_order_user_again) as reg_order_user_again, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(new_user_total_amount_num) > 0 ,SUM(reg_order_user_again) / SUM(new_user_total_amount_num), 0), 4) as today_again_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(register_num) > 0 , SUM(new_user_total_amount) / SUM(register_num), 0), 2) as new_reg_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(first_new_user_amount_num) > 0 , SUM(first_new_user_amount) / SUM(first_new_user_amount_num), 0), 2) as first_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(new_user_total_amount_num) > 0 , SUM(new_user_total_amount) / SUM(new_user_total_amount_num), 0), 2) as today_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(amount_num) > 0 , SUM(amount) / SUM(amount_num), 0), 2) as paper_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(hundred_user_num) as hundred_user_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(hundred_user_num) > 0 , SUM(cost) / SUM(hundred_user_num), 0), 2) as hundred_user_num_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da1) / SUM(cost), 0), 4) as roi1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da2) / SUM(cost), 0), 4) as roi2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da3) / SUM(cost), 0), 4) as roi3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da4) / SUM(cost), 0), 4) as roi4, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da5) / SUM(cost), 0), 4) as roi5, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da6) / SUM(cost), 0), 4) as roi6, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da7) / SUM(cost), 0), 4) as roi7, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da8) / SUM(cost), 0), 4) as roi8, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da9) / SUM(cost), 0), 4) as roi9, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da10) / SUM(cost), 0), 4) as roi10, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da11) / SUM(cost), 0), 4) as roi11, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da12) / SUM(cost), 0), 4) as roi12, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da13) / SUM(cost), 0), 4) as roi13, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da14) / SUM(cost), 0), 4) as roi14, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da15) / SUM(cost), 0), 4) as roi15, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da16) / SUM(cost), 0), 4) as roi16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da17) / SUM(cost), 0), 4) as roi17, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da18) / SUM(cost), 0), 4) as roi18, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da19) / SUM(cost), 0), 4) as roi19, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da20) / SUM(cost), 0), 4) as roi20, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da21) / SUM(cost), 0), 4) as roi21, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da22) / SUM(cost), 0), 4) as roi22, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da23) / SUM(cost), 0), 4) as roi23, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da24) / SUM(cost), 0), 4) as roi24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da25) / SUM(cost), 0), 4) as roi25, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da26) / SUM(cost), 0), 4) as roi26, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da27) / SUM(cost), 0), 4) as roi27, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da28) / SUM(cost), 0), 4) as roi28, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da29) / SUM(cost), 0), 4) as roi29, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da30) / SUM(cost), 0), 4) as roi30, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(m2) / SUM(cost), 0), 4) as roi60, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(m3) / SUM(cost), 0), 4) as roi90, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(m6) / SUM(cost), 0), 4) as roi180, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(y1) / SUM(cost), 0), 4) as roi1yaer, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(total) / SUM(cost), 0), 4) as roi_total, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da1) as da1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da2) as da2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da3) as da3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da4) as da4, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da5) as da5, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da6) as da6, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da7) as da7, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da8) as da8, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da9) as da9, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da10) as da10, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da11) as da11, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da12) as da12, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da13) as da13, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da14) as da14, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da15) as da15, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da16) as da16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da17) as da17, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da18) as da18, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da19) as da19, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da20) as da20, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da21) as da21, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da22) as da22, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da23) as da23, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da24) as da24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da25) as da25, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da26) as da26, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da27) as da27, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da28) as da28, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da29) as da29, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da30) as da30, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(m2) as m2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(m3) as m3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(m6) as m6, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(y1) as y1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(total) as total, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da1_num) as da1_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da2_num) as da2_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da3_num) as da3_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da4_num) as da4_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da5_num) as da5_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da6_num) as da6_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da7_num) as da7_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da8_num) as da8_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da9_num) as da9_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da10_num) as da10_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da11_num) as da11_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da12_num) as da12_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da13_num) as da13_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da14_num) as da14_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da15_num) as da15_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da16_num) as da16_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da17_num) as da17_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da18_num) as da18_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da19_num) as da19_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da20_num) as da20_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da21_num) as da21_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da22_num) as da22_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da23_num) as da23_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da24_num) as da24_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da25_num) as da25_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da26_num) as da26_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da27_num) as da27_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da28_num) as da28_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da29_num) as da29_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(da30_num) as da30_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(m2_num) as m2_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(m3_num) as m3_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(m6_num) as m6_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(y1_num) as y1_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(total_num) as total_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                """ + getPitcherGameDataDayTotalDayNsql() + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                FROM 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    game_ads.ads_game_pitcher_day 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                """; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 投手游戏每日数据总计付费趋势sql 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return String : Dn的充值金额 / D1-Dn的充值总金额 / Dn的充值人数 /当前消耗(剔除不存在的天数数据) /D1充值金额总和(剔除不存在的天数数据) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String getPitcherGameDataDayTotalDayNsql() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        StringBuilder totalDayN = new StringBuilder(StringUtils.EMPTY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (int day = 1; day <= 29 ; day++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            totalDayN.append(""" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    CONCAT( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        SUM(IF(DATE_ADD(dt, INTERVAL %s day) <= LocalDate.now() , CAST(SPLIT_PART(amount_d%s , '/', 1) AS DECIMAL(10, 2)), 0 )),'/', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        SUM(CAST(SPLIT_PART(amount_d%s, '/', 6) AS DECIMAL(10, 2))),'/', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        SUM(CAST(SPLIT_PART(amount_d%s, '/', 2) AS BIGINT)),'/', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        SUM(IF(DATE_ADD(dt, INTERVAL %s day) <= LocalDate.now(),  cost, 0)),'/', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        SUM(IF(DATE_ADD(dt, INTERVAL %s day) <= LocalDate.now(),  CAST(SPLIT_PART(amount_d1 , '/', 1) AS DECIMAL(10, 2)) , 0)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ) AS amount_d%s , 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                       """.formatted(day - 1, day, day, day, day - 1, day - 1, day)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        totalDayN.append(""" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                CONCAT( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(IF(DATE_ADD(dt, INTERVAL 29 day) <= LocalDate.now() , CAST(SPLIT_PART(amount_m1 , '/', 1) AS DECIMAL(10, 2)), 0 )), '/', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(CAST(SPLIT_PART(amount_m1, '/', 6) AS DECIMAL(10, 2))), '/', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(CAST(SPLIT_PART(amount_m1, '/', 2) AS BIGINT)), '/', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(IF(DATE_ADD(dt, INTERVAL 29 day) <= LocalDate.now(), cost, 0)), '/', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(IF(DATE_ADD(dt, INTERVAL 29 day) <= LocalDate.now(), CAST(SPLIT_PART(amount_d1 , '/', 1) AS DECIMAL(10, 2)) , 0)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ) AS amount_m1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                CONCAT( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(IF(DATE_ADD(dt, INTERVAL 59 day) <= LocalDate.now() , CAST(SPLIT_PART(amount_m2 , '/', 1) AS DECIMAL(10, 2)), 0 )), '/', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(CAST(SPLIT_PART(amount_m2, '/', 6) AS DECIMAL(10, 2))), '/', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(CAST(SPLIT_PART(amount_m2, '/', 2) AS BIGINT)), '/', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(IF(DATE_ADD(dt, INTERVAL 59 day) <= LocalDate.now(), cost, 0)), '/', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(IF(DATE_ADD(dt, INTERVAL 59 day) <= LocalDate.now(), CAST(SPLIT_PART(amount_d1 , '/', 1) AS DECIMAL(10, 2)) , 0)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ) AS amount_m2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                CONCAT( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(IF(DATE_ADD(dt, INTERVAL 89 day) <= LocalDate.now() , CAST(SPLIT_PART(amount_m3 , '/', 1) AS DECIMAL(10, 2)), 0 )), '/', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(CAST(SPLIT_PART(amount_m3, '/', 6) AS DECIMAL(10, 2))), '/', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(CAST(SPLIT_PART(amount_m3, '/', 2) AS BIGINT)), '/', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(IF(DATE_ADD(dt, INTERVAL 89 day) <= LocalDate.now(), cost, 0)), '/', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(IF(DATE_ADD(dt, INTERVAL 89 day) <= LocalDate.now(), CAST(SPLIT_PART(amount_d1 , '/', 1) AS DECIMAL(10, 2)) , 0)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ) AS amount_m3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                CONCAT( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(IF(DATE_ADD(dt, INTERVAL 179 day) <= LocalDate.now() , CAST(SPLIT_PART(amount_m6 , '/', 1) AS DECIMAL(10, 2)), 0 )), '/', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(CAST(SPLIT_PART(amount_m6, '/', 6) AS DECIMAL(10, 2))), '/', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(CAST(SPLIT_PART(amount_m6, '/', 2) AS BIGINT)), '/', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(IF(DATE_ADD(dt, INTERVAL 179 day) <= LocalDate.now(), cost, 0)), '/', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(IF(DATE_ADD(dt, INTERVAL 179 day) <= LocalDate.now(), CAST(SPLIT_PART(amount_d1 , '/', 1) AS DECIMAL(10, 2)) , 0)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ) AS amount_m6, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                CONCAT( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(IF(DATE_ADD(dt, INTERVAL 1 year) <= LocalDate.now() , CAST(SPLIT_PART(amount_y1 , '/', 1) AS DECIMAL(10, 2)), 0 )), '/', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(CAST(SPLIT_PART(amount_y1, '/', 6) AS DECIMAL(10, 2))), '/', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(CAST(SPLIT_PART(amount_y1, '/', 2) AS BIGINT)), '/', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(IF(DATE_ADD(dt, INTERVAL 1 year) <= LocalDate.now(), cost, 0)), '/', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(IF(DATE_ADD(dt, INTERVAL 1 year) <= LocalDate.now(), CAST(SPLIT_PART(amount_d1 , '/', 1) AS DECIMAL(10, 2)) , 0)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ) AS amount_y1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                CONCAT( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(CAST(SPLIT_PART(amount_sum , '/', 1) AS DECIMAL(10, 2))), '/', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(CAST(SPLIT_PART(amount_sum, '/', 6) AS DECIMAL(10, 2))), '/', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(CAST(SPLIT_PART(amount_sum, '/', 2) AS BIGINT)), '/', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(cost), '/', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SUM(CAST(SPLIT_PART(amount_d1 , '/', 1) AS DECIMAL(10, 2))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ) AS amount_sum 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                """); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //返回结果 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return totalDayN.toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 查询投手游戏总数据SQL 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param criA       主表查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param criB       账面相关查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param criAmount  账面充值人数查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param criNewUser 新用户相关查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param criRoleNum 创角人数相关查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return String 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String pitcherGameDataTotalSql(Criteria criA, Criteria criB, Criteria criAmount, Criteria criNewUser, Criteria criRoleNum) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                SELECT 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	a.*, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	IFNULL(amount, 0) as amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	IFNULL(amount_count, 0) as amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	IFNULL(amount_num, 0) as amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	IFNULL(paper_avg, 0) as paper_avg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	ROUND(IF(amount_num > 0 , IFNULL(amount, 0) / amount_num, 0), 2) as paper_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	IFNULL(new_user_amount_num, 0) as new_user_amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	ROUND(IF(new_user_amount_num > 0, IFNULL(cost, 0) / new_user_amount_num, 0), 2) as new_user_amount_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	ROUND(IF(register_num > 0, IFNULL(new_user_amount_num, 0) / register_num, 0), 4) as new_user_amount_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	ROUND(IF(amount_num > 0, IFNULL(new_user_amount_num, 0) / amount_num, 0), 4) as new_user_amount_ratio, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	IFNULL(new_user_order_again, 0) as new_user_order_again, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	ROUND(IF(new_user_total_amount_num > 0, IFNULL(new_user_order_again, 0) / new_user_total_amount_num, 0), 4) as new_user_again_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	IFNULL(role_num, 0) as role_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	ROUND(IF(register_num > 0, IFNULL(role_num, 0) / register_num, 0), 4) as role_num_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	ROUND(IF(role_num > 0, IFNULL(cost, 0) / role_num, 0), 2) as role_num_cost 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                FROM ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	SELECT 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		pitcher_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		game_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		MAX(pitcher) as pitcher, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		MAX(game_name) as game_name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		MAX(game_cp) as game_cp, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		MAX(game_type) as game_type, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		SUM(cost) as cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		SUM(plan_count) as plan_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		SUM(account_count) as account_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		SUM(agent_count) as agent_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		SUM(register_num) as register_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(register_num) > 0, SUM(cost) / SUM(register_num), 0), 2) as register_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		SUM(first_role_num) as first_role_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		SUM(new_user_total_role_num) as new_user_total_role_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(first_role_num) > 0 , SUM(cost) / SUM(first_role_num), 0), 2) as first_role_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(new_user_total_role_num) > 0 , SUM(cost) / SUM(new_user_total_role_num), 0), 2) as new_user_total_role_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(register_num) > 0 , SUM(first_role_num) / SUM(register_num), 0), 4) as first_role_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(register_num) > 0 , SUM(new_user_total_role_num) / SUM(register_num), 0), 4) as new_user_total_role_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		SUM(first_new_user_amount_count) as first_new_user_amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		SUM(first_new_user_amount_num) as first_new_user_amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		SUM(first_new_user_amount) as first_new_user_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		SUM(new_user_total_amount_count) as new_user_total_amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		SUM(new_user_total_amount_num) as new_user_total_amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		SUM(new_user_total_amount) as new_user_total_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		SUM(buy_new_user_total_amount) as buy_new_user_total_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		SUM(buy_new_user_total_amount_num) as buy_new_user_total_amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		SUM(buy_new_user_total_amount_count) as buy_new_user_total_amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(cost) > 0, SUM(first_new_user_amount) / SUM(cost), 0), 4) as first_roi, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(cost) > 0, SUM(buy_new_user_total_amount) / SUM(cost), 0), 4) as buy_roi, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(cost) > 0, SUM(new_user_total_amount) / SUM(cost), 0), 4) as today_roi, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		(SUM(new_user_total_amount) - SUM(cost)) as gross_profit, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(register_num) > 0, SUM(first_new_user_amount_num) / SUM(register_num), 0), 4) as first_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(register_num) > 0, SUM(buy_new_user_total_amount_num) / SUM(register_num), 0), 4) as buy_user_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(register_num) > 0, SUM(new_user_total_amount_num) / SUM(register_num), 0), 4) as today_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(first_new_user_amount_count) > 0 , SUM(first_new_user_amount) / SUM(first_new_user_amount_count), 0), 2) as first_avg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(buy_new_user_total_amount_count) > 0 , SUM(buy_new_user_total_amount) / SUM(buy_new_user_total_amount_count), 0), 2) as buy_avg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(new_user_total_amount_count) > 0 , SUM(new_user_total_amount) / SUM(new_user_total_amount_count), 0), 2) as today_avg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(first_new_user_amount_num) > 0 , SUM(cost) / SUM(first_new_user_amount_num), 0), 2) as first_amount_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(buy_new_user_total_amount_num) > 0 , SUM(cost) / SUM(buy_new_user_total_amount_num), 0), 2) as buy_amount_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(new_user_total_amount_num) > 0 , SUM(cost) / SUM(new_user_total_amount_num), 0), 2) as today_amount_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		SUM(reg_order_user_again) as reg_order_user_again, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(new_user_total_amount_num) > 0 ,SUM(reg_order_user_again) / SUM(new_user_total_amount_num), 0), 4) as today_again_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(register_num) > 0 , SUM(new_user_total_amount) / SUM(register_num), 0), 2) as new_reg_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(first_new_user_amount_num) > 0 , SUM(first_new_user_amount) / SUM(first_new_user_amount_num), 0), 2) as first_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(new_user_total_amount_num) > 0 , SUM(new_user_total_amount) / SUM(new_user_total_amount_num), 0), 2) as today_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		SUM(hundred_user_num) as hundred_user_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(hundred_user_num) > 0 , SUM(cost) / SUM(hundred_user_num), 0), 2) as hundred_user_num_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(cost) > 0 , SUM(da1) / SUM(cost), 0), 4) as roi1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(cost) > 0 , SUM(da2) / SUM(cost), 0), 4) as roi2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(cost) > 0 , SUM(da3) / SUM(cost), 0), 4) as roi3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(cost) > 0 , SUM(da4) / SUM(cost), 0), 4) as roi4, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(cost) > 0 , SUM(da5) / SUM(cost), 0), 4) as roi5, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(cost) > 0 , SUM(da6) / SUM(cost), 0), 4) as roi6, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(cost) > 0 , SUM(da7) / SUM(cost), 0), 4) as roi7, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(cost) > 0 , SUM(da8) / SUM(cost), 0), 4) as roi8, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(cost) > 0 , SUM(da9) / SUM(cost), 0), 4) as roi9, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(cost) > 0 , SUM(da10) / SUM(cost), 0), 4) as roi10, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(cost) > 0 , SUM(da11) / SUM(cost), 0), 4) as roi11, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(cost) > 0 , SUM(da12) / SUM(cost), 0), 4) as roi12, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(cost) > 0 , SUM(da13) / SUM(cost), 0), 4) as roi13, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(cost) > 0 , SUM(da14) / SUM(cost), 0), 4) as roi14, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(cost) > 0 , SUM(da15) / SUM(cost), 0), 4) as roi15, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(cost) > 0 , SUM(da16) / SUM(cost), 0), 4) as roi16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(cost) > 0 , SUM(da17) / SUM(cost), 0), 4) as roi17, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(cost) > 0 , SUM(da18) / SUM(cost), 0), 4) as roi18, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(cost) > 0 , SUM(da19) / SUM(cost), 0), 4) as roi19, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(cost) > 0 , SUM(da20) / SUM(cost), 0), 4) as roi20, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(cost) > 0 , SUM(da21) / SUM(cost), 0), 4) as roi21, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(cost) > 0 , SUM(da22) / SUM(cost), 0), 4) as roi22, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(cost) > 0 , SUM(da23) / SUM(cost), 0), 4) as roi23, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(cost) > 0 , SUM(da24) / SUM(cost), 0), 4) as roi24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(cost) > 0 , SUM(da25) / SUM(cost), 0), 4) as roi25, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(cost) > 0 , SUM(da26) / SUM(cost), 0), 4) as roi26, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(cost) > 0 , SUM(da27) / SUM(cost), 0), 4) as roi27, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(cost) > 0 , SUM(da28) / SUM(cost), 0), 4) as roi28, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(cost) > 0 , SUM(da29) / SUM(cost), 0), 4) as roi29, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(cost) > 0 , SUM(da30) / SUM(cost), 0), 4) as roi30, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(cost) > 0 , SUM(m2) / SUM(cost), 0), 4) as roi60, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(cost) > 0 , SUM(m3) / SUM(cost), 0), 4) as roi90, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(cost) > 0 , SUM(m6) / SUM(cost), 0), 4) as roi180, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(cost) > 0 , SUM(y1) / SUM(cost), 0), 4) as roi1yaer, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		ROUND(IF(SUM(cost) > 0 , SUM(total) / SUM(cost), 0), 4) as roi_total 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	FROM 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		game_ads.ads_game_pitcher_day 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	""" + criA + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ) a 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                LEFT JOIN ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	SELECT 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	    pitcher_id as b_pitcher_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	    game_id as b_game_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	    IFNULL(SUM(amount), 0) as amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	    IFNULL(SUM(amount_count), 0) as amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	    ROUND(IF(SUM(amount_count) > 0 , SUM(amount) / SUM(amount_count), 0), 2) as paper_avg 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	FROM 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	    game_ads.ads_game_pitcher_day 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	""" + criB + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ) b ON a.pitcher_id = b.b_pitcher_id AND a.game_id = b.b_game_id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                LEFT JOIN ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	SELECT 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		pitcher_id as c_pitcher_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		game_id as c_game_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		IFNULL(COUNT(DISTINCT user_id), 0) amount_num 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	FROM 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		game_ads.ads_information 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	""" + criAmount + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	    AND NOT agent_id = 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	GROUP BY pitcher_id , game_id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ) c ON a.pitcher_id = c.c_pitcher_id AND a.game_id = c.c_game_id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                LEFT JOIN ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	SELECT 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		pitcher_id as d_pitcher_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		game_id as d_game_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		COUNT(DISTINCT user_id) new_user_amount_num 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	FROM 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		game_ads.ads_information 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	""" + criNewUser + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		AND NOT agent_id = 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	GROUP BY 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		pitcher_id , game_id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ) d ON a.pitcher_id = d.d_pitcher_id AND a.game_id = d.d_game_id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                LEFT JOIN ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	SELECT 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		game_id as e_game_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		pitcher_id as e_pitcher_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		COUNT(tempA.num) as new_user_order_again 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	FROM ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		SELECT 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                			game_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                			pitcher_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                			COUNT(user_id) num 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		FROM 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                			game_ads.ads_information 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		""" + criNewUser + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                			AND NOT agent_id = 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		GROUP BY 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                			user_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                			pitcher_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                			game_id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		HAVING 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                			COUNT(user_id) > 1 ) tempA 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	GROUP BY 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		tempA.game_id, tempA.pitcher_id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ) e ON a.game_id = e.e_game_id AND a.pitcher_id = e.e_pitcher_id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                LEFT JOIN ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	SELECT 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		user_game_id as f_game_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		user_zx_pitcher_id as f_pitcher_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		COUNT(DISTINCT role_user_id) as role_num 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	FROM 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		dw_create_role_detail 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	""" + criRoleNum + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		AND NOT user_agent_id = 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                	GROUP BY 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                		user_game_id, user_zx_pitcher_id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ) f ON a.game_id = f.f_game_id AND a.pitcher_id = f.f_pitcher_id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                """; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 查询投手游戏总数据总计SQL 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return String 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String pitcherGameDataTotalSumSql() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                SELECT 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    IFNULL(SUM(cost), 0) as cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    IFNULL(SUM(plan_count), 0) as plan_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    IFNULL(SUM(account_count), 0) as account_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    IFNULL(SUM(agent_count), 0) as agent_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    IFNULL(SUM(register_num), 0) as register_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(register_num) > 0, SUM(cost) / SUM(register_num), 0), 2) as register_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    IFNULL(SUM(first_role_num), 0) as first_role_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    IFNULL(SUM(new_user_total_role_num), 0) as new_user_total_role_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(first_role_num) > 0 , SUM(cost) / SUM(first_role_num), 0), 2) as first_role_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(new_user_total_role_num) > 0 , SUM(cost) / SUM(new_user_total_role_num), 0), 2) as new_user_total_role_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(register_num) > 0 , SUM(first_role_num) / SUM(register_num), 0), 4) as first_role_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(register_num) > 0 , SUM(new_user_total_role_num) / SUM(register_num), 0), 4) as new_user_total_role_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    IFNULL(SUM(first_new_user_amount_count), 0) as first_new_user_amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    IFNULL(SUM(first_new_user_amount_num), 0) as first_new_user_amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    IFNULL(SUM(first_new_user_amount), 0) as first_new_user_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    IFNULL(SUM(new_user_total_amount_count), 0) as new_user_total_amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    IFNULL(SUM(new_user_total_amount_num), 0) as new_user_total_amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    IFNULL(SUM(new_user_total_amount), 0) as new_user_total_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    IFNULL(SUM(buy_new_user_total_amount), 0) as buy_new_user_total_amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    IFNULL(SUM(buy_new_user_total_amount_num), 0) as buy_new_user_total_amount_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    IFNULL(SUM(buy_new_user_total_amount_count), 0) as buy_new_user_total_amount_count, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0, SUM(first_new_user_amount) / SUM(cost), 0), 4) as first_roi, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0, SUM(buy_new_user_total_amount) / SUM(cost), 0), 4) as buy_roi, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0, SUM(new_user_total_amount) / SUM(cost), 0), 4) as today_roi, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    IFNULL((SUM(new_user_total_amount) - SUM(cost)), 0) as gross_profit, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(register_num) > 0, SUM(first_new_user_amount_num) / SUM(register_num), 0), 4) as first_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(register_num) > 0, SUM(buy_new_user_total_amount_num) / SUM(register_num), 0), 4) as buy_user_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(register_num) > 0, SUM(new_user_total_amount_num) / SUM(register_num), 0), 4) as today_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(first_new_user_amount_count) > 0 , SUM(first_new_user_amount) / SUM(first_new_user_amount_count), 0), 2) as first_avg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(buy_new_user_total_amount_count) > 0 , SUM(buy_new_user_total_amount) / SUM(buy_new_user_total_amount_count), 0), 2) as buy_avg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(new_user_total_amount_count) > 0 , SUM(new_user_total_amount) / SUM(new_user_total_amount_count), 0), 2) as today_avg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(first_new_user_amount_num) > 0 , SUM(cost) / SUM(first_new_user_amount_num), 0), 2) as first_amount_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(buy_new_user_total_amount_num) > 0 , SUM(cost) / SUM(buy_new_user_total_amount_num), 0), 2) as buy_amount_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(new_user_total_amount_num) > 0 , SUM(cost) / SUM(new_user_total_amount_num), 0), 2) as today_amount_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    IFNULL(SUM(reg_order_user_again), 0) as reg_order_user_again, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(new_user_total_amount_num) > 0 ,SUM(reg_order_user_again) / SUM(new_user_total_amount_num), 0), 4) as today_again_rate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(register_num) > 0 , SUM(new_user_total_amount) / SUM(register_num), 0), 2) as new_reg_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(first_new_user_amount_num) > 0 , SUM(first_new_user_amount) / SUM(first_new_user_amount_num), 0), 2) as first_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(new_user_total_amount_num) > 0 , SUM(new_user_total_amount) / SUM(new_user_total_amount_num), 0), 2) as today_arpu, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    IFNULL(SUM(hundred_user_num), 0) as hundred_user_num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(hundred_user_num) > 0 , SUM(cost) / SUM(hundred_user_num), 0), 2) as hundred_user_num_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da1) / SUM(cost), 0), 4) as roi1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da2) / SUM(cost), 0), 4) as roi2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da3) / SUM(cost), 0), 4) as roi3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da4) / SUM(cost), 0), 4) as roi4, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da5) / SUM(cost), 0), 4) as roi5, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da6) / SUM(cost), 0), 4) as roi6, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da7) / SUM(cost), 0), 4) as roi7, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da8) / SUM(cost), 0), 4) as roi8, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da9) / SUM(cost), 0), 4) as roi9, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da10) / SUM(cost), 0), 4) as roi10, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da11) / SUM(cost), 0), 4) as roi11, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da12) / SUM(cost), 0), 4) as roi12, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da13) / SUM(cost), 0), 4) as roi13, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da14) / SUM(cost), 0), 4) as roi14, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da15) / SUM(cost), 0), 4) as roi15, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da16) / SUM(cost), 0), 4) as roi16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da17) / SUM(cost), 0), 4) as roi17, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da18) / SUM(cost), 0), 4) as roi18, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da19) / SUM(cost), 0), 4) as roi19, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da20) / SUM(cost), 0), 4) as roi20, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da21) / SUM(cost), 0), 4) as roi21, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da22) / SUM(cost), 0), 4) as roi22, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da23) / SUM(cost), 0), 4) as roi23, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da24) / SUM(cost), 0), 4) as roi24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da25) / SUM(cost), 0), 4) as roi25, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da26) / SUM(cost), 0), 4) as roi26, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da27) / SUM(cost), 0), 4) as roi27, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da28) / SUM(cost), 0), 4) as roi28, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da29) / SUM(cost), 0), 4) as roi29, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(da30) / SUM(cost), 0), 4) as roi30, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(m2) / SUM(cost), 0), 4) as roi60, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(m3) / SUM(cost), 0), 4) as roi90, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(m6) / SUM(cost), 0), 4) as roi180, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(y1) / SUM(cost), 0), 4) as roi1yaer, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ROUND(IF(SUM(cost) > 0 , SUM(total) / SUM(cost), 0), 4) as roi_total 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                FROM 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    game_ads.ads_game_pitcher_day 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                """; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |