From 81b3b8b9812962910826a28d9548b6e915304540 Mon Sep 17 00:00:00 2001 From: tangwei Date: Mon, 1 Jun 2026 20:02:13 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wq/service/impl/EnvWqDataServiceImpl.java | 111 ++++++++++++------ 1 file changed, 73 insertions(+), 38 deletions(-) diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/wq/service/impl/EnvWqDataServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/wq/service/impl/EnvWqDataServiceImpl.java index ed24d9b9..aa826d93 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/wq/service/impl/EnvWqDataServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wq/service/impl/EnvWqDataServiceImpl.java @@ -368,7 +368,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { "WHERE NVL(mab.IS_DELETED, 0) = 0 " + " AND NVL(sab.IS_DELETED, 0) = 0 " + " AND mab.CODE = 'common' " + - " AND eng.BASE_ID = #{map.baseId} " + + " AND wq.BASE_ID = #{map.baseId} " + " AND r.TM >= TO_DATE(#{map.startTime}, 'YYYY-MM-DD HH24:MI:SS') " + " AND r.TM <= TO_DATE(#{map.endTime}, 'YYYY-MM-DD HH24:MI:SS') " + "ORDER BY NVL(mab.ORDER_INDEX, 999999) ASC, NVL(sab.SORT, 999999) ASC " + @@ -386,7 +386,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { "WHERE NVL(mab.IS_DELETED, 0) = 0 " + " AND NVL(sab.IS_DELETED, 0) = 0 " + " AND mab.CODE = 'common' " + - " AND eng.BASE_ID = #{map.baseId} " + + " AND wq.BASE_ID = #{map.baseId} " + "ORDER BY r.TM DESC " + ") WHERE ROWNUM = 1"; } @@ -412,7 +412,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { sql.append("AND mab.RVCD = #{map.rvcd} "); } if (StrUtil.isNotBlank(baseId)) { - sql.append("AND eng.BASE_ID = #{map.baseId} "); + sql.append("AND wq.BASE_ID = #{map.baseId} "); } sql.append("AND swr.TM IS NOT NULL ") .append("ORDER BY NVL(mab.ORDER_INDEX, 999999) ASC, NVL(sab.SORT, 999999) ASC, swr.TM DESC") @@ -486,7 +486,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { sql.append("AND mab.RVCD = #{map.rvcd} "); } if (StrUtil.isNotBlank(baseId)) { - sql.append("AND eng.BASE_ID = #{map.baseId} "); + sql.append("AND wq.BASE_ID = #{map.baseId} "); } sql.append("ORDER BY NVL(mab.ORDER_INDEX, 999999) ASC, NVL(sab.SORT, 999999) ASC"); return sql.toString(); @@ -551,9 +551,9 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { .append(buildMsstbprptDetailSelectSql(dataSourceRequest == null ? null : dataSourceRequest.getSelect())) .append(" FROM SD_WQ_B_H t ") .append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = t.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_HYDROBASE hb ON hb.BASEID = t.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 ") .append("LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD ") - .append(" AND hbrv.BASEID = eng.BASE_ID ") + .append(" AND hbrv.BASEID = t.BASE_ID ") .append(" AND NVL(hbrv.IS_DELETED, 0) = 0 ") .append(" AND NVL(hbrv.ENABLED, 1) = 1 ") .append("LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = eng.RVCD ") @@ -581,29 +581,31 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { return result; } - String groupField = "dtinType"; - String groupColumn = "t.DTIN_TYPE"; - String groupDir = "ASC"; - if (CollUtil.isNotEmpty(dataSourceRequest.getGroup())) { - DataSourceRequest.GroupDescriptor groupDescriptor = dataSourceRequest.getGroup().get(0); - if (groupDescriptor != null && StrUtil.isNotBlank(groupDescriptor.getField())) { - groupField = groupDescriptor.getField(); - String mappedColumn = mapMsstbprptColumn(groupField); - if (StrUtil.isNotBlank(mappedColumn)) { - groupColumn = mappedColumn; - } - if ("desc".equalsIgnoreCase(groupDescriptor.getDir()) || "des".equalsIgnoreCase(groupDescriptor.getDir())) { - groupDir = "DESC"; - } - } - } - - StringBuilder sql = new StringBuilder(); - sql.append("SELECT ") - .append(groupColumn).append(" AS ").append(groupField.toUpperCase()).append(", ") - .append("COUNT(*) AS COUNT_").append(groupField.toUpperCase()).append(" ") + GroupingInfo[] groupInfos = loadOptions == null ? null : loadOptions.getGroup(); + StringBuilder baseSql = new StringBuilder(); + baseSql.append("SELECT ") + .append("NVL(t.IS_DELETED, 0) AS isDeleted, ") + .append("t.STTP AS sttpCode, ") + .append("t.MWAY AS mway, ") + .append("t.DTIN_TYPE AS dtinType, ") + .append("t.STCD AS stcd, ") + .append("t.STNM AS stnm, ") + .append("t.FHSTCD AS fhstcd, ") + .append("t.DTIN AS dtin, ") + .append("t.BASE_ID AS baseId, ") + .append("hb.BASENAME AS baseName, ") + .append("hb.ORDER_INDEX AS baseStepSort, ") + .append("eng.HBRVCD AS hbrvcd, ") + .append("hbrv.HBRVNM AS hbrvcdName, ") + .append("eng.ORDER_INDEX AS rstcdStepSort, ") + .append("t.ORDER_INDEX AS siteStepSort ") .append("FROM SD_WQ_B_H t ") - .append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = t.RSTCD ") + .append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = t.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 ") + .append("LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = t.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 ") + .append("LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD ") + .append(" AND hbrv.BASEID = t.BASE_ID ") + .append(" AND NVL(hbrv.IS_DELETED, 0) = 0 ") + .append(" AND NVL(hbrv.ENABLED, 1) = 1 ") .append("WHERE NVL(t.IS_DELETED, 0) = 0 "); Map paramMap = new HashMap<>(); @@ -613,14 +615,17 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { new int[]{0} ); if (StrUtil.isNotBlank(filterSql)) { - sql.append(" AND ").append(filterSql).append(" "); + baseSql.append(" AND ").append(filterSql).append(" "); } - sql.append("GROUP BY ").append(groupColumn).append(" ") - .append("ORDER BY ").append(groupColumn).append(" ").append(groupDir); - List> rows = microservicDynamicSQLMapper.pageAllList(null, sql.toString(), paramMap); + String groupedSql = buildMsstbprptGroupSql(baseSql.toString(), groupInfos); + List> rows = microservicDynamicSQLMapper.pageAllList(null, groupedSql, paramMap); DataSourceResult result = new DataSourceResult(); - result.setData(toMsstbprptLegacyGroups(rows, groupField)); + if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) { + result.setData(new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos))); + } else { + result.setData(toLegacyGroupResult(new GroupHelper().group(rows, Arrays.asList(groupInfos)), 0)); + } result.setTotal((long) rows.size()); result.setAggregates(new HashMap<>()); return result; @@ -789,9 +794,9 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { "t.DELETE_TIME AS deleteTime " + "FROM SD_WQ_B_H t " + "LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = t.RSTCD " + - "LEFT JOIN SD_HYDROBASE base ON base.BASEID = eng.BASE_ID AND NVL(base.IS_DELETED, 0) = 0 " + + "LEFT JOIN SD_HYDROBASE base ON base.BASEID = t.BASE_ID AND NVL(base.IS_DELETED, 0) = 0 " + "LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD " + - " AND hbrv.BASEID = eng.BASE_ID " + + " AND hbrv.BASEID = t.BASE_ID " + " AND NVL(hbrv.IS_DELETED, 0) = 0 " + " AND NVL(hbrv.ENABLED, 1) = 1 " + "LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = eng.RVCD " + @@ -929,7 +934,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { "wq.STTP AS STTP_CODE " + "FROM SD_WQ_B_H wq " + "LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = wq.RSTCD " + - "LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 " + + "LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = wq.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 " + "LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = eng.RVCD " + "LEFT JOIN SD_ADDVCD_DIC addv ON addv.ADDVCD = eng.ADDVCD " + "LEFT JOIN MS_ALONG_B rvAlong ON rvAlong.RVCD = eng.HBRVCD AND rvAlong.CODE = 'common' AND NVL(rvAlong.IS_DELETED, 0) = 0 " + @@ -1341,7 +1346,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { "siteAlong.SORT AS SITESTEPSORT " + "FROM SD_WQ_B_H wq " + "LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = wq.RSTCD " + - "LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 " + + "LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = wq.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 " + "LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD AND hbrv.BASEID = eng.BASE_ID AND NVL(hbrv.IS_DELETED, 0) = 0 AND NVL(hbrv.ENABLED, 1) = 1 " + "LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = eng.RVCD " + "LEFT JOIN SD_ADDVCD_DIC addv ON addv.ADDVCD = eng.ADDVCD " + @@ -1928,7 +1933,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { case "stcd" -> "t.STCD"; case "stnm" -> "t.STNM"; case "fhstcd" -> "t.FHSTCD"; - case "baseId" -> "eng.BASE_ID"; + case "baseId" -> "t.BASE_ID"; case "dtin" -> "t.DTIN"; default -> null; }; @@ -2045,6 +2050,36 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { return result; } + private String buildMsstbprptGroupSql(String baseSql, GroupingInfo[] groupInfos) { + if (groupInfos == null || groupInfos.length == 0) { + return baseSql; + } + List groupFields = new ArrayList<>(); + List orderByItems = new ArrayList<>(); + for (GroupingInfo item : groupInfos) { + if (item == null || StrUtil.isBlank(item.getSelector())) { + continue; + } + groupFields.add(item.getSelector()); + String dir = Boolean.TRUE.equals(item.getDesc()) ? "DESC" : "ASC"; + orderByItems.add(item.getSelector() + " " + dir); + } + if (groupFields.isEmpty()) { + return baseSql; + } + StringBuilder sql = new StringBuilder("SELECT "); + sql.append(String.join(", ", groupFields)); + for (String groupField : groupFields) { + sql.append(", COUNT(*) AS count_").append(groupField).append(" "); + } + sql.append("FROM (").append(baseSql).append(") T ") + .append("GROUP BY ").append(String.join(", ", groupFields)).append(" "); + if (!orderByItems.isEmpty()) { + sql.append("ORDER BY ").append(String.join(", ", orderByItems)); + } + return sql.toString(); + } + private String buildMsstbprptDetailOrderBySql(List sortList) { if (CollUtil.isEmpty(sortList)) { return " ORDER BY eng.BASE_ID ASC NULLS LAST, eng.HBRVCD ASC NULLS LAST, eng.ORDER_INDEX ASC NULLS LAST, t.ORDER_INDEX ASC NULLS LAST, t.STCD ASC ";