fix: 优化报错

This commit is contained in:
tangwei 2026-08-11 10:33:04 +08:00
parent 11db0be292
commit d9cf63e993
2 changed files with 47 additions and 63 deletions

View File

@ -141,9 +141,6 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
@Resource @Resource
private IAdminAuthService adminAuthService; private IAdminAuthService adminAuthService;
@Resource
private com.yfd.platform.qgc_base.mapper.VMsStbprpTMapper vMsStbprpTMapper;
@Override @Override
public Page<SdEngInfoBH> queryPageList(Page<SdEngInfoBH> page, String ennm, String rvcd, String baseId, String hycd) { public Page<SdEngInfoBH> queryPageList(Page<SdEngInfoBH> page, String ennm, String rvcd, String baseId, String hycd) {
LambdaQueryWrapper<SdEngInfoBH> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<SdEngInfoBH> wrapper = new LambdaQueryWrapper<>();
@ -4095,18 +4092,31 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
return result; return result;
} }
// 从请求 filter 中提取 STTP 过滤条件用于限定站类范围 // 使用 buildFilterCondition 动态构建查询条件
// List<String> sttpCodes = extractSttpCodesFromRequest(dataSourceRequest); Map<String, Object> paramMap = new HashMap<>();
DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest(); String filterSql = QgcQueryWrapperUtil.buildFilterCondition(
String sttpCode = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "sttpCode"); dataSourceRequest.getFilter(),
if(StrUtil.isBlank(sttpCode)){ paramMap,
result.setData(new ArrayList<>()); new int[]{0},
result.setTotal(0L); this::mapVmsFilterColumn
return result; );
StringBuilder sql = new StringBuilder();
sql.append("SELECT STCD AS stcd, STNM AS stnm, ")
.append("STTP_CODE AS sttpCode, STTP_NAME AS sttpName, ")
.append("MWAY AS mway, RSTCD AS rstcd, ENNM AS ennm, ")
.append("BASE_ID AS baseId, BASE_NAME AS baseName, ")
.append("NVL(RSTCDSTEPSORT, 999999) AS rstcdStepSort, ")
.append("NVL(ORDER_INDEX, 999999) AS orderIndex, ")
.append("LGTD AS lgtd, LTTD AS lttd ")
.append("FROM V_MS_STBPRP_T ")
.append("WHERE NVL(IS_DELETED, 0) = 0");
if (StrUtil.isNotBlank(filterSql)) {
sql.append(" AND ").append(filterSql);
} }
// 查询 V_MS_STBPRP_T 视图 sql.append(" ORDER BY NVL(RSTCDSTEPSORT, 999999), NVL(ORDER_INDEX, 999999)");
List<StcdItemVo> allItems =
vMsStbprpTMapper.selectBySttpCodes(List.of(sttpCode)); List<StcdItemVo> allItems = microservicDynamicSQLMapper
.getAllListWithResultType(sql.toString(), paramMap, StcdItemVo.class);
if (CollUtil.isEmpty(allItems)) { if (CollUtil.isEmpty(allItems)) {
result.setData(new ArrayList<>()); result.setData(new ArrayList<>());
@ -4174,53 +4184,27 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
} }
/** /**
* DataSourceRequest filter 中提取 STTP 过滤码 * V_MS_STBPRP_T 视图字段映射前端字段名 数据库列名
*/ */
private List<String> extractSttpCodesFromRequest(DataSourceRequest request) { private String mapVmsFilterColumn(String field) {
if (request == null || request.getFilter() == null) { if (field == null) return null;
return null; return switch (field) {
} case "stcd" -> "STCD";
return extractSttpCodesFromFilter(request.getFilter()); case "stnm" -> "STNM";
} case "sttpCode", "sttp_code" -> "STTP_CODE";
case "sttpName", "sttp_name" -> "STTP_NAME";
private List<String> extractSttpCodesFromFilter(DataSourceRequest.FilterDescriptor filter) { case "mway" -> "MWAY";
if (filter == null) { case "rstcd" -> "RSTCD";
return null; case "ennm" -> "ENNM";
} case "baseId", "base_id" -> "BASE_ID";
// 叶子节点检查字段是否为 sttpCode case "baseName", "base_name" -> "BASE_NAME";
if (StrUtil.isNotBlank(filter.getField())) { case "fhstcd" -> "FHSTCD";
if ("sttpCode".equals(filter.getField()) || "sttp_code".equalsIgnoreCase(filter.getField())) { case "lgtd" -> "LGTD";
if ("in".equalsIgnoreCase(filter.getOperator())) { case "lttd" -> "LTTD";
Object val = filter.getValue(); case "orderIndex", "order_index" -> "ORDER_INDEX";
if (val instanceof List<?> list) { case "rstcdStepSort", "rstcdstepsort" -> "RSTCDSTEPSORT";
return list.stream() case "isDeleted", "is_deleted" -> "IS_DELETED";
.filter(Objects::nonNull) default -> null;
.map(Object::toString) };
.filter(StrUtil::isNotBlank)
.map(String::trim)
.collect(Collectors.toList());
}
if (val instanceof Object[] arr) {
return Arrays.stream(arr)
.filter(Objects::nonNull)
.map(Object::toString)
.filter(StrUtil::isNotBlank)
.map(String::trim)
.collect(Collectors.toList());
}
}
}
return null;
}
// 递归子节点
if (CollUtil.isNotEmpty(filter.getFilters())) {
for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) {
List<String> codes = extractSttpCodesFromFilter(child);
if (codes != null) {
return codes;
}
}
}
return null;
} }
} }

View File

@ -3375,7 +3375,7 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService {
// 前端排序 // 前端排序
List<DataSourceRequest.SortDescriptor> sort = dataSourceRequest.getSort(); List<DataSourceRequest.SortDescriptor> sort = dataSourceRequest.getSort();
if (sort != null && !sort.isEmpty()) { if (sort != null && !sort.isEmpty()) {
sql.append(") ORDER BY "); sql.append(") WHERE ROWNUM = 1 ORDER BY ");
for (int i = 0; i < sort.size(); i++) { for (int i = 0; i < sort.size(); i++) {
sql.append(sort.get(i).getField()).append(" ").append(sort.get(i).getDir()); sql.append(sort.get(i).getField()).append(" ").append(sort.get(i).getDir());
if (i < sort.size() - 1) { if (i < sort.size() - 1) {
@ -3385,7 +3385,7 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService {
} else { } else {
sql.append(")"); sql.append(")");
} }
sql.append(" WHERE ROWNUM = 1");
List<WtrvDefaultStcdVo> dataList = microservicDynamicSQLMapper List<WtrvDefaultStcdVo> dataList = microservicDynamicSQLMapper
.pageAllListWithResultType(null, sql.toString(), null, WtrvDefaultStcdVo.class); .pageAllListWithResultType(null, sql.toString(), null, WtrvDefaultStcdVo.class);