diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/wt/controller/SdWTMonitorController.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/controller/SdWTMonitorController.java index f48b8d2c..8f521bb6 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/wt/controller/SdWTMonitorController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/controller/SdWTMonitorController.java @@ -339,4 +339,10 @@ public class SdWTMonitorController { public ResponseResult getWtrvDefaultStcd(@RequestBody DataSourceRequest dataSourceRequest) { return ResponseResult.successData(sdWtMonitorService.getDefaultStcd(dataSourceRequest)); } + + @PostMapping("/wtrv/GetKendoListCust") + @Operation(summary = "监测点水温变化(当前时段 + 去年同期对比)") + public ResponseResult getWtrvKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(sdWtMonitorService.getWtRV(dataSourceRequest)); + } } diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/WtrvVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/WtrvVo.java index 0324eb4c..1666c325 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/WtrvVo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/WtrvVo.java @@ -1,28 +1,38 @@ package com.yfd.platform.qgc_env.wt.entity.vo; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.math.BigDecimal; import java.util.Date; +/** + * 监测点水温变化数据 VO(当前水温 + 去年同期月均/最高/最低对比) + */ @Data +@Schema(description = "监测点水温变化数据") public class WtrvVo { + @Schema(description = "测站编码") private String stcd; + @Schema(description = "数据时间") private Date tm; -// private Boolean isIoWtrv; - - private Boolean ioWtrv; - - private Boolean hasRstcdWtvt; - + @Schema(description = "水温") private BigDecimal wt; - private BigDecimal avgwt; - + @Schema(description = "去年同期最低水温") private BigDecimal minwt; + @Schema(description = "去年同期最高水温") private BigDecimal maxwt; + + @Schema(description = "去年同期平均水温") + private BigDecimal avgwt; + + @Schema(description = "是否是出入库水温站") + private boolean isIoWtrv;//是否是出入库水温站 + @Schema(description = "关联的电站是否有垂向水温站") + private boolean hasRstcdWtvt;//关联的电站是否有垂向水温站 } diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/SdWtMonitorService.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/SdWtMonitorService.java index d7ebd7f6..540ccefb 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/SdWtMonitorService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/SdWtMonitorService.java @@ -62,4 +62,9 @@ public interface SdWtMonitorService { * 获取监测点水温变化默认有数据的断面 */ DataSourceResult getDefaultStcd(DataSourceRequest dataSourceRequest); + + /** + * 获取监测点水温变化数据(当前时段 + 去年同期对比) + */ + DataSourceResult getWtRV(DataSourceRequest dataSourceRequest); } diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/SdWtMonitorServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/SdWtMonitorServiceImpl.java index 3abd3358..0b5d9ac6 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/SdWtMonitorServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/SdWtMonitorServiceImpl.java @@ -1,5 +1,8 @@ package com.yfd.platform.qgc_env.wt.service.impl; +import cn.hutool.core.date.DateField; +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -3098,6 +3101,85 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService { }; } + @Override + public DataSourceResult getWtRV(DataSourceRequest dataSourceRequest) { + DataSourceResult result = new DataSourceResult<>(); + result.setAggregates(new HashMap<>()); + + if (dataSourceRequest == null) { + result.setData(new ArrayList<>()); + result.setTotal(0L); + return result; + } + + DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest(); + String tm = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "tm"); + String stcd = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "stcd"); + + if (StrUtil.isBlank(tm) || StrUtil.isBlank(stcd)) { + result.setData(new ArrayList<>()); + result.setTotal(0L); + return result; + } + + // 解析时间范围(逗号分隔:startTime,endTime) + String[] tmList = tm.split(","); + String startTime = tmList[0]; + String endTime = tmList[1]; + + DateTime startDate = DateUtil.parse(startTime, DatePattern.NORM_DATETIME_PATTERN); + DateTime endDate = DateUtil.parse(endTime, DatePattern.NORM_DATETIME_PATTERN); + String startTimeFormatted = DateUtil.format(startDate, DatePattern.NORM_DATETIME_PATTERN); + String endTimeFormatted = DateUtil.format(endDate, DatePattern.NORM_DATETIME_PATTERN); + + // 去年同期时间范围(-12个月) + String lastYearStartTime = DateUtil.offset(startDate, DateField.MONTH, -12).toString(); + String lastYearEndTime = DateUtil.offset(endDate, DateField.MONTH, -12).toString(); + + Map paramMap = new HashMap<>(); + paramMap.put("stcd", stcd); + paramMap.put("startTime", startTimeFormatted); + paramMap.put("endTime", endTimeFormatted); + paramMap.put("lastYearStartTime", lastYearStartTime); + paramMap.put("lastYearEndTime", lastYearEndTime); + + String sql = "SELECT " + + "t1.STCD AS stcd, " + + "t1.TM AS tm, " + + "t1.WT AS wt, " + + "t2.MINWT AS minwt, " + + "t2.MAXWT AS maxwt, " + + "t2.AVGWT AS avgwt " + + "FROM SD_WTRV_R t1 " + + "LEFT JOIN ( " + + " SELECT " + + " TO_CHAR(TM, 'YYYY') AS YEAR, " + + " TO_CHAR(TM, 'MM') AS MON, " + + " ROUND(AVG(WT), 2) AS AVGWT, " + + " MAX(WT) AS MAXWT, " + + " MIN(WT) AS MINWT " + + " FROM SD_WTRV_R " + + " WHERE STCD = #{map.stcd} " + + " AND NVL(IS_DELETED, 0) = 0 " + + " AND TM >= TO_TIMESTAMP(#{map.lastYearStartTime}, 'YYYY-MM-DD HH24:MI:SS') " + + " AND TM <= TO_TIMESTAMP(#{map.lastYearEndTime}, 'YYYY-MM-DD HH24:MI:SS') " + + " GROUP BY TO_CHAR(TM, 'YYYY'), TO_CHAR(TM, 'MM') " + + ") t2 ON TO_CHAR(ADD_MONTHS(t1.TM, -12), 'YYYY') = t2.YEAR " + + " AND TO_CHAR(t1.TM, 'MM') = t2.MON " + + "WHERE t1.STCD = #{map.stcd} " + + " AND NVL(t1.IS_DELETED, 0) = 0 " + + " AND t1.TM >= TO_TIMESTAMP(#{map.startTime}, 'YYYY-MM-DD HH24:MI:SS') " + + " AND t1.TM <= TO_TIMESTAMP(#{map.endTime}, 'YYYY-MM-DD HH24:MI:SS') " + + "ORDER BY t1.TM"; + + List dataList = microservicDynamicSQLMapper + .pageAllListWithResultType(null, sql, paramMap, WtrvVo.class); + + result.setData(dataList); + result.setTotal(dataList != null ? dataList.size() : 0L); + return result; + } + @Override public DataSourceResult getDefaultStcd(DataSourceRequest dataSourceRequest) { DataSourceResult result = new DataSourceResult();