Bladeren bron

修改风切变计算逻辑

hxf 2 jaren geleden
bovenliggende
commit
f55e3fe0a7

+ 6 - 0
neim-biz/src/main/java/com/jiayue/biz/mapper/ProphaseAnemometryDataMapper.java

@@ -58,4 +58,10 @@ public interface ProphaseAnemometryDataMapper extends BaseMapper<ProphaseAnemome
     //根据层高和设备编号查询风向
     @Select("SELECT t1.ts,t1.ws_ave,t1.ws_sta,t1.wd_ave FROM prophase_anemometry_data t1 where t1.layer_height = #{height} and t1.equipment_id = #{equipmentId} and  t1.ts >= #{startTime} and t1.ts <= #{endTime}")
     List<ProphaseAnemometryData> selectWdAveAndWdAveAndWsStaForHeight(@Param("equipmentId") String equipmentId, @Param("startTime") Timestamp startTime, @Param("endTime") Timestamp endTime,@Param("height") String height);
+
+
+    //查询设备编号查询风向 风速 风速标差
+    @Select("SELECT t1.ts,t1.ws_ave,t1.ws_sta,t1.wd_ave,t1.layer_height FROM prophase_anemometry_data t1 where  t1.equipment_id = #{equipmentId} and  t1.ts >= #{startTime} and t1.ts <= #{endTime}")
+    List<ProphaseAnemometryData> selectWdAveAndWdAveAndWsSta(@Param("equipmentId") String equipmentId, @Param("startTime") Timestamp startTime, @Param("endTime") Timestamp endTime);
+
 }

+ 20 - 6
neim-biz/src/main/java/com/jiayue/biz/service/impl/HomePageServiceImpl.java

@@ -560,13 +560,23 @@ public class HomePageServiceImpl extends ServiceImpl<WindTowerDataParentTableMap
         if (windTowerInfo.getDisplayHeight() != null && !windTowerInfo.getDisplayHeight().equals("")) {
             height = windTowerInfo.getDisplayHeight();
         }
+        //获取风向 层高 最高层
+        String wdHeights = windTowerInfo.getWdHeights();
+        String wdHeightMax = "";
+        if(!wdHeights.isEmpty()){
+            ArrayList<String> wdHeightList = new ArrayList(Arrays.asList(wdHeights.split(",")));
+            List<Integer> collect = wdHeightList.stream().map(Integer::parseInt).sorted().collect(Collectors.toList());
+            wdHeightMax = collect.get(collect.size() - 1).toString();
+        }
+
+
         if (!month.equals("")) {
             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
             try {
                 Date startDate = sdf.parse(month);
                 Date endDate = DateTimeUtil.endOfMonth(startDate);
                 weatherDataList = prophaseWeatherDataMapper.selectTAveAndPaAveAndAir(equipmentId, new Timestamp(startDate.getTime()), new Timestamp(endDate.getTime()));
-                anemometryDataList = prophaseAnemometryDataMapper.selectWdAveAndWdAveAndWsStaForHeight(equipmentId, new Timestamp(startDate.getTime()), new Timestamp(endDate.getTime()), height);
+                anemometryDataList = prophaseAnemometryDataMapper.selectWdAveAndWdAveAndWsSta(equipmentId, new Timestamp(startDate.getTime()), new Timestamp(endDate.getTime()));
             } catch (ParseException e) {
                 e.printStackTrace();
             }
@@ -576,7 +586,7 @@ public class HomePageServiceImpl extends ServiceImpl<WindTowerDataParentTableMap
             DateTime startTime = DateUtil.beginOfDay(new Date(timeEnd.getTime()));
             // 最新一天数据
             weatherDataList = prophaseWeatherDataMapper.selectTAveAndPaAveAndAir(equipmentId, new Timestamp(startTime.getTime()), timeEnd);
-            anemometryDataList = prophaseAnemometryDataMapper.selectWdAveAndWdAveAndWsStaForHeight(equipmentId, new Timestamp(startTime.getTime()), timeEnd, height);
+            anemometryDataList = prophaseAnemometryDataMapper.selectWdAveAndWdAveAndWsSta(equipmentId, new Timestamp(startTime.getTime()), timeEnd);
         }
 
         HashMap<String, Object> dataMap = new HashMap<>();
@@ -585,15 +595,16 @@ public class HomePageServiceImpl extends ServiceImpl<WindTowerDataParentTableMap
         BigDecimal pa = BigDecimal.ZERO;
 
         // 风速集合
-        List<BigDecimal> wsForHeight = anemometryDataList.stream().map(h -> {
+        String finalHeight = height;
+        List<BigDecimal> wsForHeight = anemometryDataList.stream().filter(a -> a.getLayerHeight().equals(finalHeight)).map(h -> {
             return BigDecimal.valueOf(h.getWsAve());
         }).collect(Collectors.toList());
         //最小风速集合
-        List<BigDecimal> minWsForHeight = anemometryDataList.stream().map(h -> {
+        List<BigDecimal> minWsForHeight = anemometryDataList.stream().filter(a -> a.getLayerHeight().equals(minHeight)).map(h -> {
             return BigDecimal.valueOf(h.getWsAve());
         }).collect(Collectors.toList());
         // 风速标准差集合
-        List<BigDecimal> wsStaForHeight = anemometryDataList.stream().map(h -> {
+        List<BigDecimal> wsStaForHeight = anemometryDataList.stream().filter(a -> a.getLayerHeight().equals(finalHeight)).map(h -> {
             return BigDecimal.valueOf(h.getWsSta());
         }).collect(Collectors.toList());
 
@@ -621,7 +632,10 @@ public class HomePageServiceImpl extends ServiceImpl<WindTowerDataParentTableMap
         }
         HashMap<String, Integer> wdMap = new HashMap<>();
         for (WindDirectionEnum value : WindDirectionEnum.values()) {
-            List<ProphaseAnemometryData> forHeightAndWindDirectionEnum = CalculationUtil.getForHeightAndWindDirectionEnum(anemometryDataList, value);
+
+            String finalWdHeightMax = wdHeightMax;
+            List<ProphaseAnemometryData> dataList = anemometryDataList.stream().filter(a -> a.getLayerHeight().equals(finalWdHeightMax)).collect(Collectors.toList());
+            List<ProphaseAnemometryData> forHeightAndWindDirectionEnum = CalculationUtil.getForHeightAndWindDirectionEnum(dataList, value);
             wdMap.put(value.name(), forHeightAndWindDirectionEnum.size());
         }
         Integer total = 0;

+ 1 - 1
neim-biz/src/main/java/com/jiayue/biz/service/impl/WindTowerCalculationDataServiceImpl.java

@@ -2179,7 +2179,7 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
         for (ProphaseAnemometryData map : collect) {
             for (String height : heights) {
                 Date time = new Date(map.getTs().getTime());
-                if (curentHour == time.getHours()) {
+                if (curentHour == time.getHours() && map.getLayerHeight().equals(height)) {
                     //获取 毫秒数
                     Integer minutes = time.getMinutes();
                     String keyEndStr = minutes + "-" + equipmentId + "-" + DateTimeUtil.getDay(time.getTime());