Browse Source

feat: 统计接口

master_tdsql
hxh 1 year ago
parent
commit
d5789fe092
  1. 20
      shuili-system/src/main/java/com/kms/yxgh/common/controller/IndicatorController.java
  2. 8
      shuili-system/src/main/java/com/kms/yxgh/common/dto/IndicatorDto.java
  3. 186
      shuili-system/src/main/java/com/kms/yxgh/common/dto/IndicatorStatisticDto.java
  4. 49
      shuili-system/src/main/java/com/kms/yxgh/common/mapper/IndicatorMapper.java
  5. 20
      shuili-system/src/main/java/com/kms/yxgh/common/service/IndicatorService.java

20
shuili-system/src/main/java/com/kms/yxgh/common/controller/IndicatorController.java

@ -1,7 +1,9 @@
package com.kms.yxgh.common.controller; package com.kms.yxgh.common.controller;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.kms.yxgh.base.Response;
import com.kms.yxgh.common.dto.IndicatorDto; import com.kms.yxgh.common.dto.IndicatorDto;
import com.kms.yxgh.common.dto.IndicatorStatisticDto;
import com.kms.yxgh.common.dto.WarningQueDto; import com.kms.yxgh.common.dto.WarningQueDto;
import com.kms.yxgh.common.service.IndicatorService; import com.kms.yxgh.common.service.IndicatorService;
import com.shuili.common.core.domain.SearchParam; import com.shuili.common.core.domain.SearchParam;
@ -13,6 +15,8 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
/** /**
* @ClassName: WarningDataController * @ClassName: WarningDataController
* @Description: TODO * @Description: TODO
@ -35,4 +39,20 @@ public class IndicatorController {
public IPage<IndicatorDto> list(@RequestBody SearchParam<WarningQueDto> sp) { public IPage<IndicatorDto> list(@RequestBody SearchParam<WarningQueDto> sp) {
return indicatorService.list(sp); return indicatorService.list(sp);
} }
//按小时统计运行指标
@PostMapping("/hour")
@ApiOperation("按小时统计运行指标")
public Response<Map<String, IndicatorDto>> hour(@RequestBody SearchParam<WarningQueDto> sp) {
return Response.ok(indicatorService.hour(sp));
}
//最大、最小、平均值等
@PostMapping("/statistic")
@ApiOperation("最大、最小、平均值等")
public Response<IndicatorStatisticDto> statistic(@RequestBody SearchParam<WarningQueDto> sp) {
return Response.ok(indicatorService.statistic(sp));
}
} }

8
shuili-system/src/main/java/com/kms/yxgh/common/dto/IndicatorDto.java

@ -73,6 +73,14 @@ public class IndicatorDto {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date collectionTime; private Date collectionTime;
//闸机电压值
@ApiModelProperty("闸机电压值")
private Float voltage = 380F;
//闸机液压值
@ApiModelProperty("闸机液压值")
private Float hydraulic = 3.5F;
@ApiModelProperty("年") @ApiModelProperty("年")
private Integer year; private Integer year;
@ApiModelProperty("月") @ApiModelProperty("月")

186
shuili-system/src/main/java/com/kms/yxgh/common/dto/IndicatorStatisticDto.java

@ -0,0 +1,186 @@
package com.kms.yxgh.common.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* @ClassName: IndicatorDto
* @Description: TODO
* @Date: 2024/3/25 上午9:55
* *
* @author: hxh
* @version: 1.0
*/
@Data
@ApiModel("监测数据统计")
public class IndicatorStatisticDto {
@ApiModelProperty("id")
private String name;
@ApiModelProperty("编码")
private String code;
@ApiModelProperty("类型:1堤防,2水闸")
private String type;
@ApiModelProperty("测站编码")
private String stcd;
//最大上有水位
@ApiModelProperty("最大上有水位")
private Float maxUpstreamLevel;
//最小上游水位
@ApiModelProperty("最小上游水位")
private Float minUpstreamLevel;
//平均上游水位
@ApiModelProperty("平均上游水位")
private Float avgUpstreamLevel;
//最大下游水位
@ApiModelProperty("最大下游水位")
private Float maxDownstreamLevel;
//最小下游水位
@ApiModelProperty("最小下游水位")
private Float minDownstreamLevel;
//平均下游水位
@ApiModelProperty("平均下游水位")
private Float avgDownstreamLevel;
//最大开度
@ApiModelProperty("最大开度")
private Float maxOpening;
//最小开度
@ApiModelProperty("最小开度")
private Float minOpening;
//平均开度
@ApiModelProperty("平均开度")
private Float avgOpening;
//最大过闸流量
@ApiModelProperty("最大过闸流量")
private Float maxGateFlow;
//最小过闸流量
@ApiModelProperty("最小过闸流量")
private Float minGateFlow;
//平均过闸流量
@ApiModelProperty("平均过闸流量")
private Float avgGateFlow;
//最大雨量
@ApiModelProperty("最大雨量")
private Float maxRainFall;
//最小雨量
@ApiModelProperty("最小雨量")
private Float minRainFall;
//平均雨量
@ApiModelProperty("平均雨量")
private Float avgRainFall;
//最大绕渗透压
@ApiModelProperty("最大绕渗透压")
private Float maxBypassOsmoticPressure;
//最小绕渗透压
@ApiModelProperty("最小绕渗透压")
private Float minBypassOsmoticPressure;
//平均绕渗透压
@ApiModelProperty("平均绕渗透压")
private Float avgBypassOsmoticPressure;
//最大渗透压计高程
@ApiModelProperty("最大渗透压计高程")
private Float maxOsmoticPressureGaugeElevation;
//最小渗透压计高程
@ApiModelProperty("最小渗透压计高程")
private Float minOsmoticPressureGaugeElevation;
//平均渗透压计高程
@ApiModelProperty("平均渗透压计高程")
private Float avgOsmoticPressureGaugeElevation;
//最大闸机扬压力
@ApiModelProperty("最大闸机扬压力")
private Float maxBoostPressure;
//最小闸机扬压力
@ApiModelProperty("最小闸机扬压力")
private Float minBoostPressure;
//平均闸机扬压力
@ApiModelProperty("平均闸机扬压力")
private Float avgBoostPressure;
//最大水闸接缝
@ApiModelProperty("最大水闸接缝")
private Float maxSeam;
//最小水闸接缝
@ApiModelProperty("最小水闸接缝")
private Float minSeam;
//平均水闸接缝
@ApiModelProperty("平均水闸接缝")
private Float avgSeam;
//最大裂缝开合度
@ApiModelProperty("最大裂缝开合度")
private Float maxCrackOpeningDegree;
//最小裂缝开合度
@ApiModelProperty("最小裂缝开合度")
private Float minCrackOpeningDegree;
//平均裂缝开合度
@ApiModelProperty("平均裂缝开合度")
private Float avgCrackOpeningDegree;
//最大闸墩变形x
@ApiModelProperty("最大闸墩变形x")
private Float maxDeformationX;
//最小闸墩变形x
@ApiModelProperty("最小闸墩变形x")
private Float minDeformationX;
//平均闸墩变形x
@ApiModelProperty("平均闸墩变形x")
private Float avgDeformationX;
//最大闸墩变形y
@ApiModelProperty("最大闸墩变形y")
private Float maxDeformationY;
//最小闸墩变形y
@ApiModelProperty("最小闸墩变形y")
private Float minDeformationY;
//平均闸墩变形y
@ApiModelProperty("平均闸墩变形y")
private Float avgDeformationY;
//最大闸机油温
@ApiModelProperty("最大闸机油温")
private Float maxOilTemperature;
//最小闸机油温
@ApiModelProperty("最小闸机油温")
private Float minOilTemperature;
//平均闸机油温
@ApiModelProperty("平均闸机油温")
private Float avgOilTemperature;
// 采集时间
@ApiModelProperty("采集时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date collectionTime;
//闸机电压值
@ApiModelProperty("闸机电压值")
private Float voltage = 380F;
//闸机液压值
@ApiModelProperty("闸机液压值")
private Float hydraulic = 3.5F;
@ApiModelProperty("年")
private Integer year;
@ApiModelProperty("月")
private Integer month;
@ApiModelProperty("日")
private Integer day;
@ApiModelProperty("时")
private Integer hour;
}

49
shuili-system/src/main/java/com/kms/yxgh/common/mapper/IndicatorMapper.java

@ -5,11 +5,14 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.kms.yxgh.common.domain.Indicator; import com.kms.yxgh.common.domain.Indicator;
import com.kms.yxgh.common.dto.IndicatorDto; import com.kms.yxgh.common.dto.IndicatorDto;
import com.kms.yxgh.common.dto.IndicatorStatisticDto;
import com.kms.yxgh.common.dto.WarningQueDto; import com.kms.yxgh.common.dto.WarningQueDto;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.List;
/** /**
* @ClassName: MonitoringDataMapper * @ClassName: MonitoringDataMapper
* @Description: TODO * @Description: TODO
@ -32,6 +35,52 @@ public interface IndicatorMapper extends BaseMapper<Indicator> {
"<if test='data.startTime != null'> and jc.collection_time &gt;= #{data.startTime} </if> " + "<if test='data.startTime != null'> and jc.collection_time &gt;= #{data.startTime} </if> " +
"<if test='data.endTime != null'> and jc.collection_time &lt;= #{data.endTime} </if> " + "<if test='data.endTime != null'> and jc.collection_time &lt;= #{data.endTime} </if> " +
"<if test='data.types != null and data.types.size() > 0'> and cz.type in <foreach collection='data.types' item='type' open='(' close=')' separator=','> #{type} </foreach> </if> " + "<if test='data.types != null and data.types.size() > 0'> and cz.type in <foreach collection='data.types' item='type' open='(' close=')' separator=','> #{type} </foreach> </if> " +
"<if test='data.code != null'> and cz.code = #{data.code} </if> " +
"order by jc.collection_time desc " +
"</script>") "</script>")
IPage<IndicatorDto> search(Page<Indicator> page, @Param("data") WarningQueDto data); IPage<IndicatorDto> search(Page<Indicator> page, @Param("data") WarningQueDto data);
//按小时统计运行指标平均数,分组条件是年、月、日、小时
@Select("<script> " +
"select jc.year, jc.month, jc.day, jc.hour, " +
"jc.stcd, cz.code, cz.type, " +
"avg(jc.upstream_level) as upstream_level, avg(jc.downstream_level) as downstream_level, " +
"avg(jc.opening) as opening, avg(jc.gate_flow) as gate_flow, avg(jc.rain_fall) as rain_fall, avg(jc.bypass_osmotic_pressure) as bypass_osmotic_pressure, avg(jc.osmotic_pressure_gauge_elevation) as osmotic_pressure_gauge_elevation, avg(jc.boost_pressure) as boost_pressure, avg(jc.seam) as seam, avg(jc.crack_opening_degree) as crack_opening_degree, avg(jc.deformation_x) as deformation_x, avg(jc.deformation_y) as deformation_y, avg(jc.oil_temperature) as oil_temperature " +
"from bs_sgc_stc_jc jc " +
"left join bs_sgc_stc_cz cz on jc.stcd = cz.stcd " +
"where 1=1 " +
"<if test='data.startTime != null'> and jc.collection_time &gt;= #{data.startTime} </if> " +
"<if test='data.endTime != null'> and jc.collection_time &lt;= #{data.endTime} </if> " +
"<if test='data.types != null and data.types.size() > 0'> and cz.type in <foreach collection='data.types' item='type' open='(' close=')' separator=','> #{type} </foreach> </if> " +
"<if test='data.code != null'> and cz.code = #{data.code} </if> " +
"group by jc.year, jc.month, jc.day, jc.hour " +
"</script>")
List<IndicatorDto> hour(@Param("data") WarningQueDto data);
@Select("<script> " +
"select jc.year, jc.month, jc.day, jc.hour, " +
"jc.stcd, cz.code, cz.type, " +
"max(jc.upstream_level) as maxUpstreamLevel, min(jc.upstream_level) as minUpstreamLevel, avg(jc.upstream_level) as avgUpstreamLevel, " +
"max(jc.downstream_level) as maxDownstreamLevel, min(jc.downstream_level) as minDownstreamLevel, avg(jc.downstream_level) as avgDownstreamLevel, " +
"max(jc.opening) as maxOpening, min(jc.opening) as minOpening, avg(jc.opening) as avgOpening, " +
"max(jc.gate_flow) as maxGateFlow, min(jc.gate_flow) as minGateFlow, avg(jc.gate_flow) as avgGateFlow, " +
"max(jc.rain_fall) as maxRainFall, min(jc.rain_fall) as minRainFall, avg(jc.rain_fall) as avgRainFall, " +
"max(jc.bypass_osmotic_pressure) as maxBypassOsmoticPressure, min(jc.bypass_osmotic_pressure) as minBypassOsmoticPressure, avg(jc.bypass_osmotic_pressure) as avgBypassOsmoticPressure, " +
"max(jc.osmotic_pressure_gauge_elevation) as maxOsmoticPressureGaugeElevation, min(jc.osmotic_pressure_gauge_elevation) as minOsmoticPressureGaugeElevation, avg(jc.osmotic_pressure_gauge_elevation) as avgOsmoticPressureGaugeElevation, " +
"max(jc.boost_pressure) as maxBoostPressure, min(jc.boost_pressure) as minBoostPressure, avg(jc.boost_pressure) as avgBoostPressure, " +
"max(jc.seam) as maxSeam, min(jc.seam) as minSeam, avg(jc.seam) as avgSeam, " +
"max(jc.crack_opening_degree) as maxCrackOpeningDegree, min(jc.crack_opening_degree) as minCrackOpeningDegree, avg(jc.crack_opening_degree) as avgCrackOpeningDegree, " +
"max(jc.deformation_x) as maxDeformationX, min(jc.deformation_x) as minDeformationX, avg(jc.deformation_x) as avgDeformationX, " +
"max(jc.deformation_y) as maxDeformationY, min(jc.deformation_y) as minDeformationY, avg(jc.deformation_y) as avgDeformationY, " +
"max(jc.oil_temperature) as maxOilTemperature, min(jc.oil_temperature) as minOilTemperature, avg(jc.oil_temperature) as avgOilTemperature " +
"from bs_sgc_stc_jc jc " +
"left join bs_sgc_stc_cz cz on jc.stcd = cz.stcd " +
"where 1=1 " +
"<if test='data.startTime != null'> and jc.collection_time &gt;= #{data.startTime} </if> " +
"<if test='data.endTime != null'> and jc.collection_time &lt;= #{data.endTime} </if> " +
"<if test='data.types != null and data.types.size() > 0'> and cz.type in <foreach collection='data.types' item='type' open='(' close=')' separator=','> #{type} </foreach> </if> " +
"<if test='data.code != null'> and cz.code = #{data.code} </if> " +
"</script>")
IndicatorStatisticDto statistic(@Param("data") WarningQueDto data);
} }

20
shuili-system/src/main/java/com/kms/yxgh/common/service/IndicatorService.java

@ -4,14 +4,17 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.kms.yxgh.common.domain.Indicator; import com.kms.yxgh.common.domain.Indicator;
import com.kms.yxgh.common.dto.IndicatorDto; import com.kms.yxgh.common.dto.IndicatorDto;
import com.kms.yxgh.common.dto.IndicatorStatisticDto;
import com.kms.yxgh.common.dto.WarningQueDto; import com.kms.yxgh.common.dto.WarningQueDto;
import com.kms.yxgh.common.mapper.IndicatorMapper; import com.kms.yxgh.common.mapper.IndicatorMapper;
import com.shuili.common.core.domain.SearchParam; import com.shuili.common.core.domain.SearchParam;
import com.shuili.common.utils.StringUtils;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Collectors;
/** /**
* @ClassName: WarningDataService * @ClassName: WarningDataService
@ -33,4 +36,19 @@ public class IndicatorService {
WarningQueDto data = Optional.ofNullable(sp.getData()).orElse(new WarningQueDto()); WarningQueDto data = Optional.ofNullable(sp.getData()).orElse(new WarningQueDto());
return indicatorMapper.search(page, data); return indicatorMapper.search(page, data);
} }
public Map<String, IndicatorDto> hour(SearchParam<WarningQueDto> sp) {
WarningQueDto data = Optional.ofNullable(sp.getData()).orElse(new WarningQueDto());
List<IndicatorDto> indicatorDtos = indicatorMapper.hour(data);
return indicatorDtos.stream().collect(
Collectors.toMap(
d -> String.format("%d-%d-%d-%d", d.getYear(), d.getMonth(), d.getDay(), d.getHour()),
d -> d
));
}
public IndicatorStatisticDto statistic(SearchParam<WarningQueDto> sp) {
WarningQueDto data = Optional.ofNullable(sp.getData()).orElse(new WarningQueDto());
return indicatorMapper.statistic(data);
}
} }

Loading…
Cancel
Save