diff --git a/backend/src/main/java/com/yfd/platform/env/wq/controller/EnvWqDataController.java b/backend/src/main/java/com/yfd/platform/env/wq/controller/EnvWqDataController.java index 2283d36..b286931 100644 --- a/backend/src/main/java/com/yfd/platform/env/wq/controller/EnvWqDataController.java +++ b/backend/src/main/java/com/yfd/platform/env/wq/controller/EnvWqDataController.java @@ -41,10 +41,10 @@ public class EnvWqDataController { return ResponseResult.successData(null); } - @PostMapping("/GetStTbYsBVoKendoListCust") - @Operation(summary = "水质统计分析") - public ResponseResult GetStTbYsBVoKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { - return ResponseResult.successData(null); + @PostMapping("/stTbYs/GetStTbYsBVoKendoListCust") + @Operation(summary = "水质监测信息查询") + public ResponseResult getStTbYsBVoKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(envWqDataService.getStTbYsBVoKendoListCust(dataSourceRequest)); } @PostMapping("/data/noAuth/GetKendoListCust") diff --git a/backend/src/main/java/com/yfd/platform/env/wq/entity/vo/StTbYsVo.java b/backend/src/main/java/com/yfd/platform/env/wq/entity/vo/StTbYsVo.java new file mode 100644 index 0000000..21b3251 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/env/wq/entity/vo/StTbYsVo.java @@ -0,0 +1,39 @@ +package com.yfd.platform.env.wq.entity.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +@Schema(description = "监测表要素配置") +public class StTbYsVo { + + @Schema(description = "主键") + private String id; + + @Schema(description = "所属监测表ID") + private String tbId; + + @Schema(description = "监测表名称") + private String tbName; + + @Schema(description = "监测表编码") + private String tbCode; + + @Schema(description = "备注") + private String description; + + @Schema(description = "要素编码") + private String ys; + + @Schema(description = "要素显示名称") + private String ysShowName; + + @Schema(description = "显示控制") + private String showControl; + + @Schema(description = "是否启用") + private String enable; + + @Schema(description = "排序") + private Integer orderIndex; +} diff --git a/backend/src/main/java/com/yfd/platform/env/wq/service/EnvWqDataService.java b/backend/src/main/java/com/yfd/platform/env/wq/service/EnvWqDataService.java index 29ab953..a479bd8 100644 --- a/backend/src/main/java/com/yfd/platform/env/wq/service/EnvWqDataService.java +++ b/backend/src/main/java/com/yfd/platform/env/wq/service/EnvWqDataService.java @@ -19,4 +19,6 @@ public interface EnvWqDataService { WqBaseInfoVo getStcdInfo(String stcd); DataSourceResult getWbsbList(DataSourceRequest dataSourceRequest); + + DataSourceResult getStTbYsBVoKendoListCust(DataSourceRequest dataSourceRequest); } diff --git a/backend/src/main/java/com/yfd/platform/env/wq/service/impl/EnvWqDataServiceImpl.java b/backend/src/main/java/com/yfd/platform/env/wq/service/impl/EnvWqDataServiceImpl.java index f9ffeca..1b59828 100644 --- a/backend/src/main/java/com/yfd/platform/env/wq/service/impl/EnvWqDataServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/env/wq/service/impl/EnvWqDataServiceImpl.java @@ -15,6 +15,7 @@ import com.yfd.platform.common.PageInfo; import com.yfd.platform.common.exception.BizException; import com.yfd.platform.env.wq.entity.vo.EnvWqDataVo; import com.yfd.platform.env.wq.entity.vo.EnvWqVo; +import com.yfd.platform.env.wq.entity.vo.StTbYsVo; import com.yfd.platform.env.wq.entity.vo.WqBaseInfoVo; import com.yfd.platform.env.wq.entity.vo.WqMsstbprptGroupVo; import com.yfd.platform.env.wq.entity.vo.WqVmsstbprptVo; @@ -1718,4 +1719,180 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { result.setAggregates(new HashMap<>()); return result; } + + @Override + public DataSourceResult getStTbYsBVoKendoListCust(DataSourceRequest dataSourceRequest) { + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append("y.ID AS id, ") + .append("y.TB_ID AS tbId, ") + .append("t.TB_NAME AS tbName, ") + .append("t.TB_CODE AS tbCode, ") + .append("y.DESCRIPTION AS description, ") + .append("y.YS AS ys, ") + .append("y.YS_SHOW_NAME AS ysShowName, ") + .append("y.SHOW_CONTROL AS showControl, ") + .append("TO_CHAR(y.ENABLE) AS enable, ") + .append("y.ORDER_INDEX AS orderIndex ") + .append("FROM ST_TB_YS_B y ") + .append("INNER JOIN ST_TB_B t ON t.ID = y.TB_ID AND NVL(t.IS_DELETED, 0) = 0 ") + .append("WHERE NVL(y.IS_DELETED, 0) = 0 "); + + Map paramMap = new HashMap<>(); + String filterSql = buildStTbYsFilterCondition( + dataSourceRequest == null ? null : dataSourceRequest.getFilter(), + paramMap, + new int[]{0} + ); + if (StrUtil.isNotBlank(filterSql)) { + sql.append(" AND ").append(filterSql).append(" "); + } + sql.append(buildStTbYsOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort())); + + DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); + PageInfo pageInfo = loadOptions == null ? null : QgcQueryWrapperUtil.getPageInfo(loadOptions); + Page page = pageInfo != null && pageInfo.getHasPageInfo() ? pageInfo.getPage() : null; + List list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, StTbYsVo.class); + + DataSourceResult result = new DataSourceResult<>(); + result.setData(list); + result.setTotal(page != null ? page.getTotal() : list.size()); + result.setAggregates(new HashMap<>()); + return result; + } + + private String buildStTbYsFilterCondition(DataSourceRequest.FilterDescriptor root, + Map paramMap, + int[] paramIndex) { + if (root == null) { + return ""; + } + if (StrUtil.isNotBlank(root.getField())) { + return buildStTbYsLeafCondition(root, paramMap, paramIndex); + } + if (CollUtil.isEmpty(root.getFilters())) { + return ""; + } + List parts = new ArrayList<>(); + for (DataSourceRequest.FilterDescriptor child : root.getFilters()) { + String sql = buildStTbYsFilterCondition(child, paramMap, paramIndex); + if (StrUtil.isNotBlank(sql)) { + parts.add("(" + sql + ")"); + } + } + if (parts.isEmpty()) { + return ""; + } + String logic = "or".equalsIgnoreCase(root.getLogic()) ? " OR " : " AND "; + return String.join(logic, parts); + } + + private String buildStTbYsLeafCondition(DataSourceRequest.FilterDescriptor descriptor, + Map paramMap, + int[] paramIndex) { + String column = mapStTbYsColumn(descriptor.getField()); + if (StrUtil.isBlank(column)) { + return ""; + } + String operator = StrUtil.blankToDefault(descriptor.getOperator(), "eq").toLowerCase(); + Object value = descriptor.getValue(); + if ("isnull".equals(operator)) { + return column + " IS NULL"; + } + if ("isnotnull".equals(operator)) { + return column + " IS NOT NULL"; + } + String paramName = "stTbYsParam" + paramIndex[0]++; + switch (operator) { + case "eq": + paramMap.put(paramName, value); + return column + " = #{map." + paramName + "}"; + case "neq": + paramMap.put(paramName, value); + return column + " <> #{map." + paramName + "}"; + case "contains": + paramMap.put(paramName, "%" + value + "%"); + return column + " LIKE #{map." + paramName + "}"; + case "startswith": + paramMap.put(paramName, value + "%"); + return column + " LIKE #{map." + paramName + "}"; + case "endswith": + paramMap.put(paramName, "%" + value); + return column + " LIKE #{map." + paramName + "}"; + case "gt": + paramMap.put(paramName, value); + return column + " > #{map." + paramName + "}"; + case "gte": + paramMap.put(paramName, value); + return column + " >= #{map." + paramName + "}"; + case "lt": + paramMap.put(paramName, value); + return column + " < #{map." + paramName + "}"; + case "lte": + paramMap.put(paramName, value); + return column + " <= #{map." + paramName + "}"; + case "in": + if (!(value instanceof List) || CollUtil.isEmpty((List) value)) { + return ""; + } + List placeholders = new ArrayList<>(); + int idx = 0; + for (Object item : (List) value) { + String inParam = paramName + "_" + idx++; + paramMap.put(inParam, item); + placeholders.add("#{map." + inParam + "}"); + } + return column + " IN (" + String.join(", ", placeholders) + ")"; + default: + return ""; + } + } + + private String mapStTbYsColumn(String field) { + if (StrUtil.isBlank(field)) { + return null; + } + switch (field) { + case "id": + return "y.ID"; + case "tbId": + return "y.TB_ID"; + case "tbName": + return "t.TB_NAME"; + case "tbCode": + return "t.TB_CODE"; + case "description": + return "y.DESCRIPTION"; + case "ys": + return "y.YS"; + case "ysShowName": + return "y.YS_SHOW_NAME"; + case "showControl": + return "y.SHOW_CONTROL"; + case "enable": + return "y.ENABLE"; + case "orderIndex": + return "y.ORDER_INDEX"; + default: + return null; + } + } + + private String buildStTbYsOrderBySql(List sortList) { + if (CollUtil.isEmpty(sortList)) { + return " ORDER BY LOWER(t.TB_NAME) ASC, NVL(y.ORDER_INDEX, 999999) ASC, y.YS ASC"; + } + List orders = new ArrayList<>(); + for (DataSourceRequest.SortDescriptor sortDescriptor : sortList) { + String column = mapStTbYsColumn(sortDescriptor.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + orders.add(column + " " + ("desc".equalsIgnoreCase(sortDescriptor.getDir()) ? "DESC" : "ASC")); + } + if (orders.isEmpty()) { + return " ORDER BY LOWER(t.TB_NAME) ASC, NVL(y.ORDER_INDEX, 999999) ASC, y.YS ASC"; + } + return " ORDER BY " + String.join(", ", orders); + } }