Quellcode durchsuchen

风切变玫瑰图计算逻辑 修改首页风速起始时间

hxf vor 1 Jahr
Ursprung
Commit
f7109320d0

+ 5 - 0
neim-biz/src/main/java/com/jiayue/biz/service/impl/HomePageServiceImpl.java

@@ -158,6 +158,11 @@ public class HomePageServiceImpl extends ServiceImpl<WindTowerDataParentTableMap
         Date yearDay = DateTimeUtil.getYearDay(lastDataCalculation.getTime().getTime());
         //获取去年月份开始时间
         Date beginTime = DateUtil.offsetMonth(DateUtil.beginOfMonth(yearDay), 1);
+        Map<String, Long> startAndEnd = prophaseWeatherDataService.getDataTimeStartAndEnd(equipmentId);
+
+        if(beginTime.getTime() < startAndEnd.get("startTime")){
+            beginTime = DateUtil.beginOfDay(new Date(startAndEnd.get("startTime")));
+        }
         Date endTime = lastDataCalculation.getTime();
 
         List<EquipmentAttribute> equipmentAttributeList = equipmentAttributeService.lambdaQuery().likeLeft(EquipmentAttribute::getFieldName, "awsDay").list();

+ 12 - 14
neim-biz/src/main/java/com/jiayue/biz/service/impl/RealTimeDisplayServiceImpl.java

@@ -723,28 +723,26 @@ public class RealTimeDisplayServiceImpl implements RealTimeDisplayService {
      */
     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));
-//        //获取最小层高
-//        List<Integer> collect = heightAll.stream().map(h -> {
-//            return Integer.parseInt(CalculationUtil.getNumberFromString(h));
-//        }).sorted().collect(Collectors.toList());
-//        String finalHeight = height;
-//        if (height.contains("A")) {
-//            finalHeight = height.substring(0, height.length() - 1);
-//        }
-
-
         BigDecimal zero = new BigDecimal(0);
         List<Map<String, Object>> list = new ArrayList<>();
+        //获取低层高风速所有数据
+        List<ProphaseAnemometryData> mixWindOrgList = anemometryData.stream().filter(a -> a.getLayerHeight().equals(heightMin)).collect(Collectors.toList());
         for (WindDirectionEnum value : WindDirectionEnum.values()) {
             Map<String, Object> map = new HashMap<>();
             List<ProphaseAnemometryData> heightAndWindDirectionEnum = CalculationUtil.getForHeightAndWindDirectionEnum(anemometryData, value);
+            //筛选出高层高风数据
+            List<ProphaseAnemometryData> maxWindList = heightAndWindDirectionEnum.stream().filter(val -> val.getLayerHeight().equals(height)).collect(Collectors.toList());
+            ArrayList<ProphaseAnemometryData> minWindList = new ArrayList<>();
+            //遍历获取同一时间点 低层高的数据
+            for (ProphaseAnemometryData wind : maxWindList) {
+                ProphaseAnemometryData prophaseAnemometryData = mixWindOrgList.stream().filter(m -> m.getTs().getTime() == wind.getTs().getTime()).collect(Collectors.toList()).get(0);
+                minWindList.add(prophaseAnemometryData);
 
+            }
             //获取平均风速
-            BigDecimal avgWindSpeed = CalculationUtil.getAvgWind(CalculationUtil.getWsForHeight(heightAndWindDirectionEnum, height));
+            BigDecimal avgWindSpeed = CalculationUtil.getAvgWind(CalculationUtil.getWsForHeight(maxWindList, height));
 
-            BigDecimal avgWindSpeed10 = CalculationUtil.getAvgWind(CalculationUtil.getWsForHeight(heightAndWindDirectionEnum, heightMin));
+            BigDecimal avgWindSpeed10 = CalculationUtil.getAvgWind(CalculationUtil.getWsForHeight(minWindList, heightMin));
             BigDecimal bigDecimal = new BigDecimal(-99);
             if (avgWindSpeed10.compareTo(BigDecimal.ZERO) != 0) {
                 bigDecimal = CalculationUtil.caWindShear(avgWindSpeed, avgWindSpeed10, new BigDecimal(height), new BigDecimal(heightMin));