fix: 优化过鱼设施接口
This commit is contained in:
parent
c56938e881
commit
0dc8ef3cef
@ -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();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user