|
@@ -1604,7 +1604,7 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
|
|
|
* @param equipmentId 设备id
|
|
|
* @return
|
|
|
*/
|
|
|
- public ArrayList<WindTowerCalculationData> turbulenceDay(Date startTime, Date endTime, String equipmentId, 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, List<ProphaseAnemometryData> prophaseAnemometryDataList) {
|
|
|
long startHour = startTime.getTime();
|
|
|
long endHour = endTime.getTime();
|
|
|
long dayTime = 86400000L;
|
|
@@ -1614,26 +1614,29 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
|
|
|
ArrayList<WindTowerCalculationData> list = new ArrayList<>();
|
|
|
try {
|
|
|
for (String h : heightAll) {
|
|
|
-
|
|
|
+ List<ProphaseAnemometryData> anemometryDataList = prophaseAnemometryDataList.stream().filter(p -> p.getLayerHeight().equals(h)).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) {
|
|
|
-
|
|
|
+ BigDecimal turAve = BigDecimal.ZERO;
|
|
|
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()) {
|
|
|
+ List<ProphaseAnemometryData> prophaseAnemometryData = anemometryDataList.stream().filter(p -> p.getTs().getTime() >= finalStart && p.getTs().getTime() < finalStart + dayTime && p.getWsAve() != null && p.getWsAve() >= 14.5 && p.getWsAve() <= 15.5 && p.getWsSta() != null && p.getWsSta() > 0).collect(Collectors.toList());
|
|
|
+ if (prophaseAnemometryData.size() > 0) {
|
|
|
+ BigDecimal turSum = BigDecimal.ZERO;
|
|
|
+ for (ProphaseAnemometryData prophaseAnemometryDatum : prophaseAnemometryData) {
|
|
|
+ turSum = turSum.add(CalculationUtil.caTurbulenceIntensity(BigDecimal.valueOf(prophaseAnemometryDatum.getWsSta()), BigDecimal.valueOf(prophaseAnemometryDatum.getWsAve())));
|
|
|
+ }
|
|
|
+ turAve = turSum.divide(BigDecimal.valueOf(prophaseAnemometryData.size()), 2, RoundingMode.HALF_UP);
|
|
|
+ }
|
|
|
+ if (anemometryDataList.size() > 0) {
|
|
|
|
|
|
//数据入库
|
|
|
WindTowerCalculationData windTowerCalculationData = new WindTowerCalculationData();
|
|
|
windTowerCalculationData.setTime(new Date(start1));
|
|
|
windTowerCalculationData.setEbId(turList.get(0).getId());
|
|
|
windTowerCalculationData.setEquipmentId(equipmentId);
|
|
|
- windTowerCalculationData.setValue(CalculationUtil.caTurbulenceIntensity(staDay.get(0).getValue(), wsDay.get(0).getValue()));
|
|
|
+ windTowerCalculationData.setValue(turAve);
|
|
|
windTowerCalculationDataList.add(windTowerCalculationData);
|
|
|
list.add(windTowerCalculationData);
|
|
|
} else {
|
|
@@ -1680,17 +1683,23 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
|
|
|
//获取所有日平均湍流风速
|
|
|
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);
|
|
|
-
|
|
|
+ BigDecimal total = new BigDecimal(0);
|
|
|
+ BigDecimal turMonth = new BigDecimal(0);
|
|
|
for (WindTowerCalculationData w : windTowerCalculationDatas) {
|
|
|
- sum = sum.add(w.getValue());
|
|
|
+ if (w.getValue().compareTo(BigDecimal.ZERO) > 0) {
|
|
|
+ sum = sum.add(w.getValue());
|
|
|
+ total = total.add(BigDecimal.ONE);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (total.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
+ turMonth = sum.divide(total, 2, RoundingMode.HALF_UP);
|
|
|
}
|
|
|
-
|
|
|
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));
|
|
|
+ windTowerCalculationData.setValue(turMonth);
|
|
|
list.add(windTowerCalculationData);
|
|
|
} else {
|
|
|
log.info("设备编号{},{}月,{}米层高月平均湍流计算失败,缺少数据^ ^", equipmentId, startTime.getMonth() + 1, h);
|
|
@@ -2502,12 +2511,12 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
|
|
|
//筛选小时数据
|
|
|
// List<Map<String, Object>> collect = mapList.stream().filter(w -> Long.parseLong(w.get("time").toString()) >= startHour && Long.parseLong(w.get("time").toString()) <= endHour && w.get("equipment_id").equals(equipmentId)).collect(Collectors.toList());
|
|
|
List<ProphaseAnemometryData> anemometryDataList = prophaseAnemometryDataList.stream().filter(p -> p.getTs().getTime() >= startHour && p.getTs().getTime() <= endHour && p.getLayerHeight().equals(h)
|
|
|
- && p.getWsAve() != null && p.getWsAve() != -99
|
|
|
- && p.getWsSta() != null && p.getWsSta() != -99).collect(Collectors.toList());
|
|
|
+ && p.getWsAve() != null && p.getWsAve() > 0
|
|
|
+ && p.getWsSta() != null && p.getWsSta() > 0).collect(Collectors.toList());
|
|
|
|
|
|
-
|
|
|
- if (anemometryDataList.size() > 0) {
|
|
|
- BigDecimal turAve = BigDecimal.ZERO;
|
|
|
+ BigDecimal turAve = BigDecimal.ZERO;
|
|
|
+ List<ProphaseAnemometryData> prophaseAnemometryData = anemometryDataList.stream().filter(a -> a.getWsAve() >= 14.5 && a.getWsAve() <= 15.5).collect(Collectors.toList());
|
|
|
+ if (prophaseAnemometryData.size() > 0) {
|
|
|
//循环实时数据计算总风速和标差
|
|
|
BigDecimal wsSun = CalculationUtil.getBigDecimal(anemometryDataList.stream().mapToDouble(ProphaseAnemometryData::getWsAve).sum());
|
|
|
BigDecimal staSun = CalculationUtil.getBigDecimal(anemometryDataList.stream().mapToDouble(ProphaseAnemometryData::getWsSta).sum());
|
|
@@ -2519,6 +2528,8 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
|
|
|
continue;
|
|
|
}
|
|
|
turAve = staAve.divide(wsAve, 2, RoundingMode.HALF_UP);
|
|
|
+ }
|
|
|
+ if (anemometryDataList.size() > 0) {
|
|
|
//判断map中是否存在此小时的key 如果存在就把数值相加 个数加一
|
|
|
if (timeAndTurMap.get(new Date(startHour).getHours()) != null) {
|
|
|
|
|
@@ -2526,14 +2537,16 @@ public class WindTowerCalculationDataServiceImpl extends ServiceImpl<WindTowerCa
|
|
|
BigDecimal total = totalAndTurMap.get(new Date(startHour).getHours()).add(BigDecimal.ONE);
|
|
|
|
|
|
timeAndTurMap.put(new Date(startHour).getHours(), Average);
|
|
|
- totalAndTurMap.put(new Date(startHour).getHours(), total);
|
|
|
+ if (turAve.compareTo(BigDecimal.ZERO) != 0) {
|
|
|
+ totalAndTurMap.put(new Date(startHour).getHours(), total);
|
|
|
+ }
|
|
|
} else {
|
|
|
//如果map中不存在这个key则直接把平均值加入 个数加一
|
|
|
timeAndTurMap.put(new Date(startHour).getHours(), turAve);
|
|
|
totalAndTurMap.put(new Date(startHour).getHours(), BigDecimal.ONE);
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
+ }
|
|
|
}
|
|
|
if (!timeAndTurMap.entrySet().isEmpty()) {
|
|
|
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd");
|