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 8f521bb6..65bf1e58 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 @@ -334,6 +334,12 @@ public class SdWTMonitorController { return ResponseResult.successData(sdWtMonitorService.getEngTempPointListKendoListCust(dataSourceRequest)); } + @PostMapping("/sdrvwts/default/stcd") + @Operation(summary = "查询水温指定时间有数据的站点(垂向水温)") + public ResponseResult getSdrvwtsDefaultStcd(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(sdWtMonitorService.getWtvtDefaultStcd(dataSourceRequest)); + } + @PostMapping("/wtrv/default/stcd") @Operation(summary = "获取监测点水温变化默认有数据的断面") public ResponseResult getWtrvDefaultStcd(@RequestBody DataSourceRequest dataSourceRequest) { diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/WtvtDefaultStcdVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/WtvtDefaultStcdVo.java new file mode 100644 index 00000000..2ce513cd --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/WtvtDefaultStcdVo.java @@ -0,0 +1,44 @@ +package com.yfd.platform.qgc_env.wt.entity.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * 垂向水温默认有数据的站点 VO + */ +@Data +@Schema(description = "垂向水温默认站点信息") +public class WtvtDefaultStcdVo implements Serializable { + + private static final long serialVersionUID = 1L; + + @Schema(description = "站码") + private String stcd; + + @Schema(description = "站名") + private String stnm; + + @Schema(description = "经度") + private BigDecimal lgtd; + + @Schema(description = "纬度") + private BigDecimal lttd; + + @Schema(description = "水温监测断面设备类型:1=浮动式 2=固定式") + private Integer wtDeviceType; + + @Schema(description = "所属基地编码") + private String baseId; + + @Schema(description = "基地排序") + private Integer baseStepSort; + + @Schema(description = "站点排序") + private Integer siteStepSort; + + @Schema(description = "电站排序") + private Integer rstcdStepSort; +} 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 540ccefb..badd4c3f 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 @@ -9,6 +9,7 @@ import com.yfd.platform.qgc_env.wt.entity.vo.SdMonthDetailVO; import com.yfd.platform.qgc_env.wt.entity.vo.SdYearDetailVO; import com.yfd.platform.qgc_env.wt.entity.vo.SttpInfoVo; import com.yfd.platform.qgc_env.wt.entity.vo.WbsbVo; +import com.yfd.platform.qgc_env.wt.entity.vo.WtvtDefaultStcdVo; import com.yfd.platform.qgc_env.wt.entity.vo.WtBaseInfoVo; import com.yfd.platform.qgc_env.wt.entity.vo.WtrvAmendSaveVo; import com.yfd.platform.qgc_env.wt.entity.vo.WtrvVo; @@ -58,6 +59,11 @@ public interface SdWtMonitorService { DataSourceResult getEngTempPointListKendoListCust(DataSourceRequest dataSourceRequest); + /** + * 查询水温指定时间有数据的站点(垂向水温) + */ + List getWtvtDefaultStcd(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 0b5d9ac6..c4f98b49 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 @@ -3101,6 +3101,133 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService { }; } + @Override + public List getWtvtDefaultStcd(DataSourceRequest dataSourceRequest) { + if (dataSourceRequest == null) { + return new ArrayList<>(); + } + + DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest(); + String tm = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "tm"); + String mway = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "mway"); + String baseId = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "baseId"); + String rstcd = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "rstcd"); + String year = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "year"); + + Map paramMap = new HashMap<>(); + StringBuilder sql = new StringBuilder(); + + if (StrUtil.isNotBlank(year)) { + // ==================== 电站专题-垂向水温 ==================== + sql.append("SELECT t1.STCD AS stcd, t1.STNM AS stnm, ") + .append("t1.LGTD AS lgtd, t1.LTTD AS lttd, ") + .append("sb.WT_DEVICE_TYPE AS wtDeviceType ") + .append("FROM V_MS_STBPRP_T t1 ") + .append("INNER JOIN SD_WTVTDRTP_S t2 ON t1.STCD = t2.STCD ") + .append("LEFT JOIN SD_WT_B_H sb ON t1.STCD = sb.STCD ") + .append("WHERE t1.STTP_CODE = 'WTVT' AND t1.USFL = 1 ") + .append("AND t2.WTHG IS NOT NULL AND t2.VWT IS NOT NULL ") + .append("AND NVL(t2.IS_DELETED, 0) = 0 ") + .append("AND t2.DRTP = 'YEAR' ") + .append("AND t2.YEAR = #{map.year} "); + paramMap.put("year", year); + + if (StrUtil.isNotBlank(mway)) { + sql.append("AND t1.MWAY = #{map.mway} "); + paramMap.put("mway", mway); + } + if (StrUtil.isNotBlank(baseId)) { + sql.append("AND t1.BASE_ID = #{map.baseId} "); + paramMap.put("baseId", baseId); + } + if (StrUtil.isNotBlank(rstcd)) { + sql.append("AND t1.RSTCD = #{map.rstcd} "); + paramMap.put("rstcd", rstcd); + } + + sql.append("GROUP BY t1.STCD, t1.STNM, t1.LTTD, t1.LGTD, sb.WT_DEVICE_TYPE"); + + return microservicDynamicSQLMapper.getAllListWithResultType( + sql.toString(), paramMap, WtvtDefaultStcdVo.class); + + } else { + // ==================== 水温管理-垂向水温 ==================== + // 查询有数据的垂向水温测站(年度维度) + List hasDataWtvtList = new ArrayList<>(); + String dataSql = "SELECT DISTINCT STCD FROM SD_WTVTDRTP_S " + + "WHERE DRTP = 'YEAR' AND NVL(IS_DELETED, 0) = 0 " + + "AND VWT IS NOT NULL AND WTHG IS NOT NULL"; + List> wtvtList = microservicDynamicSQLMapper.getAllList(dataSql, null); + if (wtvtList != null && !wtvtList.isEmpty()) { + for (Map row : wtvtList) { + Object stcdObj = row.get("STCD"); + if (stcdObj != null) { + hasDataWtvtList.add(String.valueOf(stcdObj)); + } + } + } + if (hasDataWtvtList.isEmpty()) { + return new ArrayList<>(); + } + + // 解析时间范围 + String startTime = ""; + String endTime = ""; + if (StrUtil.isNotBlank(tm)) { + String[] tmList = tm.split(","); + startTime = tmList[0]; + endTime = tmList[1]; + } + + sql.append("SELECT * FROM ( "); + sql.append("SELECT t1.STCD AS stcd, t1.STNM AS stnm, ") + .append("t1.LGTD AS lgtd, t1.LTTD AS lttd, ") + .append("t1.BASE_ID AS baseId, t1.BASESTEPSORT AS baseStepSort, ") + .append("t1.SITESTEPSORT AS siteStepSort, t1.rstcdStepSort AS rstcdStepSort, ") + .append("sb.WT_DEVICE_TYPE AS wtDeviceType, ") + .append("CASE WHEN t3.SORT IS NULL THEN -1 ELSE t3.SORT END AS SORT ") + .append("FROM V_MS_STBPRP_T t1 ") + .append("LEFT JOIN (SELECT DISTINCT STCD, 1 AS SORT FROM SD_WTVTDAY_S "); + if (StrUtil.isNotBlank(startTime)) { + sql.append("WHERE DT >= TO_TIMESTAMP(#{map.startTime}, 'YYYY-MM-DD HH24:MI:SS') ") + .append("AND DT <= TO_TIMESTAMP(#{map.endTime}, 'YYYY-MM-DD HH24:MI:SS') ") + .append("AND NVL(IS_DELETED, 0) = 0 "); + paramMap.put("startTime", startTime); + paramMap.put("endTime", endTime); + } else { + sql.append("WHERE NVL(IS_DELETED, 0) = 0 "); + } + sql.append(") t3 ON t1.STCD = t3.STCD ") + .append("LEFT JOIN SD_WT_B_H sb ON t1.STCD = sb.STCD ") + .append("WHERE t1.STTP_CODE = 'WTVT' AND t1.USFL = 1 "); + + if (StrUtil.isNotBlank(mway)) { + sql.append("AND t1.MWAY = #{map.mway} "); + paramMap.put("mway", mway); + } + if (StrUtil.isNotBlank(baseId)) { + sql.append("AND t1.BASE_ID = #{map.baseId} "); + paramMap.put("baseId", baseId); + } + + sql.append("GROUP BY t1.STCD, t1.STNM, t1.LTTD, t1.LGTD, t1.BASE_ID, ") + .append("t1.BASESTEPSORT, t1.SITESTEPSORT, t1.rstcdStepSort, t3.SORT, sb.WT_DEVICE_TYPE "); + sql.append(") ORDER BY baseStepSort ASC, rstcdStepSort ASC, siteStepSort ASC, SORT DESC"); + + List resultList = microservicDynamicSQLMapper + .getAllListWithResultType(sql.toString(), paramMap, WtvtDefaultStcdVo.class); + + // 用 hasDataWtvtList 过滤有数据的测站 + if (resultList != null) { + resultList = resultList.stream() + .filter(vo -> hasDataWtvtList.contains(vo.getStcd())) + .collect(java.util.stream.Collectors.toList()); + } + + return resultList != null ? resultList : new ArrayList<>(); + } + } + @Override public DataSourceResult getWtRV(DataSourceRequest dataSourceRequest) { DataSourceResult result = new DataSourceResult<>();