|  | @@ -4,11 +4,12 @@ import com.google.common.base.CaseFormat;
 | 
	
		
			
				|  |  |  import com.zanxiang.game.data.serve.component.DataPowerComponent;
 | 
	
		
			
				|  |  |  import com.zanxiang.game.data.serve.pojo.dto.GameServerDayDTO;
 | 
	
		
			
				|  |  |  import com.zanxiang.game.data.serve.pojo.dto.GameServerDayTotalDTO;
 | 
	
		
			
				|  |  | +import com.zanxiang.game.data.serve.pojo.dto.GameServerSumDayDTO;
 | 
	
		
			
				|  |  | +import com.zanxiang.game.data.serve.pojo.dto.GameServerSumDayTotalDTO;
 | 
	
		
			
				|  |  |  import com.zanxiang.game.data.serve.pojo.entity.AdsGameServerDay;
 | 
	
		
			
				|  |  | +import com.zanxiang.game.data.serve.pojo.entity.AdsGameServerSumDay;
 | 
	
		
			
				|  |  |  import com.zanxiang.game.data.serve.pojo.enums.OrderByEnum;
 | 
	
		
			
				|  |  | -import com.zanxiang.game.data.serve.pojo.vo.GameServerDayTotalVO;
 | 
	
		
			
				|  |  | -import com.zanxiang.game.data.serve.pojo.vo.GameServerDayVO;
 | 
	
		
			
				|  |  | -import com.zanxiang.game.data.serve.pojo.vo.GameServerTrendVO;
 | 
	
		
			
				|  |  | +import com.zanxiang.game.data.serve.pojo.vo.*;
 | 
	
		
			
				|  |  |  import com.zanxiang.game.data.serve.service.IGameServerService;
 | 
	
		
			
				|  |  |  import com.zanxiang.game.data.serve.utils.Page;
 | 
	
		
			
				|  |  |  import lombok.extern.slf4j.Slf4j;
 | 
	
	
		
			
				|  | @@ -44,6 +45,8 @@ public class GameServerServiceImpl implements IGameServerService {
 | 
	
		
			
				|  |  |      //存储映射的List
 | 
	
		
			
				|  |  |      private static final List<Tuple2<Field,Field>> dayNFieldMapList;
 | 
	
		
			
				|  |  |      private static final List<Tuple2<Field,Field>> dayNTotalFieldMapList;
 | 
	
		
			
				|  |  | +    private static final List<Tuple2<Field,Field>> dayNFieldMapListForServerDay;
 | 
	
		
			
				|  |  | +    private static final List<Tuple2<Field,Field>> dayNTotalFieldMapListForServerDay;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      static {
 | 
	
		
			
				|  |  |          //解析游戏区服的dayN映射
 | 
	
	
		
			
				|  | @@ -113,6 +116,75 @@ public class GameServerServiceImpl implements IGameServerService {
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        //解析游戏区服每日的dayN映射
 | 
	
		
			
				|  |  | +        Map<String, Field> fieldMapDay = new HashMap<>();
 | 
	
		
			
				|  |  | +        List<Field> dayNFieldListForServerDay = new ArrayList<>();
 | 
	
		
			
				|  |  | +        Class<?> tempClazzForServerDay = GameServerSumDayVO.class;
 | 
	
		
			
				|  |  | +        while (tempClazzForServerDay != null) {
 | 
	
		
			
				|  |  | +            //得到所有的field
 | 
	
		
			
				|  |  | +            Field[] fields = tempClazzForServerDay.getDeclaredFields();
 | 
	
		
			
				|  |  | +            for (Field field : fields) {
 | 
	
		
			
				|  |  | +                if (Modifier.isFinal(field.getModifiers()) || Modifier.isStatic(field.getModifiers())) {
 | 
	
		
			
				|  |  | +                    continue;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                //map里面存储了所有的field
 | 
	
		
			
				|  |  | +                fieldMapDay.put(field.getName(), field);
 | 
	
		
			
				|  |  | +                if (field.getType() == GameServerTrendVO.class) {
 | 
	
		
			
				|  |  | +                    //list里面只存储了 Trend 相关的field
 | 
	
		
			
				|  |  | +                    dayNFieldListForServerDay.add(field);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            tempClazzForServerDay = tempClazzForServerDay.getSuperclass();
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (dayNFieldListForServerDay.isEmpty()) {
 | 
	
		
			
				|  |  | +            dayNFieldMapListForServerDay = Collections.emptyList();
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +            dayNFieldMapListForServerDay = new ArrayList<>(dayNFieldListForServerDay.size());
 | 
	
		
			
				|  |  | +            for (Field dayNFieldForServerDay : dayNFieldListForServerDay) {
 | 
	
		
			
				|  |  | +                dayNFieldForServerDay.setAccessible(true);
 | 
	
		
			
				|  |  | +                Field sourceField = fieldMapDay.get(dayNFieldForServerDay.getName().replace("Trend", ""));
 | 
	
		
			
				|  |  | +                sourceField.setAccessible(true);
 | 
	
		
			
				|  |  | +                if (sourceField != null) {
 | 
	
		
			
				|  |  | +                    dayNFieldMapListForServerDay.add(Tuples.of(sourceField, dayNFieldForServerDay));
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        //游戏区服每日总计dayN映射
 | 
	
		
			
				|  |  | +        Map<String, Field> fieldTotalMapDay = new HashMap<>();
 | 
	
		
			
				|  |  | +        List<Field> dayNTotalFieldListForServerDay = new ArrayList<>();
 | 
	
		
			
				|  |  | +        Class<?> tempTotalClazzForServerDay = GameServerSumDayTotalVO.class;
 | 
	
		
			
				|  |  | +        while (tempTotalClazzForServerDay != null) {
 | 
	
		
			
				|  |  | +            //得到所有的field
 | 
	
		
			
				|  |  | +            Field[] fields = tempTotalClazzForServerDay.getDeclaredFields();
 | 
	
		
			
				|  |  | +            for (Field field : fields) {
 | 
	
		
			
				|  |  | +                if (Modifier.isFinal(field.getModifiers()) || Modifier.isStatic(field.getModifiers())) {
 | 
	
		
			
				|  |  | +                    continue;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                //map里面存储了所有的field
 | 
	
		
			
				|  |  | +                fieldTotalMapDay.put(field.getName(), field);
 | 
	
		
			
				|  |  | +                if (field.getType() == GameServerTrendVO.class) {
 | 
	
		
			
				|  |  | +                    //list里面只存储了 Trend 相关的field
 | 
	
		
			
				|  |  | +                    dayNTotalFieldListForServerDay.add(field);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            tempTotalClazzForServerDay = tempTotalClazzForServerDay.getSuperclass();
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (dayNTotalFieldListForServerDay.isEmpty()) {
 | 
	
		
			
				|  |  | +            dayNTotalFieldMapListForServerDay = Collections.emptyList();
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +            dayNTotalFieldMapListForServerDay = new ArrayList<>(dayNTotalFieldListForServerDay.size());
 | 
	
		
			
				|  |  | +            for (Field dayNTotalFieldForServerDay : dayNTotalFieldListForServerDay) {
 | 
	
		
			
				|  |  | +                dayNTotalFieldForServerDay.setAccessible(true);
 | 
	
		
			
				|  |  | +                Field sourceField = fieldTotalMapDay.get(dayNTotalFieldForServerDay.getName().replace("Trend", ""));
 | 
	
		
			
				|  |  | +                sourceField.setAccessible(true);
 | 
	
		
			
				|  |  | +                if (sourceField != null) {
 | 
	
		
			
				|  |  | +                    dayNTotalFieldMapListForServerDay.add(Tuples.of(sourceField, dayNTotalFieldForServerDay));
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
	
		
			
				|  | @@ -237,6 +309,111 @@ public class GameServerServiceImpl implements IGameServerService {
 | 
	
		
			
				|  |  |          return vo;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 游戏区服每日数据
 | 
	
		
			
				|  |  | +     * @param dto GameServerSumDayDTO
 | 
	
		
			
				|  |  | +     * @return Page<GameServerSumDayVO>
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public Page<GameServerSumDayVO> getGameServerDataSumDay(GameServerSumDayDTO dto) {
 | 
	
		
			
				|  |  | +        //添加权限
 | 
	
		
			
				|  |  | +        /*com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
 | 
	
		
			
				|  |  | +        List<Long> gameIds = dto.getGameId() == null ? poerInfo.second : Collections.singletonList(dto.getGameId());*/
 | 
	
		
			
				|  |  | +        //创建查询条件
 | 
	
		
			
				|  |  | +        Criteria cri = Cnd.cri();
 | 
	
		
			
				|  |  | +        /*if (gameIds != null) {
 | 
	
		
			
				|  |  | +            //拼接游戏ID查询条件
 | 
	
		
			
				|  |  | +            cri.where().andInList("game_id", gameIds);
 | 
	
		
			
				|  |  | +        }*/
 | 
	
		
			
				|  |  | +        if (dto.getGameId() != null) {
 | 
	
		
			
				|  |  | +            //拼接游戏ID查询条件
 | 
	
		
			
				|  |  | +            cri.where().andEquals("game_id", dto.getGameId());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (dto.getBeginDate() != null && dto.getEndDate() != null) {
 | 
	
		
			
				|  |  | +            //拼接开服时间查询条件
 | 
	
		
			
				|  |  | +            cri.where().andBetween("dt", dto.getBeginDate(), dto.getEndDate());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
 | 
	
		
			
				|  |  | +            //拼接sdk来源
 | 
	
		
			
				|  |  | +            cri.where().andEquals("source_system", dto.getSourceSystem());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //添加排序条件
 | 
	
		
			
				|  |  | +        //拼接排序条件,如果没有排序条件给默认值
 | 
	
		
			
				|  |  | +        if (StringUtils.isBlank(dto.getSortType())) {
 | 
	
		
			
				|  |  | +            dto.setSortType(OrderByEnum.DESC.getOrderType());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (StringUtils.isBlank(dto.getSortFiled())) {
 | 
	
		
			
				|  |  | +            cri.getOrderBy().orderBy("dt", dto.getSortType());
 | 
	
		
			
				|  |  | +            cri.getOrderBy().orderBy("game_id", dto.getSortType());
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +            cri.getOrderBy().orderBy(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dto.getSortFiled()), dto.getSortType());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //创建sql语句查询数据
 | 
	
		
			
				|  |  | +        Sql sql = Sqls.create(gameServerSumDaySql() + cri);
 | 
	
		
			
				|  |  | +        //设置自定义回传对象
 | 
	
		
			
				|  |  | +        sql.setCallback(Sqls.callback.entities());
 | 
	
		
			
				|  |  | +        sql.setEntity(dao.getEntity(GameServerSumDayVO.class));
 | 
	
		
			
				|  |  | +        //设置分页对象
 | 
	
		
			
				|  |  | +        Pager pager = dao.createPager(dto.getPageNum(), dto.getPageSize());
 | 
	
		
			
				|  |  | +        sql.setPager(pager);
 | 
	
		
			
				|  |  | +        //执行sql
 | 
	
		
			
				|  |  | +        dao.execute(sql);
 | 
	
		
			
				|  |  | +        //设置总记录数
 | 
	
		
			
				|  |  | +        pager.setRecordCount(dao.count(AdsGameServerSumDay.class, cri));
 | 
	
		
			
				|  |  | +        List<GameServerSumDayVO> tempList = sql.getList(GameServerSumDayVO.class);
 | 
	
		
			
				|  |  | +        List<GameServerSumDayVO> list = tempList.stream().map(vo -> {
 | 
	
		
			
				|  |  | +            formatDayNForServerDay(vo);
 | 
	
		
			
				|  |  | +            return vo;
 | 
	
		
			
				|  |  | +        }).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +        //返回结果
 | 
	
		
			
				|  |  | +        return new Page<>(list, pager);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 游戏区服每日数据总计
 | 
	
		
			
				|  |  | +     * @param dto GameServerSumDayTotalDTO
 | 
	
		
			
				|  |  | +     * @return GameServerSumDayTotalVO
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public GameServerSumDayTotalVO getGameServerDataSumDayTotal(GameServerSumDayTotalDTO dto) {
 | 
	
		
			
				|  |  | +        /*com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
 | 
	
		
			
				|  |  | +        List<Long> gameIds = dto.getGameId() == null ? poerInfo.second : Collections.singletonList(dto.getGameId());*/
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        //创建查询条件
 | 
	
		
			
				|  |  | +        Criteria cri = Cnd.cri();
 | 
	
		
			
				|  |  | +        /*if (gameIds != null) {
 | 
	
		
			
				|  |  | +            //拼接游戏ID查询条件
 | 
	
		
			
				|  |  | +            cri.where().andInList("game_id", gameIds);
 | 
	
		
			
				|  |  | +        }*/
 | 
	
		
			
				|  |  | +        if (dto.getGameId() != null) {
 | 
	
		
			
				|  |  | +            //拼接游戏ID查询条件
 | 
	
		
			
				|  |  | +            cri.where().andEquals("game_id", dto.getGameId());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (dto.getBeginDate() != null && dto.getEndDate() != null) {
 | 
	
		
			
				|  |  | +            //拼接开服时间查询条件
 | 
	
		
			
				|  |  | +            cri.where().andBetween("dt", dto.getBeginDate(), dto.getEndDate());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
 | 
	
		
			
				|  |  | +            //拼接sdk来源
 | 
	
		
			
				|  |  | +            cri.where().andEquals("source_system", dto.getSourceSystem());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //创建sql语句查询数据
 | 
	
		
			
				|  |  | +        Sql sql = Sqls.create(gameServerSumDayTotalSql() + cri);
 | 
	
		
			
				|  |  | +        //设置自定义回传对象
 | 
	
		
			
				|  |  | +        sql.setCallback(Sqls.callback.entity());
 | 
	
		
			
				|  |  | +        sql.setEntity(dao.getEntity(GameServerSumDayTotalVO.class));
 | 
	
		
			
				|  |  | +        //执行sql
 | 
	
		
			
				|  |  | +        dao.execute(sql);
 | 
	
		
			
				|  |  | +        //得到查询的结果
 | 
	
		
			
				|  |  | +        GameServerSumDayTotalVO vo = sql.getObject(GameServerSumDayTotalVO.class);
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotBlank(vo.getDa1())) {
 | 
	
		
			
				|  |  | +            formatTotalDayNForServerDay(vo);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //返回结果
 | 
	
		
			
				|  |  | +        return vo;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  |       * 将vo中的原始String数据修改为一个对象
 | 
	
		
			
				|  |  |       * @param vo 展示给前端的游戏区服数据
 | 
	
	
		
			
				|  | @@ -279,6 +456,36 @@ public class GameServerServiceImpl implements IGameServerService {
 | 
	
		
			
				|  |  |          });
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 将vo中的原始String数据修改为一个对象(游戏区服每日数据)
 | 
	
		
			
				|  |  | +     * @param vo 展示给前端的游戏区服每日数据
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    private void formatDayNForServerDay(GameServerSumDayVO vo) {
 | 
	
		
			
				|  |  | +        if (CollectionUtils.isEmpty(dayNFieldMapListForServerDay)) {
 | 
	
		
			
				|  |  | +            return;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        dayNFieldMapListForServerDay.forEach(dayNFieldMapForServerDay -> {
 | 
	
		
			
				|  |  | +            try {
 | 
	
		
			
				|  |  | +                String[] temps = ((String) dayNFieldMapForServerDay.getT1().get(vo)).split("/");
 | 
	
		
			
				|  |  | +                dayNFieldMapForServerDay.getT2().set(vo, GameServerTrendVO.builder()
 | 
	
		
			
				|  |  | +                        .regNum(Long.parseLong(temps[0]))
 | 
	
		
			
				|  |  | +                        .roleNum(Long.parseLong(temps[1]))
 | 
	
		
			
				|  |  | +                        .activeNum(Long.parseLong(temps[2]))
 | 
	
		
			
				|  |  | +                        .amountNum(Long.parseLong(temps[3]))
 | 
	
		
			
				|  |  | +                        .amount(new BigDecimal(temps[4]))
 | 
	
		
			
				|  |  | +                        .rollServerNum(Long.parseLong(temps[5]))
 | 
	
		
			
				|  |  | +                        .rollServerAmountNum(Long.parseLong(temps[6]))
 | 
	
		
			
				|  |  | +                        .rollServerAmount(new BigDecimal(temps[7]))
 | 
	
		
			
				|  |  | +                        .rollServerAmountRate(new BigDecimal(temps[8]))
 | 
	
		
			
				|  |  | +                        .build()
 | 
	
		
			
				|  |  | +                );
 | 
	
		
			
				|  |  | +            } catch (IllegalAccessException e) {
 | 
	
		
			
				|  |  | +                e.printStackTrace();
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  |       * 将vo中的原始String数据修改为一个对象
 | 
	
		
			
				|  |  |       * @param vo 展示给前端的游戏区服数据总计
 | 
	
	
		
			
				|  | @@ -383,144 +590,39 @@ public class GameServerServiceImpl implements IGameServerService {
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  | -     * 计算总计一栏的daN数据
 | 
	
		
			
				|  |  | -     * 注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/ (游戏区服数据)
 | 
	
		
			
				|  |  | -     * DayN活跃人数/ (注册留存数据)/ 注册人数(去除时间未到的数据)
 | 
	
		
			
				|  |  | -     * 第N天的新增付费用户/第N天的老活跃用户/第N天的累计付费用户/第N天的累计活跃用户/ (付费留存数据)
 | 
	
		
			
				|  |  | -     * 第N天的新增创角用户/第N天的老活跃用户/第N天的累计创角用户/第N天的累计活跃用户/ (创角留存数据)
 | 
	
		
			
				|  |  | +     * 将vo中的原始String数据修改为一个对象
 | 
	
		
			
				|  |  | +     * @param vo 展示给前端的游戏区服每日数据总计
 | 
	
		
			
				|  |  |       */
 | 
	
		
			
				|  |  | -    private String trendDay() {
 | 
	
		
			
				|  |  | -        StringBuilder daySql = new StringBuilder(StringUtils.EMPTY);
 | 
	
		
			
				|  |  | -        //拼接da1-da90 sql
 | 
	
		
			
				|  |  | -        for (int i = 1; i <= 90; i++) {
 | 
	
		
			
				|  |  | -            daySql.append("""
 | 
	
		
			
				|  |  | -                    CONCAT(
 | 
	
		
			
				|  |  | -                    	SUM(SPLIT_PART(da%s, '/', 1)), '/',
 | 
	
		
			
				|  |  | -                    	SUM(SPLIT_PART(da%s, '/', 2)), '/',
 | 
	
		
			
				|  |  | -                    	SUM(SPLIT_PART(da%s, '/', 3)), '/',
 | 
	
		
			
				|  |  | -                    	SUM(SPLIT_PART(da%s, '/', 4)), '/',
 | 
	
		
			
				|  |  | -                    	SUM(SPLIT_PART(da%s, '/', 5)), '/',
 | 
	
		
			
				|  |  | -                    	SUM(SPLIT_PART(da%s, '/', 6)), '/',
 | 
	
		
			
				|  |  | -                    	SUM(SPLIT_PART(da%s, '/', 7)), '/',
 | 
	
		
			
				|  |  | -                    	SUM(SPLIT_PART(da%s, '/', 8)), '/',
 | 
	
		
			
				|  |  | -                    	SUM(SPLIT_PART(da%s, '/', 10)), '/',
 | 
	
		
			
				|  |  | -                        SUM(IF(DATE_ADD(dt, INTERVAL %s day) <= Local.now(), total_reg_num, 0)), '/',
 | 
	
		
			
				|  |  | -                        SUM(SPLIT_PART(da%s, '/', 12)), '/',
 | 
	
		
			
				|  |  | -                        SUM(SPLIT_PART(da%s, '/', 13)), '/',
 | 
	
		
			
				|  |  | -                        SUM(IF(DATE_ADD(dt, INTERVAL %s day) <= Local.now(), SPLIT_PART(da%s, '/', 14), 0)), '/',
 | 
	
		
			
				|  |  | -                        SUM(IF(DATE_ADD(dt, INTERVAL %s day) <= Local.now(), SPLIT_PART(da%s, '/', 15), 0))
 | 
	
		
			
				|  |  | -                    ) as da%s ,
 | 
	
		
			
				|  |  | -                    """.formatted(i, i, i, i, i, i, i, i, i, i-1,i ,i, i-1, i, i-1, i, i ));
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        //拼接m4-m12 sql
 | 
	
		
			
				|  |  | -        for (int i = 4; i <= 12; i++) {
 | 
	
		
			
				|  |  | -            daySql.append("""
 | 
	
		
			
				|  |  | -                    CONCAT(
 | 
	
		
			
				|  |  | -                    	SUM(SPLIT_PART(m%s, '/', 1)), '/',
 | 
	
		
			
				|  |  | -                    	SUM(SPLIT_PART(m%s, '/', 2)), '/',
 | 
	
		
			
				|  |  | -                    	SUM(SPLIT_PART(m%s, '/', 3)), '/',
 | 
	
		
			
				|  |  | -                    	SUM(SPLIT_PART(m%s, '/', 4)), '/',
 | 
	
		
			
				|  |  | -                    	SUM(SPLIT_PART(m%s, '/', 5)), '/',
 | 
	
		
			
				|  |  | -                    	SUM(SPLIT_PART(m%s, '/', 6)), '/',
 | 
	
		
			
				|  |  | -                    	SUM(SPLIT_PART(m%s, '/', 7)), '/',
 | 
	
		
			
				|  |  | -                    	SUM(SPLIT_PART(m%s, '/', 8)), '/',
 | 
	
		
			
				|  |  | -                    	SUM(SPLIT_PART(m%s, '/', 10)), '/',
 | 
	
		
			
				|  |  | -                        SUM(IF(DATE_ADD(dt, INTERVAL %s month) <= Local.now(), total_reg_num, 0)), '/',
 | 
	
		
			
				|  |  | -                        SUM(SPLIT_PART(m%s, '/', 12)), '/',
 | 
	
		
			
				|  |  | -                        SUM(SPLIT_PART(m%s, '/', 13)), '/',
 | 
	
		
			
				|  |  | -                        SUM(IF(DATE_ADD(dt, INTERVAL %s month) <= Local.now(), SPLIT_PART(m%s, '/', 14), 0)), '/',
 | 
	
		
			
				|  |  | -                        SUM(IF(DATE_ADD(dt, INTERVAL %s month) <= Local.now(), SPLIT_PART(m%s, '/', 15), 0))
 | 
	
		
			
				|  |  | -                    ) as m%s ,
 | 
	
		
			
				|  |  | -                    """.formatted(i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i));
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        //拼接total
 | 
	
		
			
				|  |  | -        daySql.append("""
 | 
	
		
			
				|  |  | -                    CONCAT(
 | 
	
		
			
				|  |  | -                    	SUM(SPLIT_PART(total, '/', 1)), '/',
 | 
	
		
			
				|  |  | -                    	SUM(SPLIT_PART(total, '/', 2)), '/',
 | 
	
		
			
				|  |  | -                    	SUM(SPLIT_PART(total, '/', 3)), '/',
 | 
	
		
			
				|  |  | -                    	SUM(SPLIT_PART(total, '/', 4)), '/',
 | 
	
		
			
				|  |  | -                    	SUM(SPLIT_PART(total, '/', 5)), '/',
 | 
	
		
			
				|  |  | -                    	SUM(SPLIT_PART(total, '/', 6)), '/',
 | 
	
		
			
				|  |  | -                    	SUM(SPLIT_PART(total, '/', 7)), '/',
 | 
	
		
			
				|  |  | -                    	SUM(SPLIT_PART(total, '/', 8)), '/',
 | 
	
		
			
				|  |  | -                    	SUM(SPLIT_PART(total, '/', 10)), '/',
 | 
	
		
			
				|  |  | -                        SUM(total_reg_num), '/',
 | 
	
		
			
				|  |  | -                        SUM(SPLIT_PART(total, '/', 12)), '/',
 | 
	
		
			
				|  |  | -                        SUM(SPLIT_PART(total, '/', 13)), '/',
 | 
	
		
			
				|  |  | -                        SUM(SPLIT_PART(total, '/', 14)), '/',
 | 
	
		
			
				|  |  | -                        SUM(SPLIT_PART(total, '/', 15))
 | 
	
		
			
				|  |  | -                    ) as total
 | 
	
		
			
				|  |  | -                    """);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        return daySql.toString();
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    private String trendDayDemo1() {
 | 
	
		
			
				|  |  | -        StringBuilder daySql = new StringBuilder(StringUtils.EMPTY);
 | 
	
		
			
				|  |  | -        //拼接da1-da90 sql
 | 
	
		
			
				|  |  | -        for (int i = 1; i <= 90; i++) {
 | 
	
		
			
				|  |  | -            daySql.append("""
 | 
	
		
			
				|  |  | -                    CONCAT(
 | 
	
		
			
				|  |  | -                    	SUM(da%s[1]), '/',
 | 
	
		
			
				|  |  | -                    	SUM(da%s[2]), '/',
 | 
	
		
			
				|  |  | -                    	SUM(da%s[3]), '/',
 | 
	
		
			
				|  |  | -                    	SUM(da%s[4]), '/',
 | 
	
		
			
				|  |  | -                    	SUM(da%s[5]), '/',
 | 
	
		
			
				|  |  | -                    	SUM(da%s[6]), '/',
 | 
	
		
			
				|  |  | -                    	SUM(da%s[7]), '/',
 | 
	
		
			
				|  |  | -                    	SUM(da%s[8]), '/',
 | 
	
		
			
				|  |  | -                    	SUM(da%s[10]), '/',
 | 
	
		
			
				|  |  | -                        SUM(IF(DATE_ADD(dt, INTERVAL %s day) <= Local.now(), total_reg_num, 0)), '/',
 | 
	
		
			
				|  |  | -                        SUM(da%s[12]), '/',
 | 
	
		
			
				|  |  | -                        SUM(da%s[13]), '/',
 | 
	
		
			
				|  |  | -                        SUM(IF(DATE_ADD(dt, INTERVAL %s day) <= Local.now(), da%s[14], 0)), '/',
 | 
	
		
			
				|  |  | -                        SUM(IF(DATE_ADD(dt, INTERVAL %s day) <= Local.now(), da%s[15], 0))
 | 
	
		
			
				|  |  | -                    ) as da%s ,
 | 
	
		
			
				|  |  | -                    """.formatted(i, i, i, i, i, i, i, i, i, i-1,i ,i, i-1, i, i-1, i, i ));
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        //拼接m4-m12 sql
 | 
	
		
			
				|  |  | -        for (int i = 4; i <= 12; i++) {
 | 
	
		
			
				|  |  | -            daySql.append("""
 | 
	
		
			
				|  |  | -                    CONCAT(
 | 
	
		
			
				|  |  | -                    	SUM(m%s[1]), '/',
 | 
	
		
			
				|  |  | -                    	SUM(m%s[2]), '/',
 | 
	
		
			
				|  |  | -                    	SUM(m%s[3]), '/',
 | 
	
		
			
				|  |  | -                    	SUM(m%s[4]), '/',
 | 
	
		
			
				|  |  | -                    	SUM(m%s[5]), '/',
 | 
	
		
			
				|  |  | -                    	SUM(m%s[6]), '/',
 | 
	
		
			
				|  |  | -                    	SUM(m%s[7]), '/',
 | 
	
		
			
				|  |  | -                    	SUM(m%s[8]), '/',
 | 
	
		
			
				|  |  | -                    	SUM(m%s[10]), '/',
 | 
	
		
			
				|  |  | -                        SUM(IF(DATE_ADD(dt, INTERVAL %s month) <= Local.now(), total_reg_num, 0)), '/',
 | 
	
		
			
				|  |  | -                        SUM(m%s[12]), '/',
 | 
	
		
			
				|  |  | -                        SUM(m%s[13]), '/',
 | 
	
		
			
				|  |  | -                        SUM(IF(DATE_ADD(dt, INTERVAL %s month) <= Local.now(), m%s[14], 0)), '/',
 | 
	
		
			
				|  |  | -                        SUM(IF(DATE_ADD(dt, INTERVAL %s month) <= Local.now(), m%s[15], 0))
 | 
	
		
			
				|  |  | -                    ) as m%s ,
 | 
	
		
			
				|  |  | -                    """.formatted(i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i));
 | 
	
		
			
				|  |  | +    private void formatTotalDayNForServerDay(GameServerSumDayTotalVO vo) {
 | 
	
		
			
				|  |  | +        if (CollectionUtils.isEmpty(dayNTotalFieldMapListForServerDay)) {
 | 
	
		
			
				|  |  | +            return;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        //拼接total
 | 
	
		
			
				|  |  | -        daySql.append("""
 | 
	
		
			
				|  |  | -                    CONCAT(
 | 
	
		
			
				|  |  | -                    	SUM(total[1]), '/',
 | 
	
		
			
				|  |  | -                    	SUM(total[2]), '/',
 | 
	
		
			
				|  |  | -                    	SUM(total[3]), '/',
 | 
	
		
			
				|  |  | -                    	SUM(total[4]), '/',
 | 
	
		
			
				|  |  | -                    	SUM(total[5]), '/',
 | 
	
		
			
				|  |  | -                    	SUM(total[6]), '/',
 | 
	
		
			
				|  |  | -                    	SUM(total[7]), '/',
 | 
	
		
			
				|  |  | -                    	SUM(total[8]), '/',
 | 
	
		
			
				|  |  | -                    	SUM(total[10]), '/',
 | 
	
		
			
				|  |  | -                        SUM(total_reg_num), '/',
 | 
	
		
			
				|  |  | -                        SUM(total[12]), '/',
 | 
	
		
			
				|  |  | -                        SUM(total[13]), '/',
 | 
	
		
			
				|  |  | -                        SUM(total[14]), '/',
 | 
	
		
			
				|  |  | -                        SUM(total[15])
 | 
	
		
			
				|  |  | -                    ) as total
 | 
	
		
			
				|  |  | -                    """);
 | 
	
		
			
				|  |  | +        dayNTotalFieldMapListForServerDay.forEach(dayNTotalFieldMap -> {
 | 
	
		
			
				|  |  | +            try {
 | 
	
		
			
				|  |  | +                /*注册人数0/创角人数1/活跃人数2/付费人数3/付费金额4/滚服人数5/滚服付费人数6/滚服付费金额7/ (游戏区服数据)*/
 | 
	
		
			
				|  |  | +                String[] temps = ((String) dayNTotalFieldMap.getT1().get(vo)).split("/");
 | 
	
		
			
				|  |  | +                //付费金额
 | 
	
		
			
				|  |  | +                BigDecimal amount = new BigDecimal(temps[4]);
 | 
	
		
			
				|  |  | +                //滚服付费金额
 | 
	
		
			
				|  |  | +                BigDecimal rollServerAmount = new BigDecimal(temps[7]);
 | 
	
		
			
				|  |  | +                //设置trend对象
 | 
	
		
			
				|  |  | +                dayNTotalFieldMap.getT2().set(vo, GameServerTrendVO.builder()
 | 
	
		
			
				|  |  | +                        .regNum(Long.parseLong(temps[0]))
 | 
	
		
			
				|  |  | +                        .roleNum(Long.parseLong(temps[1]))
 | 
	
		
			
				|  |  | +                        .activeNum(Long.parseLong(temps[2]))
 | 
	
		
			
				|  |  | +                        .amountNum(Long.parseLong(temps[3]))
 | 
	
		
			
				|  |  | +                        .amount(amount)
 | 
	
		
			
				|  |  | +                        .rollServerNum(Long.parseLong(temps[5]))
 | 
	
		
			
				|  |  | +                        .rollServerAmountNum(Long.parseLong(temps[6]))
 | 
	
		
			
				|  |  | +                        .rollServerAmount(rollServerAmount)
 | 
	
		
			
				|  |  | +                        .rollServerAmountRate(amount.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO :
 | 
	
		
			
				|  |  | +                                rollServerAmount.divide(amount, 4, RoundingMode.HALF_UP))
 | 
	
		
			
				|  |  | +                        .build());
 | 
	
		
			
				|  |  | +            } catch (IllegalAccessException e) {
 | 
	
		
			
				|  |  | +                e.printStackTrace();
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        return daySql.toString();
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      /**
 | 
	
	
		
			
				|  | @@ -533,7 +635,7 @@ public class GameServerServiceImpl implements IGameServerService {
 | 
	
		
			
				|  |  |       *
 | 
	
		
			
				|  |  |       * @return String
 | 
	
		
			
				|  |  |       */
 | 
	
		
			
				|  |  | -    private String trendDayDemo2(String activeType) {
 | 
	
		
			
				|  |  | +    private String trendDay(String activeType) {
 | 
	
		
			
				|  |  |          StringBuilder daySql = new StringBuilder(StringUtils.EMPTY);
 | 
	
		
			
				|  |  |          //注册留存数据
 | 
	
		
			
				|  |  |          if ("reg".equals(activeType)) {
 | 
	
	
		
			
				|  | @@ -706,27 +808,80 @@ public class GameServerServiceImpl implements IGameServerService {
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  | -     * 游戏区服数据SQL
 | 
	
		
			
				|  |  | -     * @return String
 | 
	
		
			
				|  |  | +     * 计算总计一栏的daN数据(游戏区服每日总计)
 | 
	
		
			
				|  |  | +     * 注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/ (游戏区服数据)
 | 
	
		
			
				|  |  |       */
 | 
	
		
			
				|  |  | -    private String gameServerDaySql() {
 | 
	
		
			
				|  |  | -        return """
 | 
	
		
			
				|  |  | -                SELECT
 | 
	
		
			
				|  |  | -                    dt,
 | 
	
		
			
				|  |  | -                    source_system,
 | 
	
		
			
				|  |  | -                    server_id,
 | 
	
		
			
				|  |  | -                    server_name,
 | 
	
		
			
				|  |  | -                    game_id,
 | 
	
		
			
				|  |  | -                    game_name,
 | 
	
		
			
				|  |  | -                    classify,
 | 
	
		
			
				|  |  | -                    out_total_num,
 | 
	
		
			
				|  |  | -                    out_total_amount_num,
 | 
	
		
			
				|  |  | -                    out_total_amount,
 | 
	
		
			
				|  |  | -                    out_total_rate,
 | 
	
		
			
				|  |  | -                    total_role_num,
 | 
	
		
			
				|  |  | -                    total_reg_num,
 | 
	
		
			
				|  |  | -                    total_amount_num,
 | 
	
		
			
				|  |  | -                    total_amount,
 | 
	
		
			
				|  |  | +    private String trendDayForServerDay() {
 | 
	
		
			
				|  |  | +        StringBuilder daySql = new StringBuilder(StringUtils.EMPTY);
 | 
	
		
			
				|  |  | +        //拼接da1-da90 sql
 | 
	
		
			
				|  |  | +        for (int i = 1; i <= 90; i++) {
 | 
	
		
			
				|  |  | +            daySql.append("""
 | 
	
		
			
				|  |  | +                    CONCAT(
 | 
	
		
			
				|  |  | +                    	SUM(da%s[1]), '/',
 | 
	
		
			
				|  |  | +                    	SUM(da%s[2]), '/',
 | 
	
		
			
				|  |  | +                    	SUM(da%s[3]), '/',
 | 
	
		
			
				|  |  | +                    	SUM(da%s[4]), '/',
 | 
	
		
			
				|  |  | +                    	SUM(da%s[5]), '/',
 | 
	
		
			
				|  |  | +                    	SUM(da%s[6]), '/',
 | 
	
		
			
				|  |  | +                    	SUM(da%s[7]), '/',
 | 
	
		
			
				|  |  | +                    	SUM(da%s[8])
 | 
	
		
			
				|  |  | +                    ) as da%s ,
 | 
	
		
			
				|  |  | +                    """.formatted(i, i, i, i, i, i, i, i, i));
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //拼接m4-m12 sql
 | 
	
		
			
				|  |  | +        for (int i = 4; i <= 12; i++) {
 | 
	
		
			
				|  |  | +            daySql.append("""
 | 
	
		
			
				|  |  | +                    CONCAT(
 | 
	
		
			
				|  |  | +                    	SUM(m%s[1]), '/',
 | 
	
		
			
				|  |  | +                    	SUM(m%s[2]), '/',
 | 
	
		
			
				|  |  | +                    	SUM(m%s[3]), '/',
 | 
	
		
			
				|  |  | +                    	SUM(m%s[4]), '/',
 | 
	
		
			
				|  |  | +                    	SUM(m%s[5]), '/',
 | 
	
		
			
				|  |  | +                    	SUM(m%s[6]), '/',
 | 
	
		
			
				|  |  | +                    	SUM(m%s[7]), '/',
 | 
	
		
			
				|  |  | +                    	SUM(m%s[8])
 | 
	
		
			
				|  |  | +                    ) as m%s ,
 | 
	
		
			
				|  |  | +                    """.formatted(i, i, i, i, i, i, i, i, i));
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //拼接total
 | 
	
		
			
				|  |  | +        daySql.append("""
 | 
	
		
			
				|  |  | +                    CONCAT(
 | 
	
		
			
				|  |  | +                    	SUM(total[1]), '/',
 | 
	
		
			
				|  |  | +                    	SUM(total[2]), '/',
 | 
	
		
			
				|  |  | +                    	SUM(total[3]), '/',
 | 
	
		
			
				|  |  | +                    	SUM(total[4]), '/',
 | 
	
		
			
				|  |  | +                    	SUM(total[5]), '/',
 | 
	
		
			
				|  |  | +                    	SUM(total[6]), '/',
 | 
	
		
			
				|  |  | +                    	SUM(total[7]), '/',
 | 
	
		
			
				|  |  | +                    	SUM(total[8])
 | 
	
		
			
				|  |  | +                    ) as total
 | 
	
		
			
				|  |  | +                    """);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        return daySql.toString();
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 游戏区服数据SQL
 | 
	
		
			
				|  |  | +     * @return String
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    private String gameServerDaySql() {
 | 
	
		
			
				|  |  | +        return """
 | 
	
		
			
				|  |  | +                SELECT
 | 
	
		
			
				|  |  | +                    dt,
 | 
	
		
			
				|  |  | +                    source_system,
 | 
	
		
			
				|  |  | +                    server_id,
 | 
	
		
			
				|  |  | +                    server_name,
 | 
	
		
			
				|  |  | +                    game_id,
 | 
	
		
			
				|  |  | +                    game_name,
 | 
	
		
			
				|  |  | +                    classify,
 | 
	
		
			
				|  |  | +                    out_total_num,
 | 
	
		
			
				|  |  | +                    out_total_amount_num,
 | 
	
		
			
				|  |  | +                    out_total_amount,
 | 
	
		
			
				|  |  | +                    out_total_rate,
 | 
	
		
			
				|  |  | +                    total_role_num,
 | 
	
		
			
				|  |  | +                    total_reg_num,
 | 
	
		
			
				|  |  | +                    total_amount_num,
 | 
	
		
			
				|  |  | +                    total_amount,
 | 
	
		
			
				|  |  |                      da1,
 | 
	
		
			
				|  |  |                      da2,
 | 
	
		
			
				|  |  |                      da3,
 | 
	
	
		
			
				|  | @@ -832,6 +987,134 @@ public class GameServerServiceImpl implements IGameServerService {
 | 
	
		
			
				|  |  |                  """;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 游戏区服每日数据SQL
 | 
	
		
			
				|  |  | +     * @return String
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    private String gameServerSumDaySql() {
 | 
	
		
			
				|  |  | +        return """
 | 
	
		
			
				|  |  | +                SELECT
 | 
	
		
			
				|  |  | +                    id,
 | 
	
		
			
				|  |  | +                    dt,
 | 
	
		
			
				|  |  | +                    source_system,
 | 
	
		
			
				|  |  | +                    server_id,
 | 
	
		
			
				|  |  | +                    server_name,
 | 
	
		
			
				|  |  | +                    game_id,
 | 
	
		
			
				|  |  | +                    game_name,
 | 
	
		
			
				|  |  | +                    classify,
 | 
	
		
			
				|  |  | +                    out_total_num,
 | 
	
		
			
				|  |  | +                    out_total_amount_num,
 | 
	
		
			
				|  |  | +                    out_total_amount,
 | 
	
		
			
				|  |  | +                    out_total_rate,
 | 
	
		
			
				|  |  | +                    total_role_num,
 | 
	
		
			
				|  |  | +                    total_reg_num,
 | 
	
		
			
				|  |  | +                    total_amount_num,
 | 
	
		
			
				|  |  | +                    total_amount,
 | 
	
		
			
				|  |  | +                    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,
 | 
	
		
			
				|  |  | +                    da31,
 | 
	
		
			
				|  |  | +                    da32,
 | 
	
		
			
				|  |  | +                    da33,
 | 
	
		
			
				|  |  | +                    da34,
 | 
	
		
			
				|  |  | +                    da35,
 | 
	
		
			
				|  |  | +                    da36,
 | 
	
		
			
				|  |  | +                    da37,
 | 
	
		
			
				|  |  | +                    da38,
 | 
	
		
			
				|  |  | +                    da39,
 | 
	
		
			
				|  |  | +                    da40,
 | 
	
		
			
				|  |  | +                    da41,
 | 
	
		
			
				|  |  | +                    da42,
 | 
	
		
			
				|  |  | +                    da43,
 | 
	
		
			
				|  |  | +                    da44,
 | 
	
		
			
				|  |  | +                    da45,
 | 
	
		
			
				|  |  | +                    da46,
 | 
	
		
			
				|  |  | +                    da47,
 | 
	
		
			
				|  |  | +                    da48,
 | 
	
		
			
				|  |  | +                    da49,
 | 
	
		
			
				|  |  | +                    da50,
 | 
	
		
			
				|  |  | +                    da51,
 | 
	
		
			
				|  |  | +                    da52,
 | 
	
		
			
				|  |  | +                    da53,
 | 
	
		
			
				|  |  | +                    da54,
 | 
	
		
			
				|  |  | +                    da55,
 | 
	
		
			
				|  |  | +                    da56,
 | 
	
		
			
				|  |  | +                    da57,
 | 
	
		
			
				|  |  | +                    da58,
 | 
	
		
			
				|  |  | +                    da59,
 | 
	
		
			
				|  |  | +                    da60,
 | 
	
		
			
				|  |  | +                    da61,
 | 
	
		
			
				|  |  | +                    da62,
 | 
	
		
			
				|  |  | +                    da63,
 | 
	
		
			
				|  |  | +                    da64,
 | 
	
		
			
				|  |  | +                    da65,
 | 
	
		
			
				|  |  | +                    da66,
 | 
	
		
			
				|  |  | +                    da67,
 | 
	
		
			
				|  |  | +                    da68,
 | 
	
		
			
				|  |  | +                    da69,
 | 
	
		
			
				|  |  | +                    da70,
 | 
	
		
			
				|  |  | +                    da71,
 | 
	
		
			
				|  |  | +                    da72,
 | 
	
		
			
				|  |  | +                    da73,
 | 
	
		
			
				|  |  | +                    da74,
 | 
	
		
			
				|  |  | +                    da75,
 | 
	
		
			
				|  |  | +                    da76,
 | 
	
		
			
				|  |  | +                    da77,
 | 
	
		
			
				|  |  | +                    da78,
 | 
	
		
			
				|  |  | +                    da79,
 | 
	
		
			
				|  |  | +                    da80,
 | 
	
		
			
				|  |  | +                    da81,
 | 
	
		
			
				|  |  | +                    da82,
 | 
	
		
			
				|  |  | +                    da83,
 | 
	
		
			
				|  |  | +                    da84,
 | 
	
		
			
				|  |  | +                    da85,
 | 
	
		
			
				|  |  | +                    da86,
 | 
	
		
			
				|  |  | +                    da87,
 | 
	
		
			
				|  |  | +                    da88,
 | 
	
		
			
				|  |  | +                    da89,
 | 
	
		
			
				|  |  | +                    da90,
 | 
	
		
			
				|  |  | +                    m4,
 | 
	
		
			
				|  |  | +                    m5,
 | 
	
		
			
				|  |  | +                    m6,
 | 
	
		
			
				|  |  | +                    m7,
 | 
	
		
			
				|  |  | +                    m8,
 | 
	
		
			
				|  |  | +                    m9,
 | 
	
		
			
				|  |  | +                    m10,
 | 
	
		
			
				|  |  | +                    m11,
 | 
	
		
			
				|  |  | +                    m12,
 | 
	
		
			
				|  |  | +                    total
 | 
	
		
			
				|  |  | +                FROM
 | 
	
		
			
				|  |  | +                    game_ads.ads_game_server_day_sum
 | 
	
		
			
				|  |  | +                """;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  |       * 游戏区服数据总计SQL
 | 
	
		
			
				|  |  |       * @param activeType 查询的留存类型 reg -> 注册留存 ; role -> 角色留存 ; amount -> 付费留存
 | 
	
	
		
			
				|  | @@ -849,7 +1132,7 @@ public class GameServerServiceImpl implements IGameServerService {
 | 
	
		
			
				|  |  |                      IFNULL(SUM(total_reg_num), 0) as total_reg_num,
 | 
	
		
			
				|  |  |                      IFNULL(SUM(total_amount_num), 0) as total_amount_num,
 | 
	
		
			
				|  |  |                      IFNULL(SUM(total_amount), 0) as total_amount,
 | 
	
		
			
				|  |  | -                """ + trendDayDemo2(activeType) +
 | 
	
		
			
				|  |  | +                """ + trendDay(activeType) +
 | 
	
		
			
				|  |  |                  """
 | 
	
		
			
				|  |  |                  FROM (
 | 
	
		
			
				|  |  |                      SELECT
 | 
	
	
		
			
				|  | @@ -974,5 +1257,146 @@ public class GameServerServiceImpl implements IGameServerService {
 | 
	
		
			
				|  |  |                          """;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 游戏区服每日数据总计SQL
 | 
	
		
			
				|  |  | +     *
 | 
	
		
			
				|  |  | +     * @return String
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    private String gameServerSumDayTotalSql() {
 | 
	
		
			
				|  |  | +        return """
 | 
	
		
			
				|  |  | +                SELECT
 | 
	
		
			
				|  |  | +                    IFNULL(SUM(out_total_num), 0) as out_total_num,
 | 
	
		
			
				|  |  | +                    IFNULL(SUM(out_total_amount_num), 0) as out_total_amount_num,
 | 
	
		
			
				|  |  | +                    IFNULL(SUM(out_total_amount), 0) as out_total_amount,
 | 
	
		
			
				|  |  | +                    ROUND(IF(SUM(total_amount) > 0, SUM(out_total_amount) / SUM(total_amount), 0), 4) as out_total_rate,
 | 
	
		
			
				|  |  | +                    IFNULL(SUM(total_role_num), 0) as total_role_num,
 | 
	
		
			
				|  |  | +                    IFNULL(SUM(total_reg_num), 0) as total_reg_num,
 | 
	
		
			
				|  |  | +                    IFNULL(SUM(total_amount_num), 0) as total_amount_num,
 | 
	
		
			
				|  |  | +                    IFNULL(SUM(total_amount), 0) as total_amount,
 | 
	
		
			
				|  |  | +                """ + trendDayForServerDay() +
 | 
	
		
			
				|  |  | +                """
 | 
	
		
			
				|  |  | +                FROM (
 | 
	
		
			
				|  |  | +                    SELECT
 | 
	
		
			
				|  |  | +                        dt,
 | 
	
		
			
				|  |  | +                        source_system,
 | 
	
		
			
				|  |  | +                        server_id,
 | 
	
		
			
				|  |  | +                        server_name,
 | 
	
		
			
				|  |  | +                        game_id,
 | 
	
		
			
				|  |  | +                        game_name,
 | 
	
		
			
				|  |  | +                        classify,
 | 
	
		
			
				|  |  | +                        out_total_num,
 | 
	
		
			
				|  |  | +                        out_total_amount_num,
 | 
	
		
			
				|  |  | +                        out_total_amount,
 | 
	
		
			
				|  |  | +                        out_total_rate,
 | 
	
		
			
				|  |  | +                        total_role_num,
 | 
	
		
			
				|  |  | +                        total_reg_num,
 | 
	
		
			
				|  |  | +                        total_amount_num,
 | 
	
		
			
				|  |  | +                        total_amount,
 | 
	
		
			
				|  |  | +                        SPLIT(da1, '/') as da1,
 | 
	
		
			
				|  |  | +                        SPLIT(da2, '/') as da2,
 | 
	
		
			
				|  |  | +                        SPLIT(da3, '/') as da3,
 | 
	
		
			
				|  |  | +                        SPLIT(da4, '/') as da4,
 | 
	
		
			
				|  |  | +                        SPLIT(da5, '/') as da5,
 | 
	
		
			
				|  |  | +                        SPLIT(da6, '/') as da6,
 | 
	
		
			
				|  |  | +                        SPLIT(da7, '/') as da7,
 | 
	
		
			
				|  |  | +                        SPLIT(da8, '/') as da8,
 | 
	
		
			
				|  |  | +                        SPLIT(da9, '/') as da9,
 | 
	
		
			
				|  |  | +                        SPLIT(da10, '/') as da10,
 | 
	
		
			
				|  |  | +                        SPLIT(da11, '/') as da11,
 | 
	
		
			
				|  |  | +                        SPLIT(da12, '/') as da12,
 | 
	
		
			
				|  |  | +                        SPLIT(da13, '/') as da13,
 | 
	
		
			
				|  |  | +                        SPLIT(da14, '/') as da14,
 | 
	
		
			
				|  |  | +                        SPLIT(da15, '/') as da15,
 | 
	
		
			
				|  |  | +                        SPLIT(da16, '/') as da16,
 | 
	
		
			
				|  |  | +                        SPLIT(da17, '/') as da17,
 | 
	
		
			
				|  |  | +                        SPLIT(da18, '/') as da18,
 | 
	
		
			
				|  |  | +                        SPLIT(da19, '/') as da19,
 | 
	
		
			
				|  |  | +                        SPLIT(da20, '/') as da20,
 | 
	
		
			
				|  |  | +                        SPLIT(da21, '/') as da21,
 | 
	
		
			
				|  |  | +                        SPLIT(da22, '/') as da22,
 | 
	
		
			
				|  |  | +                        SPLIT(da23, '/') as da23,
 | 
	
		
			
				|  |  | +                        SPLIT(da24, '/') as da24,
 | 
	
		
			
				|  |  | +                        SPLIT(da25, '/') as da25,
 | 
	
		
			
				|  |  | +                        SPLIT(da26, '/') as da26,
 | 
	
		
			
				|  |  | +                        SPLIT(da27, '/') as da27,
 | 
	
		
			
				|  |  | +                        SPLIT(da28, '/') as da28,
 | 
	
		
			
				|  |  | +                        SPLIT(da29, '/') as da29,
 | 
	
		
			
				|  |  | +                        SPLIT(da30, '/') as da30,
 | 
	
		
			
				|  |  | +                        SPLIT(da31, '/') as da31,
 | 
	
		
			
				|  |  | +                        SPLIT(da32, '/') as da32,
 | 
	
		
			
				|  |  | +                        SPLIT(da33, '/') as da33,
 | 
	
		
			
				|  |  | +                        SPLIT(da34, '/') as da34,
 | 
	
		
			
				|  |  | +                        SPLIT(da35, '/') as da35,
 | 
	
		
			
				|  |  | +                        SPLIT(da36, '/') as da36,
 | 
	
		
			
				|  |  | +                        SPLIT(da37, '/') as da37,
 | 
	
		
			
				|  |  | +                        SPLIT(da38, '/') as da38,
 | 
	
		
			
				|  |  | +                        SPLIT(da39, '/') as da39,
 | 
	
		
			
				|  |  | +                        SPLIT(da40, '/') as da40,
 | 
	
		
			
				|  |  | +                        SPLIT(da41, '/') as da41,
 | 
	
		
			
				|  |  | +                        SPLIT(da42, '/') as da42,
 | 
	
		
			
				|  |  | +                        SPLIT(da43, '/') as da43,
 | 
	
		
			
				|  |  | +                        SPLIT(da44, '/') as da44,
 | 
	
		
			
				|  |  | +                        SPLIT(da45, '/') as da45,
 | 
	
		
			
				|  |  | +                        SPLIT(da46, '/') as da46,
 | 
	
		
			
				|  |  | +                        SPLIT(da47, '/') as da47,
 | 
	
		
			
				|  |  | +                        SPLIT(da48, '/') as da48,
 | 
	
		
			
				|  |  | +                        SPLIT(da49, '/') as da49,
 | 
	
		
			
				|  |  | +                        SPLIT(da50, '/') as da50,
 | 
	
		
			
				|  |  | +                        SPLIT(da51, '/') as da51,
 | 
	
		
			
				|  |  | +                        SPLIT(da52, '/') as da52,
 | 
	
		
			
				|  |  | +                        SPLIT(da53, '/') as da53,
 | 
	
		
			
				|  |  | +                        SPLIT(da54, '/') as da54,
 | 
	
		
			
				|  |  | +                        SPLIT(da55, '/') as da55,
 | 
	
		
			
				|  |  | +                        SPLIT(da56, '/') as da56,
 | 
	
		
			
				|  |  | +                        SPLIT(da57, '/') as da57,
 | 
	
		
			
				|  |  | +                        SPLIT(da58, '/') as da58,
 | 
	
		
			
				|  |  | +                        SPLIT(da59, '/') as da59,
 | 
	
		
			
				|  |  | +                        SPLIT(da60, '/') as da60,
 | 
	
		
			
				|  |  | +                        SPLIT(da61, '/') as da61,
 | 
	
		
			
				|  |  | +                        SPLIT(da62, '/') as da62,
 | 
	
		
			
				|  |  | +                        SPLIT(da63, '/') as da63,
 | 
	
		
			
				|  |  | +                        SPLIT(da64, '/') as da64,
 | 
	
		
			
				|  |  | +                        SPLIT(da65, '/') as da65,
 | 
	
		
			
				|  |  | +                        SPLIT(da66, '/') as da66,
 | 
	
		
			
				|  |  | +                        SPLIT(da67, '/') as da67,
 | 
	
		
			
				|  |  | +                        SPLIT(da68, '/') as da68,
 | 
	
		
			
				|  |  | +                        SPLIT(da69, '/') as da69,
 | 
	
		
			
				|  |  | +                        SPLIT(da70, '/') as da70,
 | 
	
		
			
				|  |  | +                        SPLIT(da71, '/') as da71,
 | 
	
		
			
				|  |  | +                        SPLIT(da72, '/') as da72,
 | 
	
		
			
				|  |  | +                        SPLIT(da73, '/') as da73,
 | 
	
		
			
				|  |  | +                        SPLIT(da74, '/') as da74,
 | 
	
		
			
				|  |  | +                        SPLIT(da75, '/') as da75,
 | 
	
		
			
				|  |  | +                        SPLIT(da76, '/') as da76,
 | 
	
		
			
				|  |  | +                        SPLIT(da77, '/') as da77,
 | 
	
		
			
				|  |  | +                        SPLIT(da78, '/') as da78,
 | 
	
		
			
				|  |  | +                        SPLIT(da79, '/') as da79,
 | 
	
		
			
				|  |  | +                        SPLIT(da80, '/') as da80,
 | 
	
		
			
				|  |  | +                        SPLIT(da81, '/') as da81,
 | 
	
		
			
				|  |  | +                        SPLIT(da82, '/') as da82,
 | 
	
		
			
				|  |  | +                        SPLIT(da83, '/') as da83,
 | 
	
		
			
				|  |  | +                        SPLIT(da84, '/') as da84,
 | 
	
		
			
				|  |  | +                        SPLIT(da85, '/') as da85,
 | 
	
		
			
				|  |  | +                        SPLIT(da86, '/') as da86,
 | 
	
		
			
				|  |  | +                        SPLIT(da87, '/') as da87,
 | 
	
		
			
				|  |  | +                        SPLIT(da88, '/') as da88,
 | 
	
		
			
				|  |  | +                        SPLIT(da89, '/') as da89,
 | 
	
		
			
				|  |  | +                        SPLIT(da90, '/') as da90,
 | 
	
		
			
				|  |  | +                        SPLIT(m4, '/') as m4,
 | 
	
		
			
				|  |  | +                        SPLIT(m5, '/') as m5,
 | 
	
		
			
				|  |  | +                        SPLIT(m6, '/') as m6,
 | 
	
		
			
				|  |  | +                        SPLIT(m7, '/') as m7,
 | 
	
		
			
				|  |  | +                        SPLIT(m8, '/') as m8,
 | 
	
		
			
				|  |  | +                        SPLIT(m9, '/') as m9,
 | 
	
		
			
				|  |  | +                        SPLIT(m10, '/') as m10,
 | 
	
		
			
				|  |  | +                        SPLIT(m11, '/') as m11,
 | 
	
		
			
				|  |  | +                        SPLIT(m12, '/') as m12,
 | 
	
		
			
				|  |  | +                        SPLIT(total, '/') as total
 | 
	
		
			
				|  |  | +                    FROM
 | 
	
		
			
				|  |  | +                        game_ads.ads_game_server_day_sum
 | 
	
		
			
				|  |  | +                ) a
 | 
	
		
			
				|  |  | +                        """;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  }
 |