fix: 优化过鱼设施接口

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

View File

@ -222,41 +222,33 @@ public class FpRunServiceImpl implements FpRunService {
private DataSourceResult<FpTableVo> queryQgcFpssTableGroupList(DataSourceRequest dataSourceRequest,
DataSourceLoadOptionsBase loadOptions,
String stcdFilter) {
List<DataSourceRequest.GroupDescriptor> groups = dataSourceRequest.getGroup();
GroupingInfo[] groupInfos = loadOptions == null ? new GroupingInfo[0] : loadOptions.getGroup();
StringBuilder sql = new StringBuilder("SELECT ");
List<String> 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<String> 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<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<>();
if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) {
result.setData((List<FpTableVo>) (List<?>) new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos)));
} else {
result.setData((List<FpTableVo>) (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<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,
DataSourceLoadOptionsBase loadOptions) {
StringBuilder sql = new StringBuilder();