Преглед изворни кода

风切变计算方式更换为综合风切变、优化统计查询、修改受风切变影响的页面

hxf пре 2 година
родитељ
комит
244f7f39b2

Разлика између датотеке није приказан због своје велике величине
+ 88 - 186
neim-biz/src/main/java/com/jiayue/biz/job/AirDensityJob.java


+ 0 - 84
neim-biz/src/main/java/com/jiayue/biz/job/FileAnalysisJob.java

@@ -76,90 +76,6 @@ public class FileAnalysisJob {
 
     }
 
-    @Scheduled(cron = "0 20 16 21 4 ? ")
-    public void testNew() {
-        List<WindTowerInfo> list1 = windTowerInfoService.lambdaQuery().list();
-        List<WindTowerInfo> collect = list1.stream().filter(w -> w.getType().equals("1")).collect(Collectors.toList());
-        for (WindTowerInfo windTowerInfo : collect) {
-            Date date = new Date(1606752000000l);
-            String equipmentId = windTowerInfo.getEquipmentNo();
-//            List<WindTowerInfo> list = windTowerInfoService.lambdaQuery().eq(WindTowerInfo::getEquipmentNo, equipmentId).list();
-            HashSet<String> dataSet = new HashSet<>();
-            String heights = windTowerInfo.getHeights();
-            String wdHeights = windTowerInfo.getWdHeights();
-            dataSet.addAll(Arrays.asList(heights.split(",")));
-            dataSet.addAll(Arrays.asList(wdHeights.split(",")));
-            for (long i = date.getTime(); i < 1680278400000l; i = DateUtil.offsetMonth(new Date(i), 1).getTime()) {
-                long l = DateUtil.offsetMonth(new Date(i), 1).getTime();
-                List<Map<String, Object>> mapList = windTowerDataParentTableService.selectByBetweenTimeAndEquipmetIdOld(new Date(i), new Date(l), equipmentId);
-                if (mapList.size() > 0) {
-                    ArrayList<ProphaseWeatherData> prophaseAnemometryPublicDataArrayList = new ArrayList<>();
-                    for (Map<String, Object> map : mapList) {
-
-                        //公共部分
-                        ProphaseWeatherData prophaseAnemometryPublicData = new ProphaseWeatherData();
-                        prophaseAnemometryPublicData.setTs(new Timestamp(Long.parseLong(map.get("time").toString())));
-                        prophaseAnemometryPublicData.setTInst(!map.containsKey("t_inst") ? null : Float.parseFloat(map.get("t_inst").toString()));
-                        prophaseAnemometryPublicData.setTAve(!map.containsKey("t_ave") ? null : Float.parseFloat(map.get("t_ave").toString()));
-                        prophaseAnemometryPublicData.setTMax(!map.containsKey("t_max") ? null : Float.parseFloat(map.get("t_max").toString()));
-                        prophaseAnemometryPublicData.setTMin(!map.containsKey("t_min") ? null : Float.parseFloat(map.get("t_min").toString()));
-                        prophaseAnemometryPublicData.setTSta(!map.containsKey("t_sta") ? null : Float.parseFloat(map.get("t_sta").toString()));
-
-                        prophaseAnemometryPublicData.setRhInst(!map.containsKey("rh_inst") ? null : Float.parseFloat(map.get("rh_inst").toString()));
-                        prophaseAnemometryPublicData.setRhAve(!map.containsKey("rh_ave") ? null : Float.parseFloat(map.get("rh_ave").toString()));
-                        prophaseAnemometryPublicData.setRhMax(!map.containsKey("rh_max") ? null : Float.parseFloat(map.get("rh_max").toString()));
-                        prophaseAnemometryPublicData.setRhMin(!map.containsKey("rh_min") ? null : Float.parseFloat(map.get("rh_min").toString()));
-                        prophaseAnemometryPublicData.setRhSta(!map.containsKey("rh_sta") ? null : Float.parseFloat(map.get("rh_sta").toString()));
-
-                        prophaseAnemometryPublicData.setPaInst(!map.containsKey("pa_inst") ? null : Float.parseFloat(map.get("pa_inst").toString()));
-                        prophaseAnemometryPublicData.setPaAve(!map.containsKey("pa_ave") ? null : Float.parseFloat(map.get("pa_ave").toString()));
-                        prophaseAnemometryPublicData.setPaMax(!map.containsKey("pa_max") ? null : Float.parseFloat(map.get("pa_max").toString()));
-                        prophaseAnemometryPublicData.setPaMin(!map.containsKey("pa_min") ? null : Float.parseFloat(map.get("pa_min").toString()));
-                        prophaseAnemometryPublicData.setPaSta(!map.containsKey("pa_sta") ? null : Float.parseFloat(map.get("pa_sta").toString()));
-
-                        prophaseAnemometryPublicData.setAirDensity(!map.containsKey("air_density") ? null : Float.parseFloat(map.get("air_density").toString()));
-                        prophaseAnemometryPublicDataArrayList.add(prophaseAnemometryPublicData);
-                    }
-                    //切分List
-                    List<List<ProphaseWeatherData>> partition = ListUtil.partition(prophaseAnemometryPublicDataArrayList, 3000);
-                    //分批保存
-                    for (List<ProphaseWeatherData> prophaseAnemometryPublicDataList : partition) {
-                        prophaseWeatherDataMapper.insertSplice(prophaseAnemometryPublicDataList, equipmentId);
-                    }
-                    ArrayList<ProphaseAnemometryData> prophaseAnemometryDataArrayList = new ArrayList<>();
-                    for (String height : dataSet) {
-                        for (Map<String, Object> m : mapList) {
-                            //风速 风向
-                            ProphaseAnemometryData one = new ProphaseAnemometryData();
-                            //组装子表数据
-                            one.setWsAve(!m.containsKey("ws_ave" + height) ? null : CalculationUtil.getBigDecimal(m.get("ws_ave" + height)).setScale(2, RoundingMode.HALF_UP).floatValue());
-                            one.setWsMax(!m.containsKey("ws_max" + height) ? null : CalculationUtil.getBigDecimal(m.get("ws_max" + height)).setScale(2, RoundingMode.HALF_UP).floatValue());
-                            one.setWsMin(!m.containsKey("ws_min" + height) ? null : CalculationUtil.getBigDecimal(m.get("ws_min" + height)).setScale(2, RoundingMode.HALF_UP).floatValue());
-                            one.setWsSta(!m.containsKey("ws_sta" + height) ? null : CalculationUtil.getBigDecimal(m.get("ws_sta" + height)).setScale(2, RoundingMode.HALF_UP).floatValue());
-                            one.setWsInst(!m.containsKey("ws_inst" + height) ? null : CalculationUtil.getBigDecimal(m.get("ws_inst" + height)).setScale(2, RoundingMode.HALF_UP).floatValue());
-                            one.setWdAve(!m.containsKey("wd_ave" + height) ? null : CalculationUtil.getBigDecimal(m.get("wd_ave" + height)).setScale(2, RoundingMode.HALF_UP).floatValue());
-                            one.setWdMax(!m.containsKey("wd_max" + height) ? null : CalculationUtil.getBigDecimal(m.get("wd_max" + height)).setScale(2, RoundingMode.HALF_UP).floatValue());
-                            one.setWdMin(!m.containsKey("wd_min" + height) ? null : CalculationUtil.getBigDecimal(m.get("wd_min" + height)).setScale(2, RoundingMode.HALF_UP).floatValue());
-                            one.setWdSta(!m.containsKey("wd_sta" + height) ? null : CalculationUtil.getBigDecimal(m.get("wd_sta" + height)).setScale(2, RoundingMode.HALF_UP).floatValue());
-                            one.setWdInst(!m.containsKey("wd_inst" + height) ? null : CalculationUtil.getBigDecimal(m.get("wd_inst" + height)).setScale(2, RoundingMode.HALF_UP).floatValue());
-
-                            one.setTs(new Timestamp(Long.parseLong(m.get("time").toString())));
-                            prophaseAnemometryDataArrayList.add(one);
-                        }
-                        //切分List
-                        List<List<ProphaseAnemometryData>> partition1 = ListUtil.partition(prophaseAnemometryDataArrayList, 3000);
-                        //分批保存
-                        for (List<ProphaseAnemometryData> prophaseAnemometryData : partition1) {
-                            prophaseAnemometryDataMapper.insertSplice(prophaseAnemometryData, equipmentId, height);
-                        }
-                    }
-                }
-            }
-
-        }
-
-
-    }
 
 
 

+ 3 - 1
neim-biz/src/main/java/com/jiayue/biz/mapper/ProphaseAnemometryDataMapper.java

@@ -32,7 +32,9 @@ public interface ProphaseAnemometryDataMapper extends BaseMapper<ProphaseAnemome
             "</script>")
     int insertSplice(@Param("prophaseAnemometryData") List<ProphaseAnemometryData> prophaseAnemometryData,@Param("equipmentId") String equipmentId,@Param("layerHeight") String layerHeight);
 
-
+    //所有层高风速风向平均值
+    @Select("SELECT * FROM prophase_anemometry_data t1 where  t1.equipment_id = #{equipmentId} and  t1.ts >= #{startTime} and t1.ts <= #{endTime}")
+    List<ProphaseAnemometryData> selectAll(@Param("equipmentId") String equipmentId, @Param("startTime") Timestamp startTime, @Param("endTime") Timestamp endTime);
 
     //所有层高风速风向平均值
     @Select("SELECT t1.ts,t1.ws_ave,t1.wd_ave,t1.layer_height FROM prophase_anemometry_data t1 where  t1.equipment_id = #{equipmentId} and  t1.ts >= #{startTime} and t1.ts <= #{endTime}")

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

@@ -13,7 +13,7 @@ import java.util.Map;
 public interface WindTowerCalculationDataService extends IService<WindTowerCalculationData> {
 
     //计算风功率密度
-    void calculateWindPowerDensity(Long startTime, Long endTime, String equipmentNo, List<ProphaseAnemometryData> prophaseAnemometryDataList, List<ProphaseWeatherData> prophaseWeatherDataList, List<EquipmentAttribute> equipmentAttributeList, List<WindTowerCalculationData> windTowerCalculationDataList);
+    List<WindTowerCalculationData> calculateWindPowerDensity(Long startTime, Long endTime, String equipmentNo, List<ProphaseAnemometryData> prophaseAnemometryDataList, List<ProphaseWeatherData> prophaseWeatherDataList, List<EquipmentAttribute> equipmentAttributeList, List<WindTowerCalculationData> windTowerCalculationDataList);
 
     List getWindShearByEqidAndAverageAndTime(Long time, String height, String eqId);
 

+ 42 - 20
neim-biz/src/main/java/com/jiayue/biz/service/impl/DataRecalculationImpl.java

@@ -616,54 +616,76 @@ public class DataRecalculationImpl implements DataRecalculationService {
             List<ProphaseWeatherData> prophaseWeatherDataList = prophaseWeatherDataMapper.selectPublicData(equipmentNo, new Timestamp(startTime.getTime()), new Timestamp(endTime.getTime()));
             //把传入的时间按照日或月分割
             log.info("开始重新计算统计数据");
+            ArrayList<WindTowerCalculationData> allDataList = new ArrayList<>();
             //小时风功率密度和平均风速
-            windTowerCalculationDataService.calculateWindPowerDensity(startTime.getTime(), endTime.getTime(), equipmentNo, prophaseAnemometryDataList,prophaseWeatherDataList, equipmentAttributeList, windTowerCalculationDataList);
+            ArrayList<WindTowerCalculationData> dataList = windTowerCalculationDataService.calculateWindPowerDensity(startTime.getTime(), endTime.getTime(), equipmentNo, prophaseAnemometryDataList, prophaseWeatherDataList, equipmentAttributeList, windTowerCalculationDataList);
+            allDataList.addAll(dataList);
             //小时风切变
-            windTowerCalculationDataService.calculateWindPowerShear(startTime, endTime, equipmentNo, prophaseAnemometryDataList, windTowerCalculationDataList);
+            ArrayList<WindTowerCalculationData> calculationData = windTowerCalculationDataService.calculateWindPowerShear(startTime, endTime, equipmentNo, prophaseAnemometryDataList, windTowerCalculationDataList);
+            allDataList.addAll(calculationData);
             //日平均温度
-            windTowerCalculationDataService.tDay(startTime, endTime, equipmentNo, prophaseWeatherDataList, equipmentAttributeList);
+            ArrayList<WindTowerCalculationData> tDay = windTowerCalculationDataService.tDay(startTime, endTime, equipmentNo, prophaseWeatherDataList, equipmentAttributeList);
+            allDataList.addAll(tDay);
             //日平均气压
-            windTowerCalculationDataService.paDay(startTime, endTime, equipmentNo, prophaseWeatherDataList, equipmentAttributeList);
+            ArrayList<WindTowerCalculationData> paDay = windTowerCalculationDataService.paDay(startTime, endTime, equipmentNo, prophaseWeatherDataList, equipmentAttributeList);
+            allDataList.addAll(paDay);
             //日平均湍流
-            windTowerCalculationDataService.turbulenceDay(startTime, endTime, equipmentNo, prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList, windTowerCalculationDataList);
+            ArrayList<WindTowerCalculationData> turbulenceDay = windTowerCalculationDataService.turbulenceDay(startTime, endTime, equipmentNo, equipmentAttributeList, windTowerInfoList, windTowerCalculationDataList);
+            allDataList.addAll(turbulenceDay);
             //日平均空气密度
-            windTowerCalculationDataService.airDensityDay(startTime, endTime, equipmentNo, prophaseWeatherDataList, equipmentAttributeList, windTowerCalculationDataList);
+            ArrayList<WindTowerCalculationData> airDensityDay = windTowerCalculationDataService.airDensityDay(startTime, endTime, equipmentNo, prophaseWeatherDataList, equipmentAttributeList, windTowerCalculationDataList);
+            allDataList.addAll(airDensityDay);
             //日平均风功率密度
-            windTowerCalculationDataService.wpdDay(startTime, endTime, equipmentNo, windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
+            ArrayList<WindTowerCalculationData> wpdDay = windTowerCalculationDataService.wpdDay(startTime, endTime, equipmentNo, windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
+            allDataList.addAll(wpdDay);
             //日平均风切变
-            windTowerCalculationDataService.shearDay(startTime, endTime, equipmentNo, windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
+            ArrayList<WindTowerCalculationData> shearDay = windTowerCalculationDataService.shearDay(startTime, endTime, equipmentNo, windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
+            allDataList.addAll(shearDay);
             //日平均风速
-            windTowerCalculationDataService.wsDay(startTime, endTime, equipmentNo, windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
+            ArrayList<WindTowerCalculationData> wsDay = windTowerCalculationDataService.wsDay(startTime, endTime, equipmentNo, windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
+            allDataList.addAll(wsDay);
             //日平均风速标差
-            windTowerCalculationDataService.calculateStaDay(startTime, endTime, equipmentNo, prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList);
+            ArrayList<WindTowerCalculationData> calculationData1 = windTowerCalculationDataService.calculateStaDay(startTime, endTime, equipmentNo, prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList, windTowerCalculationDataList);
+            allDataList.addAll(calculationData1);
 
             List<Long> dateTime = DateTimeUtil.getIntervalTimeByMonth(DateTimeUtil.beginOfMonth(startTime), DateTimeUtil.beginOfMonth(endTime));
             for (Long l : dateTime) {
                 //月平均风速
-                windTowerCalculationDataService.wsMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), equipmentNo, windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
+                ArrayList<WindTowerCalculationData> wsMonth = windTowerCalculationDataService.wsMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), equipmentNo, windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
+                allDataList.addAll(wsMonth);
                 //月平均风功率密度
-                windTowerCalculationDataService.wpdMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), equipmentNo, windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
+                ArrayList<WindTowerCalculationData> wpdMonth = windTowerCalculationDataService.wpdMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), equipmentNo, windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
+                allDataList.addAll(wpdMonth);
                 //月平均湍流
-                windTowerCalculationDataService.turbulenceMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), equipmentNo, windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
+                ArrayList<WindTowerCalculationData> turbulenceMonth = windTowerCalculationDataService.turbulenceMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), equipmentNo, windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
+                allDataList.addAll(turbulenceMonth);
                 //月平均空气密度
-                windTowerCalculationDataService.airDensityMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), equipmentNo, windTowerCalculationDataList, equipmentAttributeList);
+                ArrayList<WindTowerCalculationData> airDensityMonth = windTowerCalculationDataService.airDensityMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), equipmentNo, windTowerCalculationDataList, equipmentAttributeList);
+                allDataList.addAll(airDensityMonth);
                 //月最大风速
-                windTowerCalculationDataService.wsMaxMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), equipmentNo, prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList);
+                ArrayList<WindTowerCalculationData> wsMaxMonth = windTowerCalculationDataService.wsMaxMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), equipmentNo, prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList);
+                allDataList.addAll(wsMaxMonth);
                 //月平均风切变
-                windTowerCalculationDataService.shearMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), equipmentNo, windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
+                ArrayList<WindTowerCalculationData> shearMonth = windTowerCalculationDataService.shearMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), equipmentNo, windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
+                allDataList.addAll(shearMonth);
                 //月平均风速标差
-                windTowerCalculationDataService.staMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), equipmentNo, prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList);
+                ArrayList<WindTowerCalculationData> staMonth = windTowerCalculationDataService.staMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), equipmentNo, prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList);
+                allDataList.addAll(staMonth);
                 //月玫瑰图
                 windDirectionStatisticsDataService.roseMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), equipmentNo, prophaseAnemometryDataList,prophaseWeatherDataList, equipmentAttributeList);
                 //月平均环境数据
-                windTowerCalculationDataService.environmentData(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), equipmentNo, prophaseWeatherDataList, equipmentAttributeList);
+                ArrayList<WindTowerCalculationData> environmentData = windTowerCalculationDataService.environmentData(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), equipmentNo, prophaseWeatherDataList, equipmentAttributeList);
+                allDataList.addAll(environmentData);
                 //空气密度月逐时
-                windTowerCalculationDataService.airDensityMonth(equipmentNo, DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), prophaseWeatherDataList);
+                ArrayList<WindTowerCalculationData> airDensityMonth1 = windTowerCalculationDataService.airDensityMonth(equipmentNo, DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), prophaseWeatherDataList);
+                allDataList.addAll(airDensityMonth1);
                 //湍流月逐时
-                windTowerCalculationDataService.turbulenceHourForMonth(equipmentNo, DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList);
+                ArrayList<WindTowerCalculationData> turbulenceHourForMonth = windTowerCalculationDataService.turbulenceHourForMonth(equipmentNo, DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList);
+                allDataList.addAll(turbulenceHourForMonth);
             }
             // 统计概述
             statisticsSituationService.statisticsSituation(windTowerInfoList.get(0), statisticsSituations, equipmentAttributeList);
+            windTowerCalculationDataService.saveBatchByEquipmentId(allDataList,equipmentNo);
             log.info("计算统计数据执行完毕");
             return AjaxResult.success("数据已经重新统计");
         } catch (Exception e) {

+ 8 - 7
neim-biz/src/main/java/com/jiayue/biz/service/impl/RealTimeDisplayServiceImpl.java

@@ -377,12 +377,12 @@ public class RealTimeDisplayServiceImpl implements RealTimeDisplayService {
      */
     public List<Map<String, Object>> getStartTimeAndEndTime() {
         List<Map<String, Object>> list = new ArrayList<>();
-        List<WindTowerInfo> windTowerInfoList = windTowerInfoService.list();
+        List<WindTowerInfo> windTowerInfoList = windTowerInfoService.lambdaQuery().eq(WindTowerInfo::getType,"1").list();
         for (WindTowerInfo windTowerInfo : windTowerInfoList) {
             HashMap<String, Object> hashMap = new HashMap<>();
             //获取最后一条数据
             List<Entity> lastData = prophaseWeatherDataMapper.getLastData(windTowerInfo.getEquipmentNo());
-            if(lastData.size() > 0){
+            if (lastData.size() > 0) {
                 Timestamp timeEnd = (Timestamp) lastData.get(0).get("last (ts)");
                 long lastDataTime = timeEnd.getTime();
                 long startTime = DateTimeUtil.getDayStartTime(lastDataTime - 86400000 * 7).getTime();
@@ -394,6 +394,7 @@ public class RealTimeDisplayServiceImpl implements RealTimeDisplayService {
             }
 
         }
+
         return list;
     }
 
@@ -629,8 +630,8 @@ public class RealTimeDisplayServiceImpl implements RealTimeDisplayService {
             Map<Object, Object> formatMap = new HashMap<>();
             for (Entity entity : entities) {
                 // td engine 取出的时间需要截取字段
-                String wstart = entity.get("_wstart").toString().substring(0,10);
-                formatMap.put(wstart,entity.get("count(*)"));
+                String wstart = entity.get("_wstart").toString().substring(0, 10);
+                formatMap.put(wstart, entity.get("count(*)"));
 
             }
             SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM");
@@ -799,13 +800,13 @@ public class RealTimeDisplayServiceImpl implements RealTimeDisplayService {
             BigDecimal wpdSum = BigDecimal.ZERO;
             for (ProphaseAnemometryData p : heightAndWindDirectionEnum) {
                 List<ProphaseWeatherData> prophaseWeatherData = prophaseWeatherDataList.stream().filter(w -> w.getTs().getTime() == p.getTs().getTime()).collect(Collectors.toList());
-                if(prophaseWeatherData.size() > 0 ){
+                if (prophaseWeatherData.size() > 0) {
                     wpdSum = wpdSum.add(BigDecimal.valueOf(prophaseWeatherData.get(0).getAirDensity()).multiply(BigDecimal.valueOf(0.5)).multiply(CalculationUtil.power(BigDecimal.valueOf(p.getWsAve()), 3)));
                 }
 
             }
-            if(prophaseWeatherDataList.size() > 0 ){
-                BigDecimal wpdAve = wpdSum.divide(BigDecimal.valueOf(prophaseWeatherDataList.size()),2,RoundingMode.HALF_UP);
+            if (prophaseWeatherDataList.size() > 0) {
+                BigDecimal wpdAve = wpdSum.divide(BigDecimal.valueOf(prophaseWeatherDataList.size()), 2, RoundingMode.HALF_UP);
                 map.put(value.name(), wpdAve);
                 list.add(map);
             }

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

@@ -1,7 +1,6 @@
 package com.jiayue.biz.service.impl;
 
 import cn.hutool.core.convert.Convert;
-import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.jiayue.biz.conf.RequestDataHelper;
@@ -12,15 +11,12 @@ import com.jiayue.biz.service.EquipmentAttributeService;
 import com.jiayue.biz.service.WindTowerCalculationDataService;
 import com.jiayue.biz.service.WindTowerInfoService;
 import com.jiayue.biz.util.CalculationUtil;
-import com.jiayue.biz.util.DateMomentUtil;
 import com.jiayue.biz.util.DateTimeUtil;
 import com.jiayue.biz.util.SEDateUtil;
 import com.jiayue.common.utils.DateUtil;
 import flanagan.analysis.ProbabilityPlot;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.time.DateUtils;
-import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -30,7 +26,6 @@ import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
-import java.util.stream.DoubleStream;
 
 /**
  * 统计数据实现类
@@ -52,6 +47,12 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
     private final String wsMonthFunction = "wsMonth";
     private final String wpdFunction = "WindPowerDensity";
     private final String wsMaxMonthFunction = "maxWsMonth";
+    private final String turbulenceDay = "turbulenceDay";
+    private final String staDay = "staDay";
+
+    private final String windShearFiledName = "windShear";
+    private final String windShearDayFiledName = "windShearDay";
+
     //风切变计算指数
     private final BigDecimal lg30 = new BigDecimal("0.47712125471966244");//lg(30/10)
     private final BigDecimal lg50 = new BigDecimal("0.6989700043360189");//lg(50/10)
@@ -78,7 +79,7 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
     /**
      * 风功率密度和平均风速计算方法
      */
-    public void calculateWindPowerDensity(Long startTime, Long endTime, String eqNo, List<ProphaseAnemometryData> prophaseAnemometryDataList, List<ProphaseWeatherData> prophaseWeatherDataList, List<EquipmentAttribute> equipmentAttributeList, List<WindTowerCalculationData> windTowerCalculationDataList) {
+    public ArrayList<WindTowerCalculationData> calculateWindPowerDensity(Long startTime, Long endTime, String eqNo, List<ProphaseAnemometryData> prophaseAnemometryDataList, List<ProphaseWeatherData> prophaseWeatherDataList, List<EquipmentAttribute> equipmentAttributeList, List<WindTowerCalculationData> windTowerCalculationDataList) {
         //获取对应测风塔数据
         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());
@@ -86,7 +87,7 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
         List<WindTowerInfo> windTowerInfos = windTowerInfoService.lambdaQuery().eq(WindTowerInfo::getEquipmentNo, eqNo).list();
         String[] height = windTowerInfos.get(0).getHeights().split(",");
         //定义数据空集合用来装载 结果数据
-        List<WindTowerCalculationData> list = new ArrayList<>();
+        ArrayList<WindTowerCalculationData> list = new ArrayList<>();
         try {
             //遍历出过滤出的平均风速属性
             for (String h : height) {
@@ -143,8 +144,11 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
             e.printStackTrace();
         }
         //保存
-        saveBatchByEquipmentId(list, eqNo);
-        log.info("平均风速和风功率密度成功^ ^");
+//        saveBatchByEquipmentId(list, eqNo);
+        if (list.size() > 0) {
+            log.info("平均风速和风功率密度成功^ ^");
+        }
+        return list;
     }
 
 
@@ -1058,65 +1062,53 @@ 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();
-        if (height == null || height.equals("")) {
-            for (WindTowerInfo windTowerInfo : windTowerInfos) {
-                height = windTowerInfo.getHeights();
-            }
-        }
-        String[] heightAll = height.split(",");
-        for (String s : heightAll) {
-            heightSort.add(s);
-        }
         //给前端用的日期格式
         SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM");
 
         //获取统计属性表
-        List<EquipmentAttribute> equipmentAttributeList = equipmentAttributeService.lambdaQuery().eq(EquipmentAttribute::getAttributeFunction, "shear").list();
+        List<EquipmentAttribute> shearDayFieldNameList = equipmentAttributeService.lambdaQuery().eq(EquipmentAttribute::getFieldName, "windShearMonth").list();
         //获取统计数据表
-        List<WindTowerCalculationData> windTowerCalculationDataList = getByBetweenTimeAndEquipmentId(new Date(startTime), new Date(endTime), eqId).stream().sorted(Comparator.comparing(WindTowerCalculationData::getTime)).collect(Collectors.toList());
-        ;
+        List<WindTowerCalculationData> windTowerCalculationDataList = getByBetweenTimeAndEquipmentId(new Date(startTime), new Date(endTime), eqId).stream().sorted(Comparator.comparing(WindTowerCalculationData::getTime)).collect(Collectors.toList());;
         // 根据开始时间、结束时间分割的月份
         List<Long> timeList = DateTimeUtil.getIntervalTimeByMonth(new Date(startTime), new Date(endTime));
-        for (String h : heightSort) {
-            String shearMonthFieldName = h + "shearMonth";
-            //存放数据
-            List<EquipmentAttribute> shearDayFieldNameList = equipmentAttributeList.stream().filter(w -> w.getFieldName().equals(shearMonthFieldName)).collect(Collectors.toList());
-            if (!shearDayFieldNameList.isEmpty()) {
-                String shearDayEbId = shearDayFieldNameList.get(0).getId();
-                //平均风速集合
-                List<WindTowerCalculationData> shearMonthList = new ArrayList<>();
 
-                List<WindTowerCalculationData> filterList = windTowerCalculationDataList.stream().filter(w -> w.getEbId().equals(shearDayEbId)).collect(Collectors.toList());
-                BigDecimal shearAve = BigDecimal.ZERO;
-                ArrayList<Object> list = new ArrayList<>();
-                for (long time : timeList) {
-                    shearMonthList = filterList.stream().filter(w -> w.getTime().compareTo(new Date(time)) == 0).collect(Collectors.toList());
-                    HashMap<Object, Object> map = new HashMap<>();
-                    String format = sdf1.format(time);
-                    BigDecimal value = BigDecimal.ZERO;
-                    if (!shearMonthList.isEmpty()) {
-                        value = shearMonthList.get(0).getValue();
-                    }
-                    map.put("shear", value);
-                    map.put("time", format);
-                    list.add(map);
-                }
-                // 曲线
-                HashMap<Object, Object> finalMap = new HashMap<>();
-                finalMap.put("height", h);
-                finalMap.put("arr", list);
-                arrList.add(finalMap);
-                //平均值
-                List<BigDecimal> aveWsList = filterList.stream().map(WindTowerCalculationData::getValue).collect(Collectors.toList());
-                if (!aveWsList.isEmpty()) {
-                    shearAve = aveWsList.stream().reduce(BigDecimal.ZERO, BigDecimal::add).divide(BigDecimal.valueOf(aveWsList.size()), 2, RoundingMode.HALF_UP);
+        //存放数据
+        if (!shearDayFieldNameList.isEmpty()) {
+            String shearDayEbId = shearDayFieldNameList.get(0).getId();
+            //风切变集合
+            List<WindTowerCalculationData> shearMonthList = new ArrayList<>();
+
+            List<WindTowerCalculationData> filterList = windTowerCalculationDataList.stream().filter(w -> w.getEbId().equals(shearDayEbId)).collect(Collectors.toList());
+            BigDecimal shearAve = BigDecimal.ZERO;
+            ArrayList<Object> list = new ArrayList<>();
+            for (long time : timeList) {
+                shearMonthList = filterList.stream().filter(w -> w.getTime().compareTo(new Date(time)) == 0).collect(Collectors.toList());
+                HashMap<Object, Object> map = new HashMap<>();
+                String format = sdf1.format(time);
+                BigDecimal value = BigDecimal.ZERO;
+                if (!shearMonthList.isEmpty()) {
+                    value = shearMonthList.get(0).getValue();
                 }
-                HashMap<Object, Object> finalAveMap = new HashMap<>();
-                finalAveMap.put("height", h);
-                finalAveMap.put("shearAve", shearAve);
-                list1.add(finalAveMap);
+                map.put("shear", value);
+                map.put("time", format);
+                list.add(map);
             }
+            // 曲线
+            HashMap<Object, Object> finalMap = new HashMap<>();
+            finalMap.put("height", "综合风切变");
+            finalMap.put("arr", list);
+            arrList.add(finalMap);
+            //平均值
+            List<BigDecimal> aveWsList = filterList.stream().map(WindTowerCalculationData::getValue).collect(Collectors.toList());
+            if (!aveWsList.isEmpty()) {
+                shearAve = aveWsList.stream().reduce(BigDecimal.ZERO, BigDecimal::add).divide(BigDecimal.valueOf(aveWsList.size()), 2, RoundingMode.HALF_UP);
+            }
+            HashMap<Object, Object> finalAveMap = new HashMap<>();
+            finalAveMap.put("height", "综合风切变");
+            finalAveMap.put("shearAve", shearAve);
+            list1.add(finalAveMap);
         }
+
         onlyData.add(arrList);
         onlyData.add(list1);
 
@@ -1131,8 +1123,9 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
      * @param startTime   开始时间
      * @param endTime     结束时间
      * @param equipmentId 设备ID
+     * @return
      */
-    public void airDensityDay(Date startTime, Date endTime, String equipmentId, List<ProphaseWeatherData> prophaseWeatherDataList, List<EquipmentAttribute> equipmentAttributeList, List<WindTowerCalculationData> windTowerCalculationDataList) {
+    public ArrayList<WindTowerCalculationData> airDensityDay(Date startTime, Date endTime, String equipmentId, List<ProphaseWeatherData> prophaseWeatherDataList, List<EquipmentAttribute> equipmentAttributeList, List<WindTowerCalculationData> windTowerCalculationDataList) {
 
         long startHour = startTime.getTime();
         long endHour = endTime.getTime();
@@ -1161,8 +1154,6 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
                     windTowerCalculationData.setEquipmentId(equipmentId);
                     windTowerCalculationDataList.add(windTowerCalculationData);
                     list.add(windTowerCalculationData);
-                } else {
-                    log.info("计算日平均空气密度缺少数据,无法计算");
                 }
             }
         } catch (Exception e) {
@@ -1170,9 +1161,9 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
             e.printStackTrace();
         }
 
-        saveBatchByEquipmentId(list, equipmentId);
+//        saveBatchByEquipmentId(list, equipmentId);
         log.info("计算日平均空气密度完成");
-
+        return list;
     }
 
 
@@ -1182,8 +1173,9 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
      * @param startTime   开始时间
      * @param endTime     结束时间
      * @param equipmentId 设备id
+     * @return
      */
-    public void wsMaxMonth(Date startTime, Date endTime, String equipmentId, List<ProphaseAnemometryData> prophaseAnemometryDataList, List<EquipmentAttribute> equipmentAttributeList, List<WindTowerInfo> windTowerInfoList) {
+    public ArrayList<WindTowerCalculationData> wsMaxMonth(Date startTime, Date endTime, String equipmentId, List<ProphaseAnemometryData> prophaseAnemometryDataList, List<EquipmentAttribute> equipmentAttributeList, List<WindTowerInfo> windTowerInfoList) {
 
         //获取时间段所有统计数据
 //        List<Map<String, Object>> collects = mapList.stream().filter(w -> Long.parseLong(w.get("time").toString()) >= startTime.getTime()
@@ -1215,8 +1207,9 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
         } catch (Exception e) {
             log.error("设备编号{}月最大风速计算失败^ ^", equipmentId);
         }
-        saveBatchByEquipmentId(list, equipmentId);
+//        saveBatchByEquipmentId(list, equipmentId);
         log.info("设备编号{}月最大风速计算成功^ ^", equipmentId);
+        return list;
     }
 
 
@@ -1226,8 +1219,10 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
      * @param startTime   开始时间
      * @param endTime     结束时间
      * @param equipmentId 设备ID
+     * @return
      */
-    public void airDensityMonth(Date startTime, Date endTime, String equipmentId, List<WindTowerCalculationData> windTowerCalculationDataList, List<EquipmentAttribute> equipmentAttributeList) {
+    public ArrayList<WindTowerCalculationData> airDensityMonth(Date startTime, Date endTime, String equipmentId, List<WindTowerCalculationData> windTowerCalculationDataList, List<EquipmentAttribute> equipmentAttributeList) {
+        ArrayList<WindTowerCalculationData> list = new ArrayList<>();
         //时间-1防止0点数据查不到
         Date startHour = new Date(startTime.getTime() - 1);
         //获取时间段所有统计数据
@@ -1255,7 +1250,8 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
                 windTowerCalculationData.setTime(startTime);
                 windTowerCalculationData.setValue(airDensityMonth.divide(new BigDecimal(windCalDataList.size()), 2, RoundingMode.HALF_UP));
                 windTowerCalculationData.setEquipmentId(equipmentId);
-                saveByEquipmentId(windTowerCalculationData, equipmentId);
+                list.add(windTowerCalculationData);
+//                saveByEquipmentId(windTowerCalculationData, equipmentId);
                 log.info("计算月平均空气密度完成");
             } else {
                 log.info("月平均空气密度缺少数据,无法计算");
@@ -1264,7 +1260,7 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
             log.error("计算月平均空气密度失败");
             e.printStackTrace();
         }
-
+        return list;
     }
 
     /**
@@ -1273,9 +1269,9 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
      * @param startTime   开始时间
      * @param endTime     结束时间
      * @param equipmentId 设备id
+     * @return
      */
-    @Transactional
-    public void wsDay(Date startTime, Date endTime, String equipmentId, List<WindTowerCalculationData> windTowerCalculationDataList, List<EquipmentAttribute> equipmentAttributeList, List<WindTowerInfo> windTowerInfoList) {
+    public ArrayList<WindTowerCalculationData> wsDay(Date startTime, Date endTime, String equipmentId, List<WindTowerCalculationData> windTowerCalculationDataList, List<EquipmentAttribute> equipmentAttributeList, List<WindTowerInfo> windTowerInfoList) {
         long startHour = startTime.getTime();
         long endHour = endTime.getTime();
         Long dayTime = 86400000L;
@@ -1305,7 +1301,6 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
                                             w.getEbId().equals(awsList.get(0).getId()))
                             .collect(Collectors.toList()
                             );
-
                     //小时风功率总值
                     BigDecimal awsSum = BigDecimal.ZERO;
                     for (WindTowerCalculationData ws : wsCalDataList) {
@@ -1331,8 +1326,9 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
             e.printStackTrace();
         }
 
-        saveBatchByEquipmentId(list, equipmentId);
+//        saveBatchByEquipmentId(list, equipmentId);
         log.info("设备编号{}米层高日平均风速计算成功^ ^", equipmentId);
+        return list;
     }
 
 
@@ -1342,9 +1338,9 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
      * @param startTime   开始时间
      * @param endTime     结束时间
      * @param equipmentId 设备编号
+     * @return
      */
-    @Transactional
-    public void wsMonth(Date startTime, Date endTime, String equipmentId, List<WindTowerCalculationData> windTowerCalculationDataList, List<EquipmentAttribute> equipmentAttributeList, List<WindTowerInfo> windTowerInfoList) {
+    public ArrayList<WindTowerCalculationData> wsMonth(Date startTime, Date endTime, String equipmentId, List<WindTowerCalculationData> windTowerCalculationDataList, List<EquipmentAttribute> equipmentAttributeList, List<WindTowerInfo> windTowerInfoList) {
         //时间-1防止0点数据查不到
         Date startHour = new Date(startTime.getTime() - 1);
         //获取时间段所有统计数据
@@ -1385,8 +1381,9 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
             log.error("设备编号{}月平均风速计算失败^ ^", equipmentId);
             e.printStackTrace();
         }
-        saveBatchByEquipmentId(list, equipmentId);
+//        saveBatchByEquipmentId(list, equipmentId);
         log.info("{}设备月平均风速统计完成", equipmentId);
+        return list;
 
     }
 
@@ -1396,9 +1393,9 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
      * @param startTime   开始时间
      * @param endTime     结束时间
      * @param equipmentId 设备id
+     * @return
      */
-    @Transactional
-    public void wpdDay(Date startTime, Date endTime, String equipmentId, List<WindTowerCalculationData> windTowerCalculationDataList, List<EquipmentAttribute> equipmentAttributeList, List<WindTowerInfo> windTowerInfoList) {
+    public ArrayList<WindTowerCalculationData> wpdDay(Date startTime, Date endTime, String equipmentId, List<WindTowerCalculationData> windTowerCalculationDataList, List<EquipmentAttribute> equipmentAttributeList, List<WindTowerInfo> windTowerInfoList) {
         long startHour = startTime.getTime();
         long endHour = endTime.getTime();
         long dayTime = 86400000L;
@@ -1447,8 +1444,9 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
             log.error("设备编号{}日平均风功率计算失败^ ^", equipmentId);
             e.printStackTrace();
         }
-        saveBatchByEquipmentId(list, equipmentId);
+//        saveBatchByEquipmentId(list, equipmentId);
         log.info("设备编号{}日平均风功率计算成功^ ^", equipmentId);
+        return list;
     }
 
     /**
@@ -1457,9 +1455,10 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
      * @param startTime   开始时间
      * @param endTime     结束时间
      * @param equipmentId 设备id
+     * @return
      */
     @Transactional
-    public void wpdMonth(Date startTime, Date endTime, String equipmentId, List<WindTowerCalculationData> windTowerCalculationDataList, List<EquipmentAttribute> equipmentAttributeList, List<WindTowerInfo> windTowerInfoList) {
+    public ArrayList<WindTowerCalculationData> wpdMonth(Date startTime, Date endTime, String equipmentId, List<WindTowerCalculationData> windTowerCalculationDataList, List<EquipmentAttribute> equipmentAttributeList, List<WindTowerInfo> windTowerInfoList) {
         //时间-1防止0点数据查不到
         Date startHour = new Date(startTime.getTime() - 1);
         //获取时间段所有统计数据
@@ -1501,8 +1500,9 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
             log.error("设备编号{}月平均风功率计算失败^ ^", equipmentId);
             e.printStackTrace();
         }
-        saveBatchByEquipmentId(list, equipmentId);
+//        saveBatchByEquipmentId(list, equipmentId);
         log.info("设备编号{}高月平均风功率计算成功^ ^", equipmentId);
+        return list;
     }
 
 
@@ -1514,8 +1514,9 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
      * @param equipmentId            测风塔编号
      * @param equipmentAttributeList 属性表
      * @param windTowerInfoList      测风塔数据
+     * @return
      */
-    public void calculateStaDay(Date startTime, Date endTime, String equipmentId, List<ProphaseAnemometryData> prophaseAnemometryDataList, List<EquipmentAttribute> equipmentAttributeList, List<WindTowerInfo> windTowerInfoList) {
+    public ArrayList<WindTowerCalculationData> calculateStaDay(Date startTime, Date endTime, String equipmentId, List<ProphaseAnemometryData> prophaseAnemometryDataList, List<EquipmentAttribute> equipmentAttributeList, List<WindTowerInfo> windTowerInfoList, List<WindTowerCalculationData> windTowerCalculationDataList) {
         ArrayList<WindTowerCalculationData> dataList = new ArrayList<>();
         long startHour = startTime.getTime();
         long endHour = endTime.getTime();
@@ -1539,9 +1540,8 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
                         windTowerCalculationData.setTime(new Date(startDate));
                         windTowerCalculationData.setValue(staSum.divide(CalculationUtil.getBigDecimal(collect.size()), 2, RoundingMode.HALF_UP));
                         windTowerCalculationData.setEbId(equipmentAttributes.get(0).getId());
+                        windTowerCalculationDataList.add(windTowerCalculationData);
                         dataList.add(windTowerCalculationData);
-                    } else {
-                        log.info("设备编号{},{}米缺少风速标差数据,无法计算", equipmentId, h);
                     }
                 }
             }
@@ -1549,8 +1549,10 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
             log.error("设备编号{}日平均风速标差计算失败^ ^", equipmentId);
             e.printStackTrace();
         }
-        saveBatch(dataList);
+//        saveBatchByEquipmentId(dataList);
         log.info("设备编号{},风速标差数据计算完成", equipmentId);
+        return dataList;
+
     }
 
 
@@ -1560,8 +1562,9 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
      * @param startTime   开始时间
      * @param endTime     结束时间
      * @param equipmentId 设备id
+     * @return
      */
-    public void turbulenceDay(Date startTime, Date endTime, String equipmentId, List<ProphaseAnemometryData> prophaseAnemometryDataList, List<EquipmentAttribute> equipmentAttributeList, List<WindTowerInfo> windTowerInfoList, List<WindTowerCalculationData> windTowerCalculationDataList) {
+    public ArrayList<WindTowerCalculationData> turbulenceDay(Date startTime, Date endTime, String equipmentId, List<EquipmentAttribute> equipmentAttributeList, List<WindTowerInfo> windTowerInfoList, List<WindTowerCalculationData> windTowerCalculationDataList) {
         long startHour = startTime.getTime();
         long endHour = endTime.getTime();
         long dayTime = 86400000L;
@@ -1572,47 +1575,25 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
         try {
             for (String h : heightAll) {
 
-                List<EquipmentAttribute> turList = equipmentAttributeList.stream().filter(equipmentAttribute -> equipmentAttribute.getFieldName().equals(h + "turbulenceDay")).collect(Collectors.toList());
+                List<EquipmentAttribute> turList = equipmentAttributeList.stream().filter(equipmentAttribute -> equipmentAttribute.getFieldName().equals(h + turbulenceDay)).collect(Collectors.toList());
+                List<EquipmentAttribute> staList = equipmentAttributeList.stream().filter(equipmentAttribute -> equipmentAttribute.getFieldName().equals(h + staDay)).collect(Collectors.toList());
+                List<EquipmentAttribute> wsList = equipmentAttributeList.stream().filter(equipmentAttribute -> equipmentAttribute.getFieldName().equals(h + "awsDay")).collect(Collectors.toList());
 
                 removeByStartTimeBetweenAndEquipmentIdAndEbId(startTime, endTime, equipmentId, turList.get(0).getId());
                 for (long start1 = startHour; start1 < endHour; start1 = start1 + dayTime) {
-                    //每天的结束时间
-                    long start2 = start1 + dayTime - 1L;
-                    long start = start1 - 1;
-
-                    List<ProphaseAnemometryData> collect = prophaseAnemometryDataList.stream().filter(p -> p.getTs().getTime() >= start && p.getTs().getTime() <= start2 && p.getLayerHeight().equals(h)).collect(Collectors.toList());
-                    List<BigDecimal> wsList = new ArrayList<>();
-                    List<BigDecimal> staList = new ArrayList<>();
-                    //过滤风速平均值
-                    for (ProphaseAnemometryData pro : collect) {
-                        wsList.add(CalculationUtil.getBigDecimal(pro.getWsAve()));
-                        staList.add(CalculationUtil.getBigDecimal(pro.getWsSta()));
-                    }
-                    BigDecimal wsSum = BigDecimal.ZERO;
-                    BigDecimal staSum = BigDecimal.ZERO;
-                    for (BigDecimal ws : wsList) {
-                        if (ws != null && !ws.toString().equals("")) {
-                            wsSum = wsSum.add(ws);
-                        }
-                    }
 
-                    for (BigDecimal sta : staList) {
-                        if (sta != null && !sta.toString().equals("")) {
-                            staSum = staSum.add(sta);
-                        }
-                    }
-                    BigDecimal wsAve;
-                    BigDecimal staAve;
+                    long finalStart = start1;
+                    List<WindTowerCalculationData> staDay = windTowerCalculationDataList.stream().filter(w -> w.getEbId().equals(staList.get(0).getId()) && w.getTime().getTime() == finalStart).collect(Collectors.toList());
+                    List<WindTowerCalculationData> wsDay = windTowerCalculationDataList.stream().filter(w -> w.getEbId().equals(wsList.get(0).getId()) && w.getTime().getTime() == finalStart).collect(Collectors.toList());
+
+                    if (!staDay.isEmpty() && !wsDay.isEmpty()) {
 
-                    if (!wsList.isEmpty() && !staList.isEmpty()) {
-                        wsAve = wsSum.divide(BigDecimal.valueOf(wsList.size()), 2, RoundingMode.HALF_UP);
-                        staAve = staSum.divide(BigDecimal.valueOf(staList.size()), 2, RoundingMode.HALF_UP);
                         //数据入库
                         WindTowerCalculationData windTowerCalculationData = new WindTowerCalculationData();
                         windTowerCalculationData.setTime(new Date(start1));
                         windTowerCalculationData.setEbId(turList.get(0).getId());
                         windTowerCalculationData.setEquipmentId(equipmentId);
-                        windTowerCalculationData.setValue(CalculationUtil.caTurbulenceIntensity(staAve, wsAve));
+                        windTowerCalculationData.setValue(CalculationUtil.caTurbulenceIntensity(staDay.get(0).getValue(), wsDay.get(0).getValue()));
                         windTowerCalculationDataList.add(windTowerCalculationData);
                         list.add(windTowerCalculationData);
                     } else {
@@ -1626,9 +1607,9 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
             log.error("设备编号{}日平均湍流计算失败^ ^", equipmentId);
             e.printStackTrace();
         }
-        saveBatchByEquipmentId(list, equipmentId);
+//        saveBatchByEquipmentId(list, equipmentId);
         log.info("设备编号{}日平均湍流计算成功^ ^", equipmentId);
-
+        return list;
     }
 
     /**
@@ -1637,8 +1618,9 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
      * @param startTime   开始时间
      * @param endTime     结束时间
      * @param equipmentId 设备编号
+     * @return
      */
-    public void turbulenceMonth(Date startTime, Date endTime, String equipmentId, List<WindTowerCalculationData> windTowerCalculationDataList, List<EquipmentAttribute> equipmentAttributeList, List<WindTowerInfo> windTowerInfoList) {
+    public ArrayList<WindTowerCalculationData> turbulenceMonth(Date startTime, Date endTime, String equipmentId, List<WindTowerCalculationData> windTowerCalculationDataList, List<EquipmentAttribute> equipmentAttributeList, List<WindTowerInfo> windTowerInfoList) {
         //时间-1防止0点数据查不到
         Date startHour = new Date(startTime.getTime() - 1);
         //获取时间段所有统计数据
@@ -1680,8 +1662,9 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
         } catch (Exception e) {
             log.error("设备编号{}月平均湍流计算失败^ ^", equipmentId);
         }
-        saveBatchByEquipmentId(list, equipmentId);
+//        saveBatchByEquipmentId(list, equipmentId);
         log.info("设备编号{}月平均湍流计算成功^ ^", equipmentId);
+        return list;
     }
 
     /**
@@ -1690,69 +1673,58 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
      * @param startTime   开始时间
      * @param endTime     结束时间
      * @param equipmentId 设备id
+     * @return
      */
-    public void shearDay(Date startTime, Date endTime, String equipmentId, List<WindTowerCalculationData> windTowerCalculationDataList, List<EquipmentAttribute> equipmentAttributeList, List<WindTowerInfo> windTowerInfoList) {
+    public ArrayList<WindTowerCalculationData> shearDay(Date startTime, Date endTime, String equipmentId, List<WindTowerCalculationData> windTowerCalculationDataList, List<EquipmentAttribute> equipmentAttributeList, List<WindTowerInfo> windTowerInfoList) {
         long startHour = startTime.getTime();
         long endHour = endTime.getTime();
         long dayTime = 86400000L;
-        //获取所有层高
-        String heights = windTowerInfoList.stream().filter(w -> w.getEquipmentNo().equals(equipmentId)).collect(Collectors.toList()).get(0).getHeights();
-        String[] strings = heights.split(",");
         //日平均所需要的集合
         List<WindTowerCalculationData> windTowerCalculationDataList1 = windTowerCalculationDataList.stream().filter(w -> w.getEquipmentId().equals(equipmentId) && w.getTime().after(startTime) && w.getTime().before(endTime)).collect(Collectors.toList());
         ArrayList<WindTowerCalculationData> list = new ArrayList<>();
-        Integer heightMin = Integer.parseInt(getNumberFromString(strings[0]));
-        for (String h : strings) {
-            if (Integer.parseInt(getNumberFromString(h)) < heightMin) {
-                heightMin = Integer.parseInt(getNumberFromString(h));
-            }
-        }
         try {
             //遍历层高
-            for (String h : strings) {
-                if (h.equals(String.valueOf(heightMin))) {
-                    continue;
-                }
-                //获取所有小时风切变表
-                List<EquipmentAttribute> shearList = equipmentAttributeList.stream().filter(equipmentAttribute -> equipmentAttribute.getFieldName().equals(h + "shear")).collect(Collectors.toList());
-                //获取所有日风切变表
-                List<EquipmentAttribute> shearDayList = equipmentAttributeList.stream().filter(equipmentAttribute -> equipmentAttribute.getFieldName().equals(h + "shearDay")).collect(Collectors.toList());
-                //删除统计时间段所有数据
-                removeByStartTimeBetweenAndEquipmentIdAndEbId(startTime, endTime, equipmentId, shearDayList.get(0).getId());
 
-                for (long start1 = startHour; start1 < endHour; start1 = start1 + dayTime) {
-                    long start2 = start1 + dayTime - 1L;
+            //获取所有小时综合风切变
+            List<EquipmentAttribute> shearList = equipmentAttributeList.stream().filter(equipmentAttribute -> equipmentAttribute.getFieldName().equals(windShearFiledName)).collect(Collectors.toList());
+            //获取日综合风切变
+            List<EquipmentAttribute> shearDayList = equipmentAttributeList.stream().filter(equipmentAttribute -> equipmentAttribute.getFieldName().equals(windShearDayFiledName)).collect(Collectors.toList());
+            //删除统计时间段所有数据
+            removeByStartTimeBetweenAndEquipmentIdAndEbId(startTime, endTime, equipmentId, shearDayList.get(0).getId());
 
-                    //获取所有小时风切变数据
-                    long start = start1;
-                    List<WindTowerCalculationData> shearCalDataList = windTowerCalculationDataList1.stream().filter(w -> w.getTime().after(new Date(start)) &&
-                            w.getTime().before(new Date(start2)) && w.getEquipmentId().equals(equipmentId) && w.getEbId().equals(shearList.get(0).getId())).collect(Collectors.toList());
-                    //小时风切变总值
-                    BigDecimal shearSum = BigDecimal.ZERO;
-                    for (WindTowerCalculationData shear : shearCalDataList) {
-                        shearSum = shearSum.add(shear.getValue());
-                    }
-                    if (!shearCalDataList.isEmpty()) {
-                        WindTowerCalculationData windTowerCalculationData = new WindTowerCalculationData();
-                        windTowerCalculationData.setEquipmentId(equipmentId);
-                        windTowerCalculationData.setValue(shearSum.divide(new BigDecimal(shearCalDataList.size()), 2, RoundingMode.HALF_UP));
-                        windTowerCalculationData.setEbId(shearDayList.get(0).getId());
-                        windTowerCalculationData.setTime(new Date(start1));
-                        windTowerCalculationDataList.add(windTowerCalculationData);
-                        list.add(windTowerCalculationData);
-                    } else {
-                        log.info("设备编号{},{},{}米层高日平均风切变计算失败,缺少数据^ ^", equipmentId, DateTimeUtil.dateToStrLong(new Date(start1)), h);
-                    }
+            for (long start1 = startHour; start1 < endHour; start1 = start1 + dayTime) {
+                long start2 = start1 + dayTime - 1L;
 
+                //获取所有小时风切变数据
+                long start = start1;
+                List<WindTowerCalculationData> shearCalDataList = windTowerCalculationDataList1.stream().filter(w -> w.getTime().after(new Date(start)) &&
+                        w.getTime().before(new Date(start2)) && w.getEquipmentId().equals(equipmentId) && w.getEbId().equals(shearList.get(0).getId())).collect(Collectors.toList());
+                //小时风切变总值
+                BigDecimal shearSum = BigDecimal.ZERO;
+                for (WindTowerCalculationData shear : shearCalDataList) {
+                    shearSum = shearSum.add(shear.getValue());
                 }
+                if (!shearCalDataList.isEmpty()) {
+                    WindTowerCalculationData windTowerCalculationData = new WindTowerCalculationData();
+                    windTowerCalculationData.setEquipmentId(equipmentId);
+                    windTowerCalculationData.setValue(shearSum.divide(new BigDecimal(shearCalDataList.size()), 2, RoundingMode.HALF_UP));
+                    windTowerCalculationData.setEbId(shearDayList.get(0).getId());
+                    windTowerCalculationData.setTime(new Date(start1));
+                    windTowerCalculationDataList.add(windTowerCalculationData);
+                    list.add(windTowerCalculationData);
+                } else {
+                    log.info("设备编号{},{},{}米层高日平均风切变计算失败,缺少数据^ ^", equipmentId, DateTimeUtil.dateToStrLong(new Date(start1)));
+                }
+
             }
+
         } catch (Exception e) {
             log.error("设备编号{}日平均风切变计算失败^ ^", equipmentId);
             e.printStackTrace();
         }
-        saveBatchByEquipmentId(list, equipmentId);
+//        saveBatchByEquipmentId(list, equipmentId);
         log.info("设备编号{}日平均风切变计算成功^ ^", equipmentId);
-
+        return list;
     }
 
     /**
@@ -1761,59 +1733,48 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
      * @param startTime   开始时间
      * @param endTime     结束时间
      * @param equipmentId 设备id
+     * @return
      */
-    public void shearMonth(Date startTime, Date endTime, String equipmentId, List<WindTowerCalculationData> windTowerCalculationDataList, List<EquipmentAttribute> equipmentAttributeList, List<WindTowerInfo> windTowerInfoList) {
+    public ArrayList<WindTowerCalculationData> shearMonth(Date startTime, Date endTime, String equipmentId, List<WindTowerCalculationData> windTowerCalculationDataList, List<EquipmentAttribute> equipmentAttributeList, List<WindTowerInfo> windTowerInfoList) {
         //时间-1防止0点数据查不到
         Date startHour = new Date(startTime.getTime() - 1);
         //获取时间段所有统计数据
         List<WindTowerCalculationData> windTowerCalculationDataList1 = windTowerCalculationDataList.stream().filter(w -> w.getEquipmentId().equals(equipmentId) && w.getTime().after(startHour) && w.getTime().before(endTime)).collect(Collectors.toList());
-        //获取所有层高
-        String[] height = windTowerInfoList.stream().filter(w -> w.getEquipmentNo().equals(equipmentId)).collect(Collectors.toList()).get(0).getHeights().split(",");
         ArrayList<WindTowerCalculationData> list = new ArrayList<>();
         try {
-            //设置默认值
-            int heightMin = 100;
-            for (String h : height) {
-                if (Integer.parseInt(getNumberFromString(h)) < heightMin) {
-                    heightMin = Integer.parseInt(getNumberFromString(h));
-                }
+            //获取月平均综合风切变字段
+            String ebIdMonth = equipmentAttributeList.stream().filter(w -> w.getFieldName().equals("windShearMonth")).collect(Collectors.toList()).get(0).getId();
+            String ebIdDay = equipmentAttributeList.stream().filter(w -> w.getFieldName().equals("windShearDay")).collect(Collectors.toList()).get(0).getId();
+            //删除时间段所有数据
+            removeByStartTimeBetweenAndEquipmentIdAndEbId(startHour, endTime, equipmentId, ebIdMonth);
+            //获取所有日平均风切变
+            List<WindTowerCalculationData> windTowerCalculationDatas = windTowerCalculationDataList1.stream().filter(w -> w.getEbId().equals(ebIdDay) && w.getTime().after(startHour) && w.getTime().before(endTime) && w.getEquipmentId().equals(equipmentId))
+                    .collect(Collectors.toList());
+            BigDecimal sum = new BigDecimal(0);
+
+            for (WindTowerCalculationData w : windTowerCalculationDatas) {
+                sum = sum.add(w.getValue());
             }
-            for (String h : height) {
-                if (h.equals(String.valueOf(heightMin))) {
-                    continue;
-                }
-                //获取对应层高的月平均风速字段
-                String ebIdMonth = equipmentAttributeList.stream().filter(w -> w.getFieldName().equals(h + "shearMonth")).collect(Collectors.toList()).get(0).getId();
-                String ebIdDay = equipmentAttributeList.stream().filter(w -> w.getFieldName().equals(h + "shearDay")).collect(Collectors.toList()).get(0).getId();
-                //删除时间段所有数据
-                removeByStartTimeBetweenAndEquipmentIdAndEbId(startHour, endTime, equipmentId, ebIdMonth);
-                //获取所有日平均风速
-                List<WindTowerCalculationData> windTowerCalculationDatas = windTowerCalculationDataList1.stream().filter(w -> w.getEbId().equals(ebIdDay) && w.getTime().after(startHour) && w.getTime().before(endTime) && w.getEquipmentId().equals(equipmentId)).collect(Collectors.toList());
-                BigDecimal sum = new BigDecimal(0);
 
-                for (WindTowerCalculationData w : windTowerCalculationDatas) {
-                    sum = sum.add(w.getValue());
-                }
-
-                if (!windTowerCalculationDatas.isEmpty()) {
-                    WindTowerCalculationData windTowerCalculationData = new WindTowerCalculationData();
-                    windTowerCalculationData.setEbId(ebIdMonth);
-                    windTowerCalculationData.setTime(startTime);
-                    windTowerCalculationData.setEquipmentId(equipmentId);
-                    windTowerCalculationData.setValue(sum.divide(new BigDecimal(windTowerCalculationDatas.size()), 2, RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP));
-                    list.add(windTowerCalculationData);
-                } else {
-                    log.info("设备编号{},{}月,{}米层高月平均风切变指数计算失败,缺少数据^ ^", equipmentId, startTime.getMonth() + 1, h);
-                }
+            if (!windTowerCalculationDatas.isEmpty()) {
+                WindTowerCalculationData windTowerCalculationData = new WindTowerCalculationData();
+                windTowerCalculationData.setEbId(ebIdMonth);
+                windTowerCalculationData.setTime(startTime);
+                windTowerCalculationData.setEquipmentId(equipmentId);
+                windTowerCalculationData.setValue(sum.divide(new BigDecimal(windTowerCalculationDatas.size()), 2, RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP));
+                list.add(windTowerCalculationData);
+            } else {
+                log.info("设备编号{},{}月平均风切变指数计算失败,缺少数据^ ^", equipmentId, startTime.getMonth() + 1);
+            }
 
 
-            }
         } catch (Exception e) {
             log.error("设备编号{}月平均风月切变计算失败^ ^", equipmentId);
             e.printStackTrace();
         }
-        saveBatchByEquipmentId(list, equipmentId);
+//        saveBatchByEquipmentId(list, equipmentId);
         log.info("设备编号{}月平均风切变计算成功^ ^", equipmentId);
+        return list;
     }
 
     /**
@@ -1889,10 +1850,10 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
      * @param equipmentId            设备Id
      * @param equipmentAttributeList 属性集合
      */
-    public void tDay(Date startTime, Date endTime, String equipmentId, List<ProphaseWeatherData> prophaseWeatherDataList, List<EquipmentAttribute> equipmentAttributeList) {
+    public ArrayList<WindTowerCalculationData> tDay(Date startTime, Date endTime, String equipmentId, List<ProphaseWeatherData> prophaseWeatherDataList, List<EquipmentAttribute> equipmentAttributeList) {
         String ebId = equipmentAttributeList.stream().filter(w -> w.getFieldName().equals("tDay")).collect(Collectors.toList()).get(0).getId();
         long day = 86400000L;
-        ArrayList<WindTowerCalculationData> list = new ArrayList<>();
+        ArrayList<WindTowerCalculationData> tList = new ArrayList<>();
         removeByStartTimeBetweenAndEquipmentIdAndEbId(startTime, endTime, equipmentId, ebId);
         try {
             for (long time = startTime.getTime(); time < endTime.getTime(); time += day) {
@@ -1907,16 +1868,16 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
                     windTowerCalculationData.setTime(new Date(dayTime));
                     windTowerCalculationData.setValue(tSum.divide(BigDecimal.valueOf(collect.size()), 2, RoundingMode.HALF_UP));
                     windTowerCalculationData.setEquipmentId(equipmentId);
-                    list.add(windTowerCalculationData);
+                    tList.add(windTowerCalculationData);
                 }
             }
         } catch (Exception e) {
             log.error("设备{}日平均温度统计异常", equipmentId);
             e.printStackTrace();
         }
-        saveBatchByEquipmentId(list, equipmentId);
+//        saveBatchByEquipmentId(list, equipmentId);
         log.info("{}设备日平均温度计算完成", equipmentId);
-
+        return tList;
     }
 
     /**
@@ -1927,7 +1888,7 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
      * @param equipmentId            设备Id
      * @param equipmentAttributeList 属性集合
      */
-    public void paDay(Date startTime, Date endTime, String equipmentId, List<ProphaseWeatherData> prophaseWeatherDataList, List<EquipmentAttribute> equipmentAttributeList) {
+    public ArrayList<WindTowerCalculationData> paDay(Date startTime, Date endTime, String equipmentId, List<ProphaseWeatherData> prophaseWeatherDataList, List<EquipmentAttribute> equipmentAttributeList) {
         String ebId = equipmentAttributeList.stream().filter(w -> w.getFieldName().equals("paDay")).collect(Collectors.toList()).get(0).getId();
         long day = 86400000L;
         ArrayList<WindTowerCalculationData> list = new ArrayList<>();
@@ -1952,92 +1913,61 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
             log.error("设备{}日平均气压统计异常", equipmentId);
             e.printStackTrace();
         }
-        saveBatchByEquipmentId(list, equipmentId);
+//        saveBatchByEquipmentId(list, equipmentId);
         log.info("{}设备日平均气压计算完成", equipmentId);
-
+        return list;
     }
 
 
     /**
      * 计算上一个小时 每10分钟的风切变指数
      */
-    @Transactional
-    public void calculateWindPowerShear(Date startTime, Date endTime, String equipmentId, List<ProphaseAnemometryData> prophaseAnemometryDataList, List<WindTowerCalculationData> windTowerCalculationDataList) {
+    public ArrayList<WindTowerCalculationData> calculateWindPowerShear(Date startTime, Date endTime, String equipmentId, List<ProphaseAnemometryData> prophaseAnemometryDataList, List<WindTowerCalculationData> windTowerCalculationDataList) {
         log.info("开始计算小时风切变指数");
         long startHour = startTime.getTime();
         long endHour = endTime.getTime();
-
         List<WindTowerInfo> windTowerInfoList = windTowerInfoService.lambdaQuery().eq(WindTowerInfo::getEquipmentNo, equipmentId).list();
-        String height = windTowerInfoList.get(0).getHeights();
-        String[] heights = height.split(",");
-        List<WindTowerCalculationData> listAll = new ArrayList<>();
-        Integer heightMin = Integer.parseInt(getNumberFromString(heights[0]));
-        for (String h : heights) {
-            if (Integer.parseInt(getNumberFromString(h)) < heightMin) {
-                heightMin = Integer.parseInt(getNumberFromString(h));
-            }
-        }
-
+        String[] heights = windTowerInfoList.get(0).getHeights().split(",");
+        ArrayList<WindTowerCalculationData> listAll = new ArrayList<>();
         //时间段内所有风数据
-//        List<Map<String, Object>> collect = mapList.stream().filter(w -> Long.parseLong(w.get("time").toString()) >= startTime.getTime() && Long.parseLong(w.get("time").toString()) <= endTime.getTime() && w.get("equipment_id").equals(equipmentId)).collect(Collectors.toList());
         List<ProphaseAnemometryData> prophaseAnemometryData = prophaseAnemometryDataList.stream().filter(p -> p.getTs().getTime() >= startTime.getTime() && p.getTs().getTime() <= endTime.getTime()).collect(Collectors.toList());
-
-        List<WindTowerCalculationData> windTowerCalculationDataList1 = windTowerCalculationDataList.stream().filter(w -> w.getTime().after(startTime) &&
-                w.getTime().before(endTime) && w.getEquipmentId().equals(equipmentId)).collect(Collectors.toList());
-        for (String h : heights) {
-            String filedName = h + "shear";
-            List<EquipmentAttribute> list = equipmentAttributeService.lambdaQuery().eq(EquipmentAttribute::getFieldName, filedName).list();
-            //风切变没有10米层高数据
-            if (!h.equals(String.valueOf(heightMin))) {
-                removeByStartTimeBetweenAndEquipmentIdAndEbId(startTime, endTime, equipmentId, list.get(0).getId());
-            }
-        }
+        EquipmentAttribute equipmentAttribute = equipmentAttributeService.lambdaQuery().eq(EquipmentAttribute::getFieldName, windShearFiledName).list().get(0);
+        //删除综合风切变
+        removeByStartTimeBetweenAndEquipmentIdAndEbId(startTime, endTime, equipmentId, equipmentAttribute.getId());
         try {
             for (long start1 = startHour; start1 <= endHour; start1 = start1 + 3600000) {
                 //开始时间--->start1  结束时间---->start2
                 long start2 = start1 + 3600000L;
-
-                //查询指定时间的风速数据,如果是1号0点-1点执行则查询上一个月的数据  windTowerStatusDataList key=层高 + 毫秒数 + 设备编号 + 当前日的时间  value= 每个层高的平均风速
-                Map<String, BigDecimal> windTowerStatusDataList = queryWindForShear(new Date(start1), new Date(start2), equipmentId, prophaseAnemometryData,heights);
-                //计算每10分钟的风切变指数          windTowerShearMap---> key=层高 + 设备编号  value = shear
-                Map<String, List<BigDecimal>> windTowerShearMap = traverseWindDataListCalcuShear(windTowerStatusDataList, heightMin);
-                //查询历史记录,以作更新操作        windTowerCalculationDataMap--->key= 时间 设备编号 EbId  value=windTowerCalculationData(所有数据)
-                Map<String, WindTowerCalculationData> windTowerCalculationDataMap = queryHistoryWindTowerCalculationDatas(windTowerCalculationDataList1);
-                //获取设备属性列表        equipmentAttributeMap  key=fieldName   value=id
-                Map<String, String> equipmentAttributeMap = queryEquipmentAttributeMap();
-
-
-                Integer curentHour = new Date(start1).getHours();
-                Date date = new Date(start1);
-                //遍历风切变数据集合求平均值并保存入库
-                windTowerShearMap.forEach((key, value) -> {
-                    WindTowerCalculationData windTowerCalculationData = new WindTowerCalculationData();
-                    String[] keys = key.split("-");
-                    //保存风速
-                    Date time = DateTimeUtil.strToDateLongYMDH(startTime.getMonth(), curentHour, keys[1]);
-                    String equmentId = keys[2];
-                    String ebId = equipmentAttributeMap.get(keys[0] + shearFunction);
-                    if (null != windTowerCalculationDataMap.get(time + equmentId + ebId)) {
-                        windTowerCalculationData = windTowerCalculationDataMap.get(time + equmentId + ebId);
-                    } else {
-                        //默认每月第一天
-                        windTowerCalculationData.setTime(date);
-                        windTowerCalculationData.setEquipmentId(equmentId);
-                        windTowerCalculationData.setEbId(ebId);
+                BigDecimal oneHourWindShear = BigDecimal.ZERO;
+                BigDecimal total = BigDecimal.ZERO;
+                for (long i = start1; i < start2; i = i + 600000) {
+                    long finalI = i;
+                    List<ProphaseAnemometryData> collect = prophaseAnemometryData.stream().filter(p -> p.getTs().getTime() >= finalI && p.getTs().getTime() <= finalI + 600000 - 1).collect(Collectors.toList());
+                    //计算十分钟综合风切变
+                    BigDecimal windShear = CalculationUtil.getWindShear(collect, heights);
+                    if (windShear.compareTo(BigDecimal.ZERO) != 0) {
+                        oneHourWindShear = oneHourWindShear.add(windShear);
+                        total = total.add(BigDecimal.ONE);
                     }
-                    //计算风切变平均值
-                    windTowerCalculationData.setValue(BigDecimal.valueOf(value.stream().mapToDouble(BigDecimal::doubleValue).average().orElse(0L)).setScale(4, RoundingMode.HALF_UP));
+                }
+                if (total.compareTo(BigDecimal.ZERO) > 0) {
+                    WindTowerCalculationData windTowerCalculationData = new WindTowerCalculationData();
+                    windTowerCalculationData.setEquipmentId(equipmentId);
+                    windTowerCalculationData.setTime(new Date(start1));
+                    windTowerCalculationData.setValue(oneHourWindShear.divide(total, 2, RoundingMode.HALF_UP));
+                    windTowerCalculationData.setEbId(equipmentAttribute.getId());
                     windTowerCalculationDataList.add(windTowerCalculationData);
                     listAll.add(windTowerCalculationData);
-                });
+                }
             }
         } catch (Exception e) {
             e.printStackTrace();
             log.error("设备{}小时风切变统计异常", equipmentId);
         }
         //保存风切变指数
-        saveBatchByEquipmentId(listAll, equipmentId);
+//        saveBatchByEquipmentId(listAll, equipmentId);
         log.info("{}设备风切变指数计算完成", equipmentId);
+        return listAll;
     }
 
 
@@ -2333,20 +2263,21 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
      * @param startTime   开始时间
      * @param endTime     结束时间
      * @param equipmentId 设备id
+     * @return
      */
-    public void staMonth(Date startTime, Date endTime, String equipmentId, List<ProphaseAnemometryData> prophaseAnemometryDataList, List<EquipmentAttribute> equipmentAttributeList, List<WindTowerInfo> windTowerInfoList) {
+    public ArrayList<WindTowerCalculationData> staMonth(Date startTime, Date endTime, String equipmentId, List<ProphaseAnemometryData> prophaseAnemometryDataList, List<EquipmentAttribute> equipmentAttributeList, List<WindTowerInfo> windTowerInfoList) {
         //时间-1防止0点数据查不到
         Date startHour = new Date(startTime.getTime() - 1);
         List<ProphaseAnemometryData> collect = prophaseAnemometryDataList.stream().filter(p -> p.getTs().getTime() >= startTime.getTime() && p.getTs().getTime() <= endTime.getTime()).collect(Collectors.toList());
 
-        List<WindTowerCalculationData> windTowerCalculationDataList = new ArrayList<>();
+        ArrayList<WindTowerCalculationData> windTowerCalculationDataList = new ArrayList<>();
         String h = windTowerInfoList.stream().filter(w -> w.getEquipmentNo().equals(equipmentId)).collect(Collectors.toList()).get(0).getHeights();
         String[] heights = h.split(",");
         //计算标差
         for (String height : heights) {
             List<EquipmentAttribute> equipmentAttributeList1 = equipmentAttributeList.stream().filter(e -> e.getFieldName().equals(height + "staMonth")).collect(Collectors.toList());
             if (!collect.isEmpty()) {
-                BigDecimal sumSta = CalculationUtil.getBigDecimal(collect.stream().filter(c -> c.getLayerHeight().equals(height)).mapToDouble(ProphaseAnemometryData::getWsSta).sum());
+                BigDecimal sumSta = CalculationUtil.getBigDecimal(collect.stream().filter(c -> c.getWsSta() != null && c.getLayerHeight().equals(height)).mapToDouble(ProphaseAnemometryData::getWsSta).sum());
                 WindTowerCalculationData windTowerCalculationData = new WindTowerCalculationData();
                 windTowerCalculationData.setEbId(equipmentAttributeList1.get(0).getId());
                 windTowerCalculationData.setTime(startHour);
@@ -2362,7 +2293,8 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
                 removeByStartTimeBetweenAndEquipmentIdAndEbId(startTime, endTime, equipmentId, e.getId());
             }
         }
-        saveBatchByEquipmentId(windTowerCalculationDataList, equipmentId);
+//        saveBatchByEquipmentId(windTowerCalculationDataList, equipmentId);
+        return windTowerCalculationDataList;
     }
 
 
@@ -2371,8 +2303,10 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
      * @param endTime                结束时间
      * @param equipmentId            设备id
      * @param equipmentAttributeList 属性集合
+     * @return
      */
-    public void environmentData(Date startTime, Date endTime, String equipmentId, List<ProphaseWeatherData> prophaseWeatherDataList, List<EquipmentAttribute> equipmentAttributeList) {
+    public ArrayList<WindTowerCalculationData> environmentData(Date startTime, Date endTime, String equipmentId, List<ProphaseWeatherData> prophaseWeatherDataList, List<EquipmentAttribute> equipmentAttributeList) {
+        ArrayList<WindTowerCalculationData> windTowerCalculationDataList = null;
         try {
             //时间-1防止0点数据查不到
             Date startHour = new Date(startTime.getTime() - 1);
@@ -2386,13 +2320,13 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
             BigDecimal aveRh = new BigDecimal(0);
             BigDecimal sumT = new BigDecimal(0);
             BigDecimal aveT = new BigDecimal(0);
+            windTowerCalculationDataList = new ArrayList<>();
             if (!prophaseWeatherData.isEmpty()) {
                 List<BigDecimal> paList = new ArrayList<>();
                 List<BigDecimal> rhList = new ArrayList<>();
                 List<BigDecimal> tList = new ArrayList<>();
                 /*计算平均值数值为null 不计算*/
                 for (ProphaseWeatherData map : prophaseWeatherData) {
-                    String abnormal_type = "";
                     if (map.getPaAve() != null && map.getPaAve() != 0) {
                         paList.add(CalculationUtil.getBigDecimal(map.getPaAve()));
                     }
@@ -2503,7 +2437,7 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
                 tAveData.setValue(aveT);
                 tAveData.setTime(startTime);
                 tAveData.setEquipmentId(equipmentId);
-                List<WindTowerCalculationData> windTowerCalculationDataList = new ArrayList<>();
+
                 windTowerCalculationDataList.add(paAveData);
                 windTowerCalculationDataList.add(paMaxData);
                 windTowerCalculationDataList.add(paMinData);
@@ -2513,11 +2447,12 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
                 windTowerCalculationDataList.add(tAveData);
                 windTowerCalculationDataList.add(tMaxData);
                 windTowerCalculationDataList.add(tMinData);
-                saveBatchByEquipmentId(windTowerCalculationDataList, equipmentId);
+//                saveBatchByEquipmentId(windTowerCalculationDataList, equipmentId);
             }
         } catch (Exception e) {
             e.printStackTrace();
         }
+        return windTowerCalculationDataList;
     }
 
     /**
@@ -2528,8 +2463,9 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
      * @param endTime                结束时间
      * @param equipmentAttributeList 属性集合
      * @param windTowerInfoList      测风塔信息
+     * @return
      */
-    public void turbulenceHourForMonth(String equipmentId, Date startTime, Date endTime, List<ProphaseAnemometryData> prophaseAnemometryDataList, List<EquipmentAttribute> equipmentAttributeList, List<WindTowerInfo> windTowerInfoList) {
+    public ArrayList<WindTowerCalculationData> turbulenceHourForMonth(String equipmentId, Date startTime, Date endTime, List<ProphaseAnemometryData> prophaseAnemometryDataList, List<EquipmentAttribute> equipmentAttributeList, List<WindTowerInfo> windTowerInfoList) {
         String height = windTowerInfoList.stream().filter(w -> w.getEquipmentNo().equals(equipmentId)).collect(Collectors.toList()).get(0).getHeights();
         String[] heights = height.split(",");
         long hour = 3600000L;
@@ -2556,8 +2492,8 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
                     if (anemometryDataList.size() > 0) {
                         BigDecimal turAve = BigDecimal.ZERO;
                         //循环实时数据计算总风速和标差
-                        BigDecimal wsSun = CalculationUtil.getBigDecimal(anemometryDataList.stream().mapToDouble(ProphaseAnemometryData::getWsAve).sum());
-                        BigDecimal staSun = CalculationUtil.getBigDecimal(anemometryDataList.stream().mapToDouble(ProphaseAnemometryData::getWsSta).sum());
+                        BigDecimal wsSun = CalculationUtil.getBigDecimal(anemometryDataList.stream().filter(a -> a.getWsAve() != null).mapToDouble(ProphaseAnemometryData::getWsAve).sum());
+                        BigDecimal staSun = CalculationUtil.getBigDecimal(anemometryDataList.stream().filter(a -> a.getWsSta() != null).mapToDouble(ProphaseAnemometryData::getWsSta).sum());
                         //除以一小时的个数 求小时的平均值
                         BigDecimal wsAve = wsSun.divide(BigDecimal.valueOf(anemometryDataList.size()), 2, RoundingMode.HALF_UP);
                         BigDecimal staAve = staSun.divide(BigDecimal.valueOf(anemometryDataList.size()), 2, RoundingMode.HALF_UP);
@@ -2604,8 +2540,9 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
             log.error("设备编号{},湍流年逐时计算错误", equipmentId);
             e.printStackTrace();
         }
-        saveBatchByEquipmentId(list, equipmentId);
+//        saveBatchByEquipmentId(list, equipmentId);
         log.info("设备编号{},湍流年逐时,计算完成", equipmentId);
+        return list;
     }
 
 
@@ -2615,8 +2552,9 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
      * @param equipmentId 设备id
      * @param startTime   开始时间
      * @param endTime     结束时间
+     * @return
      */
-    public void airDensityMonth(String equipmentId, Date startTime, Date endTime, List<ProphaseWeatherData> prophaseWeatherDataList) {
+    public ArrayList<WindTowerCalculationData> airDensityMonth(String equipmentId, Date startTime, Date endTime, List<ProphaseWeatherData> prophaseWeatherDataList) {
         //获取ebId
         String ebId = equipmentAttributeService.lambdaQuery().eq(EquipmentAttribute::getFieldName, "airDensityDayForYear").list().get(0).getId();
         removeByStartTimeBetweenAndEquipmentIdAndEbId(startTime, new Date(endTime.getTime() + 86400000L), equipmentId, ebId);
@@ -2677,8 +2615,9 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
             log.error("设备编号{},空气密度月逐时计算错误", equipmentId);
             e.printStackTrace();
         }
-        saveBatchByEquipmentId(list, equipmentId);
+//        saveBatchByEquipmentId(list, equipmentId);
         log.info("设备编号{},空气密度月逐时,计算完成", equipmentId);
+        return list;
 
     }
 

+ 34 - 8
neim-biz/src/main/java/com/jiayue/biz/util/CalculationUtil.java

@@ -1,10 +1,10 @@
 package com.jiayue.biz.util;
 
+import cn.hutool.core.convert.Convert;
 import com.jiayue.biz.domain.ProphaseAnemometryData;
 import com.jiayue.biz.domain.ProphaseWeatherData;
 import com.jiayue.biz.domain.WindTowerCalculationData;
 import com.jiayue.biz.eunms.WindDirectionEnum;
-import javafx.scene.input.DataFormat;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.time.DateUtils;
 
@@ -14,7 +14,6 @@ import java.math.RoundingMode;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 @Slf4j
 public class CalculationUtil {
@@ -48,7 +47,7 @@ public class CalculationUtil {
         List<ProphaseAnemometryData> collect = new ArrayList<>();
         if (windEnum.name().equals("N")) {
             // N的范围为 348.75<wd<360 + 0<wd<11.25
-            List.stream().filter(e -> e.getWdAve() != null).filter(w ->  (getBigDecimal(w.getWdAve()).compareTo(windEnum.getLower()) >= 0 && getBigDecimal(w.getWdAve()).compareTo(new BigDecimal(360)) <= 0) || (getBigDecimal(w.getWdAve()).compareTo(windEnum.getUpper()) < 0 && getBigDecimal(w.getWdAve()).compareTo(new BigDecimal(0)) > 0)).collect(Collectors.toList());
+            List.stream().filter(e -> e.getWdAve() != null).filter(w -> (getBigDecimal(w.getWdAve()).compareTo(windEnum.getLower()) >= 0 && getBigDecimal(w.getWdAve()).compareTo(new BigDecimal(360)) <= 0) || (getBigDecimal(w.getWdAve()).compareTo(windEnum.getUpper()) < 0 && getBigDecimal(w.getWdAve()).compareTo(new BigDecimal(0)) > 0)).collect(Collectors.toList());
         } else {
             collect = List.stream().filter(w -> w.getWdAve() != null && getBigDecimal(w.getWdAve()).compareTo(windEnum.getLower()) >= 0 && getBigDecimal(w.getWdAve()).compareTo(windEnum.getUpper()) < 0).collect(Collectors.toList());
         }
@@ -161,7 +160,7 @@ public class CalculationUtil {
      * @return
      */
     public static BigDecimal getAvgWind(List<BigDecimal> bigDecimalList) {
-        return new BigDecimal(bigDecimalList.stream().collect(Collectors.averagingDouble(BigDecimal::doubleValue)));
+        return new BigDecimal(bigDecimalList.stream().collect(Collectors.averagingDouble(BigDecimal::doubleValue))).setScale(2,RoundingMode.HALF_UP);
     }
 
 
@@ -180,12 +179,12 @@ public class CalculationUtil {
                     if (weatherData.get(i).getAirDensity() != null && anemometryData.get(i).getWsAve() != null) {
                         if (weatherData.get(i).getTs().getTime() == anemometryData.get(i).getTs().getTime()) {
                             //计算风功率密度 空气密度*第i点的风速值的立方 求和/2 各个层高都有
-                            count = count.add(getWpdCalculate(getBigDecimal(weatherData.get(i).getAirDensity()),getBigDecimal(anemometryData.get(i).getWsAve())));
+                            count = count.add(getWpdCalculate(getBigDecimal(weatherData.get(i).getAirDensity()), getBigDecimal(anemometryData.get(i).getWsAve())));
                         } else {
                             int finalI = i;
                             List<ProphaseWeatherData> collect = weatherData.stream().filter(w -> w.getTs().getTime() == anemometryData.get(finalI).getTs().getTime()).collect(Collectors.toList());
                             if (collect.size() > 0) {
-                                count = count.add(getWpdCalculate(getBigDecimal(collect.get(0).getAirDensity()),getBigDecimal(anemometryData.get(i).getWsAve())));
+                                count = count.add(getWpdCalculate(getBigDecimal(collect.get(0).getAirDensity()), getBigDecimal(anemometryData.get(i).getWsAve())));
                             }
                         }
                     }
@@ -200,8 +199,8 @@ public class CalculationUtil {
     }
 
     //计算风功率密度公式
-    public static BigDecimal getWpdCalculate(BigDecimal wsAve, BigDecimal airAve){
-       return airAve.multiply(power(getBigDecimal(wsAve), 3)).multiply(BigDecimal.valueOf(0.5));
+    public static BigDecimal getWpdCalculate(BigDecimal wsAve, BigDecimal airAve) {
+        return airAve.multiply(power(getBigDecimal(wsAve), 3)).multiply(BigDecimal.valueOf(0.5));
     }
 
     /**
@@ -430,5 +429,32 @@ public class CalculationUtil {
         return value;
     }
 
+    //计算十分钟综合风切变
+    public static BigDecimal getWindShear(List<ProphaseAnemometryData> prophaseAnemometryData, String[] heights) {
+        BigDecimal sumWShear = BigDecimal.ZERO;
+        if(prophaseAnemometryData.size() > 0){
+            String maxHeight = heights[0];
+            List<ProphaseAnemometryData> heightCollect = prophaseAnemometryData.stream().filter(p -> p.getLayerHeight().equals(maxHeight)).collect(Collectors.toList());
+            BigDecimal wsAveForMax = BigDecimal.valueOf(heightCollect.get(0).getWsAve());
+            BigDecimal total = BigDecimal.ZERO;
+            for (String minHeight : heights) {
+                if (!getNumberFromString(minHeight).equals(getNumberFromString(maxHeight))) {
+                    List<ProphaseAnemometryData> sCollect = prophaseAnemometryData.stream().filter(p -> p.getLayerHeight().equals(minHeight)).collect(Collectors.toList());
+                    BigDecimal wsAveMin = BigDecimal.valueOf(sCollect.get(0).getWsAve());
+                    double z = new BigDecimal(getNumberFromString(maxHeight)).divide(new BigDecimal(getNumberFromString(minHeight)), 4, RoundingMode.HALF_UP).doubleValue();
+                    double z1 = Math.log10(z);
+                    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);
+                    total = total.add(BigDecimal.ONE);
+                }
+            }
+            if(total.compareTo(BigDecimal.ZERO) > 0){
+                sumWShear = sumWShear.divide(total,2,RoundingMode.HALF_UP);
+            }
+        }
+        return sumWShear;
+    }
+
 
 }

+ 2 - 3
neim-ui/src/views/statistical/shear/index.vue

@@ -119,11 +119,10 @@ export default {
         zlevel: 0,
       });
       await listShear(param).then(async res => {
-
         let data = res.rows[1]
         this.avgShearText = ''
         for (let i = 0; i < data.length; i++) {
-          this.avgShearText += ' <span style="color: #1c84c6;font-weight: bold">' + data[i].height + 'm平均值:</span>' + '<span style="color: #1ab394">' + data[i].shearAve + '</span>' + ','
+          this.avgShearText += ' <span style="color: #1c84c6;font-weight: bold">' + data[i].height + '平均值:</span>' + '<span style="color: #1ab394">' + data[i].shearAve + '</span>' + ','
         }
         if (this.avgShearText != '') {
           this.avgShearText = this.avgShearText.slice(0, this.avgShearText.length - 1)
@@ -157,7 +156,7 @@ export default {
         }
 
         serise.push({
-          name: data[i].height + 'm',
+          name: data[i].height,
           type: 'line',
           smooth: false,
           symbol: 'none', // 这句就是去掉点的

+ 0 - 1
neim-ui/src/views/statistical/statisticsWs/index.vue

@@ -154,7 +154,6 @@ export default {
           this.avgWsText = this.avgWsText.slice(0, this.avgWsText.length - 1)
 
         }
-
         this.wsData = res.rows[0]
         this.drawWsInChart(this.wsData)
 

Неке датотеке нису приказане због велике количине промена