Browse Source

feat: 图表获取数据逻辑

master_tdsql
hxh 4 months ago
parent
commit
59880aaf23
  1. 9
      shuili-system/src/main/java/com/kms/yg/cz/dto/CharInfoDto.java
  2. 73
      shuili-system/src/main/java/com/kms/yg/cz/enmu/MonitorComposeEnum.java
  3. 25
      shuili-system/src/main/java/com/kms/yg/cz/service/MonitorService.java

9
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 io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.util.Collections;
import java.util.List; import java.util.List;
@ApiModel("图表信息") @ApiModel("图表信息")
@Data @Data
public class CharInfoDto { public class CharInfoDto {
@ApiModelProperty(value = "x轴") @ApiModelProperty(value = "x轴")
private List<String> xAxis; private List<String> xAxis = Collections.emptyList();
@ApiModelProperty(value = "y轴") @ApiModelProperty(value = "y轴")
private List<YAxis> yAxis; private List<YAxis> yAxis = Collections.emptyList();
;
@ApiModelProperty(value = "标线") @ApiModelProperty(value = "标线")
private List<MarkLine> markLine; private List<MarkLine> markLine = Collections.emptyList();
;
@Data @Data
@ApiModel("y轴") @ApiModel("y轴")

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

@ -1,10 +1,18 @@
package com.kms.yg.cz.enmu; package com.kms.yg.cz.enmu;
import cn.hutool.core.collection.CollectionUtil; 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 lombok.Getter;
import org.apache.commons.collections4.KeyValue;
import org.apache.commons.collections4.keyvalue.DefaultKeyValue;
import java.util.Collections; import java.util.*;
import java.util.List; import java.util.stream.Collectors;
import java.util.stream.Stream;
import static com.shuili.common.utils.DateUtils.YYYY_MM_DD_HH_MM_SS;
@Getter @Getter
@ -66,4 +74,65 @@ public enum MonitorComposeEnum {
this.rightUnit = rightUnit; this.rightUnit = rightUnit;
} }
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()));
List<CharInfoDto.YAxis> 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<CharInfoDto.Series> getCollect(List<MonitorTypeEnum> element, String name, Map<MonitorSourceEnum, List<Map<String, Object>>> dataMap, CharInfoDto charInfoDto) {
return element.stream()
.map(type -> {
CharInfoDto.Series series = new CharInfoDto.Series();
series.setName(name);
MonitorSourceEnum source = type.getSource();
Map<String, Object> values = 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;
}
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());
}
} }

25
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.CurrentWaterMonitorDto;
import com.kms.yg.cz.dto.MonitorConfigDto; import com.kms.yg.cz.dto.MonitorConfigDto;
import com.kms.yg.cz.dto.MonitorQueDto; 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.MonitorSourceEnum;
import com.kms.yg.cz.enmu.MonitorTypeEnum;
import com.kms.yg.cz.mapper.MonitorConfigMapper; import com.kms.yg.cz.mapper.MonitorConfigMapper;
import com.kms.yxgh.base.domain.monitor.*; import com.kms.yxgh.base.domain.monitor.*;
import com.kms.yxgh.common.dto.OperatorDto; import com.kms.yxgh.common.dto.OperatorDto;
@ -29,6 +31,7 @@ import java.util.Map;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream;
@Service @Service
@Slf4j @Slf4j
@ -63,7 +66,27 @@ public class MonitorService {
public CharInfoDto chart(MonitorQueDto sp) { public CharInfoDto chart(MonitorQueDto sp) {
return null; MonitorComposeEnum composeEnum = sp.getElementType();
if (composeEnum == null) {
return new CharInfoDto();
}
List<MonitorSourceEnum> sourceEnums = Stream.concat(composeEnum.getLeftElements().stream(), composeEnum.getRightElements().stream())
.map(MonitorTypeEnum::getSource)
.distinct()
.collect(Collectors.toList());
Map<MonitorSourceEnum, List<Map<String, Object>>> dataMap = queryData(sourceEnums, sp);
return composeEnum.toChar(dataMap, sp);
}
private Map<MonitorSourceEnum, List<Map<String, Object>>> queryData(List<MonitorSourceEnum> sourceEnums, MonitorQueDto queDto) {
Map<MonitorSourceEnum, CompletableFuture<List<Object>>> 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) { public CurrentWaterMonitorDto watter(MonitorQueDto sp) {

Loading…
Cancel
Save