fix: 优化过鱼设施接口

This commit is contained in:
tangwei 2026-06-11 15:12:17 +08:00
parent c56938e881
commit 0dc8ef3cef

View File

@ -222,40 +222,32 @@ public class FpRunServiceImpl implements FpRunService {
private DataSourceResult<FpTableVo> queryQgcFpssTableGroupList(DataSourceRequest dataSourceRequest, private DataSourceResult<FpTableVo> queryQgcFpssTableGroupList(DataSourceRequest dataSourceRequest,
DataSourceLoadOptionsBase loadOptions, DataSourceLoadOptionsBase loadOptions,
String stcdFilter) { String stcdFilter) {
List<DataSourceRequest.GroupDescriptor> groups = dataSourceRequest.getGroup();
GroupingInfo[] groupInfos = loadOptions == null ? new GroupingInfo[0] : loadOptions.getGroup();
StringBuilder sql = new StringBuilder("SELECT "); StringBuilder sql = new StringBuilder("SELECT ");
List<String> selectItems = new ArrayList<>(); sql.append("CAST(NULL AS VARCHAR2(36)) AS stcd, ")
for (DataSourceRequest.GroupDescriptor descriptor : groups) { .append("CAST(NULL AS VARCHAR2(255)) AS stnm, ")
if (descriptor == null || StrUtil.isBlank(descriptor.getField())) { .append("CAST(NULL AS VARCHAR2(19)) AS tm, ")
continue; .append("t.ftp AS ftp, ")
} .append("CAST(NULL AS VARCHAR2(200)) AS fishId, ")
String column = mapQgcFpssTableColumn(descriptor.getField()); .append("MAX(t.fsz) AS fsz, ")
if (StrUtil.isBlank(column)) { .append("TO_CHAR(SUM(TO_NUMBER(NVL(t.fcnt, '0')))) AS fcnt, ")
continue; .append("CAST(NULL AS VARCHAR2(50)) AS length, ")
} .append("CAST(NULL AS VARCHAR2(50)) AS width, ")
selectItems.add(column + " AS " + descriptor.getField().toUpperCase()); .append("CAST(NULL AS VARCHAR2(50)) AS fishspeed, ")
selectItems.add("COUNT(*) AS COUNT_" + descriptor.getField().toUpperCase()); .append("CAST(NULL AS VARCHAR2(20)) AS direction, ")
if (CollUtil.isNotEmpty(descriptor.getAggregates())) { .append("CAST(NULL AS VARCHAR2(20)) AS directionName, ")
for (DataSourceRequest.AggregateDescriptor aggregate : descriptor.getAggregates()) { .append("CAST(NULL AS VARCHAR2(50)) AS temperature, ")
String aggregateColumn = mapQgcFpssTableColumn(aggregate.getField()); .append("CAST(NULL AS VARCHAR2(50)) AS speed, ")
if (StrUtil.isBlank(aggregateColumn) || StrUtil.isBlank(aggregate.getAggregate())) { .append("CAST(NULL AS VARCHAR2(255)) AS firstimgurl, ")
continue; .append("CAST(NULL AS VARCHAR2(255)) AS videourl, ")
} .append("t.yr AS yr, ")
String aggregateSql = buildAggregateSql(aggregate.getAggregate(), aggregateColumn, aggregate.getField()); .append("CAST(NULL AS VARCHAR2(50)) AS fwet, ")
if (StrUtil.isNotBlank(aggregateSql)) { .append("CAST(NULL AS VARCHAR2(1000)) AS fid, ")
selectItems.add(aggregateSql); .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, ")
if (selectItems.isEmpty()) { .append("CAST(NULL AS VARCHAR2(255)) AS vdpth ")
selectItems.add("t.YR AS YR");
selectItems.add("COUNT(*) AS COUNT_YR");
}
sql.append(String.join(", ", selectItems))
.append("FROM (") .append("FROM (")
.append(buildQgcFpssTableCoreSql()) .append(buildQgcFpssTableCoreSql())
.append(") t WHERE 1 = 1 "); .append(") t WHERE 1 = 1 ");
@ -267,29 +259,14 @@ public class FpRunServiceImpl implements FpRunService {
sql.append(" AND ").append(filterSql).append(" "); sql.append(" AND ").append(filterSql).append(" ");
} }
List<String> groupByColumns = new ArrayList<>(); sql.append(" GROUP BY t.yr, t.ftp ");
for (DataSourceRequest.GroupDescriptor descriptor : groups) { sql.append(buildQgcFpssTableAggregateOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort()));
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));
List<Map<String, Object>> rows = microservicDynamicSQLMapper.pageAllList(null, sql.toString(), paramMap); Page<?> page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
List<FpTableVo> rows = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, FpTableVo.class);
DataSourceResult<FpTableVo> result = new DataSourceResult<>(); DataSourceResult<FpTableVo> result = new DataSourceResult<>();
if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) { result.setData(rows);
result.setData((List<FpTableVo>) (List<?>) new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos))); result.setTotal(page != null ? page.getTotal() : rows.size());
} else {
result.setData((List<FpTableVo>) (List<?>) new GroupHelper().group(rows, Arrays.asList(groupInfos)));
}
result.setTotal(0L);
result.setAggregates(new HashMap<>()); result.setAggregates(new HashMap<>());
return result; return result;
} }
@ -664,6 +641,28 @@ public class FpRunServiceImpl implements FpRunService {
return orders.isEmpty() ? "" : " ORDER BY " + String.join(", ", orders); return orders.isEmpty() ? "" : " ORDER BY " + String.join(", ", orders);
} }
private String buildQgcFpssTableAggregateOrderBySql(List<DataSourceRequest.SortDescriptor> sortList) {
if (CollUtil.isEmpty(sortList)) {
return " ORDER BY yr DESC";
}
List<String> 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<FpSdfpssrVo> queryQgcSdfpssrDetailList(DataSourceRequest dataSourceRequest, private DataSourceResult<FpSdfpssrVo> queryQgcSdfpssrDetailList(DataSourceRequest dataSourceRequest,
DataSourceLoadOptionsBase loadOptions) { DataSourceLoadOptionsBase loadOptions) {
StringBuilder sql = new StringBuilder(); StringBuilder sql = new StringBuilder();