瀏覽代碼

查询时间与测风塔信息增加缓存

hxf 1 年之前
父節點
當前提交
4250e5e55c
共有 21 個文件被更改,包括 325 次插入170 次删除
  1. 1 1
      wrdep-biz/src/main/java/com/jiayue/biz/conf/Channel.java
  2. 3 3
      wrdep-biz/src/main/java/com/jiayue/biz/controller/WindTowerInfoController.java
  3. 1 1
      wrdep-biz/src/main/java/com/jiayue/biz/job/AirDensityJob.java
  4. 1 1
      wrdep-biz/src/main/java/com/jiayue/biz/job/FileAnalysisJob.java
  5. 1 1
      wrdep-biz/src/main/java/com/jiayue/biz/job/WindTowerCalculationDataJob.java
  6. 2 0
      wrdep-biz/src/main/java/com/jiayue/biz/service/WindTowerInfoService.java
  7. 36 15
      wrdep-biz/src/main/java/com/jiayue/biz/service/impl/AnalysisDataImpl.java
  8. 1 1
      wrdep-biz/src/main/java/com/jiayue/biz/service/impl/AnalysisLogServiceImpl.java
  9. 91 2
      wrdep-biz/src/main/java/com/jiayue/biz/service/impl/DataAnalysisServiceImpl.java
  10. 2 2
      wrdep-biz/src/main/java/com/jiayue/biz/service/impl/DataRecalculationImpl.java
  11. 84 62
      wrdep-biz/src/main/java/com/jiayue/biz/service/impl/EmailImpl.java
  12. 45 37
      wrdep-biz/src/main/java/com/jiayue/biz/service/impl/HomePageServiceImpl.java
  13. 3 3
      wrdep-biz/src/main/java/com/jiayue/biz/service/impl/PdfServiceImpl.java
  14. 5 4
      wrdep-biz/src/main/java/com/jiayue/biz/service/impl/RealTimeDisplayServiceImpl.java
  15. 2 2
      wrdep-biz/src/main/java/com/jiayue/biz/service/impl/StationInfoServiceImpl.java
  16. 1 1
      wrdep-biz/src/main/java/com/jiayue/biz/service/impl/SysFileServiceImpl.java
  17. 7 7
      wrdep-biz/src/main/java/com/jiayue/biz/service/impl/WindTowerCalculationDataServiceImpl.java
  18. 6 9
      wrdep-biz/src/main/java/com/jiayue/biz/service/impl/WindTowerDataParentTableServiceImpl.java
  19. 25 11
      wrdep-biz/src/main/java/com/jiayue/biz/service/impl/WindTowerInfoServiceImpl.java
  20. 1 1
      wrdep-biz/src/main/java/com/jiayue/biz/util/CalculationUtil.java
  21. 7 6
      wrdep-biz/src/test/java/service/TDengineTest.java

+ 1 - 1
wrdep-biz/src/main/java/com/jiayue/biz/conf/Channel.java

@@ -147,7 +147,7 @@ public class Channel {
             Map<String, Integer> stringStringBuilderMap = savePoints(pointAttributeList, wsHeightSet, wdHeightSet);
             WindTowerInfo windTowerInfo = new WindTowerInfo();
             //判断是否存在此塔
-            boolean emptyOfEntity = windTowerInfoService.lambdaQuery().eq(WindTowerInfo::getEquipmentNo, tunnelInfo.getEquipmentNo()).list().isEmpty();
+            boolean emptyOfEntity = windTowerInfoService.getByEquipmentNo(tunnelInfo.getEquipmentNo()).isEmpty();
             if (emptyOfEntity) {
                 StringBuilder wsHeightStr = new StringBuilder();
                 for (Integer height : wsHeightSet) {

+ 3 - 3
wrdep-biz/src/main/java/com/jiayue/biz/controller/WindTowerInfoController.java

@@ -74,7 +74,7 @@ public class WindTowerInfoController extends BaseController {
     @GetMapping("/listAll")
     public TableDataInfo listAll() {
 //        List<WindTowerInfo> windTowerInfos = windTowerInfoService.list();
-        List<WindTowerInfo> list = windTowerInfoService.lambdaQuery().orderByAsc(WindTowerInfo::getEquipmentNo).list();
+        List<WindTowerInfo> list = windTowerInfoService.getAllWindTower().stream().sorted(Comparator.comparing(WindTowerInfo::getEquipmentNo)).collect(Collectors.toList());
 //        List<WindTowerInfo> collect = windTowerInfos.stream().sorted(Comparator.comparing(WindTowerInfo::getEquipmentNo)).collect(Collectors.toList());
 //        List<StatisticsSituation> statisticsSituationList = statisticsSituationService.list();
 //        Map<String, Long> map = new HashMap<>();
@@ -111,7 +111,7 @@ public class WindTowerInfoController extends BaseController {
     @PreAuthorize("@ss.hasPermi('dataQuery:windTowerStatusInfo:list')")
     @GetMapping("/listAllDisabled")
     public AjaxResult listAllDisabled() {
-        List<WindTowerInfo> windTowerInfos = windTowerInfoService.list();
+        List<WindTowerInfo> windTowerInfos = windTowerInfoService.getAllWindTower();
         windTowerInfos.sort(Comparator.comparing(WindTowerInfo::getEquipmentNo));
         List<Map<String, Object>> mapList = new ArrayList<>();
         Map<String, Object> map = null;
@@ -243,7 +243,7 @@ public class WindTowerInfoController extends BaseController {
         // 过滤信息概述用于排序
         List<StatisticsSituation> statisticsSituations = new ArrayList<>();
         Project project = projectService.getById(projectId);
-        List<WindTowerInfo> windTowerInfos = windTowerInfoService.list();
+        List<WindTowerInfo> windTowerInfos = windTowerInfoService.getAllWindTower();
         List<StatisticsSituation> statisticsSituationList = statisticsSituationService.list();
 
         // 分割获取设备编号集合

+ 1 - 1
wrdep-biz/src/main/java/com/jiayue/biz/job/AirDensityJob.java

@@ -56,7 +56,7 @@ public class AirDensityJob {
 
     @Scheduled(cron = "0 0 15 * * ?")
     public void AirDensityCalculation() {
-        List<WindTowerInfo> windTowerInfoList = windTowerInfoService.list();
+        List<WindTowerInfo> windTowerInfoList = windTowerInfoService.getAllWindTower();
         // 统计概述信息
         List<StatisticsSituation> statisticsSituations = statisticsSituationService.list();
         // 设备属性信息

+ 1 - 1
wrdep-biz/src/main/java/com/jiayue/biz/job/FileAnalysisJob.java

@@ -53,7 +53,7 @@ public class FileAnalysisJob {
         this.emailImpl = emailImpl;
     }
 
-    @Scheduled(fixedDelay = 60000)
+//    @Scheduled(fixedDelay = 60000)
     public void fileAnalysis() {
 
         log.debug("文件解析定时任务执行开始");

+ 1 - 1
wrdep-biz/src/main/java/com/jiayue/biz/job/WindTowerCalculationDataJob.java

@@ -44,7 +44,7 @@ public class WindTowerCalculationDataJob {
             Long startTime = DateMomentUtil.getDayStartTime(DateUtils.addDays(systemDate, -1).getTime());
             Long endTime = startTime + 86399000;
             //查询所有测风塔
-            List<WindTowerInfo> windTowerInfoList = windTowerInfoService.list();
+            List<WindTowerInfo> windTowerInfoList = windTowerInfoService.getAllWindTower();
             List<EquipmentAttribute> list = equipmentAttributeService.list();
             for (WindTowerInfo windTowerInfo : windTowerInfoList) {
                 List<WindTowerCalculationData> windTowerCalculationDataList = windTowerCalculationDataService.getByBetweenTimeAndEquipmentId(new Date(startTime), new Date(endTime), windTowerInfo.getEquipmentNo());

+ 2 - 0
wrdep-biz/src/main/java/com/jiayue/biz/service/WindTowerInfoService.java

@@ -25,6 +25,8 @@ public interface WindTowerInfoService extends IService<WindTowerInfo> {
     Page<WindTowerInfo> pageByEquipmentNo(Integer current, Integer size, String equipmentNo);
 
     boolean saveWindTowerInfo(WindTowerInfo windTowerInfo);
+    //查询所有测风塔信息
+    List<WindTowerInfo> getAllWindTower();
 
     boolean deleteWindTowerInfo(List<String> ids);
 

+ 36 - 15
wrdep-biz/src/main/java/com/jiayue/biz/service/impl/AnalysisDataImpl.java

@@ -5,6 +5,7 @@ import cn.hutool.core.text.csv.CsvData;
 import cn.hutool.core.text.csv.CsvReader;
 import cn.hutool.core.text.csv.CsvRow;
 import cn.hutool.core.text.csv.CsvUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.ZipUtil;
 import cn.hutool.poi.excel.ExcelReader;
 import cn.hutool.poi.excel.ExcelUtil;
@@ -296,10 +297,8 @@ public class AnalysisDataImpl {
                 newWdHeight = newWdHeight.substring(0, newWdHeight.length() - 1);
             }
 
-            String finalEqId = eqId;
-
             //通过eqId 过滤出这个塔
-            List<WindTowerInfo> windTowerInfoList = windTowerInfoService.list().stream().filter(w -> w.getEquipmentNo().equals(finalEqId)).collect(Collectors.toList());
+            List<WindTowerInfo> windTowerInfoList = windTowerInfoService.getByEquipmentNo(eqId);
             //为了防止两个塔编号相同的情况下  用编号+记录仪号来确定塔的唯一性
             //如果这个塔的记录仪编号不等于空 则代表已经更新过记录了
             List<WindTowerInfo> collect = windTowerInfoList.stream().sorted(Comparator.comparing(WindTowerInfo::getRecorderNo).reversed()).collect(Collectors.toList());
@@ -538,9 +537,8 @@ public class AnalysisDataImpl {
                 }
             }
 
-            String finalEqId = eqId;
             //通过eqId 过滤出这个塔
-            List<WindTowerInfo> windTowerInfoList = windTowerInfoService.list().stream().filter(w -> w.getEquipmentNo().equals(finalEqId)).collect(Collectors.toList());
+            List<WindTowerInfo> windTowerInfoList = windTowerInfoService.getByEquipmentNo(eqId);
             List<WindTowerInfo> collect = windTowerInfoList.stream().sorted(Comparator.comparing(WindTowerInfo::getRecorderNo).reversed()).collect(Collectors.toList());
 
             for (WindTowerInfo w : collect) {
@@ -830,13 +828,36 @@ public class AnalysisDataImpl {
      */
     public void acousticRadar(File file, String eqId) {
         List<Map<String, Object>> mapList = new ArrayList<>();
-        //获取层高
-        String[] height = windTowerInfoService.getByEquipmentNo(eqId).get(0).getHeights().split(",");
         CsvReader reader = CsvUtil.getReader();
         //解析csv文件设置编码为GBK
         CsvData data = reader.read(file, Charset.forName("gbk"));
         //获取到csv文件
         List<CsvRow> rows = data.getRows();
+        //获取层高
+        List<WindTowerInfo> equipmentNo = windTowerInfoService.getByEquipmentNo(eqId);
+        String height = "";
+        if (equipmentNo.size() == 0) {
+            CsvRow csvRow = rows.get(0);
+            StringBuilder heights = new StringBuilder();
+            for (String s : csvRow) {
+                if (s.contains("高度")) {
+                    if (heights.length() != 0) {
+                        heights.append(",");
+                    }
+                    heights.append(CalculationUtil.getNumberFromString(s));
+                }
+            }
+            height = heights.toString();
+            WindTowerInfo windTowerInfo = new WindTowerInfo();
+            windTowerInfo.setEquipmentNo(eqId);
+            windTowerInfo.setRecorderNo(eqId);
+            windTowerInfo.setHeights(height);
+            windTowerInfo.setWdHeights(height);
+            windTowerInfoService.saveWindTowerInfo(windTowerInfo);
+        } else {
+            WindTowerInfo windTowerInfo = equipmentNo.get(0);
+            height = windTowerInfo.getHeights();
+        }
         int total = 0;
         String str = "";
         //遍历表头 设置表头
@@ -907,7 +928,7 @@ public class AnalysisDataImpl {
                 hashMap.put("airDensity", airDensity);
                 CheckDataRecode.map.put("airDensity" + "DeadDataStartTime", new DateTime(sdf.parse(time1)));
 
-                for (String h : height) {
+                for (String h : height.split(",")) {
 
                     BigDecimal wsAve = conversion("ws_Ave" + h, row, rows);
                     hashMap.put("wsAve_" + h, wsAve);
@@ -931,17 +952,17 @@ public class AnalysisDataImpl {
 
     }
 
-    //根据表头位置找到对应数据
+    //根据表头位置找到对应数据  换算
     public BigDecimal conversion(String filedName, CsvRow row, List<CsvRow> rows) {
         BigDecimal data = BigDecimal.ZERO;
         if (rows.get(0).contains(filedName)) {
-            int rh_ave = rows.get(0).indexOf(filedName);
-            if (!row.get(rh_ave).isEmpty()) {
-                String rhAve = row.get(rh_ave);
+            int dataTotal = rows.get(0).indexOf(filedName);
+            if (!row.get(dataTotal).isEmpty()) {
+                String windData = row.get(dataTotal);
                 if (filedName.contains("ws")) {
-                    data = CalculationUtil.getBigDecimal(rhAve).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP);
+                    data = CalculationUtil.getBigDecimal(windData).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP);
                 } else {
-                    data = CalculationUtil.getBigDecimal(rhAve);
+                    data = CalculationUtil.getBigDecimal(windData);
                 }
 
             }
@@ -1081,7 +1102,7 @@ public class AnalysisDataImpl {
                 dataList.add(hashMap);
             }
         }
-        List<WindTowerInfo> list = windTowerInfoService.list();
+        List<WindTowerInfo> list = windTowerInfoService.getAllWindTower();
         List<WindTowerInfo> collect = list.stream().filter(w -> w.getEquipmentNo().equals(eqNo)).collect(Collectors.toList());
         if (collect.size() > 0) {
             if (collect.get(0).getRecorderNo() == null) {

+ 1 - 1
wrdep-biz/src/main/java/com/jiayue/biz/service/impl/AnalysisLogServiceImpl.java

@@ -49,7 +49,7 @@ public class AnalysisLogServiceImpl extends ServiceImpl<AnalysisLogMapper, Analy
     @Override
     public List<AnalysisLog> getAllList() {
         List list = new ArrayList();
-        List<WindTowerInfo> windTowerInfoList = windTowerInfoService.list();
+        List<WindTowerInfo> windTowerInfoList = windTowerInfoService.getAllWindTower();
         if (windTowerInfoList.size() > 0) {
             for (WindTowerInfo windTowerInfo : windTowerInfoList) {
                 Date startTime = DateTimeUtil.getDayStartTime(new Date().getTime() - 1000 * 60 * 60 * 24);

+ 91 - 2
wrdep-biz/src/main/java/com/jiayue/biz/service/impl/DataAnalysisServiceImpl.java

@@ -17,6 +17,7 @@ import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.sql.Timestamp;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -50,14 +51,14 @@ public class DataAnalysisServiceImpl extends ServiceImpl<WindTowerDataParentTabl
         endDay = DateUtil.endOfMonth(endDay);
         Map<String, Object> map = new HashMap<>();
         long realityCount = 0;//数据实际条数
-
+        List<ProphaseWeatherData> weatherDataList = prophaseWeatherDataService.selectTAveAndPaAveAndAir(equipmentId, new Timestamp(startDay.getTime()), new Timestamp(endDay.getTime()));
         List<WindTowerCalculationData> windTowerCalculationDatas = windTowerCalculationDataService.getByBetweenTimeAndEquipmentId(startDay, endDay, equipmentId);
         // 一年的风向统计数据
         List<WindDirectionStatisticsData> windDirectionStatisticsDataList = windDirectionStatisticsDataService.getByBetweenTimeAndEquipmentId(startDay, endDay, equipmentId);
         //所有类型数据
         List<EquipmentAttribute> equipmentAttributeList = equipmentAttributeService.list();
         //测风塔信息
-        List<WindTowerInfo> windTowerInfos = windTowerInfoService.lambdaQuery().eq(WindTowerInfo::getEquipmentNo, equipmentId).list();
+        List<WindTowerInfo> windTowerInfos = windTowerInfoService.getByEquipmentNo(equipmentId);
         //计算完整性
         List<Entity> entities = prophaseWeatherDataService.selectCount(equipmentId);
 
@@ -71,6 +72,11 @@ public class DataAnalysisServiceImpl extends ServiceImpl<WindTowerDataParentTabl
         //数据完整性
         Map<String, Object> statusData = this.getStatusData(windTowerInfos.get(0), startDay, endDay, realityCount);
         map.put("dataIntegrity", statusData);
+        //环境数据
+        ArrayList<Map<String, Object>> envTableData = getEnvTableData(windTowerCalculationDatas, equipmentAttributeList);
+        map.put("envTableData", envTableData);
+
+
         //风速和风速密度各月日变化表格
         Map<String, Object> monthWpdTable = getMonthWpdTable(windTowerCalculationDatas, equipmentAttributeList, windTowerInfos, startDay, endDay);
         map.put("monthWpdTable", monthWpdTable);
@@ -122,6 +128,89 @@ public class DataAnalysisServiceImpl extends ServiceImpl<WindTowerDataParentTabl
     }
 
 
+    public ArrayList<Map<String, Object>> getEnvTableData(List<WindTowerCalculationData> windTowerCalculationDataList, List<EquipmentAttribute> equipmentAttributeList) {
+        /*环境数据*/
+        //从数据库属性表里查出环境数据的属性
+        List<EquipmentAttribute> paMax = equipmentAttributeList.stream().filter(w -> w.getFieldName().equals("paMAX")).collect(Collectors.toList());
+        List<EquipmentAttribute> paMin = equipmentAttributeList.stream().filter(w -> w.getFieldName().equals("paMIN")).collect(Collectors.toList());
+        List<EquipmentAttribute> paAve = equipmentAttributeList.stream().filter(w -> w.getFieldName().equals("paAVE")).collect(Collectors.toList());
+        List<EquipmentAttribute> rhMax = equipmentAttributeList.stream().filter(w -> w.getFieldName().equals("rhMAX")).collect(Collectors.toList());
+        List<EquipmentAttribute> rhMin = equipmentAttributeList.stream().filter(w -> w.getFieldName().equals("rhMIN")).collect(Collectors.toList());
+        List<EquipmentAttribute> rhAve = equipmentAttributeList.stream().filter(w -> w.getFieldName().equals("rhAVE")).collect(Collectors.toList());
+        List<EquipmentAttribute> tMax = equipmentAttributeList.stream().filter(w -> w.getFieldName().equals("tMAX")).collect(Collectors.toList());
+        List<EquipmentAttribute> tMin = equipmentAttributeList.stream().filter(w -> w.getFieldName().equals("tMIN")).collect(Collectors.toList());
+        List<EquipmentAttribute> tAve = equipmentAttributeList.stream().filter(w -> w.getFieldName().equals("tAVE")).collect(Collectors.toList());
+        List<EquipmentAttribute> airDensityAve = equipmentAttributeList.stream().filter(w -> w.getFieldName().equals("airDensityMonth")).collect(Collectors.toList());
+        //通过属性过滤数据
+        List<WindTowerCalculationData> paMaxData = windTowerCalculationDataList.stream().filter(w -> w.getEbId().equals(paMax.get(0).getId())).collect(Collectors.toList());
+        List<WindTowerCalculationData> paMinData = windTowerCalculationDataList.stream().filter(w -> w.getEbId().equals(paMin.get(0).getId())).collect(Collectors.toList());
+        List<WindTowerCalculationData> paAveData = windTowerCalculationDataList.stream().filter(w -> w.getEbId().equals(paAve.get(0).getId())).collect(Collectors.toList());
+        List<WindTowerCalculationData> rhMaxData = windTowerCalculationDataList.stream().filter(w -> w.getEbId().equals(rhMax.get(0).getId())).collect(Collectors.toList());
+        List<WindTowerCalculationData> rhMinData = windTowerCalculationDataList.stream().filter(w -> w.getEbId().equals(rhMin.get(0).getId())).collect(Collectors.toList());
+        List<WindTowerCalculationData> rhAveData = windTowerCalculationDataList.stream().filter(w -> w.getEbId().equals(rhAve.get(0).getId())).collect(Collectors.toList());
+        List<WindTowerCalculationData> tMaxData = windTowerCalculationDataList.stream().filter(w -> w.getEbId().equals(tMax.get(0).getId())).collect(Collectors.toList());
+        List<WindTowerCalculationData> tMinData = windTowerCalculationDataList.stream().filter(w -> w.getEbId().equals(tMin.get(0).getId())).collect(Collectors.toList());
+        List<WindTowerCalculationData> tAveData = windTowerCalculationDataList.stream().filter(w -> w.getEbId().equals(tAve.get(0).getId())).collect(Collectors.toList());
+        List<WindTowerCalculationData> airDensityAveData = windTowerCalculationDataList.stream().filter(w -> w.getEbId().equals(airDensityAve.get(0).getId())).collect(Collectors.toList());
+        //做平均值
+        BigDecimal paMaxDataMax = paMaxData.stream().map(WindTowerCalculationData::getValue).max((x1, x2) -> x1.compareTo(x2)).get();
+        BigDecimal paMinDataMin = paMinData.stream().map(WindTowerCalculationData::getValue).min((x1, x2) -> x1.compareTo(x2)).get();
+        BigDecimal paAveDataAge = paAveData.stream().map(WindTowerCalculationData::getValue).reduce(BigDecimal.ZERO, BigDecimal::add).divide(BigDecimal.valueOf(paAveData.size()), 2, RoundingMode.HALF_UP);
+        BigDecimal rhMaxDataMax = rhMaxData.stream().map(WindTowerCalculationData::getValue).max((x1, x2) -> x1.compareTo(x2)).get();
+        BigDecimal rhMinDataMin = rhMinData.stream().map(WindTowerCalculationData::getValue).min((x1, x2) -> x1.compareTo(x2)).get();
+        BigDecimal rhAveDataAge = rhAveData.stream().map(WindTowerCalculationData::getValue).reduce(BigDecimal.ZERO, BigDecimal::add).divide(BigDecimal.valueOf(rhAveData.size()), 2, RoundingMode.HALF_UP);
+        BigDecimal tMaxDataMax = tMaxData.stream().map(WindTowerCalculationData::getValue).max((x1, x2) -> x1.compareTo(x2)).get();
+        BigDecimal tMinDataMin = tMinData.stream().map(WindTowerCalculationData::getValue).min((x1, x2) -> x1.compareTo(x2)).get();
+        BigDecimal tAveDataAge = tAveData.stream().map(WindTowerCalculationData::getValue).reduce(BigDecimal.ZERO, BigDecimal::add).divide(BigDecimal.valueOf(tAveData.size()), 2, RoundingMode.HALF_UP);
+        BigDecimal airDensityAveDataAge = airDensityAveData.stream().map(WindTowerCalculationData::getValue).reduce(BigDecimal.ZERO, BigDecimal::add).divide(BigDecimal.valueOf(airDensityAveData.size()), 2, RoundingMode.HALF_UP);
+        Map<String, Object> paMap = new HashMap<>();
+        paMap.put("parameter", "气压(hpa)");
+        paMap.put("min", paMinDataMin);
+        paMap.put("max", paMaxDataMax);
+        paMap.put("ave", paAveDataAge);
+        Map<String, Object> rhMap = new HashMap<>();
+        rhMap.put("parameter", "湿度(RH)");
+        rhMap.put("min", rhMinDataMin.compareTo(new BigDecimal(0)) == 0 ? "--" : rhMinDataMin);
+        rhMap.put("max", rhMaxDataMax.compareTo(new BigDecimal(0)) == 0 ? "--" : rhMaxDataMax);
+        rhMap.put("ave", rhAveDataAge.compareTo(new BigDecimal(0)) == 0 ? "--" : rhAveDataAge);
+        Map<String, Object> tMap = new HashMap<>();
+        tMap.put("parameter", "气温(°C)");
+        tMap.put("min", tMinDataMin);
+        tMap.put("max", tMaxDataMax);
+        tMap.put("ave", tAveDataAge);
+        Map<String, Object> airDensityMap = new HashMap<>();
+        airDensityMap.put("parameter", "空气密度(kg/m³)");
+        airDensityMap.put("min", airDensityAveDataAge.multiply(BigDecimal.valueOf(0.8)));
+        airDensityMap.put("max", airDensityAveDataAge.multiply(BigDecimal.valueOf(1.2)));
+        airDensityMap.put("ave", airDensityAveDataAge);
+        ArrayList<Map<String, Object>> environmentData = new ArrayList<>();
+        environmentData.add(paMap);
+        environmentData.add(rhMap);
+        environmentData.add(tMap);
+        environmentData.add(airDensityMap);
+
+        return environmentData;
+
+
+    }
+
+
+//    public ArrayList<Map<String, Object>> getWsTableData(List<WindTowerCalculationData> windTowerCalculationDataList, List<EquipmentAttribute> equipmentAttributeList,WindTowerInfo windTowerInfo) {
+//
+//        String heights = windTowerInfo.getHeights();
+//        for (String h : heights.split(",")) {
+//            List<EquipmentAttribute> wsEq = equipmentAttributeList.stream().filter(e -> e.getFieldName().equals(h + "awsMonth")).collect(Collectors.toList());
+//            List<WindTowerCalculationData> wsData = windTowerCalculationDataList.stream().filter(w -> w.getEbId().equals(wsEq.get(0).getId())).collect(Collectors.toList());
+//
+//
+//
+//
+//        }
+//
+//
+//    }
+
+
     /**
      * 风速和风速密度各月日变化表格
      *

+ 2 - 2
wrdep-biz/src/main/java/com/jiayue/biz/service/impl/DataRecalculationImpl.java

@@ -186,7 +186,7 @@ public class DataRecalculationImpl implements DataRecalculationService {
     public void systemCommandRWD() {
         try {
             Runtime runtime = Runtime.getRuntime();
-            List<WindTowerInfo> windTowerInfoList = windTowerInfoService.list();
+            List<WindTowerInfo> windTowerInfoList = windTowerInfoService.getAllWindTower();
             File file = new File("D:\\in\\");
             //遍历所有文件
             File[] files = file.listFiles();
@@ -261,7 +261,7 @@ public class DataRecalculationImpl implements DataRecalculationService {
             File[] files = file.listFiles();
             for (File f : files) {
                 //根据编号和记录仪号过滤
-                List<WindTowerInfo> windTowerInfoList = windTowerInfoService.list().stream().filter(wind -> wind.getEquipmentNo().equals(equipmentNo)
+                List<WindTowerInfo> windTowerInfoList = windTowerInfoService.getAllWindTower().stream().filter(wind -> wind.getEquipmentNo().equals(equipmentNo)
                         && wind.getRecorderNo().equals(recorderNo)).collect(Collectors.toList());
                 //测风塔编号和记录仪编号两个条件 能确保塔的唯一性
                 for (WindTowerInfo w : windTowerInfoList) {

+ 84 - 62
wrdep-biz/src/main/java/com/jiayue/biz/service/impl/EmailImpl.java

@@ -85,6 +85,9 @@ public class EmailImpl extends ServiceImpl<EmailMapper, Email> implements EmailS
             Properties prop = System.getProperties();
             prop.put("mail.imap.port", "993");
             prop.put("mail.imap.ssl.enable", true);
+            //如果设置,并且未指定套接字工厂,则启用MailSSLSocketFactory的使用。 如果设置为“ *”,则所有主机都是受信任的。
+            //如果设置为以空格分隔的主机列表,则这些主机是可信任的。 否则,信任取决于服务器提供的证书。(设置主机可信任)
+            prop.put("mail.imap.ssl.trust", host);
             //这部分就是解决异常的关键所在,设置IAMP ID信息
             HashMap IAM = new HashMap();
             //带上IMAP ID信息,由key和value组成,例如name,version,vendor,support-email等。
@@ -93,6 +96,7 @@ public class EmailImpl extends ServiceImpl<EmailMapper, Email> implements EmailS
             IAM.put("version", "1.0.0");
             IAM.put("vendor", "myclient");
             IAM.put("support-email", "testmail@test.com");
+
             try {
                 Session session = Session.getDefaultInstance(prop, null);
                 session.setDebug(false);
@@ -138,11 +142,13 @@ public class EmailImpl extends ServiceImpl<EmailMapper, Email> implements EmailS
     public void parseMessage(Message... messages) throws MessagingException, IOException, InterruptedException {
         if (messages == null || messages.length < 1)
             throw new MessagingException("未找到要解析的邮件!");
-
+        String subject = "";
         // 解析所有邮件
         for (int i = 0, count = messages.length; i < count; i++) {
             MimeMessage msg = (MimeMessage) messages[i];
             log.info("------------------解析第" + msg.getMessageNumber() + "封邮件-------------------- ");
+            //获取邮件主题
+            subject = getSubject(msg);
             boolean isContainerAttachment = isContainAttachment(msg);
             File file = new File(path);
             if (!file.exists()) {
@@ -159,7 +165,7 @@ public class EmailImpl extends ServiceImpl<EmailMapper, Email> implements EmailS
             log.info("------------------第" + msg.getMessageNumber() + "封邮件解析结束-------------------- ");
         }
         //执行系统命令转为txt文件sdf.parse("20220428")
-        systemCommand();
+        systemCommand(subject);
     }
 
     /**
@@ -357,7 +363,12 @@ public class EmailImpl extends ServiceImpl<EmailMapper, Email> implements EmailS
         //如果是文本类型的附件,通过getContent方法可以取到文本内容,但这不是我们需要的结果,所以在这里要做判断
         boolean isContainTextAttach = part.getContentType().indexOf("name") > 0;
         if (part.isMimeType("text/*") && !isContainTextAttach) {
-            content.append(part.getContent().toString());
+            try{
+                content.append(part.getContent().toString());
+            }catch(UnsupportedEncodingException e) {
+                InputStream is = part.getInputStream();
+                content.append(inputStream2String(is));
+            }
         } else if (part.isMimeType("message/rfc822")) {
             getMailTextContent((Part) part.getContent(), content);
         } else if (part.isMimeType("multipart/*")) {
@@ -370,6 +381,17 @@ public class EmailImpl extends ServiceImpl<EmailMapper, Email> implements EmailS
         }
     }
 
+    //处理编码错误问题
+    public static String inputStream2String(InputStream in)throws IOException   {
+        StringBuffer out = new StringBuffer();
+        byte[] b = new byte[4096];
+        for(int n; (n=in.read(b))!=-1;){
+            out.append(new String(b,0,n));
+        }
+        return out.toString();
+
+    }
+
     /**
      * 保存附件
      *
@@ -447,32 +469,22 @@ public class EmailImpl extends ServiceImpl<EmailMapper, Email> implements EmailS
     /**
      * 执行命令通过软件解压rld文件到D:\out\new\下
      */
-    public void systemCommand() {
+    public void systemCommand(String subject) {
         try {
             Runtime runtime = Runtime.getRuntime();
             File file = new File("D:\\in\\");
             //遍历所有文件
             File[] files = file.listFiles();
             for (File f : files) {
-                String[] fileType = f.getName().split("\\.");
-                if (fileType[1].equals("RWD")) {
+                String type = f.getName().split("\\.")[1];
+
+                if (type.equals("RWD")) {
                     //RWD文件类型
                     String id = f.getName().substring(0, 4);
                     //根据编号过滤
-                    List<WindTowerInfo> windTowerInfoList = windTowerInfoService.list().stream().filter(wind -> wind.getEquipmentNo().equals(id)).collect(Collectors.toList());
+                    List<WindTowerInfo> windTowerInfoList = windTowerInfoService.getByEquipmentNo(id);
                     //没有这个编号的塔
-                    if (windTowerInfoList.size() == 0) {
-                        List<EmailWindTowerInfo> emailWindTowerInfos = emailWindTowerInfoService.list().stream().filter(wind -> wind.getEquipmentNo().equals(id)).collect(Collectors.toList());
-                        if (emailWindTowerInfos.size() == 0) {
-                            //如果测风塔里面没有这个塔并且邮件测风塔里也没有这个塔 则添加到邮箱读取的测风塔表中
-                            EmailWindTowerInfo emailWindTowerInfo = new EmailWindTowerInfo();
-                            emailWindTowerInfo.setEquipmentNo(id);
-                            emailWindTowerInfoService.save(emailWindTowerInfo);
-                            log.info(id + " 测风塔信息里没有这个的塔 并且邮件测风塔里也没有这个塔");
-                        } else {
-                            log.info(id + " 测风塔信息里没有这个的塔 邮件测风塔里已存在这个塔");
-                        }
-                    }
+                    windTowerInfoType(id,windTowerInfoList);
                     for (WindTowerInfo w : windTowerInfoList) {
                         if (id.equals(w.getEquipmentNo())) {
                             if (w.getPassword().equals("")) {
@@ -503,39 +515,16 @@ public class EmailImpl extends ServiceImpl<EmailMapper, Email> implements EmailS
                         }
                     }
                     //转成txt后把文件移动到系统文件备份目录下
-                    File file2 = new File("D:\\in\\");
-                    File[] files2 = file2.listFiles();
                     //xls移动系统文件目录下
-                    for (File e : files2) {
-                        String[] str = e.getName().split("\\.");
-                        if (str[1].equals("RWD")) {
-                            FileUtil.move(e.getPath(), FileUtil.getSystemFilePath() + File.separator + str[0].substring(0, 4));
-                        } else {
-                            String[] strs = str[0].split("_");
-                            FileUtil.move(e.getPath(), FileUtil.getSystemFilePath() + File.separator + strs[0]);
-                        }
-                    }
+                    this.tranFile();
                     //把txt文件转成excel文件并解析
-                    String type = "RWD";
                     analysisDataService.analysisData(type);
-                } else {
+                } else if(type.equals("rld")){
                     //rld文件类型
                     String[] id = f.getName().split("_");
                     //根据编号过滤
-                    List<WindTowerInfo> windTowerInfoList = windTowerInfoService.list().stream().filter(wind -> wind.getEquipmentNo().equals(id[0])).collect(Collectors.toList());
-                    //没有这个编号的塔
-                    if (windTowerInfoList.size() == 0) {
-                        List<EmailWindTowerInfo> emailWindTowerInfos = emailWindTowerInfoService.list().stream().filter(wind -> wind.getEquipmentNo().equals(id[0])).collect(Collectors.toList());
-                        if (emailWindTowerInfos.size() == 0) {
-                            //如果测风塔里面没有这个塔并且邮件测风塔里也没有这个塔 则添加到邮箱读取的测风塔表中
-                            EmailWindTowerInfo emailWindTowerInfo = new EmailWindTowerInfo();
-                            emailWindTowerInfo.setEquipmentNo(id[0]);
-                            emailWindTowerInfoService.save(emailWindTowerInfo);
-                            log.info(id[0] + " 测风塔信息里没有这个的塔 并且邮件测风塔里也没有这个塔");
-                        } else {
-                            log.info(id[0] + " 测风塔信息里没有这个的塔 邮件测风塔里已存在这个塔");
-                        }
-                    }
+                    List<WindTowerInfo> windTowerInfoList = windTowerInfoService.getByEquipmentNo(id[0]);
+                    windTowerInfoType(id[0],windTowerInfoList);
                     //如果有   有可能会有编号相同 但是记录仪编号不同的情况 不解析看不到记录仪编号 所以只能用相同编号的测风塔密码解析
                     //如果是从邮件里读到的塔新增的话是没有数据密码的 所以需要人为的手动配置密码
                     for (WindTowerInfo w : windTowerInfoList) {
@@ -559,24 +548,19 @@ public class EmailImpl extends ServiceImpl<EmailMapper, Email> implements EmailS
                             }
                         }
                     }
+                    //转成txt后把文件移动到系统文件备份目录下
+                    //xls移动系统文件目录下
+                    this.tranFile();
+                    //把txt文件转成excel文件并解析
+                    analysisDataService.analysisData(type);
+                }else if(type.equals("csv")){
+                    String id = subject.substring(subject.indexOf("[") + 1, subject.lastIndexOf("]"));
+                    analysisDataService.acousticRadar(f,id);
+
+
 
                 }
-                //转成txt后把文件移动到系统文件备份目录下
-                File file1 = new File("D:\\in\\");
-                File[] files1 = file1.listFiles();
-                //xls移动系统文件目录下
-                for (File e : files1) {
-                    String[] str = e.getName().split("\\.");
-                    if (str[1].equals("RWD")) {
-                        FileUtil.move(e.getPath(), FileUtil.getSystemFilePath() + File.separator + str[0].substring(0, 4));
-                    } else {
-                        String[] strs = str[0].split("_");
-                        FileUtil.move(e.getPath(), FileUtil.getSystemFilePath() + File.separator + strs[0]);
-                    }
-                }
-                //把txt文件转成excel文件并解析
-                String type = "rld";
-                analysisDataService.analysisData(type);
+
             }
 
 
@@ -584,4 +568,42 @@ public class EmailImpl extends ServiceImpl<EmailMapper, Email> implements EmailS
             log.error("执行系统命令失败:" + e);
         }
     }
+
+    //检测是否存在
+    public void windTowerInfoType(String id, List<WindTowerInfo> windTowerInfoList) {
+        //没有这个编号的塔
+        if (windTowerInfoList.size() == 0) {
+            List<EmailWindTowerInfo> emailWindTowerInfos = emailWindTowerInfoService.list().stream().filter(wind -> wind.getEquipmentNo().equals(id)).collect(Collectors.toList());
+            if (emailWindTowerInfos.size() == 0) {
+                //如果测风塔里面没有这个塔并且邮件测风塔里也没有这个塔 则添加到邮箱读取的测风塔表中
+                EmailWindTowerInfo emailWindTowerInfo = new EmailWindTowerInfo();
+                emailWindTowerInfo.setEquipmentNo(id);
+                emailWindTowerInfoService.save(emailWindTowerInfo);
+                log.info(id + " 测风塔信息里没有这个的塔 并且邮件测风塔里也没有这个塔");
+            } else {
+                log.info(id + " 测风塔信息里没有这个的塔 邮件测风塔里已存在这个塔");
+            }
+        }
+
+    }
+
+    //转移文件
+    public void tranFile() throws Exception {
+        //转成txt后把文件移动到系统文件备份目录下
+        File file1 = new File("D:\\in\\");
+        File[] files1 = file1.listFiles();
+        //xls移动系统文件目录下
+        for (File e : files1) {
+            String[] str = e.getName().split("\\.");
+            if (str[1].equals("RWD")) {
+                FileUtil.move(e.getPath(), FileUtil.getSystemFilePath() + File.separator + str[0].substring(0, 4));
+            } else {
+                String[] strs = str[0].split("_");
+                FileUtil.move(e.getPath(), FileUtil.getSystemFilePath() + File.separator + strs[0]);
+            }
+        }
+    }
+
+
+
 }

+ 45 - 37
wrdep-biz/src/main/java/com/jiayue/biz/service/impl/HomePageServiceImpl.java

@@ -90,7 +90,7 @@ public class HomePageServiceImpl extends ServiceImpl<WindTowerDataParentTableMap
      * @return Map<String, Object>
      */
     public Map<String, Object> getWsAndWpdForHeight(String equipmentId, String month) {
-        List<WindTowerInfo> windTowerInfoList = windTowerInfoService.lambdaQuery().eq(WindTowerInfo::getEquipmentNo, equipmentId).list();
+        List<WindTowerInfo> windTowerInfoList = windTowerInfoService.getByEquipmentNo(equipmentId);
         String[] heights = windTowerInfoList.get(0).getHeights().split(",");
         //获取最后一条记录
         WindTowerCalculationData lastDataCalculation = windTowerCalculationDataService.getLastDataCalculation(equipmentId);
@@ -151,7 +151,7 @@ public class HomePageServiceImpl extends ServiceImpl<WindTowerDataParentTableMap
 
         HashMap<String, Object> everyMap = new HashMap();
 
-        List<WindTowerInfo> windTowerInfoList = windTowerInfoService.lambdaQuery().eq(WindTowerInfo::getEquipmentNo, equipmentId).list();
+        List<WindTowerInfo> windTowerInfoList = windTowerInfoService.getByEquipmentNo(equipmentId);
         String[] heights = windTowerInfoList.get(0).getHeights().split(",");
         //获取最后一条记录
         WindTowerCalculationData lastDataCalculation = windTowerCalculationDataService.getLastDataCalculation(equipmentId);
@@ -250,7 +250,7 @@ public class HomePageServiceImpl extends ServiceImpl<WindTowerDataParentTableMap
             Date startDay = DateTimeUtil.getDayStartTime(new Date().getTime() - 1000 * 60 * 60 * 24);
             Date endDay = DateTimeUtil.getDayLastTime(new Date().getTime() - 1000 * 60 * 60 * 24);
             /*测风塔设备*/
-            List<WindTowerInfo> windTowerInfoList = windTowerInfoService.list();
+            List<WindTowerInfo> windTowerInfoList = windTowerInfoService.getAllWindTower();
             List<StatisticsSituation> statisticsSituationList = iStatisticsSituationService.list();
             /*系统昨日的时间戳*/
             long date = DateTimeUtil.getDayStartTime(new Date().getTime()).getTime() - 86400000;
@@ -328,7 +328,7 @@ public class HomePageServiceImpl extends ServiceImpl<WindTowerDataParentTableMap
             List<ElectricStation> electricStationList = electricStationService.list();
             /*测风塔设备*/
 //            List<WindTowerInfo> windTowerInfoList = windTowerInfoService.list();
-            List<WindTowerInfo> windTowerInfoList = windTowerInfoService.lambdaQuery().list();
+            List<WindTowerInfo> windTowerInfoList = windTowerInfoService.getAllWindTower();
             /*项目塔信息*/
             List<Map<String, Object>> projectTowerList = projectTowerMap(projectList, windTowerInfoList);
             list.addAll(projectTowerList);
@@ -505,7 +505,7 @@ public class HomePageServiceImpl extends ServiceImpl<WindTowerDataParentTableMap
      * @return Map<String, BigDecimal>
      */
     public Map<String, Object> getAirAndPaAndT(String equipmentId, String month) {
-        List<WindTowerInfo> windTowerInfoList = windTowerInfoService.lambdaQuery().eq(WindTowerInfo::getEquipmentNo, equipmentId).list();
+        List<WindTowerInfo> windTowerInfoList = windTowerInfoService.getByEquipmentNo(equipmentId);
         String[] wdHeight = windTowerInfoList.get(0).getWdHeights().split(",");
 
         ArrayList<String> arrayList = new ArrayList(Arrays.asList(windTowerInfoList.get(0).getHeights().split(",")));
@@ -825,7 +825,7 @@ public class HomePageServiceImpl extends ServiceImpl<WindTowerDataParentTableMap
     public List<SelectLabForVal> projectSelect() {
 
         List<Project> projectList = projectService.list();
-        List<WindTowerInfo> windTowerInfoList = windTowerInfoService.list();
+        List<WindTowerInfo> windTowerInfoList = windTowerInfoService.getAllWindTower();
 
         ArrayList<SelectLabForVal> selectList = new ArrayList<>();
         for (Project project : projectList) {
@@ -970,42 +970,27 @@ public class HomePageServiceImpl extends ServiceImpl<WindTowerDataParentTableMap
         HashMap<String, Object> dataMap = new HashMap<>();
         if (stationInfoList.size() > 0) {
             ArrayList<HashMap<String, Object>> arrayList = new ArrayList<>();
-            //根据风机类型分组
-            Map<String, List<FanTower>> modelMap = stationInfoList.get(0).getFanTowerList().stream()
-                    .collect(Collectors.groupingBy(FanTower::getFanModel));
-            //遍历map指定key
-            for (Map.Entry<String, List<FanTower>> entry : modelMap.entrySet()) {
-                for (FanModelData fanModelData : collect) {
-                    if (fanModelData.getModelName().equals(entry.getKey())) {
-                        HashMap<String, Object> map = new HashMap<>();
-                        //风机名称
-                        map.put("modelType", entry.getKey());
-                        //风机数量
-                        map.put("modelTotal", entry.getValue().size());
-                        //满发小时数
-                        map.put("wsAve", fanModelData.getWsAve());
-                        //主风向
-                        map.put("wdSum", fanModelData.getWdSum());
-                        //发电量
-                        map.put("generatingCapacity", fanModelData.getGeneratingCapacity());
-                        //满发小时数
-                        map.put("realTimeTotal", fanModelData.getRealTimeTotal());
-                        arrayList.add(map);
-
-                    }
+            if (stationInfoList.get(0).getStationBasicInfo().getStationType().equals("风")) {
+                //根据风机类型分组
+                Map<String, List<FanTower>> modelMap = stationInfoList.get(0).getFanTowerList().stream()
+                        .collect(Collectors.groupingBy(FanTower::getFanModel));
+                //遍历map指定key
+                for (Map.Entry<String, List<FanTower>> entry : modelMap.entrySet()) {
+                    dataPag(collect, entry.getKey(), entry.getValue().size(), arrayList);
                 }
+            } else {
+                //根据逆变器类型分组
+                Map<String, List<InverterInfo>> modelMap = stationInfoList.get(0).getInverterInfos().stream()
+                        .collect(Collectors.groupingBy(InverterInfo::getModelNumber));
+
+                //遍历map指定key
+                for (Map.Entry<String, List<InverterInfo>> entry : modelMap.entrySet()) {
+                    dataPag(collect, entry.getKey(), entry.getValue().size(), arrayList);
 
+                }
             }
             //过滤塔信息
             StationInfo stationInfo = stationInfoList.get(0);
-//            if (stationInfo.getEquipment() != null && stationInfo.getEquipment().size() > 0) {
-//                dataMap.put("longitude", stationInfo.getEquipment().get(0).getLongitude());
-//                dataMap.put("latitude", stationInfo.getEquipment().get(0).getLatitude());
-//            }
-//            if (stationInfo.getFanTowerList() != null && stationInfo.getFanTowerList().size() > 0) {
-//                dataMap.put("longitude", stationInfo.getFanTowerList().get(0).getLongitudeFan());
-//                dataMap.put("latitude", stationInfo.getFanTowerList().get(0).getLatitudeFan());
-//            }
             dataMap.put("longitude", stationInfo.getStationBasicInfo().getLongitude());
             dataMap.put("latitude", stationInfo.getStationBasicInfo().getLatitude());
 
@@ -1014,6 +999,29 @@ public class HomePageServiceImpl extends ServiceImpl<WindTowerDataParentTableMap
         return dataMap;
     }
 
+    //组装数据
+    public void dataPag(List<FanModelData> collect, String key, int size, ArrayList<HashMap<String, Object>> arrayList) {
+        for (FanModelData fanModelData : collect) {
+            if (fanModelData.getModelName().equals(key)) {
+                HashMap<String, Object> map = new HashMap<>();
+                //风机名称
+                map.put("modelType", key);
+                //风机数量
+                map.put("modelTotal", size);
+                //平均风速
+                map.put("wsAve", fanModelData.getWsAve());
+                //主风向
+                map.put("wdSum", fanModelData.getWdSum());
+                //发电量
+                map.put("generatingCapacity", fanModelData.getGeneratingCapacity());
+                //等效小时数
+                map.put("realTimeTotal", size == 0 ? 0 : fanModelData.getRealTimeTotal());
+                arrayList.add(map);
+
+            }
+        }
+    }
+
     /**
      * 风场站测风塔下拉框
      *

+ 3 - 3
wrdep-biz/src/main/java/com/jiayue/biz/service/impl/PdfServiceImpl.java

@@ -67,7 +67,7 @@ public class PdfServiceImpl extends ServiceImpl<WindTowerDataParentTableMapper,
         //所有类型数据
         List<EquipmentAttribute> equipmentAttributeList = equipmentAttributeService.list();
         //所有测风塔信息
-        List<WindTowerInfo> windTowerInfoList = windTowerInfoService.list();
+        List<WindTowerInfo> windTowerInfoList = windTowerInfoService.getAllWindTower();
         List<WindTowerInfo> windTowerInfos = windTowerInfoList.stream().filter(w -> w.getEquipmentNo().equals(equipmentId)).collect(Collectors.toList());
 //        List<WindTowerInfo> windTowerInfos = windTowerInfoService.getByEquipmentNo(equipmentId);
         //计算完整性
@@ -374,7 +374,7 @@ public class PdfServiceImpl extends ServiceImpl<WindTowerDataParentTableMapper,
      * @return
      */
     public List<Map<String, Object>> getDataTime() {
-        List<WindTowerInfo> windTowerInfoList = windTowerInfoService.list();
+        List<WindTowerInfo> windTowerInfoList = windTowerInfoService.getAllWindTower();
         ArrayList<Map<String, Object>> timeList = new ArrayList<>();
         for (WindTowerInfo windTowerInfo : windTowerInfoList) {
             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
@@ -394,7 +394,7 @@ public class PdfServiceImpl extends ServiceImpl<WindTowerDataParentTableMapper,
      * @return
      */
     public List<Map<String, Object>> getDataTimeForEveryTower() {
-        List<WindTowerInfo> windTowerInfoList = windTowerInfoService.list();
+        List<WindTowerInfo> windTowerInfoList = windTowerInfoService.getAllWindTower();
         List<WindTowerInfo> collect = windTowerInfoList.stream().sorted(Comparator.comparing(WindTowerInfo::getEquipmentNo)).collect(Collectors.toList());
         ArrayList<Map<String, Object>> timeList = new ArrayList<>();
         for (WindTowerInfo windTowerInfo : collect) {

+ 5 - 4
wrdep-biz/src/main/java/com/jiayue/biz/service/impl/RealTimeDisplayServiceImpl.java

@@ -190,7 +190,7 @@ public class RealTimeDisplayServiceImpl implements RealTimeDisplayService {
         }
         // 测风塔数据集合
         List<ProphaseAnemometryData> prophaseAnemometryDataList = prophaseAnemometryDataService.selectAve(equipmentId, new Timestamp(startTime), new Timestamp(endTime));
-        List<WindTowerInfo> windTowerInfoList = windTowerInfoService.lambdaQuery().eq(WindTowerInfo::getEquipmentNo, equipmentId).list();
+        List<WindTowerInfo> windTowerInfoList = windTowerInfoService.getByEquipmentNo(equipmentId);
         String[] wdHeight = windTowerInfoList.get(0).getWdHeights().split(",");
         if (height == null || height.equals("")) {
             height = windTowerInfoService.getWsHeights(equipmentId);
@@ -377,7 +377,8 @@ public class RealTimeDisplayServiceImpl implements RealTimeDisplayService {
      */
     public List<Map<String, Object>> getStartTimeAndEndTime() {
         List<Map<String, Object>> list = new ArrayList<>();
-        List<WindTowerInfo> windTowerInfoList = windTowerInfoService.lambdaQuery().list();
+        List<WindTowerInfo> windTowerInfoList = windTowerInfoService.getAllWindTower();
+
         for (WindTowerInfo windTowerInfo : windTowerInfoList) {
             HashMap<String, Object> hashMap = new HashMap<>();
             //获取最后一条数据
@@ -511,7 +512,7 @@ public class RealTimeDisplayServiceImpl implements RealTimeDisplayService {
             for (ProphaseWeatherData prophaseWeatherDatum : prophaseWeatherData) {
                 List<ProphaseAnemometryData> anemometryData = prophaseAnemometryData.stream().filter(p -> p.getTs().getTime() == prophaseWeatherDatum.getTs().getTime()).collect(Collectors.toList());
                 if (anemometryData.size() > 0) {
-                    tenMinuteWpdSum = tenMinuteWpdSum.add(CalculationUtil.getWpdCalculate(CalculationUtil.getBigDecimal(prophaseWeatherDatum.getAirDensity()),CalculationUtil.getBigDecimal(anemometryData.get(0).getWsAve())));
+                    tenMinuteWpdSum = tenMinuteWpdSum.add(CalculationUtil.getWpdCalculate(CalculationUtil.getBigDecimal(prophaseWeatherDatum.getAirDensity()), CalculationUtil.getBigDecimal(anemometryData.get(0).getWsAve())));
                     tenMinuteWsSum = tenMinuteWsSum.add(BigDecimal.valueOf(anemometryData.get(0).getWsAve()));
                 }
             }
@@ -695,7 +696,7 @@ public class RealTimeDisplayServiceImpl implements RealTimeDisplayService {
      * @param eqId
      * @param height
      */
-    public List<Map<String, Object>> getWindShear(Long startTime, Long endTime, String eqId, String height,String heightMin) {
+    public List<Map<String, Object>> getWindShear(Long startTime, Long endTime, String eqId, String height, String heightMin) {
         List<ProphaseAnemometryData> anemometryData = prophaseAnemometryDataService.selectWdAveAndWdAveAndWsSta(eqId, new Timestamp(startTime), new Timestamp(endTime));
 //        String[] heights = windTowerInfoService.getByEquipmentNo(eqId).get(0).getHeights().split(",");
 //        ArrayList<String> heightAll = new ArrayList<>(Arrays.asList(heights));

+ 2 - 2
wrdep-biz/src/main/java/com/jiayue/biz/service/impl/StationInfoServiceImpl.java

@@ -104,7 +104,7 @@ public class StationInfoServiceImpl implements StationInfoService {
 
     //保存
     public void saveStationInfo(StationInfoDto stationInfoDto) {
-        List<WindTowerInfo> list = windTowerInfoService.list();
+        List<WindTowerInfo> list = windTowerInfoService.getAllWindTower();
         List<WeatherStationInfo> weatherStationInfoList = weatherStationInfoService.list();
         stationInfoDto.setId(UUID.randomUUID().toString());
         StationInfo stationInfo = new StationInfo();
@@ -130,7 +130,7 @@ public class StationInfoServiceImpl implements StationInfoService {
 
     //更新
     public void updateStationInfo(StationInfoDto stationInfoDto) {
-        List<WindTowerInfo> list = windTowerInfoService.list();
+        List<WindTowerInfo> list = windTowerInfoService.getAllWindTower();
 
         List<WeatherStationInfo> weatherStationInfoList = weatherStationInfoService.list();
         StationInfo stationInfo = getOneStationInfo(stationInfoDto.getId());

+ 1 - 1
wrdep-biz/src/main/java/com/jiayue/biz/service/impl/SysFileServiceImpl.java

@@ -83,7 +83,7 @@ public class SysFileServiceImpl {
                 if (!file.exists()) {
                     file.mkdirs();
                 }
-                List<WindTowerInfo> windTowerInfoList = windTowerInfoService.list();
+                List<WindTowerInfo> windTowerInfoList = windTowerInfoService.getAllWindTower();
                 //生成名为 测风塔编号 的文件夹
                 for (WindTowerInfo w : windTowerInfoList) {
                     File files = new File(initPath + File.separator + w.getName());

+ 7 - 7
wrdep-biz/src/main/java/com/jiayue/biz/service/impl/WindTowerCalculationDataServiceImpl.java

@@ -86,7 +86,7 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
         List<ProphaseAnemometryData> anemometryDataList = prophaseAnemometryDataList.stream().filter(p -> p.getTs().getTime() >= startTime && p.getTs().getTime() <= endTime).collect(Collectors.toList());
         List<ProphaseWeatherData> weatherDataList = prophaseWeatherDataList.stream().filter(p -> p.getTs().getTime() >= startTime && p.getTs().getTime() <= endTime).collect(Collectors.toList());
         long hour = 3600000L;
-        List<WindTowerInfo> windTowerInfos = windTowerInfoService.lambdaQuery().eq(WindTowerInfo::getEquipmentNo, eqNo).list();
+        List<WindTowerInfo> windTowerInfos = windTowerInfoService.getByEquipmentNo(eqNo);
         String[] height = windTowerInfos.get(0).getHeights().split(",");
         //定义数据空集合用来装载 结果数据
         ArrayList<WindTowerCalculationData> list = new ArrayList<>();
@@ -422,7 +422,7 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
         ArrayList<Object> arrList = new ArrayList<>();
         //装平均值
         ArrayList<Object> list1 = new ArrayList<>();
-        List<WindTowerInfo> windTowerInfos = windTowerInfoService.lambdaQuery().eq(WindTowerInfo::getEquipmentNo, eqId).list();
+        List<WindTowerInfo> windTowerInfos = windTowerInfoService.getByEquipmentNo(eqId);
         if (height == null || height.equals("")) {
             for (WindTowerInfo windTowerInfo : windTowerInfos) {
                 height = windTowerInfo.getHeights();
@@ -568,7 +568,7 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
         calendar1.roll(Calendar.DAY_OF_YEAR, -1);
         //获取年份最后一天
         endTime = calendar1.getTime().getTime();
-        List<WindTowerInfo> windTowerInfos = windTowerInfoService.lambdaQuery().eq(WindTowerInfo::getEquipmentNo, eqId).list();
+        List<WindTowerInfo> windTowerInfos = windTowerInfoService.getByEquipmentNo(eqId);
         if (height == null || height.equals("")) {
             height = windTowerInfos.get(0).getHeights();
         }
@@ -744,7 +744,7 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
 
         String[] heights = null;
         if (height == null || height.equals("")) {
-            List<WindTowerInfo> windTowerInfos = windTowerInfoService.lambdaQuery().eq(WindTowerInfo::getEquipmentNo, eqId).list();
+            List<WindTowerInfo> windTowerInfos = windTowerInfoService.getByEquipmentNo(eqId);
             heights = windTowerInfos.get(0).getHeights().split(",");
         } else {
             heights = height.split(",");
@@ -934,7 +934,7 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
         ArrayList<Object> arrList = new ArrayList<>();
         //装平均值
         ArrayList<Object> list1 = new ArrayList<>();
-        List<WindTowerInfo> windTowerInfos = windTowerInfoService.lambdaQuery().eq(WindTowerInfo::getEquipmentNo, eqId).list();
+        List<WindTowerInfo> windTowerInfos = windTowerInfoService.getByEquipmentNo(eqId);
         if (height == null || height.equals("")) {
             height = windTowerInfos.get(0).getHeights();
         }
@@ -1095,7 +1095,7 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
         //装平均值
         ArrayList<Object> list1 = new ArrayList<>();
         List<String> heightSort = new ArrayList<>();
-        List<WindTowerInfo> windTowerInfos = windTowerInfoService.lambdaQuery().eq(WindTowerInfo::getEquipmentNo, eqId).list();
+        List<WindTowerInfo> windTowerInfos = windTowerInfoService.getByEquipmentNo(eqId);
         //给前端用的日期格式
         SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM");
 
@@ -1946,7 +1946,7 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
         log.info("开始计算小时风切变指数");
         long startHour = startTime.getTime();
         long endHour = endTime.getTime();
-        List<WindTowerInfo> windTowerInfoList = windTowerInfoService.lambdaQuery().eq(WindTowerInfo::getEquipmentNo, equipmentId).list();
+        List<WindTowerInfo> windTowerInfoList = windTowerInfoService.getByEquipmentNo(equipmentId);
         String[] heights = windTowerInfoList.get(0).getHeights().split(",");
         ArrayList<WindTowerCalculationData> listAll = new ArrayList<>();
         //时间段内所有风数据

+ 6 - 9
wrdep-biz/src/main/java/com/jiayue/biz/service/impl/WindTowerDataParentTableServiceImpl.java

@@ -14,10 +14,7 @@ import com.jiayue.biz.domain.*;
 import com.jiayue.biz.mapper.ProphaseAnemometryDataMapper;
 import com.jiayue.biz.mapper.ProphaseWeatherDataMapper;
 import com.jiayue.biz.mapper.WindTowerDataParentTableMapper;
-import com.jiayue.biz.service.ProphaseAnemometryDataService;
-import com.jiayue.biz.service.ProphaseWeatherDataService;
-import com.jiayue.biz.service.WindTowerDataChildTableService;
-import com.jiayue.biz.service.WindTowerDataParentTableService;
+import com.jiayue.biz.service.*;
 import com.jiayue.biz.util.CalculationUtil;
 import com.jiayue.biz.util.CommonUtil;
 import com.jiayue.biz.util.DateTimeUtil;
@@ -90,7 +87,7 @@ public class WindTowerDataParentTableServiceImpl extends ServiceImpl<WindTowerDa
             simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm");
         }
         String eqNo = equipmentId;
-        List<WindTowerInfo> windTowerInfoList = windTowerInfoService.list();
+        List<WindTowerInfo> windTowerInfoList = windTowerInfoService.getAllWindTower();
         List<WindTowerInfo> windTowerInfo = windTowerInfoList.stream().filter(w -> w.getEquipmentNo().equals(eqNo)).collect(Collectors.toList());
         String windTowerInfoHeights = windTowerInfo.get(0).getHeights();
         String windTowerInfoWdHeights = windTowerInfo.get(0).getWdHeights();
@@ -220,7 +217,7 @@ public class WindTowerDataParentTableServiceImpl extends ServiceImpl<WindTowerDa
         String eqNo = equipmentId;
         List<EquipmentAttribute> equipmentAttributeList = equipmentAttributeService.list();
         List<EquipmentAttribute> heightList = equipmentAttributeList.stream().filter(e -> "height".equals(e.getAttributeFunction())).collect(Collectors.toList());
-        List<WindTowerInfo> windTowerInfoList = windTowerInfoService.list();
+        List<WindTowerInfo> windTowerInfoList = windTowerInfoService.getAllWindTower();
         List<WindTowerInfo> windTowerInfo = windTowerInfoList.stream().filter(w -> w.getEquipmentNo().equals(eqNo)).collect(Collectors.toList());
         String windTowerInfoHeights = windTowerInfo.get(0).getHeights();
         String windTowerInfoWdHeights = windTowerInfo.get(0).getWdHeights();
@@ -471,7 +468,7 @@ public class WindTowerDataParentTableServiceImpl extends ServiceImpl<WindTowerDa
     //通道数据保存
     public void saveDataForTunnel(HashMap<String, BigDecimal> dataMap, HashSet<Integer> heightSet, String equipmentNo, String time) {
         WindTowerDataParentTable windTowerDataParentTable = new WindTowerDataParentTable();
-        List<WindTowerInfo> windTowerInfos = windTowerInfoService.lambdaQuery().eq(WindTowerInfo::getType, "2").eq(WindTowerInfo::getEquipmentNo, "3002").list();
+        List<WindTowerInfo> windTowerInfos = windTowerInfoService.getByEquipmentNo(equipmentNo).stream().filter(w -> w.getType().equals("2")).collect(Collectors.toList());
         String id = String.valueOf(UUID.randomUUID());
         List<EquipmentAttribute> equipmentAttributes = equipmentAttributeService.lambdaQuery().eq(EquipmentAttribute::getAttributeFunction, "height").list();
         List<WindTowerDataChildTable> windTowerDataChildTableList = new ArrayList<>();
@@ -656,7 +653,7 @@ public class WindTowerDataParentTableServiceImpl extends ServiceImpl<WindTowerDa
         lambdaQueryWrapper.eq(ProphaseAnemometryData::getEquipmentId, equipmentId);
         lambdaQueryWrapper.between(ProphaseAnemometryData::getTs, startTime, endTime);
         //获取测风塔数据
-        List<WindTowerInfo> list = windTowerInfoService.lambdaQuery().eq(WindTowerInfo::getEquipmentNo, equipmentId).list();
+        List<WindTowerInfo> list = windTowerInfoService.getByEquipmentNo(equipmentId);
         List<Map<String, Object>> mapList = new ArrayList<>();
         List<ProphaseAnemometryData> prophaseAnemometryPublicData = prophaseAnemometryDataService.list(lambdaQueryWrapper);
         List<ProphaseWeatherData> prophaseAnemometryPublicDataList = prophaseWeatherDataService.selectPublicData(equipmentId, startTime, endTime);
@@ -840,7 +837,7 @@ public class WindTowerDataParentTableServiceImpl extends ServiceImpl<WindTowerDa
                     if (time >= startTime && time <= endTime) {
                         return file;
                     }
-                }else if(name.contains(".elog")){
+                } else if (name.contains(".elog")) {
                     String[] elogNameTime = name.split("_");
                     long time = DateUtil.parse(elogNameTime[1], "yyyyMMdd").getTime();
                     if (time >= startTime && time <= endTime) {

+ 25 - 11
wrdep-biz/src/main/java/com/jiayue/biz/service/impl/WindTowerInfoServiceImpl.java

@@ -4,6 +4,7 @@ import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.jiayue.biz.domain.StatisticsSituation;
+import com.jiayue.common.core.redis.RedisCache;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -14,6 +15,7 @@ import com.jiayue.biz.service.WindTowerInfoService;
 import java.sql.Struct;
 import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 /**
@@ -27,6 +29,9 @@ public class WindTowerInfoServiceImpl extends ServiceImpl<WindTowerInfoMapper, W
     @Autowired
     StatisticsSituationServiceImpl statisticsSituationService;
 
+    @Autowired
+    RedisCache redisCache;
+
     @Override
     public List<WindTowerInfo> getDashAllWindInfo() {
         List list = new ArrayList();
@@ -43,6 +48,14 @@ public class WindTowerInfoServiceImpl extends ServiceImpl<WindTowerInfoMapper, W
         return list;
     }
 
+    //获取所有测风塔信息
+    public List<WindTowerInfo> getAllWindTower(){
+        if(redisCache.getCacheObject("getAllWindTower") == null){
+            redisCache.setCacheObject("getAllWindTower",this.list(),24, TimeUnit.HOURS);
+        }
+        return redisCache.getCacheObject("getAllWindTower");
+    }
+
     /**
      * 新建测风塔时生成对应的测风塔表
      *
@@ -50,10 +63,10 @@ public class WindTowerInfoServiceImpl extends ServiceImpl<WindTowerInfoMapper, W
      * @return
      */
     public boolean saveWindTowerInfo(WindTowerInfo windTowerInfo) {
-        baseMapper.createTable("wind_tower_data_child_table_" + windTowerInfo.getEquipmentNo());
         baseMapper.createCalculationTable("wind_tower_calculation_data_" + windTowerInfo.getEquipmentNo());
-        baseMapper.createParentTable("wind_tower_data_parent_table_" + windTowerInfo.getEquipmentNo());
-        return this.save(windTowerInfo);
+        boolean save = this.save(windTowerInfo);
+        redisCache.setCacheObject("getAllWindTower",this.list(),24, TimeUnit.HOURS);
+        return save;
     }
 
     /**
@@ -65,22 +78,19 @@ public class WindTowerInfoServiceImpl extends ServiceImpl<WindTowerInfoMapper, W
     public boolean deleteWindTowerInfo(List<String> ids) {
         for (String id : ids) {
             WindTowerInfo w = this.getById(id);
-            baseMapper.deleteTable("wind_tower_data_child_table_" + w.getEquipmentNo());
             baseMapper.deleteCalculationTable("wind_tower_calculation_data_" + w.getEquipmentNo());
-            baseMapper.deleteParentTable("wind_tower_data_parent_table_" + w.getEquipmentNo());
         }
-        return this.removeByIds(ids);
+        boolean b = this.removeByIds(ids);
+        redisCache.setCacheObject("getAllWindTower",this.list(),24, TimeUnit.HOURS);
+        return b;
     }
 
     /*
      * 根据设备编号查询测风塔信息
      */
     public List<WindTowerInfo> getByEquipmentNo(String equipmentNo) {
-        QueryWrapper<WindTowerInfo> wrapper = new QueryWrapper();
-        if (equipmentNo != null && !equipmentNo.equals("")) {
-            wrapper.eq("equipment_no", equipmentNo);
-        }
-        return baseMapper.selectList(wrapper);
+        List<WindTowerInfo> allWindTower = getAllWindTower();
+        return allWindTower.stream().filter(w -> w.getEquipmentNo().equals(equipmentNo)).collect(Collectors.toList());
     }
 
     /*
@@ -110,6 +120,9 @@ public class WindTowerInfoServiceImpl extends ServiceImpl<WindTowerInfoMapper, W
     }
 
     public List<Map<String, String>> listEquipmentIdAndDataTime() {
+        if (redisCache.getCacheObject("listEquipmentIdAndDataTime") != null) {
+            return redisCache.getCacheObject("listEquipmentIdAndDataTime");
+        }
         //TODO韩雪峰  新建的塔没有统计概述的时候无法显示  需要考虑到这种情况
         List<WindTowerInfo> windTowerInfoList = this.list();
         List<StatisticsSituation> statisticsSituationList = statisticsSituationService.list();
@@ -162,6 +175,7 @@ public class WindTowerInfoServiceImpl extends ServiceImpl<WindTowerInfoMapper, W
             }
         }
         mapList.addAll(statusMapList);
+        redisCache.setCacheObject("listEquipmentIdAndDataTime", mapList, 12, TimeUnit.HOURS);
         return mapList;
     }
 

+ 1 - 1
wrdep-biz/src/main/java/com/jiayue/biz/util/CalculationUtil.java

@@ -378,7 +378,7 @@ public class CalculationUtil {
                 BigDecimal wsAveMin = getAvgWind(minHeightForWsList);
                 double z = new BigDecimal(getNumberFromString(maxHeight)).divide(new BigDecimal(getNumberFromString(minHeight)),8,RoundingMode.HALF_UP).doubleValue();
                 double z1 = Math.log10(z);
-                if(wsAveMin.compareTo(BigDecimal.ZERO) > 0){
+                if(wsAveForMax.compareTo(BigDecimal.ZERO) > 0 && wsAveMin.compareTo(BigDecimal.ZERO) > 0 && z1 != 0){
                     BigDecimal shear = Convert.toBigDecimal(Math.log10(Convert.toDouble(wsAveForMax.divide(wsAveMin,8,RoundingMode.HALF_UP))))
                             .divide(BigDecimal.valueOf(z1), 8, RoundingMode.HALF_UP);
                     sumWShear = sumWShear.add(shear);

文件差異過大導致無法顯示
+ 7 - 6
wrdep-biz/src/test/java/service/TDengineTest.java


部分文件因文件數量過多而無法顯示