diff --git a/shuili-system/src/main/java/com/kms/yg/cz/dto/CharInfoDto.java b/shuili-system/src/main/java/com/kms/yg/cz/dto/CharInfoDto.java index ef16de92..ad9a0dee 100644 --- a/shuili-system/src/main/java/com/kms/yg/cz/dto/CharInfoDto.java +++ b/shuili-system/src/main/java/com/kms/yg/cz/dto/CharInfoDto.java @@ -4,19 +4,22 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.Collections; import java.util.List; @ApiModel("图表信息") @Data public class CharInfoDto { @ApiModelProperty(value = "x轴") - private List xAxis; + private List xAxis = Collections.emptyList(); @ApiModelProperty(value = "y轴") - private List yAxis; + private List yAxis = Collections.emptyList(); + ; @ApiModelProperty(value = "标线") - private List markLine; + private List markLine = Collections.emptyList(); + ; @Data @ApiModel("y轴") diff --git a/shuili-system/src/main/java/com/kms/yg/cz/enmu/MonitorComposeEnum.java b/shuili-system/src/main/java/com/kms/yg/cz/enmu/MonitorComposeEnum.java index bf77e627..1798fbfd 100644 --- a/shuili-system/src/main/java/com/kms/yg/cz/enmu/MonitorComposeEnum.java +++ b/shuili-system/src/main/java/com/kms/yg/cz/enmu/MonitorComposeEnum.java @@ -1,10 +1,18 @@ 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 lombok.Getter; +import org.apache.commons.collections4.KeyValue; +import org.apache.commons.collections4.keyvalue.DefaultKeyValue; -import java.util.Collections; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static com.shuili.common.utils.DateUtils.YYYY_MM_DD_HH_MM_SS; @Getter @@ -66,4 +74,65 @@ public enum MonitorComposeEnum { this.rightUnit = rightUnit; } + + public CharInfoDto toChar(Map>> 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())); + List yAxis = new ArrayList<>(); + + if (CollectionUtil.isNotEmpty(this.leftElements)) { + CharInfoDto.YAxis left = new CharInfoDto.YAxis(); + left.setName(this.leftName); + left.setUnit(this.leftUnit); + left.setSeries(getCollect(this.leftElements, this.leftName, dataMap, charInfoDto)); + yAxis.add(left); + } + if (CollectionUtil.isNotEmpty(this.rightElements)) { + CharInfoDto.YAxis right = new CharInfoDto.YAxis(); + right.setName(this.rightName); + right.setUnit(this.rightUnit); + right.setSeries(getCollect(this.rightElements, this.rightName, dataMap, charInfoDto)); + yAxis.add(right); + } + return charInfoDto; + } + + private List getCollect(List element, String name, Map>> dataMap, CharInfoDto charInfoDto) { + return element.stream() + .map(type -> { + CharInfoDto.Series series = new CharInfoDto.Series(); + series.setName(name); + MonitorSourceEnum source = type.getSource(); + Map values = dataMap.get(source).stream() + .map(map -> { + Object time = map.get(type.getTimeField()); + if (time instanceof Date) { + DefaultKeyValue keyValue = new DefaultKeyValue<>(); + keyValue.setKey(DateUtils.parseDateToStr(YYYY_MM_DD_HH_MM_SS, (Date) time)); + keyValue.setValue(map.get(type.getValueField())); + return keyValue; + } + return null; + }) + .filter(Objects::nonNull) + .collect(Collectors.toMap(KeyValue::getKey, KeyValue::getValue)); + series.setData(charInfoDto.getXAxis().stream() + .map(time -> { + Object value = values.get(time); + return value == null ? "0" : value.toString(); + }).collect(Collectors.toList())); + return series; + }).collect(Collectors.toList()); + } + } diff --git a/shuili-system/src/main/java/com/kms/yg/cz/service/MonitorService.java b/shuili-system/src/main/java/com/kms/yg/cz/service/MonitorService.java index 661f094e..f2ee4f84 100644 --- a/shuili-system/src/main/java/com/kms/yg/cz/service/MonitorService.java +++ b/shuili-system/src/main/java/com/kms/yg/cz/service/MonitorService.java @@ -10,7 +10,9 @@ import com.kms.yg.cz.dto.CharInfoDto; import com.kms.yg.cz.dto.CurrentWaterMonitorDto; import com.kms.yg.cz.dto.MonitorConfigDto; import com.kms.yg.cz.dto.MonitorQueDto; +import com.kms.yg.cz.enmu.MonitorComposeEnum; import com.kms.yg.cz.enmu.MonitorSourceEnum; +import com.kms.yg.cz.enmu.MonitorTypeEnum; import com.kms.yg.cz.mapper.MonitorConfigMapper; import com.kms.yxgh.base.domain.monitor.*; import com.kms.yxgh.common.dto.OperatorDto; @@ -29,6 +31,7 @@ import java.util.Map; import java.util.concurrent.CompletableFuture; import java.util.function.Function; import java.util.stream.Collectors; +import java.util.stream.Stream; @Service @Slf4j @@ -63,7 +66,27 @@ public class MonitorService { public CharInfoDto chart(MonitorQueDto sp) { - return null; + MonitorComposeEnum composeEnum = sp.getElementType(); + if (composeEnum == null) { + return new CharInfoDto(); + } + List sourceEnums = Stream.concat(composeEnum.getLeftElements().stream(), composeEnum.getRightElements().stream()) + .map(MonitorTypeEnum::getSource) + .distinct() + .collect(Collectors.toList()); + Map>> dataMap = queryData(sourceEnums, sp); + return composeEnum.toChar(dataMap, sp); + } + + private Map>> queryData(List sourceEnums, MonitorQueDto queDto) { + Map>> futureMap = sourceEnums.stream() + .collect(Collectors.toMap(Function.identity(), item -> CompletableFuture.supplyAsync(() -> queryDataList(item, queDto))) + ); + CompletableFuture.allOf(futureMap.values().toArray(new CompletableFuture[0])).join(); + return futureMap.entrySet().stream() + .collect(Collectors.toMap(Map.Entry::getKey, item -> item.getValue().join().stream() + .map(BeanCopyUtils::copyToMap) + .collect(Collectors.toList()))); } public CurrentWaterMonitorDto watter(MonitorQueDto sp) {