diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/wte/service/impl/WeFishServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/wte/service/impl/WeFishServiceImpl.java index 80d01616..839e0e2e 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/wte/service/impl/WeFishServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wte/service/impl/WeFishServiceImpl.java @@ -235,20 +235,31 @@ public class WeFishServiceImpl implements WeFishService { @Override public DataSourceResult getVmsstbprptList(DataSourceRequest dataSourceRequest) { DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); + GroupingInfo[] groups = loadOptions == null ? null : loadOptions.getGroup(); Map paramMap = new HashMap<>(); - StringBuilder sql = new StringBuilder(); - sql.append("SELECT ") - .append(buildWeVmsstbprptSelectSql(dataSourceRequest == null ? null : dataSourceRequest.getSelect())) - .append(" FROM (") - .append(buildWeVmsstbprptViewSql()) - .append(") t WHERE 1 = 1 "); - String filterSql = buildWeVmsstbprptFilterCondition( dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0} ); + + if (groups != null && groups.length > 0) { + return buildGroupedVmsstbprptResult(dataSourceRequest, groups, filterSql, paramMap); + } + return buildDetailVmsstbprptResult(dataSourceRequest, loadOptions, filterSql, paramMap); + } + + private DataSourceResult buildDetailVmsstbprptResult(DataSourceRequest dataSourceRequest, + DataSourceLoadOptionsBase loadOptions, + String filterSql, + Map paramMap) { + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append(buildWeVmsstbprptSelectSql(dataSourceRequest == null ? null : dataSourceRequest.getSelect())) + .append(" FROM (") + .append(buildWeVmsstbprptViewSql()) + .append(") t WHERE 1 = 1 "); if (StrUtil.isNotBlank(filterSql)) { sql.append("AND ").append(filterSql).append(" "); } @@ -270,6 +281,95 @@ public class WeFishServiceImpl implements WeFishService { return result; } + private DataSourceResult buildGroupedVmsstbprptResult(DataSourceRequest dataSourceRequest, + GroupingInfo[] groups, + String filterSql, + Map paramMap) { + List groupDescriptors = dataSourceRequest == null ? null : dataSourceRequest.getGroup(); + List selectItems = new ArrayList<>(); + if (CollUtil.isNotEmpty(groupDescriptors)) { + for (DataSourceRequest.GroupDescriptor descriptor : groupDescriptors) { + if (descriptor == null || StrUtil.isBlank(descriptor.getField())) { + continue; + } + String column = mapWeVmsstbprptColumn(descriptor.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + selectItems.add(column + " AS " + descriptor.getField()); + selectItems.add("COUNT(1) AS count_" + descriptor.getField()); + } + } + if (selectItems.isEmpty()) { + selectItems.add("t.sttpCode AS sttpCode"); + selectItems.add("COUNT(1) AS count_sttpCode"); + } + + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append(String.join(", ", selectItems)) + .append(" FROM (") + .append(buildWeVmsstbprptViewSql()) + .append(") t ") + .append("WHERE 1 = 1 "); + if (StrUtil.isNotBlank(filterSql)) { + sql.append(" AND ").append(filterSql).append(" "); + } + + List groupByColumns = new ArrayList<>(); + if (CollUtil.isNotEmpty(groupDescriptors)) { + for (DataSourceRequest.GroupDescriptor descriptor : groupDescriptors) { + if (descriptor == null || StrUtil.isBlank(descriptor.getField())) { + continue; + } + String column = mapWeVmsstbprptColumn(descriptor.getField()); + if (StrUtil.isNotBlank(column)) { + groupByColumns.add(column); + } + } + } + if (!groupByColumns.isEmpty()) { + sql.append(" GROUP BY ").append(String.join(", ", groupByColumns)); + } else { + sql.append(" GROUP BY t.sttpCode "); + } + sql.append(buildWeVmsstbprptGroupOrderBySql(groupDescriptors)); + + List> rows = microservicDynamicSQLMapper.pageAllList(null, sql.toString(), paramMap); + DataSourceResult result = new DataSourceResult<>(); + if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) { + result.setData((List) (List) new GroupHelper().faltGroup(rows, Arrays.asList(groups))); + result.setTotal((long) rows.size()); + } else { + result.setData((List) (List) new GroupHelper().group(rows, Arrays.asList(groups))); + result.setTotal((long) rows.size()); + } + result.setAggregates(new HashMap<>()); + return result; + } + + private String buildWeVmsstbprptGroupOrderBySql(List groups) { + if (CollUtil.isEmpty(groups)) { + return " ORDER BY t.sttpCode ASC"; + } + List orderItems = new ArrayList<>(); + for (DataSourceRequest.GroupDescriptor group : groups) { + if (group == null || StrUtil.isBlank(group.getField())) { + continue; + } + String column = mapWeVmsstbprptColumn(group.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + String direction = "desc".equalsIgnoreCase(group.getDir()) ? "DESC" : "ASC"; + orderItems.add(column + " " + direction); + } + if (orderItems.isEmpty()) { + return " ORDER BY t.sttpCode ASC"; + } + return " ORDER BY " + String.join(", ", orderItems); + } + @Override public DataSourceResult getWvaDefaultYearList(DataSourceRequest dataSourceRequest) { DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); @@ -1223,7 +1323,7 @@ public class WeFishServiceImpl implements WeFishService { .append(" MAX(t.tm) AS latestTm ") .append(" FROM ( ") .append(" SELECT w.STCD AS stcd, a.NAME AS anm, MAX(w.TM) AS tm ") - .append(" FROM SD_WVA_R w ") + .append(" FROM SD_ANML_R w ") .append(" INNER JOIN SD_ANIMALDICTORY_B a ON a.ID = w.ANIMAL_ID ") .append(" WHERE NVL(w.IS_DELETED, 0) = 0 ") .append(" AND NVL(a.IS_DELETED, 0) = 0 ") @@ -1247,7 +1347,7 @@ public class WeFishServiceImpl implements WeFishService { .append(" GROUP BY t.stcd ") .append(") agg ON agg.stcd = ai.STCD ") .append("WHERE NVL(ai.IS_DELETED, 0) = 0 ") - .append(" AND ai.STTP = 'WVA' ") +// .append(" AND ai.STTP = 'WVA' ") .append(" AND ai.LGTD IS NOT NULL "); if (StrUtil.isNotBlank(baseId)) { paramMap.put("weAnimalPointBaseId", baseId); @@ -1347,7 +1447,7 @@ public class WeFishServiceImpl implements WeFishService { "aim.STCD AS stcd, aim.STNM AS stnm, " + "MAX(w.TM) AS tm, TO_CHAR(MAX(w.TM), 'yyyy') AS yr, " + "COUNT(*) AS acnt " + - "FROM SD_WVA_R w " + + "FROM SD_ANML_R w " + "INNER JOIN SD_ANIMALDICTORY_B a ON a.ID = w.ANIMAL_ID " + " AND NVL(a.IS_DELETED, 0) = 0 " + " AND NVL(a.ENABLE, 1) = 1 " + @@ -3735,25 +3835,24 @@ public class WeFishServiceImpl implements WeFishService { private String buildWeVmsstbprptViewSql() { return "SELECT " + - "ai.STCD AS id, " + - "ai.STTP AS sttpCode, " + - "ai.STLC AS stlc, " + - "ai.STCD AS stcd, " + - "ai.STNM AS stnm, " + - "ai.BOX AS box, " + - "ai.RSTCD AS rstcd, " + - "eng.ENNM AS ennm, " + - "ai.BASE_ID AS baseId, " + - "hb.BASENAME AS baseName, " + - "ai.HBRVCD AS hbrvcd, " + - "ai.RVCD AS rvcd, " + - "ai.ORDER_INDEX AS orderIndex, " + - "ai.LGTD AS lgtd, " + - "ai.LTTD AS lttd " + - "FROM SD_AIMONITOR_B_H ai " + - "LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = ai.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 " + - "LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = ai.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 " + - "WHERE NVL(ai.IS_DELETED, 0) = 0"; + "src.STCD AS id, " + + "src.STTP_CODE AS sttpCode, " + + "src.STLC AS stlc, " + + "src.STCD AS stcd, " + + "src.STNM AS stnm, " + + "src.BOX AS box, " + + "src.RSTCD AS rstcd, " + + "src.ENNM AS ennm, " + + "src.BASE_ID AS baseId, " + + "src.BASE_NAME AS baseName, " + + "src.HBRVCD AS hbrvcd, " + + "src.RVCD AS rvcd, " + + "src.ORDER_INDEX AS orderIndex, " + + "src.LGTD AS lgtd, " + + "src.LTTD AS lttd " + + "FROM V_MS_STBPRP_T src " + + "WHERE 1=1 " + + "AND NVL(src.IS_DELETED, 0) = 0"; } private String buildWeWvaViewSql() {