feat: 根据条件查询水温基础站点列表

This commit is contained in:
tangwei 2026-05-29 08:18:24 +08:00
parent 0715616e5f
commit 704a9c3ff2
4 changed files with 171 additions and 2 deletions

View File

@ -191,6 +191,12 @@ public class SdWTMonitorController {
return ResponseResult.successData(sdWtMonitorService.getVmsstbprptList(dataSourceRequest));
}
@PostMapping("/msstbprpt/GetKendoList")
@Operation(summary = "根据条件查询水温基础站点列表")
public ResponseResult getMsstbprptList(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(sdWtMonitorService.getMsstbprptList(dataSourceRequest));
}
@GetMapping("/msstbprpt/getStcdInfo")
@Operation(summary = "根据站码查询单条水温基础数据")
public ResponseResult getStcdInfo(@RequestParam String stcd) {

View File

@ -68,6 +68,9 @@ public class SdWtBaseInfoVO implements Serializable {
@Schema(description = "站码")
private String stcd;
@Schema(description = "所属栖息地编码")
private String fhstcd;
@Schema(description = "所属电站编码")
private String rstcd;

View File

@ -20,6 +20,8 @@ public interface SdWtMonitorService {
DataSourceResult getVmsstbprptList(DataSourceRequest dataSourceRequest);
DataSourceResult getMsstbprptList(DataSourceRequest dataSourceRequest);
WtBaseInfoVo getStcdInfo(String stcd);
DataSourceResult getCxDetailList(DataSourceRequest dataSourceRequest);

View File

@ -842,6 +842,37 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService {
return result;
}
@Override
public DataSourceResult getMsstbprptList(DataSourceRequest dataSourceRequest) {
List<String> selectFields = dataSourceRequest == null ? null : dataSourceRequest.getSelect();
String selectSql = buildWtMsstbprptSelectSql(selectFields);
StringBuilder sql = new StringBuilder();
sql.append("SELECT ").append(selectSql).append(" ")
.append("FROM SD_WT_B_H wt ")
.append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = wt.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 ")
.append("LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 ")
.append("LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD AND hbrv.BASEID = eng.BASE_ID AND NVL(hbrv.IS_DELETED, 0) = 0 ")
.append("LEFT JOIN SD_STTP_B sttp ON sttp.STTP_CODE = wt.STTP AND NVL(sttp.IS_DELETED, 0) = 0 ")
.append("LEFT JOIN (SELECT DISTINCT STCD FROM SD_WTRV_R WHERE IS_DELETED = 0 AND TM >= SYSDATE - 1) rvRecent ON rvRecent.STCD = wt.STCD ")
.append("LEFT JOIN (SELECT DISTINCT STCD FROM SD_WTVT_R WHERE IS_DELETED = 0 AND TM >= SYSDATE - 1) vtRecent ON vtRecent.STCD = wt.STCD ")
.append("WHERE NVL(wt.IS_DELETED, 0) = 0 AND NVL(wt.DTIN_TYPE, 0) = 0 ");
Map<String, Object> paramMap = new HashMap<>();
appendWtMsstbprptFilters(sql, paramMap, dataSourceRequest == null ? null : dataSourceRequest.getFilter());
sql.append(buildVmsstbprptOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort()));
DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest();
Page<?> page = QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
List<SdWtBaseInfoVO> list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, SdWtBaseInfoVO.class);
DataSourceResult<SdWtBaseInfoVO> result = new DataSourceResult<>();
result.setData(list);
result.setTotal(page != null ? page.getTotal() : list.size());
result.setAggregates(new HashMap<>());
return result;
}
@Override
public DataSourceResult getCxDetailList(DataSourceRequest dataSourceRequest) {
List<DataSourceRequest.FilterDescriptor> filters = new ArrayList<>();
@ -1889,7 +1920,7 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService {
} else if ("hbrvcd".equals(field)) {
orderColumns.add("NVL(hbrvcd, '~') " + dir);
} else if ("rstcdStepSort".equals(field)) {
orderColumns.add("NVL(rstcdStepSort, 999999) " + dir);
// orderColumns.add("NVL(rstcdStepSort, 999999) " + dir);
} else if ("siteStepSort".equals(field)) {
orderColumns.add("NVL(siteStepSort, 999999) " + dir);
} else if ("stnm".equals(field)) {
@ -1902,11 +1933,138 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService {
}
}
if (orderColumns.isEmpty()) {
return " ORDER BY NVL(baseStepSort, 999999) ASC, NVL(rstcdStepSort, 999999) ASC";
return "";
// return " ORDER BY NVL(baseStepSort, 999999) ASC, NVL(rstcdStepSort, 999999) ASC";
}
return " ORDER BY " + String.join(", ", orderColumns);
}
private String buildWtMsstbprptSelectSql(List<String> selectFields) {
Map<String, String> columnMap = new LinkedHashMap<>();
columnMap.put("baseName", "hb.BASENAME AS baseName");
columnMap.put("baseId", "hb.BASEID AS baseId");
columnMap.put("baseStepSort", "hb.ORDER_INDEX AS baseStepSort");
columnMap.put("rvcdStepSort", "NVL(hbrv.ORDER_INDEX, 999999) AS rvcdStepSort");
columnMap.put("rstcdStepSort", "eng.ORDER_INDEX AS rstcdStepSort");
columnMap.put("siteStepSort", "wt.ORDER_INDEX AS siteStepSort");
columnMap.put("stnm", "wt.STNM AS stnm");
columnMap.put("ennm", "eng.ENNM AS ennm");
columnMap.put("jcdt", "wt.JCDT AS jcdt");
columnMap.put("stindx", "wt.STINDX AS stindx");
columnMap.put("coenvwState", "CASE WHEN wt.STTP = 'WTRV' AND rvRecent.STCD IS NOT NULL THEN 1 WHEN wt.STTP = 'WTVT' AND vtRecent.STCD IS NOT NULL THEN 1 ELSE 0 END AS coenvwState");
columnMap.put("sttpCode", "wt.STTP AS sttpCode");
columnMap.put("sttpName", "sttp.STTP_NAME AS sttpName");
columnMap.put("sttpFullPath", "sttp.FULL_PATH AS sttpFullPath");
columnMap.put("stcd", "wt.STCD AS stcd");
columnMap.put("fhstcd", "wt.FHSTCD AS fhstcd");
columnMap.put("rstcd", "wt.RSTCD AS rstcd");
columnMap.put("bldsttCcodeName", "CASE WHEN wt.BLDSTT_CODE IN ('1', '10', '11') THEN '已建' WHEN wt.BLDSTT_CODE IN ('2', '7', '8') THEN '在建' ELSE '未建/规划' END AS bldsttCcodeName");
columnMap.put("bldsttCcode", "wt.BLDSTT_CODE AS bldsttCcode");
columnMap.put("stCode", "NULL AS stCode");
columnMap.put("stName", "NULL AS stName");
columnMap.put("dvtp", "eng.DVTP AS dvtp");
columnMap.put("hbrvcd", "eng.HBRVCD AS hbrvcd");
List<String> actualColumns = new ArrayList<>();
if (selectFields != null && !selectFields.isEmpty()) {
for (String field : selectFields) {
String column = columnMap.get(field);
if (StrUtil.isNotBlank(column)) {
actualColumns.add(column);
}
}
}
if (actualColumns.isEmpty()) {
actualColumns.addAll(columnMap.values());
}
return String.join(", ", actualColumns);
}
private void appendWtMsstbprptFilters(StringBuilder sql,
Map<String, Object> paramMap,
DataSourceRequest.FilterDescriptor filter) {
List<DataSourceRequest.FilterDescriptor> filters = new ArrayList<>();
collectFilters(filter, filters);
for (DataSourceRequest.FilterDescriptor descriptor : filters) {
String field = descriptor.getField();
String operator = descriptor.getOperator();
Object value = descriptor.getValue();
if (StrUtil.isBlank(field) || StrUtil.isBlank(operator)) {
continue;
}
String paramKey = "wtMsst_" + field + "_" + paramMap.size();
if ("fhstcd".equals(field)) {
appendWtMsstbprptLeaf(sql, paramMap, paramKey, "wt.FHSTCD", operator, value);
} else if ("sttpCode".equals(field)) {
appendWtMsstbprptLeaf(sql, paramMap, paramKey, "wt.STTP", operator, value);
} else if ("stcd".equals(field)) {
appendWtMsstbprptLeaf(sql, paramMap, paramKey, "wt.STCD", operator, value);
} else if ("stnm".equals(field)) {
appendWtMsstbprptLeaf(sql, paramMap, paramKey, "wt.STNM", operator, value);
} else if ("rstcd".equals(field)) {
appendWtMsstbprptLeaf(sql, paramMap, paramKey, "wt.RSTCD", operator, value);
} else if ("baseId".equals(field)) {
appendWtMsstbprptLeaf(sql, paramMap, paramKey, "eng.BASE_ID", operator, value);
} else if ("mway".equals(field)) {
appendWtMsstbprptLeaf(sql, paramMap, paramKey, "wt.MWAY", operator, value);
} else if ("dtin".equals(field)) {
appendWtMsstbprptLeaf(sql, paramMap, paramKey, "wt.DTIN", operator, value);
} else if ("bldsttCcode".equals(field)) {
appendWtMsstbprptLeaf(sql, paramMap, paramKey, "wt.BLDSTT_CODE", operator, value);
}
}
}
private void appendWtMsstbprptLeaf(StringBuilder sql,
Map<String, Object> paramMap,
String paramKey,
String column,
String operator,
Object value) {
switch (operator) {
case "eq":
sql.append("AND ").append(column).append(" = #{map.").append(paramKey).append("} ");
paramMap.put(paramKey, value);
break;
case "neq":
sql.append("AND ").append(column).append(" <> #{map.").append(paramKey).append("} ");
paramMap.put(paramKey, value);
break;
case "contains":
sql.append("AND ").append(column).append(" LIKE #{map.").append(paramKey).append("} ");
paramMap.put(paramKey, "%" + value + "%");
break;
case "startswith":
sql.append("AND ").append(column).append(" LIKE #{map.").append(paramKey).append("} ");
paramMap.put(paramKey, value + "%");
break;
case "endswith":
sql.append("AND ").append(column).append(" LIKE #{map.").append(paramKey).append("} ");
paramMap.put(paramKey, "%" + value);
break;
case "in":
if (value instanceof List && !((List<?>) value).isEmpty()) {
List<?> values = (List<?>) value;
List<String> placeholders = new ArrayList<>();
for (int i = 0; i < values.size(); i++) {
String itemKey = paramKey + "_" + i;
placeholders.add("#{map." + itemKey + "}");
paramMap.put(itemKey, values.get(i));
}
sql.append("AND ").append(column).append(" IN (").append(String.join(", ", placeholders)).append(") ");
}
break;
case "isnull":
sql.append("AND ").append(column).append(" IS NULL ");
break;
case "isnotnull":
sql.append("AND ").append(column).append(" IS NOT NULL ");
break;
default:
break;
}
}
private void collectFilters(DataSourceRequest.FilterDescriptor filter, List<DataSourceRequest.FilterDescriptor> result) {
if (filter == null) {
return;