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

View File

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