Browse Source

fix:监测数据改造

release-sy-v1.0.0
“lyd” 3 weeks ago
parent
commit
314849f125
  1. 87
      shuili-system/src/main/java/com/kms/yg/cz/enmu/MonitorComposeEnum.java
  2. 85
      shuili-system/src/main/java/com/kms/yxgh/util/TimeSplitter.java

87
shuili-system/src/main/java/com/kms/yg/cz/enmu/MonitorComposeEnum.java

@ -3,20 +3,43 @@ package com.kms.yg.cz.enmu;
import cn.hutool.core.collection.CollectionUtil;
import com.kms.yg.cz.dto.CharInfoDto;
import com.kms.yg.cz.dto.MonitorQueDto;
import com.shuili.common.utils.DateUtils;
import com.kms.yxgh.util.TimeSplitter;
import com.shuili.common.utils.StringUtils;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.KeyValue;
import org.apache.commons.collections4.keyvalue.DefaultKeyValue;
import java.util.*;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import static com.kms.yg.cz.enmu.MonitorTypeEnum.*;
import static com.shuili.common.utils.DateUtils.YYYY_MM_DD_HH_MM_SS;
import static com.kms.yg.cz.enmu.MonitorTypeEnum.AIR_TEMPE;
import static com.kms.yg.cz.enmu.MonitorTypeEnum.CRACK_OPENING_DEGREE;
import static com.kms.yg.cz.enmu.MonitorTypeEnum.GATE_FLOW_RATE;
import static com.kms.yg.cz.enmu.MonitorTypeEnum.HORIZONTAL_DISPLACEMENT_X_SURFACE;
import static com.kms.yg.cz.enmu.MonitorTypeEnum.HORIZONTAL_DISPLACEMENT_Y_SURFACE;
import static com.kms.yg.cz.enmu.MonitorTypeEnum.RAINFALL;
import static com.kms.yg.cz.enmu.MonitorTypeEnum.SEEPAGE_FLOW;
import static com.kms.yg.cz.enmu.MonitorTypeEnum.SK_RAINFALL;
import static com.kms.yg.cz.enmu.MonitorTypeEnum.STRAIN;
import static com.kms.yg.cz.enmu.MonitorTypeEnum.STRESS;
import static com.kms.yg.cz.enmu.MonitorTypeEnum.VERTICAL_DISPLACEMENT;
import static com.kms.yg.cz.enmu.MonitorTypeEnum.WATER_LEVEL_ABOVE_GATE;
import static com.kms.yg.cz.enmu.MonitorTypeEnum.WATER_LEVEL_BELOW_GATE;
import static com.kms.yg.cz.enmu.MonitorTypeEnum.WATER_TEMPE;
@Slf4j
@Getter
public enum MonitorComposeEnum {
@ -86,17 +109,9 @@ public enum MonitorComposeEnum {
public CharInfoDto toChar(Map<MonitorSourceEnum, List<Map<String, Object>>> dataMap, MonitorQueDto sp) {
CharInfoDto charInfoDto = new CharInfoDto();
charInfoDto.setXAxis(Stream.concat(this.leftElements.stream(), this.rightElements.stream())
.flatMap(type -> {
MonitorSourceEnum source = type.getSource();
return dataMap.get(source).stream().map(map -> map.get(type.getTimeField()));
}
).filter(Objects::nonNull)
.filter(item -> item instanceof Date)
.map(item -> (Date) item)
.map(date -> DateUtils.parseDateToStr(YYYY_MM_DD_HH_MM_SS, date))
.sorted()
.collect(Collectors.toList()));
charInfoDto.setXAxis(TimeSplitter
.splitByHour(TimeSplitter
.getDateStr(sp.getStartTime()), TimeSplitter.getDateStr(sp.getEndTime())));
List<CharInfoDto.YAxis> yAxis = new ArrayList<>();
if (CollectionUtil.isNotEmpty(this.leftElements)) {
@ -124,19 +139,41 @@ public enum MonitorComposeEnum {
}
private List<CharInfoDto.Series> getCollect(List<MonitorTypeEnum> element, String name, Map<MonitorSourceEnum, List<Map<String, Object>>> dataMap, CharInfoDto charInfoDto) {
Map<String, Object> tempMap = new HashMap<>();
return element.stream()
.map(type -> {
CharInfoDto.Series series = new CharInfoDto.Series();
series.setName(type.getZhName());
MonitorSourceEnum source = type.getSource();
Map<String, Object> values = dataMap.get(source).stream()
dataMap.get(source).stream()
.map(map -> {
Object time = map.get(type.getTimeField());
if (time instanceof Date) {
DefaultKeyValue<String, Object> keyValue = new DefaultKeyValue<>();
keyValue.setKey(DateUtils.parseDateToStr(YYYY_MM_DD_HH_MM_SS, (Date) time));
keyValue.setValue(map.get(type.getValueField()));
return keyValue;
try {
Object time = map.get(type.getTimeField());
if (time instanceof Date) {
DefaultKeyValue<String, Object> keyValue = new DefaultKeyValue<>();
String key = TimeSplitter.parseDateToPoint((Date) time);
Object value = map.get(type.getValueField());
keyValue.setKey(key);
keyValue.setValue(value);
if (tempMap.containsKey(key)
&& !StringUtils.isEmpty(value.toString())
&& !StringUtils.isEmpty(tempMap.get(key).toString())
) {
BigDecimal t1 = new BigDecimal(value.toString());
BigDecimal t2 = new BigDecimal(tempMap.get(key).toString());
int result = t1.compareTo(t2);
if (result > 0) {
tempMap.put(key, value);
}
} else {
tempMap.put(key, value);
}
return keyValue;
}
} catch (Exception e) {
log.debug("getCollectError:{}", map.toString());
log.debug("getCollectErrorTempMap:{}", tempMap.toString());
e.printStackTrace();
}
return null;
})
@ -144,7 +181,7 @@ public enum MonitorComposeEnum {
.collect(Collectors.toMap(KeyValue::getKey, KeyValue::getValue, (v1, v2) -> v2));
series.setData(charInfoDto.getXAxis().stream()
.map(time -> {
Object value = values.get(time);
Object value = tempMap.get(time);
return value == null || StringUtils.isEmpty(value.toString()) ? "0" : value.toString();
}).collect(Collectors.toList()));
return series;

85
shuili-system/src/main/java/com/kms/yxgh/util/TimeSplitter.java

@ -0,0 +1,85 @@
package com.kms.yxgh.util;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
public class TimeSplitter {
public static List<String> splitByHour(String startTimeStr, String endTimeStr) {
endTimeStr = endTimeStr.replaceAll("59", "00");
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime startTime = LocalDateTime.parse(startTimeStr, formatter);
LocalDateTime endTime = LocalDateTime.parse(endTimeStr, formatter);
List<String> result = new ArrayList<>();
// 处理开始时间不是整点的情况
if (startTime.getMinute() != 0 || startTime.getSecond() != 0) {
// 将开始时间设置为下一个整点
LocalDateTime nextHour = startTime
.plusHours(1)
.withMinute(0)
.withSecond(0);
// 如果下一个整点已经超过结束时间,则只添加开始和结束时间
if (nextHour.isAfter(endTime)) {
result.add(startTimeStr);
result.add(endTimeStr);
return result;
}
// 添加开始时间和第一个整点时间
result.add(startTimeStr);
result.add(nextHour.format(formatter));
startTime = nextHour;
}
// 添加中间的整点时间
LocalDateTime currentHour = startTime;
while (currentHour.plusHours(1).isBefore(endTime) || currentHour.plusHours(1).isEqual(endTime)) {
result.add(currentHour.format(formatter));
currentHour = currentHour.plusHours(1);
}
// 处理结束时间
if (currentHour.isBefore(endTime)) {
result.add(currentHour.format(formatter));
result.add(endTimeStr);
} else {
result.add(endTimeStr);
}
return result.stream().sorted().collect(Collectors.toList());
}
public static String getDateStr(Date date) {
LocalDateTime ldt = date.toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDateTime();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
return ldt.format(formatter);
}
public static String parseDateToPoint(Date date) {
// 转换为整点时间
ZonedDateTime zdt = date.toInstant()
.atZone(ZoneId.systemDefault())
.withMinute(0)
.withSecond(0)
.withNano(0);
// 格式化为字符串
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
return zdt.format(formatter);
}
public static void main(String[] args) {
}
}
Loading…
Cancel
Save