From 59fb3873889d5deacd7455d03b4e452a34324c97 Mon Sep 17 00:00:00 2001 From: wany <13995595726@qq.com> Date: Tue, 24 Sep 2024 13:33:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=A8=E5=91=A8=E6=9C=9F=E6=A1=A3=E6=A1=88?= =?UTF-8?q?=EF=BC=9B=E6=B2=B3=E9=81=93=E6=B0=B4=E6=83=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ProjectEventsController.java | 7 + .../xyt/controller/RiverWaterController.java | 60 +++++++ .../xyt/controller/StStbprpBController.java | 7 + .../xyt/entity/so/CommonDataPageSo.java | 5 + .../project/xyt/entity/vo/AttRvBaseVo.java | 127 ++++++++++++++ .../project/xyt/entity/vo/AttRvMonitorVo.java | 64 +++++++ .../xyt/entity/vo/ProjectEventsVo.java | 37 ++++ .../project/xyt/mapper/AttResBaseMapper.java | 68 +++++++- .../xyt/mapper/FileAssociationsMapper.java | 21 +++ .../xyt/mapper/ProjectEventsMapper.java | 85 +++++++++ .../xyt/service/FileAssociationsService.java | 5 +- .../xyt/service/ProjectEventsService.java | 52 +++++- .../xyt/service/ReservoirWaterService.java | 2 +- .../xyt/service/RiverWaterService.java | 165 ++++++++++++++++++ .../project/xyt/service/StStbprpBService.java | 4 + .../project/xyt/util/DataHandleUtil.java | 19 ++ 16 files changed, 721 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/gunshi/project/xyt/controller/RiverWaterController.java create mode 100644 src/main/java/com/gunshi/project/xyt/entity/vo/AttRvBaseVo.java create mode 100644 src/main/java/com/gunshi/project/xyt/entity/vo/AttRvMonitorVo.java create mode 100644 src/main/java/com/gunshi/project/xyt/entity/vo/ProjectEventsVo.java create mode 100644 src/main/java/com/gunshi/project/xyt/service/RiverWaterService.java diff --git a/src/main/java/com/gunshi/project/xyt/controller/ProjectEventsController.java b/src/main/java/com/gunshi/project/xyt/controller/ProjectEventsController.java index c724ca6..5102d78 100644 --- a/src/main/java/com/gunshi/project/xyt/controller/ProjectEventsController.java +++ b/src/main/java/com/gunshi/project/xyt/controller/ProjectEventsController.java @@ -3,6 +3,7 @@ package com.gunshi.project.xyt.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.gunshi.core.result.R; import com.gunshi.project.xyt.entity.so.CommonDataPageSo; +import com.gunshi.project.xyt.entity.vo.ProjectEventsVo; import com.gunshi.project.xyt.model.ProjectEvents; import com.gunshi.project.xyt.service.ProjectEventsService; import com.gunshi.project.xyt.validate.markers.Insert; @@ -61,6 +62,12 @@ public class ProjectEventsController extends AbstractCommonFileController{ return R.ok(service.pageQuery(page)); } + @Operation(summary = "全周期档案") + @PostMapping("/doc/page") + public R> filePage(@RequestBody @Validated CommonDataPageSo page) { + return R.ok(service.filePage(page)); + } + @Override public String getGroupId() { return "ProjectEvents"; diff --git a/src/main/java/com/gunshi/project/xyt/controller/RiverWaterController.java b/src/main/java/com/gunshi/project/xyt/controller/RiverWaterController.java new file mode 100644 index 0000000..a120c63 --- /dev/null +++ b/src/main/java/com/gunshi/project/xyt/controller/RiverWaterController.java @@ -0,0 +1,60 @@ +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.DataQueryCommonSo; +import com.gunshi.project.xyt.entity.vo.AttRvBaseVo; +import com.gunshi.project.xyt.entity.vo.AttRvMonitorDetailVo; +import com.gunshi.project.xyt.entity.vo.AttRvMonitorVo; +import com.gunshi.project.xyt.model.StZqrlB; +import com.gunshi.project.xyt.service.RiverWaterService; +import io.swagger.v3.oas.annotations.media.Schema; +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; + +/** + * Description: + * Created by wanyan on 2024/2/21 + * + * @author wanyan + * @version 1.0 + */ +@RestController +@RequestMapping("/river/water") +@Tag(name = "河道水情") +public class RiverWaterController { + + @Autowired + private RiverWaterService riverWaterService; + + @Post(path = "/list", summary = "河道水情列表") + public R> list() { + return R.ok(riverWaterService.list()); + } + + @Get(path = "/zqrl", summary = "水位流量关系") + public R> zqrl(@Schema(name = "stcd") @RequestParam("stcd") String stcd) { + return R.ok(riverWaterService.zqrl(stcd)); + } + + + @Post(path = "/monitor/data", summary = "监测数据") + public R> monitorData(@RequestBody @Validated DataQueryCommonSo dataQueryCommonSo) { + return R.ok(riverWaterService.monitorData(dataQueryCommonSo)); + } + + @Get(path = "/detail", summary = "监测详细数据(下方表格)") + public R detail(@Schema(name = "stcd") @RequestParam("stcd") String stcd) { + return R.ok(riverWaterService.detail(stcd)); + } + + +} diff --git a/src/main/java/com/gunshi/project/xyt/controller/StStbprpBController.java b/src/main/java/com/gunshi/project/xyt/controller/StStbprpBController.java index 92a2e6c..d429872 100644 --- a/src/main/java/com/gunshi/project/xyt/controller/StStbprpBController.java +++ b/src/main/java/com/gunshi/project/xyt/controller/StStbprpBController.java @@ -11,6 +11,7 @@ import com.gunshi.project.xyt.entity.so.StStbprpBPage; import com.gunshi.project.xyt.entity.so.StStbprpBSo; import com.gunshi.project.xyt.entity.vo.HomeStStbprpBVo; import com.gunshi.project.xyt.entity.vo.StStatusListVo; +import com.gunshi.project.xyt.entity.vo.StStatusVo; import com.gunshi.project.xyt.model.StStbprpB; import com.gunshi.project.xyt.service.StStbprpBService; import com.gunshi.project.xyt.validate.markers.Insert; @@ -127,4 +128,10 @@ public class StStbprpBController { public R statusList() { return R.ok(service.statusList()); } + + @Operation(summary = "雨情站点下拉") + @PostMapping("/rain/list") + public R> rainList() { + return R.ok(service.rainList()); + } } \ No newline at end of file diff --git a/src/main/java/com/gunshi/project/xyt/entity/so/CommonDataPageSo.java b/src/main/java/com/gunshi/project/xyt/entity/so/CommonDataPageSo.java index f7d4e42..0174df8 100644 --- a/src/main/java/com/gunshi/project/xyt/entity/so/CommonDataPageSo.java +++ b/src/main/java/com/gunshi/project/xyt/entity/so/CommonDataPageSo.java @@ -6,6 +6,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; import lombok.Data; +import java.util.List; + /** * Description: * Created by wanyan on 2024/3/19 @@ -27,4 +29,7 @@ public class CommonDataPageSo { @Schema(description = "时间范围") private DateRangeSo dateSo; + @Schema(description = "类型(1大事记 2调度指令 3维修养护 4安全鉴定 5除险加固 6白蚁普查)") + private List types; + } diff --git a/src/main/java/com/gunshi/project/xyt/entity/vo/AttRvBaseVo.java b/src/main/java/com/gunshi/project/xyt/entity/vo/AttRvBaseVo.java new file mode 100644 index 0000000..025923c --- /dev/null +++ b/src/main/java/com/gunshi/project/xyt/entity/vo/AttRvBaseVo.java @@ -0,0 +1,127 @@ +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; + +/** + * 河道水情 + * Created by wanyan on 2024/2/20 + * + * @author wanyan + * @version 1.0 + */ +@Data +public class AttRvBaseVo { + + /** + * 测站编码 + */ + @Schema(description = "测站编码") + private String stcd; + + /** + * 测站名称 + */ + @Schema(description = "测站名称") + private String stnm; + + /** + * 站类 + */ + @Schema(description = "站类(RR水库水文站 ZQ,ZP河道水文站)") + private String sttp; + + /** + * 来源 + */ + @Schema(description = "来源") + private String source; + + /** + * 经度 + */ + @Schema(description = "经度") + private BigDecimal lgtd; + + /** + * 纬度 + */ + @Schema(description = "纬度") + private BigDecimal lttd; + + /** + * 行政区划代码 + */ + @Schema(description="行政区划代码") + private String adcd; + + /** + * 行政区划名称 + */ + @Schema(description="行政区划名称") + private String adnm; + + + /** + * 河流名称 + */ + @Schema(description = "河流名称") + private String rvnm; + + /** + * 流域名称 + */ + @Schema(description="流域名称") + private String lyname; + + /** + * 站址 + */ + @Schema(description="站址") + private String stlc; + + /** + * 监测时间 + */ + @Schema(description="监测时间") + @JsonFormat(pattern = DateFormatString.YYYY_MM_DD_HH_MM_SS, timezone = "GMT+8") + private Date tm; + + /** + * 水位涨跌情况 + */ + @Schema(description="水位涨跌情况(0无变化 1涨 2跌)") + private Integer state; + + /** + * 监测水位 + */ + @Schema(description="监测水位") + private BigDecimal z; + + @Schema(description="警戒水位") + private BigDecimal wrz; + + @Schema(description="危险水位") + private BigDecimal grz; + + /** + * 图片路径 + */ + @Schema(description = "图片路径") + private String imgPath; + + @Schema(description="是否超危险水位(0否 1是)") + private Integer gstate; + + @Schema(description="是否超警戒水位(0否 1是)") + private Integer wstate; + + @Schema(description = "建站日期") + private String esstym; +} diff --git a/src/main/java/com/gunshi/project/xyt/entity/vo/AttRvMonitorVo.java b/src/main/java/com/gunshi/project/xyt/entity/vo/AttRvMonitorVo.java new file mode 100644 index 0000000..bee4205 --- /dev/null +++ b/src/main/java/com/gunshi/project/xyt/entity/vo/AttRvMonitorVo.java @@ -0,0 +1,64 @@ +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.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 河道监测数据 + * Created by wanyan on 2024/2/20 + * + * @author wanyan + * @version 1.0 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class AttRvMonitorVo { + + /** + * 测站编码 + */ + @Schema(description = "测站编码") + private String stcd; + + /** + * 监测时间 + */ + @Schema(description="监测时间") + @JsonFormat(pattern = DateFormatString.YYYY_MM_DD_HH_MM_SS, timezone = "GMT+8") + private Date tm; + + /** + * 雨量 + */ + @Schema(description="雨量") + private BigDecimal drp; + + /** + * 监测水位 + */ + @Schema(description="监测水位") + private BigDecimal z; + + /** + * 实测流量 + */ + @Schema(description="实测流量") + private BigDecimal q; + + /** + * 转换流量 + */ + @Schema(description="转换流量") + private BigDecimal tq; + +} diff --git a/src/main/java/com/gunshi/project/xyt/entity/vo/ProjectEventsVo.java b/src/main/java/com/gunshi/project/xyt/entity/vo/ProjectEventsVo.java new file mode 100644 index 0000000..92b3054 --- /dev/null +++ b/src/main/java/com/gunshi/project/xyt/entity/vo/ProjectEventsVo.java @@ -0,0 +1,37 @@ +package com.gunshi.project.xyt.entity.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import com.gunshi.core.dateformat.DateFormatString; +import com.gunshi.project.xyt.model.FileAssociations; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.Date; +import java.util.List; + +@Data +public class ProjectEventsVo { + + @Schema(description="主键") + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + @Schema(description="发生日期") + @JsonFormat(pattern = DateFormatString.YYYY_MM_DD, timezone = "GMT+8") + private Date eventsDate; + + @Schema(description="类型(1大事记 2调度指令 3维修养护 4安全鉴定 5除险加固 6白蚁普查)") + private Integer type; + + @Schema(description="事件内容描述") + private String eventsDesc; + + @TableField(exist = false) + @Schema(description = "文件集合") + private List files; + + +} \ No newline at end of file diff --git a/src/main/java/com/gunshi/project/xyt/mapper/AttResBaseMapper.java b/src/main/java/com/gunshi/project/xyt/mapper/AttResBaseMapper.java index 7501260..bc61f81 100644 --- a/src/main/java/com/gunshi/project/xyt/mapper/AttResBaseMapper.java +++ b/src/main/java/com/gunshi/project/xyt/mapper/AttResBaseMapper.java @@ -6,6 +6,8 @@ import com.gunshi.project.xyt.entity.so.DataQueryCommonSo; import com.gunshi.project.xyt.entity.so.PicQuerySo; import com.gunshi.project.xyt.entity.vo.AttResBaseVo; import com.gunshi.project.xyt.entity.vo.AttResMonitorVo; +import com.gunshi.project.xyt.entity.vo.AttRvBaseVo; +import com.gunshi.project.xyt.entity.vo.AttRvMonitorVo; import com.gunshi.project.xyt.model.*; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -93,13 +95,20 @@ public interface AttResBaseMapper extends BaseMapper { """) AttResMonitorVo latestRz(@Param("stcd") String stcd); + @Select(""" """) - BigDecimal oldRz(@Param("stcd") String stcd,@Param("dateTime") Date dateTime); + BigDecimal oldRz(@Param("stcd") String stcd,@Param("type") Integer type, @Param("dateTime") Date dateTime); @Select(""" """) Page imageInfo(@Param("page") Page page ,@Param("obj") PicQuerySo picQuerySo); + + @Select(""" + + """) + List queryWaterList(); + + @Select(""" + + """) + List drp(@Param("obj") DataQueryCommonSo dataQueryCommonSo); + + @Select(""" + + """) + List rz(@Param("obj") DataQueryCommonSo dataQueryCommonSo); + + @Select(""" + + """) + AttRvMonitorVo latestRz(@Param("stcd") String stcd, @Param("type") Integer type); + } \ No newline at end of file diff --git a/src/main/java/com/gunshi/project/xyt/mapper/FileAssociationsMapper.java b/src/main/java/com/gunshi/project/xyt/mapper/FileAssociationsMapper.java index 04a2fe1..e5707c1 100644 --- a/src/main/java/com/gunshi/project/xyt/mapper/FileAssociationsMapper.java +++ b/src/main/java/com/gunshi/project/xyt/mapper/FileAssociationsMapper.java @@ -56,4 +56,25 @@ public interface FileAssociationsMapper extends BaseMapper { """) List queryFileList(@Param("businessId") String businessId,@Param("tableName") String tableName,@Param("type") String type); + + @Select(""" + + """) + List getFilesByIds(@Param("ids") List ids); } \ No newline at end of file diff --git a/src/main/java/com/gunshi/project/xyt/mapper/ProjectEventsMapper.java b/src/main/java/com/gunshi/project/xyt/mapper/ProjectEventsMapper.java index 18d8fdc..e229949 100644 --- a/src/main/java/com/gunshi/project/xyt/mapper/ProjectEventsMapper.java +++ b/src/main/java/com/gunshi/project/xyt/mapper/ProjectEventsMapper.java @@ -1,10 +1,95 @@ package com.gunshi.project.xyt.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.gunshi.project.xyt.entity.so.CommonDataPageSo; +import com.gunshi.project.xyt.entity.vo.ProjectEventsVo; import com.gunshi.project.xyt.model.ProjectEvents; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; @Mapper public interface ProjectEventsMapper extends BaseMapper { + @Select(""" + + """) + List eventList(@Param("obj") CommonDataPageSo page); + + @Select(""" + + """) + List maintainList(@Param("obj") CommonDataPageSo page); + + @Select(""" + + """) + List safetyList(@Param("obj") CommonDataPageSo page); + + @Select(""" + + """) + List reinforceList(@Param("obj") CommonDataPageSo page); + + @Select(""" + + """) + List termiteList(@Param("obj") CommonDataPageSo page); } \ No newline at end of file diff --git a/src/main/java/com/gunshi/project/xyt/service/FileAssociationsService.java b/src/main/java/com/gunshi/project/xyt/service/FileAssociationsService.java index 6dc4662..1a27060 100644 --- a/src/main/java/com/gunshi/project/xyt/service/FileAssociationsService.java +++ b/src/main/java/com/gunshi/project/xyt/service/FileAssociationsService.java @@ -2,7 +2,6 @@ package com.gunshi.project.xyt.service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gunshi.project.xyt.mapper.FileAssociationsMapper; @@ -15,7 +14,6 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; -import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; @@ -177,4 +175,7 @@ public class FileAssociationsService extends ServiceImpl().in("business_id", businessIds)); } + public List getFilesByIds(List ids) { + return this.baseMapper.getFilesByIds(ids); + } } diff --git a/src/main/java/com/gunshi/project/xyt/service/ProjectEventsService.java b/src/main/java/com/gunshi/project/xyt/service/ProjectEventsService.java index cbeae25..2f16152 100644 --- a/src/main/java/com/gunshi/project/xyt/service/ProjectEventsService.java +++ b/src/main/java/com/gunshi/project/xyt/service/ProjectEventsService.java @@ -1,22 +1,26 @@ package com.gunshi.project.xyt.service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gunshi.project.xyt.entity.so.CommonDataPageSo; +import com.gunshi.project.xyt.entity.vo.ProjectEventsVo; import com.gunshi.project.xyt.mapper.ProjectEventsMapper; +import com.gunshi.project.xyt.model.FileAssociations; import com.gunshi.project.xyt.model.ProjectEvents; +import com.gunshi.project.xyt.util.DataHandleUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.io.Serializable; -import java.util.List; -import java.util.Objects; +import java.util.*; +import java.util.stream.Collectors; /** * 描述: 工程大事记 @@ -107,6 +111,50 @@ public class ProjectEventsService extends ServiceImpl filePage(CommonDataPageSo page) { + Page res = new Page<>(); + List list = new ArrayList<>(); + List types = page.getTypes(); + if(CollectionUtils.isEmpty(types) || (CollectionUtils.isNotEmpty(types)) && types.contains(1)){ + List projectEventsVos = this.baseMapper.eventList(page); + list.addAll(projectEventsVos); + } + if(CollectionUtils.isEmpty(types) || (CollectionUtils.isNotEmpty(types)) && types.contains(3)){ + List projectEventsVos = this.baseMapper.maintainList(page); + list.addAll(projectEventsVos); + } + if(CollectionUtils.isEmpty(types) || (CollectionUtils.isNotEmpty(types)) && types.contains(4)){ + List projectEventsVos = this.baseMapper.safetyList(page); + list.addAll(projectEventsVos); + } + if(CollectionUtils.isEmpty(types) || (CollectionUtils.isNotEmpty(types)) && types.contains(5)){ + List projectEventsVos = this.baseMapper.reinforceList(page); + list.addAll(projectEventsVos); + } + if(CollectionUtils.isEmpty(types) || (CollectionUtils.isNotEmpty(types)) && types.contains(6)){ + List projectEventsVos = this.baseMapper.termiteList(page); + list.addAll(projectEventsVos); + } + if (CollectionUtils.isNotEmpty(list)) { + fillFile(list); + list = list.stream().sorted(Comparator.comparing(ProjectEventsVo::getEventsDate).reversed()).collect(Collectors.toList()); + List paginate = DataHandleUtil.paginate(list, page.getPageSo().getPageNumber(), page.getPageSo().getPageSize()); + res.setRecords(paginate); + } + res.setCurrent(page.getPageSo().getPageNumber()); + res.setTotal(list.size()); + return res; + } + + private void fillFile(List list) { + List ids = list.stream().map(ProjectEventsVo::getId).map(Objects::toString).collect(Collectors.toList()); + List files = fileService.getFilesByIds(ids); + Map> map = files.stream().collect(Collectors.groupingBy(FileAssociations::getBusinessId)); + for (ProjectEventsVo vo : list){ + vo.setFiles(map.get(vo.getId().toString())); + } + } } diff --git a/src/main/java/com/gunshi/project/xyt/service/ReservoirWaterService.java b/src/main/java/com/gunshi/project/xyt/service/ReservoirWaterService.java index e96f5c9..1ac6666 100644 --- a/src/main/java/com/gunshi/project/xyt/service/ReservoirWaterService.java +++ b/src/main/java/com/gunshi/project/xyt/service/ReservoirWaterService.java @@ -182,7 +182,7 @@ public class ReservoirWaterService { //最新水位时间往前推24小时水位 LocalDateTime now = LocalDateTime.ofInstant(tm.toInstant(), ZoneId.systemDefault()); LocalDateTime dateTime = now.minusDays(1); - BigDecimal oldRz = attResBaseMapper.oldRz(stcd,Date.from(dateTime.atZone(ZoneId.systemDefault()).toInstant())); + BigDecimal oldRz = attResBaseMapper.oldRz(stcd,1,Date.from(dateTime.atZone(ZoneId.systemDefault()).toInstant())); if(oldRz == null){ return vo; diff --git a/src/main/java/com/gunshi/project/xyt/service/RiverWaterService.java b/src/main/java/com/gunshi/project/xyt/service/RiverWaterService.java new file mode 100644 index 0000000..4e9f362 --- /dev/null +++ b/src/main/java/com/gunshi/project/xyt/service/RiverWaterService.java @@ -0,0 +1,165 @@ +package com.gunshi.project.xyt.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.gunshi.project.xyt.entity.so.DataQueryCommonSo; +import com.gunshi.project.xyt.entity.vo.AttRvBaseVo; +import com.gunshi.project.xyt.entity.vo.AttRvMonitorDetailVo; +import com.gunshi.project.xyt.entity.vo.AttRvMonitorVo; +import com.gunshi.project.xyt.entity.vo.StPptnDetailsVo; +import com.gunshi.project.xyt.mapper.AttResBaseMapper; +import com.gunshi.project.xyt.mapper.StZqrlBMapper; +import com.gunshi.project.xyt.model.StZqrlB; +import com.gunshi.project.xyt.util.DataHandleUtil; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.*; +import java.util.stream.Collectors; + +/** + * Description: + * Created by wanyan on 2024/2/21 + * + * @author wanyan + * @version 1.0 + */ +@Service +@Slf4j +@Transactional(rollbackFor = Exception.class) +public class RiverWaterService { + + @Resource + private AttResBaseMapper attRvBaseMapper; + + @Resource + private StZqrlBMapper stZqrlBMapper; + + @Resource + private RainBasinDivisionService rainBasinDivisionService; + + public List list() { + List attRvBaseVos = attRvBaseMapper.queryWaterList(); + if(CollectionUtils.isEmpty(attRvBaseVos)){ + return attRvBaseVos; + } + return attRvBaseVos; + } + + public List zqrl(String stcd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); + queryWrapper.eq(StZqrlB::getStcd, stcd); + return stZqrlBMapper.selectList(queryWrapper); + } + + + public List monitorData(DataQueryCommonSo dataQueryCommonSo) { + String stcd = dataQueryCommonSo.getStcd(); + //雨量数据 + List drpData = attRvBaseMapper.drp(dataQueryCommonSo); + //水位数据 + List rzData = attRvBaseMapper.rz(dataQueryCommonSo); + //获取水位流量关系,算出转换流量 + List zqrl = zqrl(stcd); + if(CollectionUtils.isNotEmpty(zqrl)){ + calcTqData(rzData,zqrl); + } + //根据监测时间合并雨量和水位数据 + return bindData(stcd,drpData,rzData); + } + + private List bindData(String stcd, List drpData, List rzData) { + HashSet strings = new HashSet<>(); + drpData.stream().forEach(v1 -> strings.add(v1.getTm())); + rzData.stream().forEach(v1 -> strings.add(v1.getTm())); + + ArrayList result = new ArrayList<>(); + strings.stream().forEach(v1 -> result.add(AttRvMonitorVo.builder().stcd(stcd).tm(v1).build())); + + List list = result.stream().map(v1 -> { + drpData.stream().filter(v2 -> v1.getTm().equals(v2.getTm())).forEach(v2 -> { + v1.setDrp(v2.getDrp()); + }); + + rzData.stream().filter(v2 -> v1.getTm().equals(v2.getTm())).forEach(v2 -> { + v1.setZ(v2.getZ()); + v1.setQ(v2.getQ()); + v1.setTq(v2.getTq()); + }); + + return v1; + }).collect(Collectors.toList()); + return list.stream().sorted(Comparator.comparing(AttRvMonitorVo::getTm).reversed()).collect(Collectors.toList()); + } + + private void calcTqData(List rzData, List zqrl) { + BigDecimal maxRz = zqrl.stream().max(Comparator.comparing(StZqrlB::getZ)).get().getZ(); + BigDecimal minRz = zqrl.stream().min(Comparator.comparing(StZqrlB::getZ)).get().getZ(); + Map map = zqrl.stream().collect(Collectors.toMap(StZqrlB::getZ, StZqrlB::getQ)); + List list = zqrl.stream().map(StZqrlB::getZ).collect(Collectors.toList()); + for(AttRvMonitorVo vo : rzData){ + BigDecimal rz = vo.getZ(); + if(rz.compareTo(minRz) < 0 || rz.compareTo(maxRz) > 0){ + continue; + } + vo.setTq(DataHandleUtil.calcData(rz,map,list)); + } + } + + + public AttRvMonitorDetailVo detail(String stcd) { + AttRvMonitorDetailVo vo = new AttRvMonitorDetailVo(); + StPptnDetailsVo stPptnDetailsVo = rainBasinDivisionService.queryStPptnDetailsByStcd(stcd); + BeanUtils.copyProperties(stPptnDetailsVo,vo,AttRvMonitorDetailVo.class); + + //最新水位 + AttRvMonitorVo monitorVo = attRvBaseMapper.latestRz(stcd,2); + if(monitorVo == null){ + return vo; + } + Date tm = monitorVo.getTm(); + BigDecimal rz = monitorVo.getZ(); + + //最新水位时间往前推24小时水位 + LocalDateTime now = LocalDateTime.ofInstant(tm.toInstant(), ZoneId.systemDefault()); + LocalDateTime dateTime = now.minusDays(1); + BigDecimal oldRz = attRvBaseMapper.oldRz(stcd,2,Date.from(dateTime.atZone(ZoneId.systemDefault()).toInstant())); + + if(oldRz == null){ + return vo; + } + vo.setRzDiff(rz.subtract(oldRz)); + + //本年最高水位 + BigDecimal maxYearRz = queryYearRzByStcdAndTime(stcd); + vo.setMaxRz(maxYearRz); + return vo; + } + + private BigDecimal queryYearRzByStcdAndTime(String stcd) { + LocalDateTime now = LocalDateTime.ofInstant(new Date().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 attRvBaseMapper.queryMaxRzByStcdAndTime(stcd,Date.from(startTime.atZone(ZoneId.systemDefault()).toInstant()), Date.from(endTime.atZone(ZoneId.systemDefault()).toInstant())); + } + return new BigDecimal(0); + } + +} diff --git a/src/main/java/com/gunshi/project/xyt/service/StStbprpBService.java b/src/main/java/com/gunshi/project/xyt/service/StStbprpBService.java index 4693fc4..ed5d94a 100644 --- a/src/main/java/com/gunshi/project/xyt/service/StStbprpBService.java +++ b/src/main/java/com/gunshi/project/xyt/service/StStbprpBService.java @@ -109,6 +109,10 @@ public class StStbprpBService extends ServiceImpl res.setOffLine(offLineList.stream().sorted(Comparator.comparing(StStatusVo::getTm,Comparator.nullsFirst(String::compareTo)).reversed()).collect(Collectors.toList())); return res; } + + public List rainList() { + return this.baseMapper.realRainList(); + } } diff --git a/src/main/java/com/gunshi/project/xyt/util/DataHandleUtil.java b/src/main/java/com/gunshi/project/xyt/util/DataHandleUtil.java index 927efe7..c45f2ef 100644 --- a/src/main/java/com/gunshi/project/xyt/util/DataHandleUtil.java +++ b/src/main/java/com/gunshi/project/xyt/util/DataHandleUtil.java @@ -59,5 +59,24 @@ public class DataHandleUtil { return list2; } + public static List paginate(List list, int pageNumber, int pageSize) { + if (list == null || list.isEmpty()) { + return new ArrayList(); + } + + int totalSize = list.size(); + int fromIndex = (pageNumber - 1) * pageSize; + if (fromIndex >= totalSize || fromIndex < 0) { + return new ArrayList(); + } + + int toIndex = fromIndex + pageSize; + if (toIndex > totalSize) { + toIndex = totalSize; + } + + return list.subList(fromIndex, toIndex); + } + }