Browse Source

feat: 水情接口逻辑

master_tdsql
hxh 4 months ago
parent
commit
160fde9a2c
  1. 8
      shuili-system/src/main/java/com/kms/yg/cz/dto/CurrentWaterMonitorDto.java
  2. 3
      shuili-system/src/main/java/com/kms/yg/cz/dto/MonitorQueDto.java
  3. 2
      shuili-system/src/main/java/com/kms/yg/cz/enmu/MonitorSourceEnum.java
  4. 80
      shuili-system/src/main/java/com/kms/yg/cz/service/MonitorService.java

8
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;
}

3
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;

2
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),

80
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<MsHdmRsvr> currentWatterFuture = CompletableFuture.supplyAsync(() -> queryDataOne(MonitorSourceEnum.MS_HDM_RSVR, sp));
CompletableFuture<MsHdmRsvrav> avWatterFuture = CompletableFuture.supplyAsync(() -> queryDataOne(MonitorSourceEnum.MS_HDM_RSVRAV, sp));
CompletableFuture<MsHdmRsvrevs> mxWatterFuture = CompletableFuture.supplyAsync(() -> queryDataOne(MonitorSourceEnum.MS_HDM_RSVREVS, sp));
CompletableFuture<List<MsHdmObp>> currentFlowFuture = CompletableFuture.supplyAsync(() -> queryDataOne(MonitorSourceEnum.MS_HDM_OBP, sp));
CompletableFuture<List<MsHdmPstat>> 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<MsHdmObp> 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> T queryDataOne(MonitorSourceEnum source, MonitorQueDto queDto) {
queDto.setPageNum(1);
queDto.setPageSize(1);
IPage<Object> page = queryDataPage(source, queDto);
List<Object> records = page.getRecords();
if (records == null || records.isEmpty()) {
return null;
}
return (T) records.get(0);
}
private <T> List<T> queryDataList(MonitorSourceEnum source, MonitorQueDto queDto) {
queDto.setPageNum(1);
queDto.setPageSize(1000);
IPage<Object> page = queryDataPage(source, queDto);
return (List<T>) page.getRecords();
}
private <T> IPage<T> 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<T>) source.getRecords().apply(resultWrapper);
}
}

Loading…
Cancel
Save