diff --git a/shuili-system/src/main/java/com/kms/yg/cz/dto/CurrentWaterMonitorDto.java b/shuili-system/src/main/java/com/kms/yg/cz/dto/CurrentWaterMonitorDto.java index 4ad84356..43709ebe 100644 --- a/shuili-system/src/main/java/com/kms/yg/cz/dto/CurrentWaterMonitorDto.java +++ b/shuili-system/src/main/java/com/kms/yg/cz/dto/CurrentWaterMonitorDto.java @@ -5,6 +5,8 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.Date; + @Data @ApiModel("当前水情监测信息") public class CurrentWaterMonitorDto { @@ -26,11 +28,11 @@ public class CurrentWaterMonitorDto { @ApiModelProperty(value = "最大库水位时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - private String maxRzTime; + private Date maxRzTime; @ApiModelProperty(value = "最小库水位时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - private String minRzTime; + private Date minRzTime; @ApiModelProperty(value = "日降雨量") private String dyp; @@ -43,7 +45,7 @@ public class CurrentWaterMonitorDto { @ApiModelProperty(value = "最大降雨量时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - private String maxDypTime; + private Date maxDypTime; } diff --git a/shuili-system/src/main/java/com/kms/yg/cz/dto/MonitorQueDto.java b/shuili-system/src/main/java/com/kms/yg/cz/dto/MonitorQueDto.java index 72c7b829..ef26f6d4 100644 --- a/shuili-system/src/main/java/com/kms/yg/cz/dto/MonitorQueDto.java +++ b/shuili-system/src/main/java/com/kms/yg/cz/dto/MonitorQueDto.java @@ -21,6 +21,9 @@ public class MonitorQueDto { @ApiModelProperty(value = "监测数据来源类型") private MonitorSourceEnum monitorType; + @ApiModelProperty(value = "水库编码") + private String resCode; + @JSONField(name = "STCD") @ApiModelProperty(value = "测站编码") private String stcd; diff --git a/shuili-system/src/main/java/com/kms/yg/cz/enmu/MonitorSourceEnum.java b/shuili-system/src/main/java/com/kms/yg/cz/enmu/MonitorSourceEnum.java index cab9f086..c53bde9f 100644 --- a/shuili-system/src/main/java/com/kms/yg/cz/enmu/MonitorSourceEnum.java +++ b/shuili-system/src/main/java/com/kms/yg/cz/enmu/MonitorSourceEnum.java @@ -24,7 +24,7 @@ public enum MonitorSourceEnum { MS_HDM_RSVR("水库水情监测表", Mock.MS_HDM_RSVR, MsHdmRsvr.class), MS_HDM_RSVRAV("水库水情多日均值表", MsHdmRsvrav.class), - MS_HDM_RSVREVS("水库水情多日均值表", MsHdmRsvrevs.class), + MS_HDM_RSVREVS("水库水情极值表", MsHdmRsvrevs.class), MS_HDM_PSTAT("降水量统计表", MsHdmPstat.class), MS_HDM_OBP("降水量监测表", Mock.MS_HDM_OBP, MsHdmObp.class), MS_HDM_RIVER("河道水情监测表", Mock.MS_HDM_RIVER, MsHdmRiver.class), 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 c50686cf..661f094e 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 @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.kms.yg.cz.domain.MonitorConfig; import com.kms.yg.cz.dto.CharInfoDto; import com.kms.yg.cz.dto.CurrentWaterMonitorDto; @@ -11,9 +12,11 @@ import com.kms.yg.cz.dto.MonitorConfigDto; import com.kms.yg.cz.dto.MonitorQueDto; import com.kms.yg.cz.enmu.MonitorSourceEnum; import com.kms.yg.cz.mapper.MonitorConfigMapper; +import com.kms.yxgh.base.domain.monitor.*; import com.kms.yxgh.common.dto.OperatorDto; import com.kms.yxgh.util.BeanCopyUtils; import com.kms.yxgh.util.DataCenterRestTemplateUtils; +import com.shuili.common.utils.StringUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -23,6 +26,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.CompletableFuture; import java.util.function.Function; import java.util.stream.Collectors; @@ -63,8 +67,48 @@ public class MonitorService { } public CurrentWaterMonitorDto watter(MonitorQueDto sp) { + CompletableFuture currentWatterFuture = CompletableFuture.supplyAsync(() -> queryDataOne(MonitorSourceEnum.MS_HDM_RSVR, sp)); + CompletableFuture avWatterFuture = CompletableFuture.supplyAsync(() -> queryDataOne(MonitorSourceEnum.MS_HDM_RSVRAV, sp)); + CompletableFuture mxWatterFuture = CompletableFuture.supplyAsync(() -> queryDataOne(MonitorSourceEnum.MS_HDM_RSVREVS, sp)); + CompletableFuture> currentFlowFuture = CompletableFuture.supplyAsync(() -> queryDataOne(MonitorSourceEnum.MS_HDM_OBP, sp)); + CompletableFuture> avFlowFuture = CompletableFuture.supplyAsync(() -> queryDataList(MonitorSourceEnum.MS_HDM_PSTAT, sp)); + CompletableFuture.allOf(currentWatterFuture, avWatterFuture, mxWatterFuture, currentFlowFuture, avFlowFuture).join(); - return null; + MsHdmRsvr currentWatter = currentWatterFuture.join(); + MsHdmRsvrav avWatter = avWatterFuture.join(); + MsHdmRsvrevs mxWatter = mxWatterFuture.join(); + List currentFlow = currentFlowFuture.join(); + + CurrentWaterMonitorDto currentWaterMonitorDto = new CurrentWaterMonitorDto(); + if (currentWatter != null) { + currentWaterMonitorDto.setCurrentRz(currentWatter.getRz()); + currentWaterMonitorDto.setCurrentW(currentWatter.getW()); + } + if (avWatter != null) { + currentWaterMonitorDto.setAvgRz(avWatter.getAvrz()); + } + if (mxWatter != null) { + currentWaterMonitorDto.setMaxRz(mxWatter.getHtrz()); + currentWaterMonitorDto.setMaxRzTime(mxWatter.getHtrztm()); + currentWaterMonitorDto.setMinRz(mxWatter.getLtrz()); + currentWaterMonitorDto.setMinRzTime(mxWatter.getLtrztm()); + } + if (currentFlow != null && !currentFlow.isEmpty()) { + currentWaterMonitorDto.setDyp(currentFlow.get(0).getDyp()); + currentWaterMonitorDto.setAvgDyp(currentFlow.stream() + .filter(item -> StringUtils.isNotBlank(item.getDrp())) + .mapToDouble(item -> Double.parseDouble(item.getDrp())) + .average().orElse(0) + ""); + currentFlow.stream().max((o1, o2) -> { + double d1 = StringUtils.isNotBlank(o1.getDrp()) ? Double.parseDouble(o1.getDrp()) : 0; + double d2 = StringUtils.isNotBlank(o2.getDrp()) ? Double.parseDouble(o2.getDrp()) : 0; + return Double.compare(d1, d2); + }).ifPresent(item -> { + currentWaterMonitorDto.setMaxDyp(item.getDrp()); + currentWaterMonitorDto.setMaxDypTime(item.getTm()); + }); + } + return currentWaterMonitorDto; } public MonitorConfigDto config(MonitorConfigDto sp) { @@ -95,4 +139,38 @@ public class MonitorService { }).collect(Collectors.toList()); } } + + private T queryDataOne(MonitorSourceEnum source, MonitorQueDto queDto) { + queDto.setPageNum(1); + queDto.setPageSize(1); + IPage page = queryDataPage(source, queDto); + List records = page.getRecords(); + if (records == null || records.isEmpty()) { + return null; + } + return (T) records.get(0); + } + + private List queryDataList(MonitorSourceEnum source, MonitorQueDto queDto) { + queDto.setPageNum(1); + queDto.setPageSize(1000); + IPage page = queryDataPage(source, queDto); + return (List) page.getRecords(); + } + + private IPage queryDataPage(MonitorSourceEnum source, MonitorQueDto queDto) { + MonitorSourceEnum.ResultWrapper resultWrapper = new MonitorSourceEnum.ResultWrapper(); + resultWrapper.setQueDto(queDto); + String path = paths.get(source.getTableName()); + if (path == null) { + resultWrapper.setResultJson(source.getMockData()); + log.error("未找到对应的路径配置, table:{}", source); + return new Page<>(); + } + String json = dataCenterRestTemplateUtils.doPostRequest(dataSyncUrl + path, queDto); + resultWrapper.setResultJson(json); + return (IPage) source.getRecords().apply(resultWrapper); + } + + }