Selaa lähdekoodia

1.增加获取场站通讯状态功能

tl 5 kuukautta sitten
vanhempi
commit
4cf7eb5f32

+ 3 - 0
cpp-admin/src/main/java/com/cpp/web/controller/largeScreen/LargeScreenController.java

@@ -88,6 +88,9 @@ public class LargeScreenController {
         int fzdSumCount = 0;
 
         for (ElectricField electricField : electricFieldList) {
+
+
+            Boolean b = LatestDataUtil.getCommunicationStatus(electricField.getStationCode());
             PowerStationStatusData powerStationStatusData = LatestDataUtil.getData(electricField.getStationCode(), PowerStationStatusData.class);
             if (ElectricFieldTypeEnum.E1.name().equals(electricField.getElectricFieldTypeEnum())) {
                 // 获取气象站辐照度

+ 8 - 38
cpp-admin/src/main/java/com/cpp/web/job/ScheduledJob.java

@@ -1,6 +1,5 @@
 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;
@@ -12,7 +11,6 @@ import com.cpp.web.service.datafactory.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;
@@ -51,12 +49,14 @@ public class ScheduledJob implements ApplicationRunner {
     /**
      * 解析站端文件定时任务
      */
-//    @Scheduled(fixedRate = 60000L)
+    @Scheduled(fixedRate = 60000L)
     public void parsingFile() {
         sftpFileParsing.parsingFile();
     }
 
-//    @Scheduled(cron = "0 0/15 0 * * *")
+
+
+    @Scheduled(cron = "0 0/15 0 * * *")
     public void check() {
         //短期未解析告警
         String dqEndTime = iSysConfigService.selectConfigByKey("dqEndTime");
@@ -82,7 +82,7 @@ public class ScheduledJob implements ApplicationRunner {
     /**
      * 解析中心端文件定时任务
      */
-//    @Scheduled(fixedRate = 60000L)
+    @Scheduled(fixedRate = 60000L)
     public void cloudFileParsing() {
         cloudFileParsing.parsingFile();
     }
@@ -90,7 +90,7 @@ public class ScheduledJob implements ApplicationRunner {
     /**
      * 压缩文件上传并清理历史文件,一天一次
      */
-//    @Scheduled(cron = "0 30 0 * * *")
+    @Scheduled(cron = "0 30 0 * * *")
     public void uploadZipFile() {
         sftpFileParsing.uploadZipFile();
     }
@@ -99,7 +99,7 @@ public class ScheduledJob implements ApplicationRunner {
     /**
      * 计算准确率定时任务
      */
-//    @Scheduled(cron = "0 30 1 * * *")
+    @Scheduled(cron = "0 30 1 * * *")
     public void calculate() {
         calcAccuracy.calculate();
     }
@@ -107,42 +107,12 @@ public class ScheduledJob implements ApplicationRunner {
     /**
      * 告警消纳定时任务
      */
-//    @Scheduled(fixedRate = 60000L)
+    @Scheduled(fixedRate = 60000L)
     public void e() {
         AlarmLog.getInstance().eliminate();
     }
 
 
-    /**
-     * 告警消纳定时任务
-     */
-//    @Scheduled(fixedRate = 60000L)
-    public void aaa() {
-        for (ElectricField electricField : SpringUtils.getBean(ElectricFieldService.class).list()) {
-            System.out.println(electricField.getStationCode());
-
-
-            ForecastPowerShortTermRegulation forecastPowerShortTermRegulation = DataStore.getInstance().getData(electricField.getStationCode(), ForecastPowerShortTermRegulation.class);
-            System.out.println(forecastPowerShortTermRegulation.getFpValue() + "," + forecastPowerShortTermRegulation.getTime());
-
-
-            ForecastPowerUltraShortTermRegulation forecastPowerUltraShortTermRegulation = DataStore.getInstance().getData(electricField.getStationCode(), ForecastPowerUltraShortTermRegulation.class);
-            System.out.println(forecastPowerUltraShortTermRegulation.getFpValue() + "," + forecastPowerUltraShortTermRegulation.getTime());
-
-            PowerStationStatusData powerStationStatusData = DataStore.getInstance().getData(electricField.getStationCode(), PowerStationStatusData.class);
-            System.out.println(powerStationStatusData.toString() + "," + powerStationStatusData.getTime());
-            if (electricField.getElectricFieldTypeEnum().equals("E2")) {
-                WindTowerStatusData data = DataStore.getInstance().getData(electricField.getStationCode(), WindTowerStatusData.class);
-                System.out.println(data + "," + data.getTime());
-            } else {
-                WeatherStationStatusData data = DataStore.getInstance().getData(electricField.getStationCode(), WeatherStationStatusData.class);
-                System.out.println(data + "," + data.getTime());
-
-            }
-        }
-    }
-
-
     @Override
     public void run(ApplicationArguments args) throws Exception {
         AlarmLog.getInstance().initMap();

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

@@ -8,12 +8,9 @@ import java.util.Map;
 public interface BaseParsingService {
     List<BaseParsing> getParsingInfos();
 
-
     List<Map<String,String>> getFileTypes();
 
-
     boolean save(BaseParsing baseParsing);
 
-
     boolean deleteById(BaseParsing baseParsing);
 }

+ 61 - 9
cpp-admin/src/main/java/com/cpp/web/service/datafactory/DataStore.java

@@ -13,10 +13,21 @@ import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.stream.Collectors;
 
+/**
+ * 实时数据存储用于首页数据展示
+ */
 public class DataStore {
 
 
-    Map<String, Object> map = new ConcurrentHashMap<>();
+    /**
+     * 实时数据集合
+     */
+    Map<String, Object> realTimeDataMap = new ConcurrentHashMap<>();
+
+    /**
+     *
+     */
+    Map<String, ScheduledHelper> communicationStatus = new ConcurrentHashMap<>();
 
     public static final DataStore getInstance() {
         return DataStore.LazyHolder.INSTANCE;
@@ -31,32 +42,32 @@ public class DataStore {
         if (t.size() > 0) {
             Class<?> clazz = t.get(0).getClass();
             if (ForecastPowerShortTermRegulation.class.equals(clazz)) {
-                if (this.map.containsKey(stationCode + clazz.getName())) {
-                    FixedSizeCollection<T> fixedSizeCollection = ((FixedSizeCollection<T>) this.map.get(stationCode + clazz.getName()));
+                if (this.realTimeDataMap.containsKey(stationCode + clazz.getName())) {
+                    FixedSizeCollection<T> fixedSizeCollection = ((FixedSizeCollection<T>) this.realTimeDataMap.get(stationCode + clazz.getName()));
                     t.forEach(obj -> fixedSizeCollection.add(obj));
                 } else {
                     FixedSizeCollection<T> fixedSizeCollection = new FixedSizeCollection<>(960);
                     t.forEach(obj -> fixedSizeCollection.add(obj));
-                    this.map.put(stationCode + clazz.getName(), fixedSizeCollection);
+                    this.realTimeDataMap.put(stationCode + clazz.getName(), fixedSizeCollection);
                 }
             } else if (ForecastPowerUltraShortTermRegulation.class.equals(clazz)) {
-                if (this.map.containsKey(stationCode + clazz.getName())) {
-                    FixedSizeCollection<T> fixedSizeCollection = ((FixedSizeCollection<T>) this.map.get(stationCode + clazz.getName()));
+                if (this.realTimeDataMap.containsKey(stationCode + clazz.getName())) {
+                    FixedSizeCollection<T> fixedSizeCollection = ((FixedSizeCollection<T>) this.realTimeDataMap.get(stationCode + clazz.getName()));
                     t.forEach(obj -> fixedSizeCollection.add(obj));
                 } else {
                     FixedSizeCollection<T> fixedSizeCollection = new FixedSizeCollection<>(16);
                     t.forEach(obj -> fixedSizeCollection.add(obj));
-                    this.map.put(stationCode + clazz.getName(), fixedSizeCollection);
+                    this.realTimeDataMap.put(stationCode + clazz.getName(), fixedSizeCollection);
                 }
             } else if (PowerStationStatusData.class.equals(clazz) || WeatherStationStatusData.class.equals(clazz) || WindTowerStatusData.class.equals(clazz)) {
-                this.map.put(stationCode + clazz.getName(), t);
+                this.realTimeDataMap.put(stationCode + clazz.getName(), t);
             }
         }
     }
 
 
     public <T> T getData(String stationCode, Class<T> clazz) {
-        Object o = this.map.get(stationCode + clazz.getName());
+        Object o = this.realTimeDataMap.get(stationCode + clazz.getName());
         if (o != null) {
             Date date = null;
             if (ForecastPowerShortTermRegulation.class.equals(clazz)) {
@@ -150,6 +161,11 @@ public class DataStore {
         }
     }
 
+    /**
+     * 先进先出定长集合
+     *
+     * @param <T>
+     */
     @Data
     public class FixedSizeCollection<T> {
         private final int maxSize;
@@ -183,4 +199,40 @@ public class DataStore {
         }
 
     }
+
+
+    /**
+     * 根据场站编号激活场站通讯正常状态
+     *
+     * @param stationCode
+     */
+    public void activationCommunicationStatus(String stationCode) {
+        ScheduledHelper scheduledHelper;
+        if (communicationStatus.containsKey(stationCode)) {
+            scheduledHelper = communicationStatus.get(stationCode);
+        } else {
+            scheduledHelper = new ScheduledHelper();
+            communicationStatus.put(stationCode, scheduledHelper);
+        }
+        scheduledHelper.scheduleTaskAtFixedDate(new Date(System.currentTimeMillis() + 60000L), new Runnable() {
+            @Override
+            public void run() {
+                communicationStatus.remove(stationCode);
+            }
+        });
+    }
+
+
+    /**
+     * 根据场站编号获取通讯状态
+     *
+     * @param stationCode
+     * @return
+     */
+    public Boolean getCommunicationStatus(String stationCode) {
+        if (communicationStatus.containsKey(stationCode)) {
+            return true;
+        }
+        return false;
+    }
 }

+ 36 - 0
cpp-admin/src/main/java/com/cpp/web/service/datafactory/ParsingInterface.java

@@ -31,6 +31,13 @@ public interface ParsingInterface {
 
     boolean activationParsingConf();
 
+    /**
+     * 解析时间
+     *
+     * @param sign
+     * @param fileContent
+     * @return
+     */
     default Date parsingTime(String sign, List<String> fileContent) {
         Date time = null;
         try {
@@ -60,6 +67,13 @@ public interface ParsingInterface {
     }
 
 
+    /**
+     * 解析数值
+     *
+     * @param sign
+     * @param fileContent
+     * @return
+     */
     default BigDecimal parsingValue(String sign, List<String> fileContent) {
 
         BigDecimal value = new BigDecimal(-99);
@@ -82,6 +96,13 @@ public interface ParsingInterface {
     }
 
 
+    /**
+     * 解析设备状态
+     *
+     * @param sign
+     * @param fileContent
+     * @return
+     */
     default Integer parsingStatus(String sign, List<String> fileContent) {
         Integer status = -1;
         try {
@@ -102,6 +123,13 @@ public interface ParsingInterface {
     }
 
 
+    /**
+     * 解析设备名称
+     *
+     * @param sign
+     * @param fileContent
+     * @return
+     */
     default List<String> parsingNames(String sign, List<String> fileContent) {
 
         List<String> names = new ArrayList<>();
@@ -126,6 +154,13 @@ public interface ParsingInterface {
         }
     }
 
+    /**
+     * 解析上报状态
+     *
+     * @param sign
+     * @param fileContent
+     * @return
+     */
     default String parsingUploadStatus(String sign, List<String> fileContent) {
         String uploadStatus = "fail";
         try {
@@ -150,4 +185,5 @@ public interface ParsingInterface {
         }
 
     }
+
 }

+ 2 - 0
cpp-admin/src/main/java/com/cpp/web/service/datafactory/SftpFileParsing.java

@@ -49,6 +49,7 @@ public class SftpFileParsing {
     private final File PARSING_FILE_SUCCESS_DIR = ParsingFileUtil.checkGetPath(ParsingFileUtil.getSftpDownload() + File.separator + "success");
     private final File PARSING_FILE_FAIL_DIR = ParsingFileUtil.checkGetPath(ParsingFileUtil.getSftpDownload() + File.separator + "fail");
 
+    private final DataStore dataStore = DataStore.getInstance();
 //    private AlarmLog alarmLog = AlarmLog.getInstance();
 //    private final ThreadPoolTaskExecutor executor;
 
@@ -117,6 +118,7 @@ public class SftpFileParsing {
                 String ftpUrl = electricField.getSftpUrl();
                 List<String> fileNames = sftp.ls(ftpUrl).stream().filter(f -> f.contains(parsingType.getFileName())).collect(Collectors.toList());
                 if (fileNames.size() > 0) {
+                    dataStore.activationCommunicationStatus(electricField.getStationCode());
                     for (String fileName : fileNames) {
                         try {
                             String sftpFileNameDir = ftpUrl + "/" + fileName;

+ 0 - 1
cpp-admin/src/main/java/com/cpp/web/service/station/impl/ForecastPowerShortTermStationServiceImpl.java

@@ -2,7 +2,6 @@ package com.cpp.web.service.station.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.cpp.web.domain.cloud.ForecastPowerShortTermCloud;
 import com.cpp.web.domain.station.ForecastPowerShortTermStation;
 import com.cpp.web.mapper.station.ForecastPowerShortTermStationMapper;
 import com.cpp.web.service.station.ForecastPowerShortTermStationService;

+ 0 - 1
cpp-admin/src/main/java/com/cpp/web/service/station/impl/PowerStationStatusDataServiceImpl.java

@@ -12,7 +12,6 @@ import com.cpp.web.domain.station.*;
 import com.cpp.web.dto.TableColumn;
 import com.cpp.web.mapper.station.PowerStationStatusDataMapper;
 import com.cpp.web.service.cloud.ForecastPowerShortTermCloudService;
-import com.cpp.web.service.cloud.ForecastPowerUltraShortTermCloudService;
 import com.cpp.web.service.cloud.NwpCloudService;
 import com.cpp.web.service.station.*;
 import lombok.Data;

+ 0 - 1
cpp-admin/src/main/java/com/cpp/web/service/station/impl/WindTowerStatusDataServiceImpl.java

@@ -3,7 +3,6 @@ package com.cpp.web.service.station.impl;
 
 import com.alibaba.fastjson2.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.cpp.web.domain.datafactory.ParsingCft;
 import com.cpp.web.domain.station.WindTowerStatusData;

+ 0 - 3
cpp-admin/src/main/java/com/cpp/web/service/station/impl/WindTurbineStatusDataServiceImpl.java

@@ -1,6 +1,5 @@
 package com.cpp.web.service.station.impl;
 
-import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.cpp.web.domain.station.WindTurbineStatusData;
@@ -8,10 +7,8 @@ import com.cpp.web.mapper.station.WindTurbineStatusDataMapper;
 import com.cpp.web.service.station.WindTurbineStatusDataService;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Date;
-import java.util.List;
 
 /**
  * 风机数据业务层实现类

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

@@ -17,4 +17,14 @@ public class LatestDataUtil {
         return DataStore.getInstance().getData(stationCode, clazz);
     }
 
+
+    /**
+     * 场站编号获取通讯状态
+     *
+     * @param stationCode
+     * @return 对象或null
+     */
+    public static  Boolean getCommunicationStatus(String stationCode) {
+        return DataStore.getInstance().getCommunicationStatus(stationCode);
+    }
 }