diff --git a/src/main/java/com/gunshi/project/xyt/controller/RainBasinDivisionController.java b/src/main/java/com/gunshi/project/xyt/controller/RainBasinDivisionController.java new file mode 100644 index 0000000..dd32e0c --- /dev/null +++ b/src/main/java/com/gunshi/project/xyt/controller/RainBasinDivisionController.java @@ -0,0 +1,58 @@ +package com.gunshi.project.xyt.controller; + +import com.gunshi.core.annotation.Get; +import com.gunshi.core.annotation.Post; +import com.gunshi.core.result.R; +import com.gunshi.project.xyt.entity.so.StPptnSo; +import com.gunshi.project.xyt.entity.vo.CartogramVo; +import com.gunshi.project.xyt.entity.vo.StPptnDetailsVo; +import com.gunshi.project.xyt.entity.vo.StPptnVo; +import com.gunshi.project.xyt.service.RainBasinDivisionService; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + + +@RestController +@RequestMapping("/attResBase") +@Tag(name = "雨情站详细信息查询接口") +public class RainBasinDivisionController { + + @Autowired + private RainBasinDivisionService rainBasinDivisionService; + + + @Post(path = "/rainBasinDivision/queryStStbprpPerHour/StcdAndStartTimeAndEndTime",summary = "根据测站编码查询时间段内每小时的雨量") + public R> queryStPptnPerHourByStcdAndStartTimeAndEndTime(@RequestBody @Validated StPptnSo stPptnSo){ + return R.ok(rainBasinDivisionService.queryStPptnPerHourByStcdAndStartTimeAndEndTime(stPptnSo)); + } + + @Post(path = "/rainBasinDivision/queryStStbprpPerHourChart/StcdAndStartTimeAndEndTime",summary = "根据测站编码查询时间段内每小时的雨量统计") + public R queryStPptnPerHourChartByStcdAndStartTimeAndEndTime(@RequestBody @Validated StPptnSo stPptnSo){ + return R.ok(rainBasinDivisionService.queryStPptnPerHourChartByStcdAndStartTimeAndEndTime(stPptnSo)); + } + + @Post(path = "/rainBasinDivision/queryStStbprpPerDay/StcdAndStartTimeAndEndTime",summary = "根据测站编码查询时间段内每天的雨量") + public R> queryStPptnPerDayByStcdAndStartTimeAndEndTime(@RequestBody @Validated StPptnSo stPptnSo){ + return R.ok(rainBasinDivisionService.queryStPptnPerDayByStcdAndStartTimeAndEndTime(stPptnSo).reversed()); + } + + @Post(path = "/rainBasinDivision/queryStStbprpPerDayChart/StcdAndStartTimeAndEndTime",summary = "根据测站编码查询时间段内每天的雨量统计") + public R queryStPptnPerDayChartChartByStcdAndStartTimeAndEndTime(@RequestBody @Validated StPptnSo stPptnSo){ + return R.ok(rainBasinDivisionService.queryStPptnPerDayChartChartByStcdAndStartTimeAndEndTime(stPptnSo)); + } + + @Get(path = "/rainBasinDivision/queryStPptnDetails/stcd",summary = "根据测站编码查询详细雨量情况") + public R queryStPptnDetailsByStcd(@RequestParam("stcd") @Parameter(description = "测站编码") String stcd){ + return R.ok(rainBasinDivisionService.queryStPptnDetailsByStcd(stcd)); + } + + +} diff --git a/src/main/java/com/gunshi/project/xyt/controller/RealRainController.java b/src/main/java/com/gunshi/project/xyt/controller/RealRainController.java new file mode 100644 index 0000000..c75720a --- /dev/null +++ b/src/main/java/com/gunshi/project/xyt/controller/RealRainController.java @@ -0,0 +1,44 @@ +package com.gunshi.project.xyt.controller; + +import com.gunshi.core.annotation.Post; +import com.gunshi.core.result.R; +import com.gunshi.project.xyt.entity.so.RealRainBaseSo; +import com.gunshi.project.xyt.entity.vo.RealRainListVo; +import com.gunshi.project.xyt.service.RealRainService; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.Data; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + + +@RestController +@RequestMapping("/real/rain") +@Tag(name = "降雨信息查询接口") +@Data +public class RealRainController { + + @Autowired + private RealRainService realRainService; + + @Post(path="/list", summary = "实时雨情-降雨信息-查询接口") + public R> getRealRainList(@RequestBody RealRainBaseSo realRainBaseSo) { + List list = realRainService.getRealRainList(realRainBaseSo); + //按RealRainListVo.drp倒序排列,null的排在最后面 + list.sort((o1, o2) -> { + if (o1.getDrp() == null) { + return 1; + } + if (o2.getDrp() == null) { + return -1; + } + return o2.getDrp().compareTo(o1.getDrp()); + }); + return R.ok(list); + } + + +} diff --git a/src/main/java/com/gunshi/project/xyt/entity/so/RealRainBaseSo.java b/src/main/java/com/gunshi/project/xyt/entity/so/RealRainBaseSo.java new file mode 100644 index 0000000..b23e051 --- /dev/null +++ b/src/main/java/com/gunshi/project/xyt/entity/so/RealRainBaseSo.java @@ -0,0 +1,18 @@ +package com.gunshi.project.xyt.entity.so; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import lombok.Data; + + +@Data +public class RealRainBaseSo { + @Schema(description="开始时间 格式:yyyy-MM-dd HH:mm:ss") + @NotBlank(message = "开始时间不能为空") + private String stm; + + @Schema(description="结束时间 格式:yyyy-MM-dd HH:mm:ss") + @NotBlank(message = "结束时间不能为空") + private String etm; + +} diff --git a/src/main/java/com/gunshi/project/xyt/entity/so/StPptnSo.java b/src/main/java/com/gunshi/project/xyt/entity/so/StPptnSo.java new file mode 100644 index 0000000..5ad33dd --- /dev/null +++ b/src/main/java/com/gunshi/project/xyt/entity/so/StPptnSo.java @@ -0,0 +1,57 @@ +package com.gunshi.project.xyt.entity.so; + + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.gunshi.core.dateformat.DateFormatString; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.Date; + + +/** + * TODO + * + * @ClassName StPptnSo + * @Author Huang Qianxiang + * @Date 2024/2/21 14:20 + */ +@Data +@Schema(description = "雨量站降雨量查询参数") +public class StPptnSo { + + + /** + * 测站名称 + */ + @Schema(description = "测站名称") + private String stnm; + + /** + * 时间段 + */ + @Schema(description = "时间段") + private Integer timeQuantum; + + /** + * 测站编码 + */ + @Schema(description="测站编码") + private String stcd; + + /** + * 选择的起始时间 + */ + @Schema(description = "选择的起始时间") + @JsonFormat(pattern = DateFormatString.YYYY_MM_DD_HH_MM_SS, timezone = "GMT+8") + private Date startTime; + + /** + * 选择的结束时间 + */ + @Schema(description = "选择的结束时间") + @JsonFormat(pattern = DateFormatString.YYYY_MM_DD_HH_MM_SS, timezone = "GMT+8") + private Date endTime; + + +} diff --git a/src/main/java/com/gunshi/project/xyt/entity/vo/CartogramVo.java b/src/main/java/com/gunshi/project/xyt/entity/vo/CartogramVo.java new file mode 100644 index 0000000..31551ff --- /dev/null +++ b/src/main/java/com/gunshi/project/xyt/entity/vo/CartogramVo.java @@ -0,0 +1,28 @@ +package com.gunshi.project.xyt.entity.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +/** + * TODO + * + * @ClassName CartogramVo + * @Author Huang Qianxiang + * @Date 2024/3/26 14:24 + */ +@Data +public class CartogramVo { + + @Schema(description = "时间") + private List time; + + @Schema(description = "实测") + private List actual; + + @Schema(description = "累计") + private List total; + +} diff --git a/src/main/java/com/gunshi/project/xyt/entity/vo/RealRainListVo.java b/src/main/java/com/gunshi/project/xyt/entity/vo/RealRainListVo.java new file mode 100644 index 0000000..be1cf3b --- /dev/null +++ b/src/main/java/com/gunshi/project/xyt/entity/vo/RealRainListVo.java @@ -0,0 +1,48 @@ +package com.gunshi.project.xyt.entity.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + + +@Data +public class RealRainListVo { + private String stcd; + private String sttp; + private String stnm; + private String stlc; + @Schema(description = "时段雨量(mm)") + private Double drp; + private String adcd; + private String adnm; + private String resCode; + private String resName; + + private String lgtd; + private String lttd; + + @Schema(description="降雨量级 0:无降雨 1:小雨 2:中雨 3:大雨 4:暴雨 5:大暴雨 6:特大暴雨") + private Integer rainTag; + @Schema(description = "站点类型") + private String sType; + + + + public void setDrp(Double drp){ + this.drp = drp; + if (this.drp == 0) { + this.rainTag = 0; + } else if (this.drp > 0 && this.drp < 10) { + this.rainTag = 1; + } else if (this.drp >= 10 && this.drp < 25) { + this.rainTag = 2; + } else if (this.drp >= 25 && this.drp < 50) { + this.rainTag = 3; + } else if (this.drp >= 50 && this.drp < 100) { + this.rainTag = 4; + } else if (this.drp >= 100 && this.drp < 250) { + this.rainTag = 5; + } else if (this.drp >= 250) { + this.rainTag = 6; + } + } +} diff --git a/src/main/java/com/gunshi/project/xyt/entity/vo/StPptnDetailsVo.java b/src/main/java/com/gunshi/project/xyt/entity/vo/StPptnDetailsVo.java new file mode 100644 index 0000000..0b3ec58 --- /dev/null +++ b/src/main/java/com/gunshi/project/xyt/entity/vo/StPptnDetailsVo.java @@ -0,0 +1,46 @@ +package com.gunshi.project.xyt.entity.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.gunshi.core.dateformat.DateFormatString; +import com.gunshi.project.xyt.model.StPptnRReal; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * TODO + * + * @ClassName StPptnDetailsVo + * @Author Huang Qianxiang + * @Date 2024/2/23 10:53 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class StPptnDetailsVo extends StPptnRReal { + + @Schema(description="昨日降雨量") + private BigDecimal yesterdayDrp; + + @Schema(description="本月降雨量") + private BigDecimal monthDrp; + + @Schema(description="本年降雨量") + private BigDecimal yearDrp; + + @Schema(description="本年降雨天数") + private Long yearDrpDay; + + @Schema(description="本年天数") + private Long yearDay; + + @Schema(description="本年最大日雨量") + private BigDecimal maxDrp; + + @Schema(description="本年最大日雨量时间") + @JsonFormat(pattern = DateFormatString.YYYY_MM_DD_HH_MM_SS, timezone = "GMT+8") + private Date maxDrpTime; + +} diff --git a/src/main/java/com/gunshi/project/xyt/entity/vo/StPptnVo.java b/src/main/java/com/gunshi/project/xyt/entity/vo/StPptnVo.java new file mode 100644 index 0000000..ec9289c --- /dev/null +++ b/src/main/java/com/gunshi/project/xyt/entity/vo/StPptnVo.java @@ -0,0 +1,39 @@ +package com.gunshi.project.xyt.entity.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.gunshi.core.dateformat.DateFormatString; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * TODO + * + * @ClassName StPptnVo + * @Author Huang Qianxiang + * @Date 2024/2/23 9:51 + */ +@Data +public class StPptnVo { + + /** + * 时段降雨量对应的时间 + */ + @Schema(description = "时段降雨量对应的时间") + @JsonFormat(pattern = DateFormatString.YYYY_MM_DD_HH_MM_SS, timezone = "GMT+8") + private Date time; + + /** + * 选择时段降雨量 + */ + @Schema(description = "选择时段降雨量") + private BigDecimal sumDrp; + + @Schema(description = "时间格式化字符串") + private String timeStr; + + @Schema(description = "个数") + private Integer count; +} diff --git a/src/main/java/com/gunshi/project/xyt/mapper/RealRainMapper.java b/src/main/java/com/gunshi/project/xyt/mapper/RealRainMapper.java new file mode 100644 index 0000000..0205888 --- /dev/null +++ b/src/main/java/com/gunshi/project/xyt/mapper/RealRainMapper.java @@ -0,0 +1,122 @@ +package com.gunshi.project.xyt.mapper; + +import com.gunshi.project.xyt.entity.vo.RealRainListVo; +import com.gunshi.project.xyt.entity.vo.StPptnVo; +import com.gunshi.project.xyt.model.StPptnRD; +import com.gunshi.project.xyt.model.StPptnRReal; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.Date; +import java.util.List; + + +@Mapper +public interface RealRainMapper { + @Select(""" + + """) + List getRealRainList(@Param("stm") String stm, @Param("etm") String etm); + + + @Select(""" + + """) + List queryStPptnPerHourByStcdAndStartTimeAndEndTime(@Param("stcd") String stcd, @Param("startTime") Date startTime, @Param("endTime") Date endTime); + + @Select(""" + + """) + StPptnRD getStPptnRD(@Param("stcd") String stcd, @Param("tm") Date tm, @Param("year") Integer year); + + @Select(""" + + """) + StPptnRD getMaxOfYear(@Param("stcd") String stcd, @Param("year") Integer year); + + @Select(""" + + """) + Long getRainOfDayInYear(@Param("stcd") String stcd, @Param("year") Integer year); + + @Select(""" + + """) + StPptnRReal queryPptnByStcd(@Param("stcd") String stcd); +} diff --git a/src/main/java/com/gunshi/project/xyt/mapper/StPptnRMapper.java b/src/main/java/com/gunshi/project/xyt/mapper/StPptnRMapper.java new file mode 100644 index 0000000..c159fc7 --- /dev/null +++ b/src/main/java/com/gunshi/project/xyt/mapper/StPptnRMapper.java @@ -0,0 +1,52 @@ +package com.gunshi.project.xyt.mapper; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.gunshi.project.xyt.model.StPptnR; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +@Mapper +public interface StPptnRMapper extends BaseMapper { + int updateBatch(List list); + + int updateBatchSelective(List list); + + int batchInsert(@Param("list") List list); + + int insertOrUpdate(StPptnR record); + + int insertOrUpdateSelective(StPptnR record); + + + + @Select(""" + + """) + BigDecimal queryStPptnTimeQuantumByStcdAndTime(@Param("stcd") String stcd, @Param("startTime") Date startTime, @Param("endTime") Date endTime); + + + + +} \ No newline at end of file diff --git a/src/main/java/com/gunshi/project/xyt/model/StPptnR.java b/src/main/java/com/gunshi/project/xyt/model/StPptnR.java new file mode 100644 index 0000000..7e51589 --- /dev/null +++ b/src/main/java/com/gunshi/project/xyt/model/StPptnR.java @@ -0,0 +1,98 @@ +package com.gunshi.project.xyt.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 降水量表 + */ +@Schema(description="降水量表") +@Data +@TableName(value = "st_pptn_r") +public class StPptnR implements Serializable { + /** + * 时间 + */ + @TableField(value = "tm") + @MppMultiId + @Schema(description="时间") + @NotNull(message = "时间不能为null") + private Date tm; + + /** + * 测站编码 + */ + @TableField(value = "stcd") + @MppMultiId + @Schema(description="测站编码") + @Size(max = 20,message = "测站编码最大长度要小于 20") + @NotBlank(message = "测站编码不能为空") + private String stcd; + + /** + * 时段降水量 + */ + @TableField(value = "drp") + @Schema(description="时段降水量") + private BigDecimal drp; + + /** + * 时段长 + */ + @TableField(value = "intv") + @Schema(description="时段长") + private BigDecimal intv; + + /** + * 降水历时 + */ + @TableField(value = "pdr") + @Schema(description="降水历时") + private BigDecimal pdr; + + /** + * 日降水量 + */ + @TableField(value = "dyp") + @Schema(description="日降水量") + private BigDecimal dyp; + + /** + * 天气状况 + */ + @TableField(value = "wth") + @Schema(description="天气状况") + private String wth; + + @TableField(value = "chtm") + @Schema(description="") + private Date chtm; + + private static final long serialVersionUID = 1L; + + public static final String COL_TM = "tm"; + + public static final String COL_STCD = "stcd"; + + public static final String COL_DRP = "drp"; + + public static final String COL_INTV = "intv"; + + public static final String COL_PDR = "pdr"; + + public static final String COL_DYP = "dyp"; + + public static final String COL_WTH = "wth"; + + public static final String COL_CHTM = "chtm"; +} \ No newline at end of file diff --git a/src/main/java/com/gunshi/project/xyt/model/StPptnRD.java b/src/main/java/com/gunshi/project/xyt/model/StPptnRD.java new file mode 100644 index 0000000..f64a4d4 --- /dev/null +++ b/src/main/java/com/gunshi/project/xyt/model/StPptnRD.java @@ -0,0 +1,44 @@ +package com.gunshi.project.xyt.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +@Schema +@Data +@TableName(value = "st_pptn_r_d") +public class StPptnRD implements Serializable { + /** + * 时间 + */ + @MppMultiId("tm") + @Schema(description="时间") + private Date tm; + + /** + * 测站编码 + */ + @MppMultiId("stcd") + @Schema(description="测站编码") + private String stcd; + + /** + * 时段降水量 + */ + @TableField(value = "drp") + @Schema(description="时段降水量") + private BigDecimal drp; + + /** + * 年度 + */ + @MppMultiId("year") + @Schema(description="年度") + private Integer year; +} \ No newline at end of file diff --git a/src/main/java/com/gunshi/project/xyt/model/StPptnRReal.java b/src/main/java/com/gunshi/project/xyt/model/StPptnRReal.java new file mode 100644 index 0000000..1c62c79 --- /dev/null +++ b/src/main/java/com/gunshi/project/xyt/model/StPptnRReal.java @@ -0,0 +1,126 @@ +package com.gunshi.project.xyt.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.gunshi.core.dateformat.DateFormatString; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +@Schema +@Data +@TableName(value = "st_pptn_r_real") +public class StPptnRReal implements Serializable { + @TableId(value = "stcd", type = IdType.INPUT) + @Schema(description="") + @Size(max = 20,message = "最大长度要小于 20") + @NotBlank(message = "不能为空") + private String stcd; + + @TableField(value = "tm") + @Schema(description="") + @JsonFormat(pattern = DateFormatString.YYYY_MM_DD_HH_MM_SS, timezone = "GMT+8") + private Date tm; + + @TableField(value = "drp") + @Schema(description="") + private BigDecimal drp; + + @TableField(value = "today") + @Schema(description="") + private BigDecimal today; + + @TableField(value = "m10") + @Schema(description="") + private BigDecimal m10; + + @TableField(value = "m30") + @Schema(description="") + private BigDecimal m30; + + @TableField(value = "h1") + @Schema(description="") + private BigDecimal h1; + + @TableField(value = "h3") + @Schema(description="") + private BigDecimal h3; + + @TableField(value = "h6") + @Schema(description="") + private BigDecimal h6; + + @TableField(value = "h12") + @Schema(description="") + private BigDecimal h12; + + @TableField(value = "h24") + @Schema(description="") + private BigDecimal h24; + + @TableField(value = "h48") + @Schema(description="") + private BigDecimal h48; + + @TableField(value = "chtm") + @Schema(description="") + @NotNull(message = "不能为null") + private Date chtm; + + @TableField(value = "warning") + @Schema(description="") + private Short warning; + + @TableField(value = "\"status\"") + @Schema(description="") + private Short status; + + @TableField(value = "\"cluster\"") + @Schema(description="") + @Size(max = 10,message = "最大长度要小于 10") + @NotBlank(message = "不能为空") + private String cluster; + + private static final long serialVersionUID = 1L; + + public static final String COL_STCD = "stcd"; + + public static final String COL_TM = "tm"; + + public static final String COL_DRP = "drp"; + + public static final String COL_TODAY = "today"; + + public static final String COL_M10 = "m10"; + + public static final String COL_M30 = "m30"; + + public static final String COL_H1 = "h1"; + + public static final String COL_H3 = "h3"; + + public static final String COL_H6 = "h6"; + + public static final String COL_H12 = "h12"; + + public static final String COL_H24 = "h24"; + + public static final String COL_H48 = "h48"; + + public static final String COL_CHTM = "chtm"; + + public static final String COL_WARNING = "warning"; + + public static final String COL_STATUS = "status"; + + public static final String COL_CLUSTER = "cluster"; +} \ No newline at end of file diff --git a/src/main/java/com/gunshi/project/xyt/model/StStbprpB.java b/src/main/java/com/gunshi/project/xyt/model/StStbprpB.java new file mode 100644 index 0000000..6131032 --- /dev/null +++ b/src/main/java/com/gunshi/project/xyt/model/StStbprpB.java @@ -0,0 +1,418 @@ +package com.gunshi.project.xyt.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +@Schema +@Data +@TableName(value = "public.st_stbprp_b") +public class StStbprpB implements Serializable { + + @TableId(value = "stcd", type = IdType.INPUT) + @TableField(value = "stcd") + @Schema(description="") + @Size(max = 20,message = "最大长度要小于 20") + @NotBlank(message = "不能为空") + private String stcd; + + @TableField(value = "stnm") + @Schema(description="") + @Size(max = 150,message = "最大长度要小于 150") + private String stnm; + + @TableField(value = "rvnm") + @Schema(description="") + @Size(max = 300,message = "最大长度要小于 300") + private String rvnm; + + @TableField(value = "hnnm") + @Schema(description="") + @Size(max = 300,message = "最大长度要小于 300") + private String hnnm; + + @TableField(value = "bsnm") + @Schema(description="") + @Size(max = 300,message = "最大长度要小于 300") + private String bsnm; + + @TableField(value = "lgtd") + @Schema(description="") + private BigDecimal lgtd; + + @TableField(value = "lttd") + @Schema(description="") + private BigDecimal lttd; + + @TableField(value = "stlc") + @Schema(description="") + @Size(max = 500,message = "最大长度要小于 500") + private String stlc; + + @TableField(value = "addvcd") + @Schema(description="") + @Size(max = 15,message = "最大长度要小于 15") + private String addvcd; + + @TableField(value = "alt") + @Schema(description="") + private BigDecimal alt; + + @TableField(value = "mdbz") + @Schema(description="") + private BigDecimal mdbz; + + @TableField(value = "mdpr") + @Schema(description="") + private BigDecimal mdpr; + + @TableField(value = "dtmnm") + @Schema(description="") + @Size(max = 160,message = "最大长度要小于 160") + private String dtmnm; + + @TableField(value = "dtmel") + @Schema(description="") + private BigDecimal dtmel; + + @TableField(value = "dtpr") + @Schema(description="") + private BigDecimal dtpr; + + @TableField(value = "sttp") + @Schema(description="") + @Size(max = 30,message = "最大长度要小于 30") + private String sttp; + + @TableField(value = "dfrtms") + @Schema(description="") + private Short dfrtms; + + @TableField(value = "fritm") + @Schema(description="") + @Size(max = 320,message = "最大长度要小于 320") + private String fritm; + + @TableField(value = "frgrd") + @Schema(description="") + @Size(max = 500,message = "最大长度要小于 500") + private String frgrd; + + @TableField(value = "esstym") + @Schema(description="") + @Size(max = 60,message = "最大长度要小于 60") + private String esstym; + + @TableField(value = "bgfrym") + @Schema(description="") + @Size(max = 60,message = "最大长度要小于 60") + private String bgfrym; + + @TableField(value = "edfrym") + @Schema(description="") + @Size(max = 60,message = "最大长度要小于 60") + private String edfrym; + + @TableField(value = "atcunit") + @Schema(description="") + @Size(max = 200,message = "最大长度要小于 200") + private String atcunit; + + @TableField(value = "admauth") + @Schema(description="") + @Size(max = 500,message = "最大长度要小于 500") + private String admauth; + + @TableField(value = "locality") + @Schema(description="") + @Size(max = 200,message = "最大长度要小于 200") + private String locality; + + @TableField(value = "stbk") + @Schema(description="") + private String stbk; + + @TableField(value = "stazt") + @Schema(description="") + private Short stazt; + + @TableField(value = "dstrvm") + @Schema(description="") + private BigDecimal dstrvm; + + @TableField(value = "drna") + @Schema(description="") + private Integer drna; + + @TableField(value = "phcd") + @Schema(description="") + @Size(max = 60,message = "最大长度要小于 60") + private String phcd; + + @TableField(value = "usfl") + @Schema(description="") + private String usfl; + + @TableField(value = "comments") + @Schema(description="") + @Size(max = 200,message = "最大长度要小于 200") + private String comments; + + @TableField(value = "moditime") + @Schema(description="") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date moditime; + + @TableField(value = "rem_gd") + @Schema(description="") + @Size(max = 300,message = "最大长度要小于 300") + private String remGd; + + @TableField(value = "ogid") + @Schema(description="") + @Size(max = 100,message = "最大长度要小于 100") + private String ogid; + + @TableField(value = "vlfl") + @Schema(description="") + private Short vlfl; + + @TableField(value = "atid") + @Schema(description="") + @Size(max = 180,message = "最大长度要小于 180") + private String atid; + + @TableField(value = "sdfl") + @Schema(description="") + @Size(max = 500,message = "最大长度要小于 500") + private String sdfl; + + @TableField(value = "rma") + @Schema(description="") + @Size(max = 256,message = "最大长度要小于 256") + private String rma; + + @TableField(value = "mdps") + @Schema(description="") + @Size(max = 300,message = "最大长度要小于 300") + private String mdps; + + @TableField(value = "mddt") + @Schema(description="") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date mddt; + + @TableField(value = "stindex") + @Schema(description="") + private Integer stindex; + + @TableField(value = "starea") + @Schema(description="") + @Size(max = 500,message = "最大长度要小于 500") + private String starea; + + @TableField(value = "stlevel") + @Schema(description="") + private String stlevel; + + @TableField(value = "code") + @Schema(description="") + @Size(max = 300,message = "最大长度要小于 300") + private String code; + + @TableField(value = "ispbj") + @Schema(description="") + private String ispbj; + + @TableField(value = "issxst") + @Schema(description="") + private String issxst; + + @TableField(value = "stpq") + @Schema(description="") + @Size(max = 500,message = "最大长度要小于 500") + private String stpq; + + @TableField(value = "sthday") + @Schema(description="") + private Integer sthday; + + @TableField(value = "\"source\"") + @Schema(description="") + @Size(max = 2,message = "最大长度要小于 2") + @NotBlank(message = "不能为空") + private String source; + + @TableField(value = "importancy") + @Schema(description="") + private Integer importancy; + + @TableField(value = "clgtd") + @Schema(description="") + private BigDecimal clgtd; + + @TableField(value = "clttd") + @Schema(description="") + private BigDecimal clttd; + + @TableField(value = "elev") + @Schema(description="") + private BigDecimal elev; + + @TableField(value = "crucial") + @Schema(description="") + private Integer crucial; + + @TableField(value = "build_year") + @Schema(description="") + @Size(max = 50,message = "最大长度要小于 50") + private String buildYear; + + @TableField(value = "adcd") + @Schema(description="行政区划编码") + @Size(max = 15,message = "最大长度要小于 15") + private String adcd; + + @TableField(value = "lyid") + @Schema(description="流域编码") + private String lyid; + + @TableField(value = "res_code") + @Schema(description="水库编码") + private String resCode; + + @TableField(value = "rv_code") + @Schema(description="河流编码") + private String rvCode; + + /** + * 状态 1:启用 0:禁用 + */ + @TableField(value = "status") + @Schema(description="状态 1:有效 0:无效") + private Integer status; + + private static final long serialVersionUID = 1L; + + public static final String COL_STCD = "stcd"; + + public static final String COL_STNM = "stnm"; + + public static final String COL_RVNM = "rvnm"; + + public static final String COL_HNNM = "hnnm"; + + public static final String COL_BSNM = "bsnm"; + + public static final String COL_LGTD = "lgtd"; + + public static final String COL_LTTD = "lttd"; + + public static final String COL_STLC = "stlc"; + + public static final String COL_ADDVCD = "addvcd"; + + public static final String COL_ALT = "alt"; + + public static final String COL_MDBZ = "mdbz"; + + public static final String COL_MDPR = "mdpr"; + + public static final String COL_DTMNM = "dtmnm"; + + public static final String COL_DTMEL = "dtmel"; + + public static final String COL_DTPR = "dtpr"; + + public static final String COL_STTP = "sttp"; + + public static final String COL_DFRTMS = "dfrtms"; + + public static final String COL_FRITM = "fritm"; + + public static final String COL_FRGRD = "frgrd"; + + public static final String COL_ESSTYM = "esstym"; + + public static final String COL_BGFRYM = "bgfrym"; + + public static final String COL_EDFRYM = "edfrym"; + + public static final String COL_ATCUNIT = "atcunit"; + + public static final String COL_ADMAUTH = "admauth"; + + public static final String COL_LOCALITY = "locality"; + + public static final String COL_STBK = "stbk"; + + public static final String COL_STAZT = "stazt"; + + public static final String COL_DSTRVM = "dstrvm"; + + public static final String COL_DRNA = "drna"; + + public static final String COL_PHCD = "phcd"; + + public static final String COL_USFL = "usfl"; + + public static final String COL_COMMENTS = "comments"; + + public static final String COL_MODITIME = "moditime"; + + public static final String COL_REM_GD = "rem_gd"; + + public static final String COL_OGID = "ogid"; + + public static final String COL_VLFL = "vlfl"; + + public static final String COL_ATID = "atid"; + + public static final String COL_SDFL = "sdfl"; + + public static final String COL_RMA = "rma"; + + public static final String COL_MDPS = "mdps"; + + public static final String COL_MDDT = "mddt"; + + public static final String COL_STINDEX = "stindex"; + + public static final String COL_STAREA = "starea"; + + public static final String COL_STLEVEL = "stlevel"; + + public static final String COL_CODE = "code"; + + public static final String COL_ISPBJ = "ispbj"; + + public static final String COL_ISSXST = "issxst"; + + public static final String COL_STPQ = "stpq"; + + public static final String COL_STHDAY = "sthday"; + + public static final String COL_SOURCE = "source"; + + public static final String COL_IMPORTANCY = "importancy"; + + public static final String COL_CLGTD = "clgtd"; + + public static final String COL_CLTTD = "clttd"; + + public static final String COL_ELEV = "elev"; + + public static final String COL_CRUCIAL = "crucial"; + + public static final String COL_BUILD_YEAR = "build_year"; +} \ No newline at end of file diff --git a/src/main/java/com/gunshi/project/xyt/service/RainBasinDivisionService.java b/src/main/java/com/gunshi/project/xyt/service/RainBasinDivisionService.java new file mode 100644 index 0000000..4fad2cb --- /dev/null +++ b/src/main/java/com/gunshi/project/xyt/service/RainBasinDivisionService.java @@ -0,0 +1,460 @@ +package com.gunshi.project.xyt.service; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.gunshi.project.xyt.entity.so.StPptnSo; +import com.gunshi.project.xyt.entity.vo.CartogramVo; +import com.gunshi.project.xyt.entity.vo.StPptnDetailsVo; +import com.gunshi.project.xyt.entity.vo.StPptnVo; +import com.gunshi.project.xyt.mapper.RealRainMapper; +import com.gunshi.project.xyt.mapper.StPptnRMapper; +import com.gunshi.project.xyt.model.StPptnRD; +import com.gunshi.project.xyt.model.StPptnRReal; +import com.gunshi.project.xyt.model.StStbprpB; +import com.gunshi.project.xyt.model.StStbprpBAutoDao; +import jakarta.annotation.Resource; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.temporal.ChronoUnit; +import java.util.*; + +/** + * Description: + * Created by wanyan on 2024/7/8 + * + * @author wanyan + * @version 1.0 + */ +@Service +@Slf4j +public class RainBasinDivisionService { + + @Autowired + private RealRainMapper realRainMapper; + + @Autowired + private StPptnRMapper stPptnRMapper; + + @Resource + private StStbprpBAutoDao stStbprpBAutoDao; + + /** + * 根据测站编码查询时间段内每小时的雨量 + * + * @param stPptnSo 雨量站降雨量查询参数 + * @return + */ + public List queryStPptnPerHourByStcdAndStartTimeAndEndTime(StPptnSo stPptnSo) { + String stcd = stPptnSo.getStcd(); + List stPptnVos = realRainMapper.queryStPptnPerHourByStcdAndStartTimeAndEndTime(stcd, stPptnSo.getStartTime(), stPptnSo.getEndTime()); + SimpleDateFormat df = new SimpleDateFormat("MM-dd HH:mm"); + for (StPptnVo stPptnVo : stPptnVos) { + Date time = stPptnVo.getTime(); + stPptnVo.setTimeStr(df.format(time)); + } + return stPptnVos; + } + + /** + * 根据测站编码查询时间段内每小时的雨量统计 + * + * @param stPptnSo 雨量站降雨量查询参数 + * @return + */ + public CartogramVo queryStPptnPerHourChartByStcdAndStartTimeAndEndTime(StPptnSo stPptnSo) { + //实测 + List stPptnVos1 = queryStPptnPerHourNowByStcdAndStartTimeAndEndTime(stPptnSo); + //累计 + List stPptnVos2 = queryStPptnPerHourSumByStcdAndStartTimeAndEndTime(stPptnSo); + + CartogramVo cartogramVo = new CartogramVo(); + List time = new ArrayList<>(); + List actual = new ArrayList<>(); + List total = new ArrayList<>(); + for (StPptnVo stPptnVo : stPptnVos1) { + time.add(stPptnVo.getTimeStr()); + actual.add(stPptnVo.getSumDrp()); + } + for (StPptnVo stPptnVo : stPptnVos2) { + total.add(stPptnVo.getSumDrp()); + } + cartogramVo.setTime(time); + cartogramVo.setActual(actual); + cartogramVo.setTotal(total); + return cartogramVo; + } + + /** + * 根据测站编码查询时间段内每小时的实测雨量 + * + * @param stPptnSo 雨量站降雨量查询参数 + * @return + */ + public List queryStPptnPerHourNowByStcdAndStartTimeAndEndTime(StPptnSo stPptnSo) { + List stPptnVos = queryStPptnPerHourByStcdAndStartTimeAndEndTime(stPptnSo); + Collections.reverse(stPptnVos); + return stPptnVos; + } + + /** + * 根据测站编码查询时间段内每小时的累计雨量 + * + * @param stPptnSo 雨量站降雨量查询参数 + * @return + */ + public List queryStPptnPerHourSumByStcdAndStartTimeAndEndTime(StPptnSo stPptnSo) { + List stPptnVos = queryStPptnPerHourNowByStcdAndStartTimeAndEndTime(stPptnSo); + BigDecimal sumdrp = BigDecimal.valueOf(0); + for (StPptnVo stPptnVo : stPptnVos) { + sumdrp = sumdrp.add(stPptnVo.getSumDrp()); + stPptnVo.setSumDrp(sumdrp); + } + return stPptnVos; + } + + /** + * 根据测站编码查询时间段内每天的雨量 + * + * @param stPptnSo 雨量站降雨量查询参数 + * @return + */ + @SneakyThrows + public List queryStPptnPerDayByStcdAndStartTimeAndEndTime(StPptnSo stPptnSo) { + String stcd = stPptnSo.getStcd(); + + Date stm = stPptnSo.getStartTime(); + Date etm = stPptnSo.getEndTime(); + Date now = new Date(); + if (etm.getTime() > now.getTime()) etm = now; + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + stm = df.parse(df.format(stm)); + etm = df.parse(df.format(etm)); + Calendar cal = Calendar.getInstance(); + + List stPptnVos = new ArrayList<>(); + while (etm.getTime() >= stm.getTime()) { + cal.setTime(stm); + StPptnVo stPptnVo = new StPptnVo(); + stPptnVo.setTime(stm); + stPptnVo.setTimeStr(df.format(stm)); + int year = cal.get(Calendar.YEAR); + + StPptnRD pptnrd = realRainMapper.getStPptnRD( + stcd, stm, year + ); + if (pptnrd != null) { + stPptnVo.setSumDrp(pptnrd.getDrp()); + } + stPptnVos.add(stPptnVo); + + cal.add(Calendar.DAY_OF_MONTH, 1); + stm = cal.getTime(); + } + return stPptnVos; + } + + /** + * 根据测站编码查询时间段内每天的雨量统计 + * + * @param stPptnSo 雨量站降雨量查询参数 + * @return + */ + public CartogramVo queryStPptnPerDayChartChartByStcdAndStartTimeAndEndTime(StPptnSo stPptnSo) { + //实测 + List stPptnVos1 = queryStPptnPerDayByStcdAndStartTimeAndEndTime(stPptnSo); + //累计 + List stPptnVos2 = queryStPptnPerDaySumByStcdAndStartTimeAndEndTime(stPptnSo); + + CartogramVo cartogramVo = new CartogramVo(); + List time = new ArrayList<>(); + List actual = new ArrayList<>(); + List total = new ArrayList<>(); + for (StPptnVo stPptnVo : stPptnVos1) { + time.add(stPptnVo.getTimeStr()); + actual.add(stPptnVo.getSumDrp()); + } + for (StPptnVo stPptnVo : stPptnVos2) { + total.add(stPptnVo.getSumDrp()); + } + cartogramVo.setTime(time); + cartogramVo.setActual(actual); + cartogramVo.setTotal(total); + return cartogramVo; + } + + /** + * 根据测站编码查询时间段内每天的累计雨量 + * + * @param stPptnSo 雨量站降雨量查询参数 + * @return + */ + public List queryStPptnPerDaySumByStcdAndStartTimeAndEndTime(StPptnSo stPptnSo) { + List stPptnVos = queryStPptnPerDayByStcdAndStartTimeAndEndTime(stPptnSo); + BigDecimal sumdrp = BigDecimal.valueOf(0); + for (StPptnVo stPptnVo : stPptnVos) { + if (stPptnVo.getSumDrp() != null){ + sumdrp = sumdrp.add(stPptnVo.getSumDrp()); + } + stPptnVo.setSumDrp(sumdrp); + } + return stPptnVos; + } + + /** + * 根据测站编码查询详细雨量情况 + * + * @param stcd 测站编码 + * @return + */ + public StPptnDetailsVo queryStPptnDetailsByStcd(String stcd) { +// StPptnRStat stPptnRStat = stPptnRStatMapper.queryStPptnRStatByStcd(stcd); + StPptnRReal stPptnRReal = realRainMapper.queryPptnByStcd(stcd); + + StPptnDetailsVo stPptnDetailsVo = new StPptnDetailsVo(); + if (stPptnRReal != null){ + BeanUtil.copyProperties(stPptnRReal, stPptnDetailsVo); + }else { + stPptnDetailsVo.setStcd(stcd); + } + + BigDecimal value0 = new BigDecimal(0); + + Date date = new Date(); + +// //48小时降雨量 +// BigDecimal h48 = stStbprpBMapper.queryStPptn48HByStcd(stcd); +// if (h48 == null) { +// stPptnDetailsVo.setH48(value0); +// } else { +// stPptnDetailsVo.setH48(h48); +// } +// +// //今日雨量 +// BigDecimal todayDrp = queryTodayDrpByStcdAndTime(stcd, date); +// if (todayDrp == null) { +// stPptnDetailsVo.setTodayDrp(value0); +// } else { +// stPptnDetailsVo.setTodayDrp(todayDrp); +// } + + //昨日雨量 + BigDecimal yesterdayDrp = queryYesterdayDrpByStcdAndTime(stcd, date); + if (yesterdayDrp == null) { + stPptnDetailsVo.setYesterdayDrp(value0); + } else { + stPptnDetailsVo.setYesterdayDrp(yesterdayDrp); + } + + //本月降雨量 + BigDecimal monthDay = queryMonthDrpByStcdAndTime(stcd, date); + if (monthDay == null) { + stPptnDetailsVo.setMonthDrp(value0); + } else { + stPptnDetailsVo.setMonthDrp(monthDay); + } + + //本年降雨量 + BigDecimal yearDrp = queryYearDrpByStcdAndTime(stcd, date); + if (yearDrp == null) { + stPptnDetailsVo.setYearDrp(value0); + } else { + stPptnDetailsVo.setYearDrp(yearDrp); + } + + //本年天数 + Long yearDay = countYearDay(date); + stPptnDetailsVo.setYearDay(yearDay); + + Map map = queryYearDrpDayAndMaxDrpAndMaxDrpTimeByStcdAndTime(stcd, date); + + //本年降雨天数 + Long yearDrpDay = (Long) map.get("count"); + stPptnDetailsVo.setYearDrpDay(yearDrpDay); + + //本年最大日雨量 + BigDecimal maxDrp = (BigDecimal) map.get("maxDrp"); + stPptnDetailsVo.setMaxDrp(maxDrp); + + //本年最大日雨量时间 + Date maxDrpTime =(Date) map.get("maxDrpTime"); + stPptnDetailsVo.setMaxDrpTime(maxDrpTime); + return stPptnDetailsVo; + } + + /** + * 根据测站编码和时间查看昨日降雨量 + * + * @param stcd 测站编码 + * @param time 当前时间 + * @return 昨日降雨量 + */ + public BigDecimal queryYesterdayDrpByStcdAndTime(String stcd, Date time) { + LocalDateTime now = LocalDateTime.ofInstant(time.toInstant(), ZoneId.systemDefault()); + LocalDateTime startTime; + LocalDateTime endTime; + LocalDateTime yesterday = now.minusDays(1); + if (now.getHour() >= 8) { + startTime = LocalDateTime.of( + yesterday.getYear(), + yesterday.getMonthValue(), + yesterday.getDayOfMonth(), + 8, + 0, + 0 + ); + endTime = LocalDateTime.of( + now.getYear(), + now.getMonthValue(), + now.getDayOfMonth(), + 8, + 0, + 0 + ); + } else { + endTime = endTime = LocalDateTime.of( + yesterday.getYear(), + yesterday.getMonthValue(), + yesterday.getDayOfMonth(), + 8, + 0, + 0 + ); + yesterday = yesterday.minusDays(1); + startTime = LocalDateTime.of( + yesterday.getYear(), + yesterday.getMonthValue(), + yesterday.getDayOfMonth(), + 8, + 0, + 0 + ); + } + + return stPptnRMapper.queryStPptnTimeQuantumByStcdAndTime( + stcd, + Date.from(startTime.atZone(ZoneId.systemDefault()).toInstant()), + Date.from(endTime.atZone(ZoneId.systemDefault()).toInstant()) + ); + + } + + /** + * 根据测站编码和时间查看本月降雨量 + * + * @param stcd 测站编码 + * @param time 当前时间 + * @return 本月降雨量 + */ + public BigDecimal queryMonthDrpByStcdAndTime(String stcd, Date time) { + LocalDateTime now = LocalDateTime.ofInstant(time.toInstant(), ZoneId.systemDefault()); + LocalDateTime startTime; + LocalDateTime endTime; + if (now.getHour() >= 8 || (now.getHour() < 8 && now.getDayOfMonth() > 1)) { + startTime = LocalDateTime.of( + now.getYear(), + now.getMonthValue(), + 1, + 8, + 0, + 0 + ); + endTime = now; + return stPptnRMapper.queryStPptnTimeQuantumByStcdAndTime( + stcd, + Date.from(startTime.atZone(ZoneId.systemDefault()).toInstant()), + Date.from(endTime.atZone(ZoneId.systemDefault()).toInstant()) + ); + + } + BigDecimal monthdrp = BigDecimal.valueOf(0); + return monthdrp; + + } + + /** + * 根据测站编码和时间查看本年降雨量 + * + * @param stcd 测站编码 + * @param time 当前时间 + * @return 本年降雨量 + */ + public BigDecimal queryYearDrpByStcdAndTime(String stcd, Date time) { + LocalDateTime now = LocalDateTime.ofInstant(time.toInstant(), ZoneId.systemDefault()); + LocalDateTime startTime; + LocalDateTime endTime; + if (now.getHour() >= 8 || (now.getHour() < 8 && now.getMonthValue() > 1) || (now.getHour() < 8 && now.getMonthValue() == 1 && now.getDayOfMonth() >= 1)) { + startTime = LocalDateTime.of( + now.getYear(), + 1, + 1, + 8, + 0, + 0 + ); + endTime = now; + return stPptnRMapper.queryStPptnTimeQuantumByStcdAndTime( + stcd, + Date.from(startTime.atZone(ZoneId.systemDefault()).toInstant()), + Date.from(endTime.atZone(ZoneId.systemDefault()).toInstant()) + ); + } + BigDecimal monthDrp = BigDecimal.valueOf(0); + return monthDrp; + } + + /** + * 根据测站编码和时间查询本年降雨天数、本年最大日雨量、本年最大日雨量时间 + * + * @param stcd 测站编码 + * @param time 当前时间 + * @return 本年降雨天数、本年最大日雨量、本年最大日雨量时间 + */ + public Map queryYearDrpDayAndMaxDrpAndMaxDrpTimeByStcdAndTime(String stcd, Date time) { + Date now = new Date(); + Date startTime = new Date(now.getYear(), 0, 1, 8, 0, 0); + + BigDecimal maxDrp = BigDecimal.valueOf(0); + Date maxDrpTime = startTime; + Long count = 0L; + Map map = new HashMap<>(); + map.put("count", count); + map.put("maxDrp", maxDrp); + map.put("maxDrpTime", maxDrpTime); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(StStbprpB.COL_STCD,stcd); + + StStbprpB stStbprpB = stStbprpBAutoDao.getOne(queryWrapper); + StPptnRD stPptnRD = realRainMapper.getMaxOfYear(stcd,now.getYear() + 1900); + if (stPptnRD == null){ + return map; + } + + count = realRainMapper.getRainOfDayInYear(stcd, now.getYear()+1900); + map.put("count", count); + map.put("maxDrp", stPptnRD.getDrp()); + map.put("maxDrpTime", stPptnRD.getTm()); + return map; + } + + /** + * 计算本年天数 + * + * @param time 当前时间 + * @return 本年天数 + */ + public Long countYearDay(Date time) { + LocalDateTime now = LocalDateTime.ofInstant(time.toInstant(), ZoneId.systemDefault()); + LocalDateTime startTime = LocalDateTime.of(now.getYear(), 1, 1, 8, 0, 0); + long count = ChronoUnit.DAYS.between(startTime, now); + return count + 1; + } + +} diff --git a/src/main/java/com/gunshi/project/xyt/service/RealRainService.java b/src/main/java/com/gunshi/project/xyt/service/RealRainService.java new file mode 100644 index 0000000..c9e76fd --- /dev/null +++ b/src/main/java/com/gunshi/project/xyt/service/RealRainService.java @@ -0,0 +1,45 @@ +package com.gunshi.project.xyt.service; + +import com.gunshi.project.xyt.entity.so.RealRainBaseSo; +import com.gunshi.project.xyt.entity.vo.RealRainListVo; +import com.gunshi.project.xyt.mapper.RealRainMapper; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.compress.utils.Lists; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Comparator; +import java.util.List; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; + +/** + * Description: + * Created by wanyan on 2024/7/8 + * + * @author wanyan + * @version 1.0 + */ +@Service +@Data +@Slf4j +public class RealRainService { + + @Autowired + private RealRainMapper realRainMapper; + + /** + * 实时雨情-降雨信息-查询接口 + * + * @param realRainBaseSo + * @return + */ + public List getRealRainList(RealRainBaseSo realRainBaseSo) { + List result = realRainMapper.getRealRainList(realRainBaseSo.getStm(), realRainBaseSo.getEtm()); + + result.sort(Comparator.comparing(RealRainListVo::getDrp, Comparator.nullsFirst(Double::compareTo)).reversed().thenComparing(RealRainListVo::getStcd)); + return result; + } +}