From 7695bc0c126ef1a3fbd5306e07109f1322193ad5 Mon Sep 17 00:00:00 2001 From: tangwei Date: Wed, 12 Aug 2026 10:36:23 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=94=B5=E7=AB=99=E4=B8=9A=E5=8A=A1?= =?UTF-8?q?=E7=BB=93=E6=9E=9C=E6=95=B0=E6=8D=AE=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eq/controller/EngEqDataController.java | 6 + .../qgc_eng/eq/service/EngEqDataService.java | 27 +- .../eq/service/impl/EngEqDataServiceImpl.java | 334 ++++++++++++++++++ .../fp/service/impl/FpRunServiceImpl.java | 52 ++- 4 files changed, 385 insertions(+), 34 deletions(-) diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/controller/EngEqDataController.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/controller/EngEqDataController.java index 1773f5d0..ea68c002 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/controller/EngEqDataController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/controller/EngEqDataController.java @@ -187,4 +187,10 @@ public class EngEqDataController { public ResponseResult getEqdsKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { return ResponseResult.successData(engEqDataService.getEqdsKendoListCust(dataSourceRequest)); } + + @PostMapping("/GetKendoListCust") + @Operation(summary = "电站业务结果数据查询(MS_ENG_T + V_MS_STBPRP_T)") + public ResponseResult getMsEngKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(engEqDataService.getMsEngKendoList(dataSourceRequest)); + } } diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/EngEqDataService.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/EngEqDataService.java index 6dbcc43f..54caab7b 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/EngEqDataService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/EngEqDataService.java @@ -2,26 +2,7 @@ package com.yfd.platform.qgc_eng.eq.service; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceResult; -import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqBaseMsstbprptVo; -import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqBaseVmsstbprptVo; -import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqDayDataVo; -import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqDrtpDataVo; -import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqDayIntervalVo; -import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqdsVo; -import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqHourIntervalVo; -import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqIntervalVo; -import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqLimitQueryVo; -import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqLimitVo; -import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqMsstbprptVo; -import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqRuleVo; -import com.yfd.platform.qgc_eng.eq.entity.vo.EngQecAlongVo; -import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqRateCountVo; -import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqVmsstbprptVo; -import com.yfd.platform.qgc_eng.eq.entity.vo.QgcQecStaticVo; -import com.yfd.platform.qgc_eng.eq.entity.vo.SdEqMonitorCountVo; -import com.yfd.platform.qgc_eng.eq.entity.vo.StBaseInfo; -import com.yfd.platform.qgc_eng.eq.entity.vo.StcdInfoVo; -import com.yfd.platform.qgc_eng.eq.entity.vo.WbsbVo; +import com.yfd.platform.qgc_eng.eq.entity.vo.*; import java.util.List; import java.util.Map; @@ -89,4 +70,10 @@ public interface EngEqDataService { StcdInfoVo getStInfoByStcd(String stcd); DataSourceResult getEqdsKendoListCust(DataSourceRequest dataSourceRequest); + + /** + * 查询 MS_ENG_T 电站业务结果数据(支持动态过滤、排序、分组) + *

对应旧系统 EngEqController.getKendoListCust

+ */ + DataSourceResult getMsEngKendoList(DataSourceRequest dataSourceRequest); } diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/impl/EngEqDataServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/impl/EngEqDataServiceImpl.java index 6f7d0543..b7676e03 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/impl/EngEqDataServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/impl/EngEqDataServiceImpl.java @@ -6337,4 +6337,338 @@ public class EngEqDataServiceImpl implements EngEqDataService { .append(String.join(", ", placeholders)) .append(") "); } + + // ==================== MS_ENG_T 电站业务结果查询 ==================== + + @Override + public DataSourceResult getMsEngKendoList(DataSourceRequest dataSourceRequest) { + DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); + if (CollUtil.isEmpty(dataSourceRequest == null ? null : dataSourceRequest.getGroup())) { + return queryMsEngDetailList(dataSourceRequest, loadOptions); + } + return queryMsEngGroupList(dataSourceRequest, loadOptions); + } + + private DataSourceResult queryMsEngDetailList(DataSourceRequest dataSourceRequest, + DataSourceLoadOptionsBase loadOptions) { + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append(buildMsEngDetailSelectSql(dataSourceRequest == null ? null : dataSourceRequest.getSelect())) + .append(" ") + .append(buildMsEngViewSql()) + .append(" WHERE NVL(MET.IS_DELETED, 0) = 0 "); + + Map paramMap = new HashMap<>(); + String filterSql = buildMsEngFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0}); + if (StrUtil.isNotBlank(filterSql)) { + sql.append(" AND ").append(filterSql).append(" "); + } + sql.append(buildMsEngDetailOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort())); + + Page page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); + List list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, EngEqDataVo.class); + DataSourceResult result = new DataSourceResult<>(); + result.setData(list); + result.setTotal(page != null ? page.getTotal() : list.size()); + result.setAggregates(new HashMap<>()); + return result; + } + + private DataSourceResult queryMsEngGroupList(DataSourceRequest dataSourceRequest, + DataSourceLoadOptionsBase loadOptions) { + List groups = dataSourceRequest.getGroup(); + GroupingInfo[] groupInfos = loadOptions == null ? new GroupingInfo[0] : loadOptions.getGroup(); + + List selectItems = new ArrayList<>(); + for (DataSourceRequest.GroupDescriptor descriptor : groups) { + if (descriptor == null || StrUtil.isBlank(descriptor.getField())) { + continue; + } + String column = mapMsEngColumn(descriptor.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + selectItems.add(column + " AS " + descriptor.getField().toUpperCase()); + selectItems.add("COUNT(*) AS COUNT_" + descriptor.getField().toUpperCase()); + if (CollUtil.isNotEmpty(descriptor.getAggregates())) { + for (DataSourceRequest.AggregateDescriptor aggregate : descriptor.getAggregates()) { + String aggregateColumn = mapMsEngColumn(aggregate.getField()); + if (StrUtil.isBlank(aggregateColumn) || StrUtil.isBlank(aggregate.getAggregate())) { + continue; + } + selectItems.add(buildMsEngAggregateSql(aggregate.getAggregate(), aggregateColumn, aggregate.getField())); + } + } + } + if (selectItems.isEmpty()) { + selectItems.add("MET.STCD AS STCD"); + selectItems.add("COUNT(*) AS COUNT_STCD"); + } + + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append(String.join(", ", selectItems)) + .append(" ") + .append(buildMsEngViewSql()) + .append(" WHERE NVL(MET.IS_DELETED, 0) = 0 "); + + Map paramMap = new HashMap<>(); + String filterSql = buildMsEngFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0}); + if (StrUtil.isNotBlank(filterSql)) { + sql.append(" AND ").append(filterSql).append(" "); + } + + List groupByColumns = new ArrayList<>(); + for (DataSourceRequest.GroupDescriptor descriptor : groups) { + if (descriptor == null || StrUtil.isBlank(descriptor.getField())) { + continue; + } + String column = mapMsEngColumn(descriptor.getField()); + if (StrUtil.isNotBlank(column)) { + groupByColumns.add(column); + } + } + if (!groupByColumns.isEmpty()) { + sql.append(" GROUP BY ").append(String.join(", ", groupByColumns)).append(" "); + } + sql.append(buildMsEngGroupOrderBySql(groups)); + + List> rows = microservicDynamicSQLMapper.pageAllList(null, sql.toString(), paramMap); + DataSourceResult result = new DataSourceResult<>(); + if (dataSourceRequest.getGroupResultFlat() != null && dataSourceRequest.getGroupResultFlat()) { + result.setData((List) (List) new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos))); + } else { + result.setData((List) (List) new GroupHelper().group(rows, Arrays.asList(groupInfos))); + } + result.setTotal(0L); + result.setAggregates(new HashMap<>()); + return result; + } + + /** + * MS_ENG_T + V_MS_STBPRP_T 联合查询的 FROM 子句 + */ + private String buildMsEngViewSql() { + return "FROM MS_ENG_T MET " + + "LEFT JOIN MS_ENG_T MET1 ON MET1.STCD = MET.STCD " + + " AND MET1.TYPE = MET.TYPE " + + " AND ADD_MONTHS(MET1.TM, 12) = MET.TM " + + " AND NVL(MET1.IS_DELETED, 0) = 0 " + + "INNER JOIN V_MS_STBPRP_T MSB ON MSB.STCD = MET.STCD " + + " AND MSB.STTP_CODE = 'ENG' " + + " AND MSB.BLDSTT_CODE = 2 "; + } + + private Map msEngFieldColumns() { + Map columns = new LinkedHashMap<>(); + columns.put("id", "MET.ID AS id"); + columns.put("stcd", "MET.STCD AS stcd"); + columns.put("stnm", "MSB.STNM AS stnm"); + columns.put("ennm", "MSB.ENNM AS ennm"); + columns.put("tm", "MET.TM AS tm"); + columns.put("qi", "MET.QI AS qi"); + columns.put("qo", "MET.QO AS qo"); + columns.put("qecLimit", "MET.QEC_LIMIT AS qecLimit"); + columns.put("qec", "MET.QEC AS qec"); + columns.put("mwrLimit", "MET.MWR_LIMIT AS mwrLimit"); + columns.put("avqLimit", "MET.AVQ_LIMIT AS avqLimit"); + columns.put("qecC", "MET.QEC_C AS qecC"); + columns.put("mwrC", "MET.MWR_C AS mwrC"); + columns.put("avqC", "MET.AVQ_C AS avqC"); + columns.put("sfdb", "MET.QEC_SFDB AS sfdb"); + columns.put("sfdbName", "CASE NVL(MET.QEC_SFDB, -1) WHEN 0 THEN '不达标' WHEN 1 THEN '达标' WHEN 2 THEN '无生态流量数据' WHEN 3 THEN '无生态流量限值要求' ELSE NULL END AS sfdbName"); + columns.put("mwrSfdb", "MET.MWR_SFDB AS mwrSfdb"); + columns.put("mwrSfdbName", "CASE NVL(MET.MWR_SFDB, -1) WHEN 0 THEN '不达标' WHEN 1 THEN '达标' WHEN 2 THEN '无生态流量数据' WHEN 3 THEN '无生态流量限值要求' ELSE NULL END AS mwrSfdbName"); + columns.put("avqSfdb", "MET.AVQ_SFDB AS avqSfdb"); + columns.put("avqSfdbName", "CASE NVL(MET.AVQ_SFDB, -1) WHEN 0 THEN '不达标' WHEN 1 THEN '达标' WHEN 2 THEN '无生态流量数据' WHEN 3 THEN '无生态流量限值要求' ELSE NULL END AS avqSfdbName"); + columns.put("rz", "MET.RZ AS rz"); + columns.put("dz", "MET.DDZ AS dz"); + columns.put("baseName", "MSB.BASE_NAME AS baseName"); + columns.put("rvcdName", "MSB.RVCD_NAME AS rvcdName"); + columns.put("hbrvcdName", "MSB.HBRVCD_NAME AS hbrvcdName"); + columns.put("addvcdName", "MSB.ADDVNM AS addvcdName"); + columns.put("baseId", "MSB.BASE_ID AS baseId"); + columns.put("hbrvcd", "MSB.HBRVCD AS hbrvcd"); + columns.put("hycd", "MSB.HYCD AS hycd"); + columns.put("rvcd", "MSB.RVCD AS rvcd"); + columns.put("bldsttCcode", "MSB.BLDSTT_CODE AS bldsttCcode"); + columns.put("beforeQec", "MET1.QEC AS beforeQec"); + columns.put("baseStepSort", "NVL(MSB.BASESTEPSORT, 999999) AS baseStepSort"); + columns.put("rvcdStepSort", "NVL(MSB.RVCDSTEPSORT, 999999) AS rvcdStepSort"); + columns.put("rstcdStepSort", "NVL(MSB.RSTCDSTEPSORT, 999999) AS rstcdStepSort"); + columns.put("siteStepSort", "NVL(MSB.SITESTEPSORT, 999999) AS siteStepSort"); + return columns; + } + + private String buildMsEngDetailSelectSql(List selectFields) { + Map columns = msEngFieldColumns(); + List selected = new ArrayList<>(); + if (CollUtil.isEmpty(selectFields)) { + selected.addAll(columns.values()); + } else { + for (String field : selectFields) { + String column = columns.get(field); + if (StrUtil.isNotBlank(column)) { + selected.add(column); + } + } + if (selected.isEmpty()) { + selected.addAll(columns.values()); + } + } + return String.join(", ", selected); + } + + private String buildMsEngFilterCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + if (filter == null) { + return ""; + } + if (StrUtil.isNotBlank(filter.getField())) { + return buildMsEngLeafCondition(filter, paramMap, indexHolder); + } + if (CollUtil.isEmpty(filter.getFilters())) { + return ""; + } + List conditions = new ArrayList<>(); + for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) { + String childSql = buildMsEngFilterCondition(child, paramMap, indexHolder); + if (StrUtil.isNotBlank(childSql)) { + conditions.add("(" + childSql + ")"); + } + } + if (conditions.isEmpty()) { + return ""; + } + String logic = "or".equalsIgnoreCase(filter.getLogic()) ? " OR " : " AND "; + return String.join(logic, conditions); + } + + private String buildMsEngLeafCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + String column = mapMsEngColumn(filter.getField()); + if (StrUtil.isBlank(column)) { + return ""; + } + return buildGenericCondition(column, filter, paramMap, indexHolder, isMsEngDateField(filter.getField())); + } + + private String buildMsEngDetailOrderBySql(List sortList) { + if (CollUtil.isEmpty(sortList)) { + return " ORDER BY baseStepSort ASC, rvcdStepSort ASC, rstcdStepSort ASC, siteStepSort ASC, MET.TM DESC"; + } + List orders = new ArrayList<>(); + for (DataSourceRequest.SortDescriptor sort : sortList) { + if (sort == null || StrUtil.isBlank(sort.getField())) { + continue; + } + String column = mapMsEngOrderColumn(sort.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + String dir = "desc".equalsIgnoreCase(sort.getDir()) || "des".equalsIgnoreCase(sort.getDir()) ? "DESC" : "ASC"; + orders.add(column + " " + dir); + } + if (orders.isEmpty()) { + return " ORDER BY baseStepSort ASC, rvcdStepSort ASC, rstcdStepSort ASC, siteStepSort ASC, MET.TM DESC"; + } + return " ORDER BY " + String.join(", ", orders); + } + + private String buildMsEngGroupOrderBySql(List groups) { + if (CollUtil.isEmpty(groups)) { + return ""; + } + List orders = new ArrayList<>(); + for (DataSourceRequest.GroupDescriptor descriptor : groups) { + if (descriptor == null || StrUtil.isBlank(descriptor.getField())) { + continue; + } + String column = mapMsEngColumn(descriptor.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + String dir = "desc".equalsIgnoreCase(descriptor.getDir()) || "des".equalsIgnoreCase(descriptor.getDir()) ? "DESC" : "ASC"; + orders.add(column + " " + dir); + } + return orders.isEmpty() ? "" : " ORDER BY " + String.join(", ", orders); + } + + private String buildMsEngAggregateSql(String aggregate, String column, String field) { + if (StrUtil.isBlank(aggregate) || StrUtil.isBlank(column)) { + return null; + } + return switch (aggregate.toLowerCase()) { + case "sum" -> "SUM(" + column + ") AS SUM_" + field.toUpperCase(); + case "avg" -> "AVG(" + column + ") AS AVG_" + field.toUpperCase(); + case "min" -> "MIN(" + column + ") AS MIN_" + field.toUpperCase(); + case "max" -> "MAX(" + column + ") AS MAX_" + field.toUpperCase(); + default -> null; + }; + } + + private String mapMsEngColumn(String field) { + if (StrUtil.isBlank(field)) { + return null; + } + return switch (field) { + case "id" -> "MET.ID"; + case "stcd" -> "MSB.STCD"; + case "stnm" -> "MSB.STNM"; + case "ennm" -> "MSB.ENNM"; + case "tm" -> "MET.TM"; + case "qi" -> "MET.QI"; + case "qo" -> "MET.QO"; + case "qecLimit" -> "MET.QEC_LIMIT"; + case "qec" -> "MET.QEC"; + case "mwrLimit" -> "MET.MWR_LIMIT"; + case "avqLimit" -> "MET.AVQ_LIMIT"; + case "qecC" -> "MET.QEC_C"; + case "mwrC" -> "MET.MWR_C"; + case "avqC" -> "MET.AVQ_C"; + case "sfdb", "qecSfdb" -> "MET.QEC_SFDB"; + case "mwrSfdb" -> "MET.MWR_SFDB"; + case "avqSfdb" -> "MET.AVQ_SFDB"; + case "rz" -> "MET.RZ"; + case "dz" -> "MET.DDZ"; + case "baseName" -> "MSB.BASE_NAME"; + case "rvcdName" -> "MSB.RVCD_NAME"; + case "hbrvcdName" -> "MSB.HBRVCD_NAME"; + case "addvcdName" -> "MSB.ADDVNM"; + case "baseId" -> "MSB.BASE_ID"; + case "hbrvcd" -> "MSB.HBRVCD"; + case "hycd" -> "MSB.HYCD"; + case "rvcd" -> "MSB.RVCD"; + case "bldsttCcode" -> "MSB.BLDSTT_CODE"; + case "baseStepSort" -> "MSB.BASESTEPSORT"; + case "rvcdStepSort" -> "MSB.RVCDSTEPSORT"; + case "rstcdStepSort" -> "MSB.RSTCDSTEPSORT"; + case "siteStepSort" -> "MSB.SITESTEPSORT"; + default -> null; + }; + } + + private String mapMsEngOrderColumn(String field) { + if (StrUtil.isBlank(field)) { + return null; + } + return switch (field) { + case "id", "baseId", "hbrvcd", "hycd", "rvcd", "bldsttCcode", + "sfdbName", "mwrSfdb", "mwrSfdbName", "avqSfdb", "avqSfdbName", + "qecC", "mwrC", "avqC", "beforeQec", + "baseStepSort", "rvcdStepSort", "rstcdStepSort", "siteStepSort", + "stcd", "stnm", "ennm", "qi", "qo", "qec", "sfdb", + "rz", "dz", "qecLimit", "mwrLimit", "avqLimit", "baseName", + "rvcdName", "hbrvcdName", "addvcdName" -> field; + case "tm" -> "MET.TM"; + default -> null; + }; + } + + private boolean isMsEngDateField(String field) { + return "tm".equalsIgnoreCase(field); + } + } diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpRunServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpRunServiceImpl.java index b4abe1df..8baf1fd0 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpRunServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpRunServiceImpl.java @@ -2741,23 +2741,33 @@ public class FpRunServiceImpl implements FpRunService { public DataSourceResult getTreeStcdList(DataSourceRequest dataSourceRequest) { // 查询 SD_FPSSRL_R(自动, MWAY=2)和 SD_FPSS_R(人工, MWAY=1)中有过鱼数据的测站 // 关联 V_MS_STBPRP_T 视图获取测站基础信息(含 ENNM 电站名称) - String sql = "SELECT STCD, STNM, MWAY, LGTD, LTTD, BASE_ID, RSTCD, ENNM " - + "FROM (" - + " SELECT DISTINCT t2.STCD, t2.STNM, t2.BASE_ID, t2.RSTCD, t2.LGTD, t2.LTTD, t2.MWAY, t2.ENNM " - + " FROM SD_FPSSRL_R t1 " - + " INNER JOIN V_MS_STBPRP_T t2 ON t1.STCD = t2.STCD " - + " WHERE NVL(t2.IS_DELETED, 0) = 0 AND t2.MWAY = 2 AND t1.FTP IS NOT NULL " - + " UNION " - + " SELECT DISTINCT t4.STCD, t4.STNM, t4.BASE_ID, t4.RSTCD, t4.LGTD, t4.LTTD, t4.MWAY, t4.ENNM " - + " FROM SD_FPSS_R t3 " - + " INNER JOIN V_MS_STBPRP_T t4 ON t3.STCD = t4.STCD " - + " WHERE NVL(t4.IS_DELETED, 0) = 0 AND t4.MWAY = 1 AND t3.FTP IS NOT NULL " - + " AND NVL(t3.IS_DELETED, 0) = 0" - + ")"; + StringBuilder sql = new StringBuilder(); + sql.append("SELECT STCD, STNM, MWAY, LGTD, LTTD, BASE_ID, RSTCD, ENNM ") + .append("FROM (") + .append(" SELECT DISTINCT t2.STCD, t2.STNM, t2.BASE_ID, t2.RSTCD, t2.LGTD, t2.LTTD, t2.MWAY, t2.ENNM ") + .append(" FROM SD_FPSSRL_R t1 ") + .append(" INNER JOIN V_MS_STBPRP_T t2 ON t1.STCD = t2.STCD ") + .append(" WHERE NVL(t2.IS_DELETED, 0) = 0 AND t2.MWAY = 2 AND t1.FTP IS NOT NULL ") + .append(" UNION ") + .append(" SELECT DISTINCT t4.STCD, t4.STNM, t4.BASE_ID, t4.RSTCD, t4.LGTD, t4.LTTD, t4.MWAY, t4.ENNM ") + .append(" FROM SD_FPSS_R t3 ") + .append(" INNER JOIN V_MS_STBPRP_T t4 ON t3.STCD = t4.STCD ") + .append(" WHERE NVL(t4.IS_DELETED, 0) = 0 AND t4.MWAY = 1 AND t3.FTP IS NOT NULL ") + .append(" AND NVL(t3.IS_DELETED, 0) = 0") + .append(") t WHERE 1=1 "); Map paramMap = new HashMap<>(); + String filterSql = QgcQueryWrapperUtil.buildFilterCondition( + dataSourceRequest.getFilter(), + paramMap, + new int[]{0}, + this::FpTree + ); + if (StrUtil.isNotBlank(filterSql)) { + sql.append("AND ").append(filterSql).append(" "); + } List allItems = microservicDynamicSQLMapper - .getAllListWithResultType(sql, paramMap, FpTreeStcdVo.class); + .getAllListWithResultType(sql.toString(), paramMap, FpTreeStcdVo.class); if (CollUtil.isEmpty(allItems)) { DataSourceResult emptyResult = new DataSourceResult<>(); @@ -2815,4 +2825,18 @@ public class FpRunServiceImpl implements FpRunService { result.setAggregates(new HashMap<>()); return result; } + + private String FpTree(String field) { + if (StrUtil.isBlank(field)) { + return null; + } + return switch (field.toLowerCase()) { + case "rstcd" -> "t.RSTCD"; + case "lgtd" -> "fp.LGTD"; + case "lttd" -> "fp.LTTD"; + default -> null; + }; + } + + }