diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/wq/controller/EnvWqDataController.java b/backend/src/main/java/com/yfd/platform/qgc_env/wq/controller/EnvWqDataController.java index 76f13c1f..ba23d28a 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/wq/controller/EnvWqDataController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wq/controller/EnvWqDataController.java @@ -42,6 +42,12 @@ public class EnvWqDataController { return ResponseResult.successData(envWqDataService.processDataKendoList(dataSourceRequest)); } + @PostMapping("/data/day/GetKendoListCust") + @Operation(summary = "查询水质日数据") + public ResponseResult getDayKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(envWqDataService.getDayKendoListCust(dataSourceRequest)); + } + @PostMapping("/GetStbprpYsByStcd") @Operation(summary = "水质监测数据查询") public ResponseResult GetStbprpYsByStcd(@RequestBody DataSourceRequest dataSourceRequest) { diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/wq/entity/vo/EnvWqDayDataVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/wq/entity/vo/EnvWqDayDataVo.java new file mode 100644 index 00000000..3140e45d --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wq/entity/vo/EnvWqDayDataVo.java @@ -0,0 +1,81 @@ +package com.yfd.platform.qgc_env.wq.entity.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; +import java.util.Map; + +@Data +@Schema(description = "水质日数据") +public class EnvWqDayDataVo { + private String stcd; + private String rstcd; + private String stnm; + private String stCode; + private String stName; + private String ennm; + private Date dt; + private BigDecimal wtmp; + private BigDecimal ph; + private BigDecimal dox; + private BigDecimal codmn; + private BigDecimal codcr; + private BigDecimal bod5; + private BigDecimal nh3n; + private BigDecimal tp; + private BigDecimal tn; + private BigDecimal cu; + private BigDecimal zn; + private BigDecimal f; + private BigDecimal se; + private BigDecimal ars; + private BigDecimal hg; + private BigDecimal cd; + private BigDecimal cr6; + private BigDecimal pb; + private BigDecimal cn; + private BigDecimal vlph; + private BigDecimal oil; + private BigDecimal las; + private BigDecimal s2; + private BigDecimal fcg; + private BigDecimal cl; + private BigDecimal so4; + private BigDecimal no3; + private BigDecimal thrd; + private BigDecimal cond; + private BigDecimal fe; + private BigDecimal mn; + private BigDecimal al; + private BigDecimal ss; + private BigDecimal no2; + private BigDecimal chla; + private BigDecimal clarity; + private BigDecimal tu; + private BigDecimal tod; + private BigDecimal cyano; + private String wqgrd; + private String wqgrdName; + private String wwqtg; + private String wwqtgName; + private Integer sfdb; + private String sfdbName; + private String wqSfdbhnYs; + private String wqSfdbhnYsName; + private String baseId; + private String baseName; + private String rvcdName; + private String addvcdName; + private String dtinType; + private BigDecimal qi; + private BigDecimal qo; + private Integer baseStepSort; + private Integer rvcdStepSort; + private Integer rstcdStepSort; + private Integer siteStepSort; + private List> min; + private List> max; +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/wq/service/EnvWqDataService.java b/backend/src/main/java/com/yfd/platform/qgc_env/wq/service/EnvWqDataService.java index 7e351ad7..6b473403 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/wq/service/EnvWqDataService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wq/service/EnvWqDataService.java @@ -12,6 +12,8 @@ public interface EnvWqDataService { DataSourceResult processDataKendoList(DataSourceRequest dataSourceRequest); + DataSourceResult getDayKendoListCust(DataSourceRequest dataSourceRequest); + DataSourceResult getStbprpYsByStcd(DataSourceRequest dataSourceRequest); DataSourceResult getAlongWqKendoListCust(DataSourceRequest dataSourceRequest); diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/wq/service/impl/EnvWqDataServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/wq/service/impl/EnvWqDataServiceImpl.java index 2ebee4d2..a2487669 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/wq/service/impl/EnvWqDataServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wq/service/impl/EnvWqDataServiceImpl.java @@ -143,6 +143,54 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { return result; } + @Override + public DataSourceResult getDayKendoListCust(DataSourceRequest dataSourceRequest) { + StringBuilder sql = new StringBuilder(buildEnvWqDayBaseSql()); + Map paramMap = new HashMap<>(); + String filterSql = buildEnvWqDayFilterCondition( + dataSourceRequest == null ? null : dataSourceRequest.getFilter(), + paramMap, + new int[]{0} + ); + if (StrUtil.isNotBlank(filterSql)) { + sql.append(" AND ").append(filterSql).append(" "); + } + + DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest(); + String groupBy = KendoUtil.getGroupBy(dataSourceRequest); + GroupingInfo[] groupInfos = loadOptions.getGroup(); + if (StrUtil.isNotBlank(groupBy) && groupInfos != null && groupInfos.length > 0) { + String groupedSql = buildEnvWqDayGroupSql(sql.toString(), groupBy, groupInfos); + List> list = microservicDynamicSQLMapper.pageAllList(null, groupedSql, paramMap); + DataSourceResult result = new DataSourceResult(); + if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) { + result.setData(new GroupHelper().faltGroup(list, Arrays.asList(groupInfos))); + } else { + result.setData(new GroupHelper().group(list, Arrays.asList(groupInfos))); + } + result.setTotal(0L); + result.setAggregates(new HashMap<>()); + return result; + } + + sql.append(buildEnvWqDayOrderBySql(dataSourceRequest.getSort())); + Page page = QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); + List list = microservicDynamicSQLMapper.pageAllListWithResultType( + page, + sql.toString(), + paramMap, + EnvWqDayDataVo.class + ); + fillEnvWqDayDerivedFields(list); + fillEnvWqDayLimit(list); + + DataSourceResult result = new DataSourceResult<>(); + result.setData(list); + result.setTotal(page != null ? page.getTotal() : list.size()); + result.setAggregates(new HashMap<>()); + return result; + } + @Override public DataSourceResult getStbprpYsByStcd(DataSourceRequest dataSourceRequest) { DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); @@ -917,6 +965,376 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { return sql.toString(); } + private String buildEnvWqDayBaseSql() { + return new StringBuilder() + .append("SELECT ") + .append("T.STCD AS stcd, ") + .append("T.RSTCD AS rstcd, ") + .append("T.STNM AS stnm, ") + .append("T.ST_CODE AS stCode, ") + .append("T.ST_NAME AS stName, ") + .append("T.ENNM AS ennm, ") + .append("T.DT AS dt, ") + .append("T.WTMP AS wtmp, ") + .append("T.PH AS ph, ") + .append("T.DOX AS dox, ") + .append("T.CODMN AS codmn, ") + .append("T.CODCR AS codcr, ") + .append("T.BOD5 AS bod5, ") + .append("T.NH3N AS nh3n, ") + .append("T.TP AS tp, ") + .append("T.TN AS tn, ") + .append("T.CU AS cu, ") + .append("T.ZN AS zn, ") + .append("T.F AS f, ") + .append("T.SE AS se, ") + .append("T.ARS AS ars, ") + .append("T.HG AS hg, ") + .append("T.CD AS cd, ") + .append("T.CR6 AS cr6, ") + .append("T.PB AS pb, ") + .append("T.CN AS cn, ") + .append("T.VLPH AS vlph, ") + .append("T.OIL AS oil, ") + .append("T.LAS AS las, ") + .append("T.S2 AS s2, ") + .append("T.FCG AS fcg, ") + .append("T.CL AS cl, ") + .append("T.SO4 AS so4, ") + .append("T.NO3 AS no3, ") + .append("T.THRD AS thrd, ") + .append("T.COND AS cond, ") + .append("T.FE AS fe, ") + .append("T.MN AS mn, ") + .append("T.AL AS al, ") + .append("T.SS AS ss, ") + .append("T.NO2 AS no2, ") + .append("T.CHLA AS chla, ") + .append("T.CLARITY AS clarity, ") + .append("T.TU AS tu, ") + .append("T.TOD AS tod, ") + .append("T.CYANO AS cyano, ") + .append("T.WQGRD AS wqgrd, ") + .append("T.WWQTG AS wwqtg, ") + .append("T.SFDB AS sfdb, ") + .append("T.WQ_SFDBHN_YS AS wqSfdbhnYs, ") + .append("T.BASE_ID AS baseId, ") + .append("T.BASE_NAME AS baseName, ") + .append("T.RVCD_NAME AS rvcdName, ") + .append("T.ADDVCD_NAME AS addvcdName, ") + .append("T.DTIN_TYPE AS dtinType, ") + .append("T.QI AS qi, ") + .append("T.QO AS qo, ") + .append("T.BASESTEPSORT AS baseStepSort, ") + .append("T.RVCDSTEPSORT AS rvcdStepSort, ") + .append("T.RSTCDSTEPSORT AS rstcdStepSort, ") + .append("T.SITESTEPSORT AS siteStepSort ") + .append("FROM (SELECT ") + .append("day.STCD, ") + .append("station.RSTCD, ") + .append("station.STNM, ") + .append("station.ST_CODE, ") + .append("station.ST_NAME, ") + .append("station.ENNM, ") + .append("day.DT, ") + .append("day.WTMP, day.PH, day.DOX, day.CODMN, day.CODCR, day.BOD5, day.NH3N, day.TP, day.TN, ") + .append("day.CU, day.ZN, day.F, day.SE, day.ARS, day.HG, day.CD, day.CR6, day.PB, day.CN, day.VLPH, ") + .append("day.OIL, day.LAS, day.S2, day.FCG, day.CL, day.SO4, day.NO3, day.THRD, day.COND, day.FE, day.MN, ") + .append("day.AL, day.SS, day.NO2, day.CHLA, day.CLARITY, day.TU, ") + .append("CAST(NULL AS NUMBER(15,2)) AS TOD, ") + .append("day.CYANO, day.WQGRD, station.WWQTG, day.SFDB, ") + .append("CAST(NULL AS VARCHAR2(512)) AS WQ_SFDBHN_YS, ") + .append("station.BASE_ID, station.BASE_NAME, station.RVCD_NAME, station.ADDVCD_NAME, station.DTIN_TYPE, ") + .append("dayRun.QI AS QI, dayRun.QO AS QO, ") + .append("station.BASESTEPSORT, station.RVCDSTEPSORT, station.RSTCDSTEPSORT, station.SITESTEPSORT ") + .append("FROM SD_WQDAY_S day ") + .append("INNER JOIN (").append(buildEnvWqDayStationBaseSql()).append(") station ON station.STCD = day.STCD ") + .append("LEFT JOIN (SELECT run.STCD, TRUNC(run.TM) AS DT, AVG(run.QI) AS QI, AVG(run.QO) AS QO ") + .append(" FROM SD_HYDROPW_R run ") + .append(" WHERE NVL(run.IS_DELETED, 0) = 0 ") + .append(" GROUP BY run.STCD, TRUNC(run.TM)) dayRun ") + .append(" ON station.RSTCD = dayRun.STCD AND day.DT = dayRun.DT AND station.DTIN_TYPE = '0' ") + .append("WHERE NVL(day.IS_DELETED, 0) = 0) T WHERE 1 = 1 ") + .toString(); + } + + private String buildEnvWqDayStationBaseSql() { + return "SELECT " + + "wq.STCD, " + + "wq.STNM, " + + "wq.RSTCD, " + + "eng.ENNM, " + + "wq.BASE_ID, " + + "hb.BASENAME AS BASE_NAME, " + + "eng.HBRVCD, " + + "hbrv.HBRVNM AS HBRVCD_NAME, " + + "rv.RVNM AS RVCD_NAME, " + + "addv.ADDVNM AS ADDVCD_NAME, " + + "wq.WWQTG, " + + "TO_CHAR(wq.DTIN_TYPE) AS DTIN_TYPE, " + + "wq.FHSTCD AS ST_CODE, " + + "fh.STNM AS ST_NAME, " + + "rstAlong.SORT AS RSTCDSTEPSORT, " + + "hb.ORDER_INDEX AS BASESTEPSORT, " + + "rvAlong.ORDER_INDEX AS RVCDSTEPSORT, " + + "siteAlong.SORT AS SITESTEPSORT " + + "FROM SD_WQ_B_H wq " + + "LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = wq.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 " + + "LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = wq.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 " + + "LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD AND hbrv.BASEID = wq.BASE_ID AND NVL(hbrv.IS_DELETED, 0) = 0 AND NVL(hbrv.ENABLED, 1) = 1 " + + "LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = eng.RVCD " + + "LEFT JOIN SD_ADDVCD_DIC addv ON addv.ADDVCD = eng.ADDVCD " + + "LEFT JOIN SD_FHBT_B_H fh ON fh.STCD = wq.FHSTCD AND NVL(fh.IS_DELETED, 0) = 0 " + + "LEFT JOIN MS_ALONG_B rvAlong ON rvAlong.RVCD = eng.HBRVCD AND rvAlong.CODE = 'common' AND NVL(rvAlong.IS_DELETED, 0) = 0 " + + "LEFT JOIN (SELECT det.SORT, along.RVCD, det.STCD " + + " FROM MS_ALONGDET_B det " + + " INNER JOIN MS_ALONG_B along ON det.ALONG_ID = along.ID " + + " WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(along.IS_DELETED, 0) = 0 AND along.CODE = 'common') rstAlong " + + " ON rstAlong.RVCD = eng.HBRVCD AND rstAlong.STCD = wq.RSTCD " + + "LEFT JOIN (SELECT det.SORT, along.RVCD, det.STCD " + + " FROM MS_ALONGDET_B det " + + " INNER JOIN MS_ALONG_B along ON det.ALONG_ID = along.ID " + + " WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(along.IS_DELETED, 0) = 0 AND along.CODE = 'common') siteAlong " + + " ON siteAlong.RVCD = eng.HBRVCD AND siteAlong.STCD = wq.STCD " + + "WHERE wq.STTP IN ('WQ', 'WQFB') AND NVL(wq.IS_DELETED, 0) = 0"; + } + + private String buildEnvWqDayFilterCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + if (filter == null) { + return ""; + } + if (StrUtil.isNotBlank(filter.getField())) { + return buildEnvWqDayLeafCondition(filter, paramMap, indexHolder); + } + if (CollUtil.isEmpty(filter.getFilters())) { + return ""; + } + List conditions = new ArrayList<>(); + for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) { + String childSql = buildEnvWqDayFilterCondition(child, paramMap, indexHolder); + if (StrUtil.isNotBlank(childSql)) { + conditions.add(childSql); + } + } + if (conditions.isEmpty()) { + return ""; + } + String logic = "or".equalsIgnoreCase(filter.getLogic()) ? " OR " : " AND "; + return "(" + String.join(logic, conditions) + ")"; + } + + private String buildEnvWqDayLeafCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + String column = mapEnvWqDayColumn(filter.getField()); + if (StrUtil.isBlank(column) || filter.getValue() == null) { + return ""; + } + String operator = StrUtil.blankToDefault(filter.getOperator(), "eq").toLowerCase(); + String key = "envWqDayParam" + indexHolder[0]++; + boolean dateField = "dt".equals(filter.getField()); + switch (operator) { + case "eq": + paramMap.put(key, filter.getValue()); + return dateField ? column + " = TO_DATE(#{map." + key + "}, 'YYYY-MM-DD HH24:MI:SS')" : column + " = #{map." + key + "}"; + case "neq": + paramMap.put(key, filter.getValue()); + return dateField ? column + " <> TO_DATE(#{map." + key + "}, 'YYYY-MM-DD HH24:MI:SS')" : column + " <> #{map." + key + "}"; + case "gt": + paramMap.put(key, filter.getValue()); + return dateField ? column + " > TO_DATE(#{map." + key + "}, 'YYYY-MM-DD HH24:MI:SS')" : column + " > #{map." + key + "}"; + case "gte": + paramMap.put(key, filter.getValue()); + return dateField ? column + " >= TO_DATE(#{map." + key + "}, 'YYYY-MM-DD HH24:MI:SS')" : column + " >= #{map." + key + "}"; + case "lt": + paramMap.put(key, filter.getValue()); + return dateField ? column + " < TO_DATE(#{map." + key + "}, 'YYYY-MM-DD HH24:MI:SS')" : column + " < #{map." + key + "}"; + case "lte": + paramMap.put(key, filter.getValue()); + return dateField ? column + " <= TO_DATE(#{map." + key + "}, 'YYYY-MM-DD HH24:MI:SS')" : column + " <= #{map." + key + "}"; + case "contains": + paramMap.put(key, "%" + filter.getValue() + "%"); + return column + " LIKE #{map." + key + "}"; + default: + return ""; + } + } + + private String mapEnvWqDayColumn(String field) { + if (StrUtil.isBlank(field)) { + return null; + } + return switch (field) { + case "baseName" -> "T.BASE_NAME"; + case "stnm" -> "T.STNM"; + case "wwqtg" -> "T.WWQTG"; + case "baseId" -> "T.BASE_ID"; + case "rstcd" -> "T.RSTCD"; + case "ennm" -> "T.ENNM"; + case "stCode" -> "T.ST_CODE"; + case "stName" -> "T.ST_NAME"; + case "stcd" -> "T.STCD"; + case "dt" -> "T.DT"; + case "wqgrd" -> "T.WQGRD"; + case "ph" -> "T.PH"; + case "dox" -> "T.DOX"; + case "codmn" -> "T.CODMN"; + case "codcr" -> "T.CODCR"; + case "bod5" -> "T.BOD5"; + case "nh3n" -> "T.NH3N"; + case "tp" -> "T.TP"; + case "tn" -> "T.TN"; + case "cu" -> "T.CU"; + case "zn" -> "T.ZN"; + case "f" -> "T.F"; + case "se" -> "T.SE"; + case "ars" -> "T.ARS"; + case "hg" -> "T.HG"; + case "cd" -> "T.CD"; + case "cr6" -> "T.CR6"; + case "pb" -> "T.PB"; + case "cn" -> "T.CN"; + case "vlph" -> "T.VLPH"; + case "oil" -> "T.OIL"; + case "las" -> "T.LAS"; + case "s2" -> "T.S2"; + case "fcg" -> "T.FCG"; + case "cl" -> "T.CL"; + case "so4" -> "T.SO4"; + case "no3" -> "T.NO3"; + case "thrd" -> "T.THRD"; + case "cond" -> "T.COND"; + case "fe" -> "T.FE"; + case "mn" -> "T.MN"; + case "al" -> "T.AL"; + case "ss" -> "T.SS"; + case "no2" -> "T.NO2"; + case "chla" -> "T.CHLA"; + case "clarity" -> "T.CLARITY"; + case "tu" -> "T.TU"; + case "cyano" -> "T.CYANO"; + case "sfdb" -> "T.SFDB"; + case "wtmp" -> "T.WTMP"; + case "dtinType" -> "T.DTIN_TYPE"; + case "tod" -> "T.TOD"; + case "wqSfdbhnYs" -> "T.WQ_SFDBHN_YS"; + case "rvcdName" -> "T.RVCD_NAME"; + case "addvcdName" -> "T.ADDVCD_NAME"; + case "qi" -> "T.QI"; + case "qo" -> "T.QO"; + case "siteStepSort" -> "T.SITESTEPSORT"; + case "baseStepSort" -> "T.BASESTEPSORT"; + case "rvcdStepSort" -> "T.RVCDSTEPSORT"; + case "rstcdStepSort" -> "T.RSTCDSTEPSORT"; + default -> null; + }; + } + + private String buildEnvWqDayGroupSql(String baseSql, String groupBy, GroupingInfo[] groupInfos) { + StringBuilder sql = new StringBuilder("SELECT "); + List groupFields = new ArrayList<>(); + for (GroupingInfo item : groupInfos) { + if (item != null && StrUtil.isNotBlank(item.getSelector())) { + groupFields.add(item.getSelector()); + } + } + sql.append(String.join(", ", groupFields)); + for (GroupingInfo item : groupInfos) { + sql.append(", COUNT(*) AS count_").append(item.getSelector()).append(" "); + } + sql.append("FROM (").append(baseSql).append(") T ").append(groupBy); + return sql.toString(); + } + + private String buildEnvWqDayOrderBySql(List sortList) { + if (sortList == null || sortList.isEmpty()) { + return " ORDER BY T.DT DESC NULLS LAST, T.BASESTEPSORT ASC NULLS LAST, T.RVCDSTEPSORT ASC NULLS LAST, T.RSTCDSTEPSORT ASC NULLS LAST, T.SITESTEPSORT ASC NULLS LAST, T.STCD ASC"; + } + StringBuilder sql = new StringBuilder(" ORDER BY "); + boolean appended = false; + for (DataSourceRequest.SortDescriptor sortDescriptor : sortList) { + if (sortDescriptor == null || StrUtil.isBlank(sortDescriptor.getField())) { + continue; + } + String column = mapEnvWqDayColumn(sortDescriptor.getField()); + if (column == null) { + continue; + } + if (appended) { + sql.append(", "); + } + sql.append(column).append(" ") + .append("desc".equalsIgnoreCase(sortDescriptor.getDir()) ? "DESC" : "ASC") + .append(" NULLS LAST"); + appended = true; + } + return appended ? sql.toString() : " ORDER BY T.DT DESC NULLS LAST, T.BASESTEPSORT ASC NULLS LAST, T.RVCDSTEPSORT ASC NULLS LAST, T.RSTCDSTEPSORT ASC NULLS LAST, T.SITESTEPSORT ASC NULLS LAST, T.STCD ASC"; + } + + private void fillEnvWqDayDerivedFields(List list) { + if (CollUtil.isEmpty(list)) { + return; + } + for (EnvWqDayDataVo item : list) { + item.setWqgrdName(getWqLevelName(item.getWqgrd())); + item.setWwqtgName(getWqLevelName(item.getWwqtg())); + item.setSfdbName(getSfdbName(item.getSfdb())); + item.setWqSfdbhnYsName(convertWqFactors(item.getWqSfdbhnYs())); + } + } + + private void fillEnvWqDayLimit(List list) { + if (CollUtil.isEmpty(list)) { + return; + } + String sql = "SELECT t2.YS AS \"ys\", t2.MIN_VAL AS \"minVal\", t2.MAX_VAL AS \"maxVal\", t2.LVL AS \"lvl\" " + + "FROM MS_WARN_RULE_B t1 " + + "INNER JOIN MS_WARN_RULE_DETAIL_B t2 ON t1.ID = t2.RULE_ID " + + "WHERE t1.RULE_TYPE = 'WQLVL'"; + List> ruleList = microservicDynamicSQLMapper.pageAllList(null, sql, null); + if (CollUtil.isEmpty(ruleList)) { + return; + } + Map ruleDirectionMap = getWqLimitDirection(ruleList); + Map>> levelRuleMap = ruleList.stream() + .filter(item -> StrUtil.isNotBlank(asString(item.get("lvl")))) + .collect(Collectors.groupingBy(item -> asString(item.get("lvl")))); + + for (EnvWqDayDataVo item : list) { + if (StrUtil.isBlank(item.getWwqtg())) { + continue; + } + List> currentRules = levelRuleMap.get(item.getWwqtg()); + if (CollUtil.isEmpty(currentRules)) { + continue; + } + List> max = new ArrayList<>(); + List> min = new ArrayList<>(); + for (Map rule : currentRules) { + String ys = asString(rule.get("ys")); + Integer direction = ruleDirectionMap.get(ys); + Map maxMap = new LinkedHashMap<>(); + Map minMap = new LinkedHashMap<>(); + if (direction != null && direction == 2) { + maxMap.put(ys, rule.get("maxVal")); + minMap.put(ys, rule.get("minVal")); + max.add(maxMap); + min.add(minMap); + } else if (direction != null && direction == 1) { + minMap.put(ys, rule.get("minVal")); + min.add(minMap); + } else { + maxMap.put(ys, rule.get("maxVal")); + max.add(maxMap); + } + } + item.setMax(max); + item.setMin(min); + } + } + private String buildEnvWqDataStationBaseSql() { return "SELECT " + "wq.STCD, " +