fix: 查询水温指定时间有数据的站点

This commit is contained in:
tangwei 2026-08-11 09:42:53 +08:00
parent 13d0c52a84
commit 5073285d73
4 changed files with 183 additions and 0 deletions

View File

@ -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) {

View File

@ -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;
}

View File

@ -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<WaterTempMapVO> getEngTempPointListKendoListCust(DataSourceRequest dataSourceRequest);
/**
* 查询水温指定时间有数据的站点垂向水温
*/
List<WtvtDefaultStcdVo> getWtvtDefaultStcd(DataSourceRequest dataSourceRequest);
/**
* 获取监测点水温变化默认有数据的断面
*/

View File

@ -3101,6 +3101,133 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService {
};
}
@Override
public List<WtvtDefaultStcdVo> 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<String, Object> 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<String> 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<Map<String, Object>> wtvtList = microservicDynamicSQLMapper.getAllList(dataSql, null);
if (wtvtList != null && !wtvtList.isEmpty()) {
for (Map<String, Object> 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<WtvtDefaultStcdVo> 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<WtrvVo> result = new DataSourceResult<>();