|  | @@ -1,7 +1,9 @@
 | 
	
		
			
				|  |  |  package com.fs.statis.service.utils;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +import com.fs.statis.dto.RewardMoneyTrendDTO;
 | 
	
		
			
				|  |  |  import com.fs.statis.dto.WatchEndPlayTrendDTO;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +import java.math.BigDecimal;
 | 
	
		
			
				|  |  |  import java.time.LocalDate;
 | 
	
		
			
				|  |  |  import java.time.format.DateTimeFormatter;
 | 
	
		
			
				|  |  |  import java.util.Collections;
 | 
	
	
		
			
				|  | @@ -12,6 +14,79 @@ import java.util.List;
 | 
	
		
			
				|  |  |   * 时序数据补全工具类
 | 
	
		
			
				|  |  |   */
 | 
	
		
			
				|  |  |  public class TrendDataFiller {
 | 
	
		
			
				|  |  | +    public static List<RewardMoneyTrendDTO> fillRewardHourData(List<RewardMoneyTrendDTO> data){
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        boolean[] hourExists = new boolean[24];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        for (RewardMoneyTrendDTO dto : data) {
 | 
	
		
			
				|  |  | +            int hour = Integer.parseInt(dto.getStartDate());
 | 
	
		
			
				|  |  | +            if (hour >= 0 && hour < 24) {
 | 
	
		
			
				|  |  | +                hourExists[hour] = true;
 | 
	
		
			
				|  |  | +                dto.setX(String.valueOf(hour));
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 填充不存在的小时数据
 | 
	
		
			
				|  |  | +        for (int i = 0; i < 24; i++) {
 | 
	
		
			
				|  |  | +            if (!hourExists[i]) {
 | 
	
		
			
				|  |  | +                RewardMoneyTrendDTO dto = new RewardMoneyTrendDTO();
 | 
	
		
			
				|  |  | +                dto.setX(String.valueOf(i));
 | 
	
		
			
				|  |  | +                dto.setRewardMoney(BigDecimal.ZERO);
 | 
	
		
			
				|  |  | +                data.add(dto);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        data.sort((a, b) -> {
 | 
	
		
			
				|  |  | +            int intA = Integer.parseInt(a.getX());
 | 
	
		
			
				|  |  | +            int intB = Integer.parseInt(b.getX());
 | 
	
		
			
				|  |  | +            return Integer.compare(intA, intB);
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +        return data;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 填充日期段数据
 | 
	
		
			
				|  |  | +     * @param data
 | 
	
		
			
				|  |  | +     * @return
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    public static List<RewardMoneyTrendDTO> fillRewardDateSegmentData(List<RewardMoneyTrendDTO> data,String startDate,String endDate){
 | 
	
		
			
				|  |  | +        DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
 | 
	
		
			
				|  |  | +        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
 | 
	
		
			
				|  |  | +        LocalDate start = LocalDate.parse(startDate, dateTimeFormatter);
 | 
	
		
			
				|  |  | +        LocalDate end = LocalDate.parse(endDate, dateTimeFormatter);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        LocalDate current = start;
 | 
	
		
			
				|  |  | +        while (!current.isAfter(end)) {
 | 
	
		
			
				|  |  | +            String dateStr = current.format(dateFormatter);
 | 
	
		
			
				|  |  | +            boolean found = false;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            for (RewardMoneyTrendDTO dto : data) {
 | 
	
		
			
				|  |  | +                if (dateStr.equals(dto.getStartDate())) {
 | 
	
		
			
				|  |  | +                    found = true;
 | 
	
		
			
				|  |  | +                    dto.setX(dateStr);
 | 
	
		
			
				|  |  | +                    break;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            if (!found) {
 | 
	
		
			
				|  |  | +                RewardMoneyTrendDTO dto = new RewardMoneyTrendDTO();
 | 
	
		
			
				|  |  | +                dto.setStartDate(dateStr);
 | 
	
		
			
				|  |  | +                dto.setX(dateStr);
 | 
	
		
			
				|  |  | +                dto.setRewardMoney(BigDecimal.ZERO);
 | 
	
		
			
				|  |  | +                data.add(dto);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            current = current.plusDays(1);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        data.sort((a, b) -> {
 | 
	
		
			
				|  |  | +            LocalDate dateA = LocalDate.parse(a.getX(), dateFormatter);
 | 
	
		
			
				|  |  | +            LocalDate dateB = LocalDate.parse(b.getX(), dateFormatter);
 | 
	
		
			
				|  |  | +            return dateA.compareTo(dateB);
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        return data;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  |       * 填充24小时类数据
 |