Browse Source

提供五种数据的,最新数据获取工具类

tl 6 tháng trước cách đây
mục cha
commit
374c10c2d2

+ 21 - 1
cpp-admin/src/main/java/com/cpp/web/job/ScheduledJob.java

@@ -1,15 +1,18 @@
 package com.cpp.web.job;
 
+import com.cpp.common.utils.spring.SpringUtils;
 import com.cpp.system.service.ISysConfigService;
 import com.cpp.web.domain.datafactory.enums.FileTypeEnum;
 import com.cpp.web.domain.enums.AlarmEnum;
 import com.cpp.web.domain.enums.DataSourcesEnum;
-import com.cpp.web.domain.station.ElectricField;
+import com.cpp.web.domain.station.*;
 import com.cpp.web.service.accuracy.CalcAccuracy;
 import com.cpp.web.service.alarm.AlarmLog;
 import com.cpp.web.service.cloud.CloudFileParsing;
+import com.cpp.web.service.datafactory.DataStore;
 import com.cpp.web.service.datafactory.ParsingLogService;
 import com.cpp.web.service.datafactory.SftpFileParsing;
+import com.cpp.web.service.station.ElectricFieldService;
 import com.cpp.web.utils.LogUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -110,8 +113,25 @@ public class ScheduledJob implements ApplicationRunner {
     }
 
 
+//    /**
+//     * 告警消纳定时任务
+//     */
+//    @Scheduled(fixedRate = 60000L)
+//    public void aaa() {
+//        for (ElectricField electricField : SpringUtils.getBean(ElectricFieldService.class).list()) {
+//            System.out.println(electricField.getStationCode());
+//            System.out.println(DataStore.getInstance().getData(electricField.getStationCode(), ForecastPowerShortTermStation.class).getTime());
+//            System.out.println(DataStore.getInstance().getData(electricField.getStationCode(), ForecastPowerUltraShortTermStation.class).getTime());
+//            System.out.println(DataStore.getInstance().getData(electricField.getStationCode(), PowerStationStatusData.class).getTime());
+//            System.out.println(DataStore.getInstance().getData(electricField.getStationCode(), WindTowerStatusData.class).getTime());
+//            System.out.println(DataStore.getInstance().getData(electricField.getStationCode(), WeatherStationStatusData.class).getTime());
+//        }
+//    }
+
+
     @Override
     public void run(ApplicationArguments args) throws Exception {
         AlarmLog.getInstance().initMap();
+        DataStore.getInstance().init();
     }
 }

+ 149 - 0
cpp-admin/src/main/java/com/cpp/web/service/datafactory/DataStore.java

@@ -0,0 +1,149 @@
+package com.cpp.web.service.datafactory;
+
+import com.cpp.common.utils.spring.SpringUtils;
+import com.cpp.system.service.ISysConfigService;
+import com.cpp.web.domain.station.*;
+import com.cpp.web.service.station.*;
+import com.cpp.web.utils.DateTimeUtil;
+
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Collectors;
+
+public class DataStore {
+
+
+    Map<String, Object> map = new ConcurrentHashMap<>();
+
+    public static final DataStore getInstance() {
+        return DataStore.LazyHolder.INSTANCE;
+    }
+
+    private static class LazyHolder {
+        private static final DataStore INSTANCE = new DataStore();
+    }
+
+
+    public <T> void setData(List<T> t, String stationCode) {
+        this.map.put(stationCode + t.get(0).getClass().getName(), t);
+    }
+
+
+    public <T> T getData(String stationCode, Class<T> clazz) {
+        Object o = this.map.get(stationCode + clazz.getName());
+        if (o!=null){
+            Date date = null;
+            if (ForecastPowerShortTermStation.class.equals(clazz)) {
+                List<ForecastPowerShortTermStation> forecastPowerShortTermStationList = ((List<ForecastPowerShortTermStation>) o);
+                date = DateTimeUtil.getMomentTimeFor15Minute(System.currentTimeMillis());
+                Date finalDate1 = date;
+                List<ForecastPowerShortTermStation> forecastPowerShortTermStations = forecastPowerShortTermStationList.stream().filter(f -> f.getTime().equals(finalDate1)).collect(Collectors.toList());
+                if (forecastPowerShortTermStations.size() > 0) {
+                    return (T) forecastPowerShortTermStations.get(0);
+                } else {
+                    return null;
+                }
+            } else if (ForecastPowerUltraShortTermStation.class.equals(clazz)) {
+                List<ForecastPowerUltraShortTermStation> forecastPowerUltraShortTermStationList = ((List<ForecastPowerUltraShortTermStation>) o);
+                date = DateTimeUtil.getMomentTimeFor15Minute(System.currentTimeMillis());
+                Date finalDate = date;
+                List<ForecastPowerUltraShortTermStation> forecastPowerUltraShortTermStations = forecastPowerUltraShortTermStationList.stream().filter(f -> f.getTime().equals(finalDate)).collect(Collectors.toList());
+                if (forecastPowerUltraShortTermStations.size() > 0) {
+                    return (T) forecastPowerUltraShortTermStations.get(0);
+                } else {
+                    return null;
+                }
+            } else if (PowerStationStatusData.class.equals(clazz) || WeatherStationStatusData.class.equals(clazz) || WindTowerStatusData.class.equals(clazz)) {
+                return ((List<T>) o).get(0);
+            }
+
+        }
+
+        return null;
+
+    }
+
+    public void init() {
+
+
+        ISysConfigService configService = SpringUtils.getBean(ISysConfigService.class);
+        ElectricFieldService electricFieldService = SpringUtils.getBean(ElectricFieldService.class);
+        PowerStationStatusDataService powerStationStatusDataService = SpringUtils.getBean(PowerStationStatusDataService.class);
+        ForecastPowerShortTermStationService forecastPowerShortTermStationService = SpringUtils.getBean(ForecastPowerShortTermStationService.class);
+        ForecastPowerUltraShortTermStationService forecastPowerUltraShortTermStationService = SpringUtils.getBean(ForecastPowerUltraShortTermStationService.class);
+        WindTowerStatusDataService windTowerStatusDataService = SpringUtils.getBean(WindTowerStatusDataService.class);
+        WeatherStationStatusDataService weatherStationStatusDataService = SpringUtils.getBean(WeatherStationStatusDataService.class);
+
+        List<ElectricField> electricFieldList = electricFieldService.list();
+
+        Date dayStartTime = DateTimeUtil.getDayStartTime(System.currentTimeMillis());
+        //不清楚短期是否解析过,多查询一天直接置入
+        Date dayEndTime = DateTimeUtil.getDayLastTime(System.currentTimeMillis() + 86400000L);
+
+
+        if (electricFieldList.size() > 0) {
+
+
+            int dqAgo = 1;
+            try {
+                String dqHowLongAgo = configService.selectConfigByKey("dqHowLongAgo");
+                dqAgo = Integer.parseInt(dqHowLongAgo);
+            } catch (Exception e) {
+
+            }
+
+
+            int cdqAgo = 1;
+            try {
+                String cdqHowLongAgo = configService.selectConfigByKey("cdqHowLongAgo");
+                cdqAgo = Integer.parseInt(cdqHowLongAgo);
+            } catch (Exception e) {
+
+            }
+
+            Map<String, List<PowerStationStatusData>> powerStationStatusDataListMap = powerStationStatusDataService.findByTimeBetween(dayStartTime, dayEndTime).stream().collect(Collectors.groupingBy(PowerStationStatusData::getStationCode, Collectors.toList()));
+            Map<String, List<ForecastPowerShortTermStation>> forecastPowerShortTermStationListMap = forecastPowerShortTermStationService.findByForecastTimeBetweenAndHowLongAgo(dayStartTime, dayEndTime, dqAgo).stream().collect(Collectors.groupingBy(ForecastPowerShortTermStation::getStationCode, Collectors.toList()));
+            Map<String, List<ForecastPowerUltraShortTermStation>> forecastPowerUltraShortTermStationListMap = forecastPowerUltraShortTermStationService.findByForecastTimeBetweenAndHowLongAgo(dayStartTime, dayEndTime, cdqAgo).stream().collect(Collectors.groupingBy(ForecastPowerUltraShortTermStation::getStationCode, Collectors.toList()));
+            Map<String, List<WindTowerStatusData>> windTowerStatusDataListMap = windTowerStatusDataService.findByBetweenTimeAndStationCode(dayStartTime, dayEndTime, null).stream().collect(Collectors.groupingBy(WindTowerStatusData::getStationCode, Collectors.toList()));
+            Map<String, List<WeatherStationStatusData>> weatherStationStatusDataListMap = weatherStationStatusDataService.findByBetweenTimeAndStationCode(dayStartTime, dayEndTime, null).stream().collect(Collectors.groupingBy(WeatherStationStatusData::getStationCode, Collectors.toList()));
+
+
+            for (ElectricField electricField : electricFieldList) {
+                String stationCode = electricField.getStationCode();
+                if (powerStationStatusDataListMap.containsKey(stationCode)) {
+                    PowerStationStatusData powerStationStatusData = powerStationStatusDataListMap.get(stationCode).stream().max(Comparator.comparing(p -> p.getTime().getTime())).get();
+                    setData(Arrays.asList(powerStationStatusData), stationCode);
+                }
+
+
+                if (electricField.getElectricFieldTypeEnum().equals("E2") && windTowerStatusDataListMap.containsKey(stationCode)) {
+                    WindTowerStatusData windTowerStatusData = windTowerStatusDataListMap.get(stationCode).stream().max(Comparator.comparing(p -> p.getTime().getTime())).get();
+                    setData(Arrays.asList(windTowerStatusData), stationCode);
+                }
+
+                if (electricField.getElectricFieldTypeEnum().equals("E1") && weatherStationStatusDataListMap.containsKey(stationCode)) {
+                    WeatherStationStatusData weatherStationStatusData = weatherStationStatusDataListMap.get(stationCode).stream().max(Comparator.comparing(p -> p.getTime().getTime())).get();
+                    setData(Arrays.asList(weatherStationStatusData), stationCode);
+                }
+
+
+                if (forecastPowerShortTermStationListMap.containsKey(stationCode)) {
+                    List<ForecastPowerShortTermStation> forecastPowerShortTermStations = forecastPowerShortTermStationListMap.get(stationCode);
+                    setData(forecastPowerShortTermStations, stationCode);
+
+                }
+
+                if (forecastPowerUltraShortTermStationListMap.containsKey(stationCode)) {
+                    List<ForecastPowerUltraShortTermStation> forecastPowerUltraShortTermStations = forecastPowerUltraShortTermStationListMap.get(stationCode);
+                    setData(forecastPowerUltraShortTermStations, stationCode);
+                }
+
+
+            }
+        }
+
+
+    }
+
+
+}

+ 70 - 0
cpp-admin/src/main/java/com/cpp/web/service/datafactory/ScheduledHelper.java

@@ -0,0 +1,70 @@
+package com.cpp.web.service.datafactory;
+
+import cn.hutool.core.thread.ThreadFactoryBuilder;
+
+import java.util.concurrent.*;
+import java.util.Date;
+
+public class ScheduledHelper {
+
+    // 用于存储当前安排的任务,以便可以取消它  
+    private ScheduledFuture<?> currentTask;
+    // 用于调度任务的ScheduledExecutorService  
+    private static final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1, new ThreadFactoryBuilder().setNamePrefix("RatioTimer-").build());
+
+
+    /**
+     * 在指定时间执行任务。  
+     *
+     * @param targetDate 任务应该执行的时间  
+     * @param task       要执行的任务  
+     * @throws IllegalArgumentException 如果targetDate在过去  
+     */
+    public synchronized void scheduleTaskAtFixedDate(Date targetDate, Runnable task) {
+        // 检查目标日期是否在过去  
+        long delay = targetDate.getTime() - System.currentTimeMillis();
+        if (delay < 0) {
+            throw new IllegalArgumentException("目标日期已过");
+        }
+
+        // 如果当前有任务正在等待执行,则取消它  
+        if (currentTask != null && !currentTask.isDone()) {
+            currentTask.cancel(false); // 不中断正在运行的任务(因为我们知道它还没开始)  
+        }
+
+        // 安排新任务  
+        currentTask = scheduler.schedule(() -> {
+            try {
+                task.run();
+            } finally {
+                // 清除currentTask引用,以便可以安排新的任务(在finally块中确保即使任务抛出异常也能清除)  
+                synchronized (this) {
+                    currentTask = null;
+                }
+            }
+        }, delay, TimeUnit.MILLISECONDS);
+    }
+
+    /**
+     * 关闭scheduler(应该在不再需要时调用)  
+     */
+    public synchronized void shutdownScheduler() {
+        // 尝试取消当前任务(尽管在关闭scheduler时这可能不是必需的)  
+        if (currentTask != null && !currentTask.isDone()) {
+            currentTask.cancel(true); // 这里可以中断正在运行的任务,但通常关闭scheduler时不会有任务在运行  
+        }
+        // 然后关闭scheduler  
+        scheduler.shutdown();
+        try {
+            // 等待scheduler中的所有任务完成或等待超时(这里可以根据需要设置超时时间)  
+            if (!scheduler.awaitTermination(60, TimeUnit.SECONDS)) {
+                // 如果在超时时间内没有完成关闭,则强制关闭  
+                scheduler.shutdownNow();
+            }
+        } catch (InterruptedException e) {
+            // 如果当前线程在等待过程中被中断,则也强制关闭scheduler  
+            scheduler.shutdownNow();
+            Thread.currentThread().interrupt(); // 保留中断状态  
+        }
+    }
+}

+ 37 - 0
cpp-admin/src/main/java/com/cpp/web/service/datafactory/impl/ParsingCdqServiceImpl.java

@@ -1,6 +1,7 @@
 package com.cpp.web.service.datafactory.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.cpp.system.service.ISysConfigService;
 import com.cpp.web.domain.datafactory.BaseParsing;
 import com.cpp.web.domain.datafactory.ParsingCdq;
 import com.cpp.web.domain.datafactory.dto.ParsingConfParam;
@@ -8,9 +9,12 @@ import com.cpp.web.domain.datafactory.dto.ParsingResultDto;
 import com.cpp.web.domain.datafactory.enums.FileTypeEnum;
 import com.cpp.web.domain.station.ForecastPowerUltraShortTermStation;
 import com.cpp.web.mapper.datafactory.ParsingCdqMapper;
+import com.cpp.web.service.datafactory.DataStore;
 import com.cpp.web.service.datafactory.ParsingCdqService;
 import com.cpp.web.service.datafactory.ParsingInterface;
+import com.cpp.web.service.datafactory.ScheduledHelper;
 import com.cpp.web.service.station.ForecastPowerUltraShortTermStationService;
+import com.cpp.web.utils.DateTimeUtil;
 import com.cpp.web.utils.ParsingFieldUtil;
 import com.cpp.web.utils.ParsingFileUtil;
 import com.cpp.web.utils.ParsingUtil;
@@ -25,6 +29,7 @@ import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 超短期解析业务层实现类
@@ -38,6 +43,8 @@ import java.util.List;
 @Transactional
 public class ParsingCdqServiceImpl extends ServiceImpl<ParsingCdqMapper, ParsingCdq> implements ParsingCdqService, ParsingInterface {
 
+    private final ISysConfigService configService;
+
     private final ForecastPowerUltraShortTermStationService forecastPowerUltraShortTermStationService;
 
     private List<ParsingCdq> parsingCdqs = new ArrayList<>();
@@ -86,6 +93,7 @@ public class ParsingCdqServiceImpl extends ServiceImpl<ParsingCdqMapper, Parsing
                                     forecastPowerUltraShortTermStationList.add(forecastPowerUltraShortTermStation);
                                     time = new Date(time.getTime() + 900000L);//递增15分钟
                                 }
+                                scheduleAddCache(forecastPowerUltraShortTermStationList,stationCode);
                                 forecastPowerUltraShortTermStationService.saveBatch(forecastPowerUltraShortTermStationList);
                                 log.info("解析CDQ文件:{} 成功! O(∩_∩)O", file.getName());
                                 parsingResultDto.setStatus("success");
@@ -206,4 +214,33 @@ public class ParsingCdqServiceImpl extends ServiceImpl<ParsingCdqMapper, Parsing
         return ((int) ((time.getTime() - baseTime.getTime()) / 900000L)) + 1;
     }
 
+    private final ScheduledHelper scheduledHelper = new ScheduledHelper();
+
+    public void scheduleAddCache(List<ForecastPowerUltraShortTermStation> forecastPowerUltraShortTermStationList, String stationCode) {
+
+        int ago = 1;
+        try {
+            String cdqHowLongAgo = configService.selectConfigByKey("cdqHowLongAgo");
+            ago = Integer.parseInt(cdqHowLongAgo);
+        } catch (Exception e) {
+
+        }
+
+        Date date = DateTimeUtil.getMomentTimeFor15Minute(System.currentTimeMillis());
+
+        Date startTime = new Date(date.getTime() + ago * 15 * 60000L);
+        //未来四小时
+        Date endTime = new Date(startTime.getTime() + 4 * 60 * 60000L);
+
+        List<ForecastPowerUltraShortTermStation> forecastPowerUltraShortTermStations = forecastPowerUltraShortTermStationList.stream().filter(f->f.getTime().getTime() >= startTime.getTime() && f.getTime().getTime() < endTime.getTime()).collect(Collectors.toList());
+        if (forecastPowerUltraShortTermStations.size() >= 16) {
+            scheduledHelper.scheduleTaskAtFixedDate(startTime, new Runnable() {
+                @Override
+                public void run() {
+                    DataStore.getInstance().setData(forecastPowerUltraShortTermStationList, stationCode);
+                }
+            });
+        }
+    }
+
 }

+ 3 - 2
cpp-admin/src/main/java/com/cpp/web/service/datafactory/impl/ParsingCftServiceImpl.java

@@ -8,6 +8,7 @@ import com.cpp.web.domain.datafactory.dto.ParsingResultDto;
 import com.cpp.web.domain.datafactory.enums.FileTypeEnum;
 import com.cpp.web.domain.station.WindTowerStatusData;
 import com.cpp.web.mapper.datafactory.ParsingCftMapper;
+import com.cpp.web.service.datafactory.DataStore;
 import com.cpp.web.service.datafactory.ParsingCftService;
 import com.cpp.web.service.datafactory.ParsingInterface;
 import com.cpp.web.service.station.WindTowerInfoService;
@@ -21,6 +22,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.io.File;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -37,7 +39,6 @@ import java.util.stream.Collectors;
 @Transactional
 public class ParsingCftServiceImpl extends ServiceImpl<ParsingCftMapper, ParsingCft> implements ParsingCftService, ParsingInterface {
 
-
     private List<ParsingCft> parsingCfts = new ArrayList<>();
 
     private final WindTowerStatusDataService windTowerStatusDataService;
@@ -94,7 +95,7 @@ public class ParsingCftServiceImpl extends ServiceImpl<ParsingCftMapper, Parsing
                                     windTowerStatusData.setWd100(parsingValue(parsingCft.getWd100(), fileContent));
                                     windTowerStatusData.setWdHubHeight(parsingValue(parsingCft.getWdHubHeight(), fileContent));
                                     windTowerStatusData.setStationCode(stationCode);
-
+                                    DataStore.getInstance().setData(Arrays.asList(windTowerStatusData),stationCode);
                                     windTowerStatusDataService.save(windTowerStatusData);
                                     parsingResultDto.setStatus("success");
                                     log.info("解析CFT文件:{} 成功! O(∩_∩)O", file.getName());

+ 39 - 0
cpp-admin/src/main/java/com/cpp/web/service/datafactory/impl/ParsingDqServiceImpl.java

@@ -1,15 +1,19 @@
 package com.cpp.web.service.datafactory.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.cpp.system.service.ISysConfigService;
 import com.cpp.web.domain.datafactory.BaseParsing;
 import com.cpp.web.domain.datafactory.ParsingDq;
 import com.cpp.web.domain.datafactory.dto.ParsingConfParam;
 import com.cpp.web.domain.datafactory.dto.ParsingResultDto;
 import com.cpp.web.domain.datafactory.enums.FileTypeEnum;
 import com.cpp.web.domain.station.ForecastPowerShortTermStation;
+import com.cpp.web.domain.station.ForecastPowerUltraShortTermStation;
 import com.cpp.web.mapper.datafactory.ParsingDqMapper;
+import com.cpp.web.service.datafactory.DataStore;
 import com.cpp.web.service.datafactory.ParsingDqService;
 import com.cpp.web.service.datafactory.ParsingInterface;
+import com.cpp.web.service.datafactory.ScheduledHelper;
 import com.cpp.web.service.station.ForecastPowerShortTermStationService;
 import com.cpp.web.utils.DateTimeUtil;
 import com.cpp.web.utils.ParsingFieldUtil;
@@ -17,6 +21,7 @@ import com.cpp.web.utils.ParsingFileUtil;
 import com.cpp.web.utils.ParsingUtil;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -26,6 +31,7 @@ import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 短期解析业务层实现类
@@ -40,6 +46,8 @@ import java.util.List;
 public class ParsingDqServiceImpl extends ServiceImpl<ParsingDqMapper, ParsingDq> implements ParsingDqService, ParsingInterface {
 
 
+    private final ISysConfigService configService;
+
     private List<ParsingDq> parsingDqs = new ArrayList<>();
 
     private final ForecastPowerShortTermStationService forecastPowerShortTermStationService;
@@ -100,6 +108,8 @@ public class ParsingDqServiceImpl extends ServiceImpl<ParsingDqMapper, ParsingDq
                                         forecastPowerShortTermStationList.get(i).setOpenCapacity(openCapacityList.get(i));
                                     }
                                 }
+
+                                scheduleAddCache(forecastPowerShortTermStationList, stationCode);
                                 forecastPowerShortTermStationService.saveBatch(forecastPowerShortTermStationList);
                                 log.info("解析短期文件:{} 成功! O(∩_∩)O", file.getName());
                                 parsingResultDto.setStatus("success");
@@ -235,4 +245,33 @@ public class ParsingDqServiceImpl extends ServiceImpl<ParsingDqMapper, ParsingDq
     public Integer calcHowLongAgo(Date baseTime, Date time) {
         return ((int) ((time.getTime() - baseTime.getTime()) / 86400000L)) + 1;
     }
+
+    private final ScheduledHelper scheduledHelper = new ScheduledHelper();
+
+    public void scheduleAddCache(List<ForecastPowerShortTermStation> forecastPowerShortTermStationList, String stationCode) {
+
+        int ago = 1;
+        try {
+            String dqHowLongAgo = configService.selectConfigByKey("dqHowLongAgo");
+            ago = Integer.parseInt(dqHowLongAgo);
+        } catch (Exception e) {
+
+        }
+
+        Long dAdd = System.currentTimeMillis() + ago * 86400000L;
+        Date startTime = DateTimeUtil.getDayStartTime(dAdd);
+        Date endTime = DateTimeUtil.getDayLastTime(dAdd);
+
+
+        List<ForecastPowerShortTermStation> forecastPowerShortTermStations = forecastPowerShortTermStationList.stream().filter(f -> f.getTime().getTime() >= startTime.getTime() && f.getTime().getTime() < endTime.getTime()).collect(Collectors.toList());
+        if (forecastPowerShortTermStations.size() >= 96) {
+            scheduledHelper.scheduleTaskAtFixedDate(startTime, new Runnable() {
+                @Override
+                public void run() {
+                    DataStore.getInstance().setData(forecastPowerShortTermStationList, stationCode);
+                }
+            });
+        }
+
+    }
 }

+ 3 - 0
cpp-admin/src/main/java/com/cpp/web/service/datafactory/impl/ParsingQxzServiceImpl.java

@@ -7,6 +7,7 @@ import com.cpp.web.domain.datafactory.dto.ParsingResultDto;
 import com.cpp.web.domain.datafactory.enums.FileTypeEnum;
 import com.cpp.web.domain.station.WeatherStationStatusData;
 import com.cpp.web.mapper.datafactory.ParsingQxzMapper;
+import com.cpp.web.service.datafactory.DataStore;
 import com.cpp.web.service.datafactory.ParsingInterface;
 import com.cpp.web.service.datafactory.ParsingQxzService;
 import com.cpp.web.service.station.WeatherStationInfoService;
@@ -20,6 +21,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.io.File;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -77,6 +79,7 @@ public class ParsingQxzServiceImpl extends ServiceImpl<ParsingQxzMapper, Parsing
                         w.setWd(parsingValue(parsingQxzInfo.getWd(), fileContent));
                         w.setWs(parsingValue(parsingQxzInfo.getWs(), fileContent));
                         w.setStationCode(stationCode);
+                        DataStore.getInstance().setData(Arrays.asList(w), stationCode);
                         weatherStationStatusDataService.save(w);
                         parsingResultDto.setStatus("success");
                         log.info("解析QXZ文件:{} 成功! O(∩_∩)O", file.getName());

+ 3 - 0
cpp-admin/src/main/java/com/cpp/web/service/datafactory/impl/ParsingRpServiceImpl.java

@@ -8,6 +8,7 @@ import com.cpp.web.domain.datafactory.dto.ParsingResultDto;
 import com.cpp.web.domain.datafactory.enums.FileTypeEnum;
 import com.cpp.web.domain.station.PowerStationStatusData;
 import com.cpp.web.mapper.datafactory.ParsingRpMapper;
+import com.cpp.web.service.datafactory.DataStore;
 import com.cpp.web.service.datafactory.ParsingInterface;
 import com.cpp.web.service.datafactory.ParsingRpService;
 import com.cpp.web.service.station.PowerStationStatusDataService;
@@ -22,6 +23,7 @@ import org.springframework.transaction.annotation.Transactional;
 import java.io.File;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 
@@ -82,6 +84,7 @@ public class ParsingRpServiceImpl extends ServiceImpl<ParsingRpMapper, ParsingRp
                         powerStationStatusData.setPowerRationing(parsingStatus(parsingRpInfo.getPowerRationing(), fileContent));
                         powerStationStatusData.setTime(time);
 
+                        DataStore.getInstance().setData(Arrays.asList(powerStationStatusData),stationCode);
                         powerStationStatusDataService.save(powerStationStatusData);
 
                         log.info("解析RP文件:{} 成功! O(∩_∩)O", file.getName());

+ 2 - 0
cpp-admin/src/main/java/com/cpp/web/service/station/ForecastPowerUltraShortTermStationService.java

@@ -30,4 +30,6 @@ public interface ForecastPowerUltraShortTermStationService extends IService<Fore
     List<ForecastPowerUltraShortTermStation> findByForecastTimeAndStationCode(Long finalTime, String stationCode);
 
     List<ForecastPowerUltraShortTermStation> findByForecastTimeBetweenAndHowLongAgo(Date startTime, Date endTime,Integer howLongAgo);
+
+    List<ForecastPowerUltraShortTermStation> findByForecastTimeBetween(Date startTime, Date endTime);
 }

+ 10 - 0
cpp-admin/src/main/java/com/cpp/web/service/station/impl/ForecastPowerUltraShortTermStationServiceImpl.java

@@ -72,4 +72,14 @@ public class ForecastPowerUltraShortTermStationServiceImpl extends ServiceImpl<F
         wrapper.eq("forecast_how_long_ago", howLongAgo);
         return baseMapper.selectList(wrapper);
     }
+
+    @Override
+    public List<ForecastPowerUltraShortTermStation> findByForecastTimeBetween(Date startTime, Date endTime) {
+        QueryWrapper<ForecastPowerUltraShortTermStation> wrapper = new QueryWrapper<>();
+
+        if (startTime != null && endTime != null) {
+            wrapper.between("forecast_time", startTime, endTime);
+        }
+        return baseMapper.selectList(wrapper);
+    }
 }

+ 20 - 0
cpp-admin/src/main/java/com/cpp/web/utils/LatestDataUtil.java

@@ -0,0 +1,20 @@
+package com.cpp.web.utils;
+
+import com.cpp.web.service.datafactory.DataStore;
+
+public class LatestDataUtil {
+
+
+    /**
+     * 场站编号获取指定 类 最新数据
+     *
+     * @param clazz
+     * @param stationCode
+     * @param <T>
+     * @return 对象或null
+     */
+    public static <T> T getData(String stationCode, Class<T> clazz) {
+        return DataStore.getInstance().getData(stationCode, clazz);
+    }
+
+}