diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdEngMonitorController.java b/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdEngMonitorController.java index 3f2de614..f0bdbeb5 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdEngMonitorController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdEngMonitorController.java @@ -57,4 +57,10 @@ public class SdEngMonitorController { public ResponseResult getRsvrcscdBKendoList(@RequestBody DataSourceRequest dataSourceRequest) { return ResponseResult.successData(engInfoBHService.getRsvrcscdBKendoList(dataSourceRequest)); } + + @PostMapping("/rsvrcscdb/rvcd") + @Operation(summary = "查询梯级流域") + public ResponseResult getRsvrcscdBRvcdList(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(engInfoBHService.getRsvrcscdBRvcdList(dataSourceRequest)); + } } diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/domain/vo/EngRsvrcscdRvcdVo.java b/backend/src/main/java/com/yfd/platform/qgc_base/domain/vo/EngRsvrcscdRvcdVo.java new file mode 100644 index 00000000..64cfc865 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_base/domain/vo/EngRsvrcscdRvcdVo.java @@ -0,0 +1,16 @@ +package com.yfd.platform.qgc_base.domain.vo; + +import lombok.Data; + +@Data +public class EngRsvrcscdRvcdVo { + + private String wbsCode; + + private String wbsName; + + /** + * 旧口径对应上级/关联对象编码,新库这里映射为基地编码。 + */ + private String objId; +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdEngInfoBHService.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdEngInfoBHService.java index 73934b15..fbf4ea9a 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdEngInfoBHService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdEngInfoBHService.java @@ -10,6 +10,7 @@ import com.yfd.platform.qgc_base.domain.vo.EngBaseInfoVo; import com.yfd.platform.qgc_base.domain.vo.EngEiaapprovalVo; import com.yfd.platform.qgc_base.domain.vo.EngOperatVo; import com.yfd.platform.qgc_base.domain.vo.EngRsvrcscdBVo; +import com.yfd.platform.qgc_base.domain.vo.EngRsvrcscdRvcdVo; import com.yfd.platform.qgc_base.domain.vo.EngPointVo; import com.yfd.platform.qgc_base.domain.vo.EngStInfoResultVo; import com.yfd.platform.qgc_base.domain.vo.EngVmsstbprptVo; @@ -92,4 +93,6 @@ public interface ISdEngInfoBHService extends IService { DataSourceResult getEngPointKendoListCust(DataSourceRequest dataSourceRequest); DataSourceResult getRsvrcscdBKendoList(DataSourceRequest dataSourceRequest); + + DataSourceResult getRsvrcscdBRvcdList(DataSourceRequest dataSourceRequest); } diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdEngInfoBHServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdEngInfoBHServiceImpl.java index 47046c92..172bdadf 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdEngInfoBHServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdEngInfoBHServiceImpl.java @@ -28,6 +28,7 @@ import com.yfd.platform.qgc_base.domain.vo.EngBaseInfoVo; import com.yfd.platform.qgc_base.domain.vo.EngEiaapprovalVo; import com.yfd.platform.qgc_base.domain.vo.EngOperatVo; import com.yfd.platform.qgc_base.domain.vo.EngRsvrcscdBVo; +import com.yfd.platform.qgc_base.domain.vo.EngRsvrcscdRvcdVo; import com.yfd.platform.qgc_base.domain.vo.EngPointVo; import com.yfd.platform.qgc_base.domain.vo.EngStbprpDataVo; import com.yfd.platform.qgc_base.domain.vo.EngStBaseInfoVo; @@ -2983,6 +2984,32 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl getRsvrcscdBRvcdList(DataSourceRequest dataSourceRequest) { + DataSourceResult result = new DataSourceResult<>(); + result.setAggregates(new HashMap<>()); + + Map paramMap = new HashMap<>(); + StringBuilder sql = new StringBuilder(); + sql.append("SELECT DISTINCT ") + .append("dic.HBRVCD AS wbsCode, ") + .append("dic.HBRVNM AS wbsName, ") + .append("dic.BASEID AS objId ") + .append("FROM SD_HBRV_DIC dic ") + .append("INNER JOIN SD_RSVRCSCD_B r ON r.RVCD = dic.HBRVCD AND NVL(r.IS_DELETED, 0) = 0 ") + .append("WHERE NVL(dic.IS_DELETED, 0) = 0 ") + .append("AND NVL(dic.ENABLED, 1) = 1 "); + + appendRsvrcscdRvcdPresetFilters(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), sql, paramMap, new int[]{0}); + sql.append(" ORDER BY NVL(dic.BASEID, 'ZZZZZZZZ') ASC, NVL(dic.ORDER_INDEX, 999999) ASC, dic.HBRVCD ASC"); + + List list = microservicDynamicSQLMapper.getAllListWithResultType( + sql.toString(), paramMap, EngRsvrcscdRvcdVo.class); + result.setData(list); + result.setTotal(list.size()); + return result; + } + private String buildRsvrcscdBFilterCondition(DataSourceRequest.FilterDescriptor filter, Map paramMap, int[] indexHolder) { @@ -3123,4 +3150,125 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl paramMap, + int[] indexHolder) { + if (filter == null) { + return; + } + if (StringUtils.hasText(filter.getField())) { + String field = filter.getField(); + String operator = filter.getOperator() == null ? "eq" : filter.getOperator().toLowerCase(); + Object value = filter.getValue(); + if (!StringUtils.hasText(operator)) { + operator = "eq"; + } + if ("baseId".equals(field)) { + appendRsvrcscdRvcdLeafCondition(sql, "dic.BASEID", operator, value, paramMap, indexHolder); + return; + } + if ("treeLevel".equals(field)) { + appendRsvrcscdRvcdLeafCondition(sql, "dic.GRD", operator, value, paramMap, indexHolder); + return; + } + if ("wbsType".equals(field)) { + // 旧口径走 SD_WBS_B.WBS_TYPE,这里已固定替换成 SD_HBRV_DIC,保留参数但不参与过滤。 + return; + } + if ("wbsCode".equals(field)) { + appendRsvrcscdRvcdLeafCondition(sql, "dic.HBRVCD", operator, value, paramMap, indexHolder); + return; + } + if ("wbsName".equals(field)) { + appendRsvrcscdRvcdLeafCondition(sql, "dic.HBRVNM", operator, value, paramMap, indexHolder); + return; + } + return; + } + if (filter.getFilters() == null || filter.getFilters().isEmpty()) { + return; + } + for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) { + appendRsvrcscdRvcdPresetFilters(child, sql, paramMap, indexHolder); + } + } + + private void appendRsvrcscdRvcdLeafCondition(StringBuilder sql, + String column, + String operator, + Object value, + Map paramMap, + int[] indexHolder) { + if (!StringUtils.hasText(column)) { + return; + } + if ("isnull".equals(operator)) { + sql.append(" AND ").append(column).append(" IS NULL "); + return; + } + if ("isnotnull".equals(operator)) { + sql.append(" AND ").append(column).append(" IS NOT NULL "); + return; + } + if ("in".equals(operator)) { + List values = normalizeFilterValues(value); + if (values.isEmpty()) { + return; + } + List placeholders = new ArrayList<>(); + for (Object item : values) { + String key = "rsvrcdRvcdParam" + indexHolder[0]++; + paramMap.put(key, item); + placeholders.add("#{map." + key + "}"); + } + sql.append(" AND ").append(column).append(" IN (").append(String.join(", ", placeholders)).append(") "); + return; + } + if (value == null) { + return; + } + String key = "rsvrcdRvcdParam" + indexHolder[0]++; + switch (operator) { + case "eq" -> { + paramMap.put(key, value); + sql.append(" AND ").append(column).append(" = #{map.").append(key).append("} "); + } + case "neq" -> { + paramMap.put(key, value); + sql.append(" AND ").append(column).append(" <> #{map.").append(key).append("} "); + } + case "contains" -> { + paramMap.put(key, "%" + value + "%"); + sql.append(" AND ").append(column).append(" LIKE #{map.").append(key).append("} "); + } + case "startswith" -> { + paramMap.put(key, value + "%"); + sql.append(" AND ").append(column).append(" LIKE #{map.").append(key).append("} "); + } + case "endswith" -> { + paramMap.put(key, "%" + value); + sql.append(" AND ").append(column).append(" LIKE #{map.").append(key).append("} "); + } + case "gt" -> { + paramMap.put(key, value); + sql.append(" AND ").append(column).append(" > #{map.").append(key).append("} "); + } + case "gte" -> { + paramMap.put(key, value); + sql.append(" AND ").append(column).append(" >= #{map.").append(key).append("} "); + } + case "lt" -> { + paramMap.put(key, value); + sql.append(" AND ").append(column).append(" < #{map.").append(key).append("} "); + } + case "lte" -> { + paramMap.put(key, value); + sql.append(" AND ").append(column).append(" <= #{map.").append(key).append("} "); + } + default -> { + } + } + } }