From 0dc8ef3cef0cfe0dac2d683210775650556898a3 Mon Sep 17 00:00:00 2001 From: tangwei Date: Thu, 11 Jun 2026 15:12:17 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E8=BF=87=E9=B1=BC?= =?UTF-8?q?=E8=AE=BE=E6=96=BD=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fp/service/impl/FpRunServiceImpl.java | 109 +++++++++--------- 1 file changed, 54 insertions(+), 55 deletions(-) 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 a89a3ff2..6bc68dcb 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 @@ -222,41 +222,33 @@ public class FpRunServiceImpl implements FpRunService { private DataSourceResult queryQgcFpssTableGroupList(DataSourceRequest dataSourceRequest, DataSourceLoadOptionsBase loadOptions, String stcdFilter) { - List groups = dataSourceRequest.getGroup(); - GroupingInfo[] groupInfos = loadOptions == null ? new GroupingInfo[0] : loadOptions.getGroup(); - StringBuilder sql = new StringBuilder("SELECT "); - List selectItems = new ArrayList<>(); - for (DataSourceRequest.GroupDescriptor descriptor : groups) { - if (descriptor == null || StrUtil.isBlank(descriptor.getField())) { - continue; - } - String column = mapQgcFpssTableColumn(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 = mapQgcFpssTableColumn(aggregate.getField()); - if (StrUtil.isBlank(aggregateColumn) || StrUtil.isBlank(aggregate.getAggregate())) { - continue; - } - String aggregateSql = buildAggregateSql(aggregate.getAggregate(), aggregateColumn, aggregate.getField()); - if (StrUtil.isNotBlank(aggregateSql)) { - selectItems.add(aggregateSql); - } - } - } - } - if (selectItems.isEmpty()) { - selectItems.add("t.YR AS YR"); - selectItems.add("COUNT(*) AS COUNT_YR"); - } - - sql.append(String.join(", ", selectItems)) - .append(" FROM (") + sql.append("CAST(NULL AS VARCHAR2(36)) AS stcd, ") + .append("CAST(NULL AS VARCHAR2(255)) AS stnm, ") + .append("CAST(NULL AS VARCHAR2(19)) AS tm, ") + .append("t.ftp AS ftp, ") + .append("CAST(NULL AS VARCHAR2(200)) AS fishId, ") + .append("MAX(t.fsz) AS fsz, ") + .append("TO_CHAR(SUM(TO_NUMBER(NVL(t.fcnt, '0')))) AS fcnt, ") + .append("CAST(NULL AS VARCHAR2(50)) AS length, ") + .append("CAST(NULL AS VARCHAR2(50)) AS width, ") + .append("CAST(NULL AS VARCHAR2(50)) AS fishspeed, ") + .append("CAST(NULL AS VARCHAR2(20)) AS direction, ") + .append("CAST(NULL AS VARCHAR2(20)) AS directionName, ") + .append("CAST(NULL AS VARCHAR2(50)) AS temperature, ") + .append("CAST(NULL AS VARCHAR2(50)) AS speed, ") + .append("CAST(NULL AS VARCHAR2(255)) AS firstimgurl, ") + .append("CAST(NULL AS VARCHAR2(255)) AS videourl, ") + .append("t.yr AS yr, ") + .append("CAST(NULL AS VARCHAR2(50)) AS fwet, ") + .append("CAST(NULL AS VARCHAR2(1000)) AS fid, ") + .append("CAST(NULL AS NUMBER(18,0)) AS upFcnt, ") + .append("CAST(NULL AS NUMBER(18,0)) AS downFcnt, ") + .append("CAST(NULL AS VARCHAR2(64)) AS dataSrc, ") + .append("CAST(NULL AS NUMBER(3,0)) AS mway, ") + .append("CAST(NULL AS VARCHAR2(255)) AS picpth, ") + .append("CAST(NULL AS VARCHAR2(255)) AS vdpth ") + .append("FROM (") .append(buildQgcFpssTableCoreSql()) .append(") t WHERE 1 = 1 "); @@ -267,29 +259,14 @@ public class FpRunServiceImpl implements FpRunService { 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 = mapQgcFpssTableColumn(descriptor.getField()); - if (StrUtil.isNotBlank(column)) { - groupByColumns.add(column); - } - } - if (!groupByColumns.isEmpty()) { - sql.append(" GROUP BY ").append(String.join(", ", groupByColumns)).append(" "); - } - sql.append(buildQgcFpssTableGroupOrderBySql(groups)); + sql.append(" GROUP BY t.yr, t.ftp "); + sql.append(buildQgcFpssTableAggregateOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort())); - List> rows = microservicDynamicSQLMapper.pageAllList(null, sql.toString(), paramMap); + Page page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); + List rows = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, FpTableVo.class); DataSourceResult result = new DataSourceResult<>(); - if (Boolean.TRUE.equals(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.setData(rows); + result.setTotal(page != null ? page.getTotal() : rows.size()); result.setAggregates(new HashMap<>()); return result; } @@ -664,6 +641,28 @@ public class FpRunServiceImpl implements FpRunService { return orders.isEmpty() ? "" : " ORDER BY " + String.join(", ", orders); } + private String buildQgcFpssTableAggregateOrderBySql(List sortList) { + if (CollUtil.isEmpty(sortList)) { + return " ORDER BY yr DESC"; + } + List orderColumns = new ArrayList<>(); + for (DataSourceRequest.SortDescriptor sortDescriptor : sortList) { + if (sortDescriptor == null || StrUtil.isBlank(sortDescriptor.getField())) { + continue; + } + String field = sortDescriptor.getField(); + if (!"yr".equals(field) && !"ftp".equals(field) && !"fsz".equals(field) && !"fcnt".equals(field)) { + continue; + } + String dir = "desc".equalsIgnoreCase(sortDescriptor.getDir()) || "des".equalsIgnoreCase(sortDescriptor.getDir()) ? "DESC" : "ASC"; + orderColumns.add(field + " " + dir + " NULLS LAST"); + } + if (orderColumns.isEmpty()) { + return " ORDER BY yr DESC"; + } + return " ORDER BY " + String.join(", ", orderColumns); + } + private DataSourceResult queryQgcSdfpssrDetailList(DataSourceRequest dataSourceRequest, DataSourceLoadOptionsBase loadOptions) { StringBuilder sql = new StringBuilder();