feat: 水质监测信息查询

This commit is contained in:
tangwei 2026-05-28 08:31:51 +08:00
parent e47787771d
commit 2b471d58d7
4 changed files with 222 additions and 4 deletions

View File

@ -41,10 +41,10 @@ public class EnvWqDataController {
return ResponseResult.successData(null); return ResponseResult.successData(null);
} }
@PostMapping("/GetStTbYsBVoKendoListCust") @PostMapping("/stTbYs/GetStTbYsBVoKendoListCust")
@Operation(summary = "水质统计分析") @Operation(summary = "水质监测信息查询")
public ResponseResult GetStTbYsBVoKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { public ResponseResult getStTbYsBVoKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(null); return ResponseResult.successData(envWqDataService.getStTbYsBVoKendoListCust(dataSourceRequest));
} }
@PostMapping("/data/noAuth/GetKendoListCust") @PostMapping("/data/noAuth/GetKendoListCust")

View File

@ -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;
}

View File

@ -19,4 +19,6 @@ public interface EnvWqDataService {
WqBaseInfoVo getStcdInfo(String stcd); WqBaseInfoVo getStcdInfo(String stcd);
DataSourceResult getWbsbList(DataSourceRequest dataSourceRequest); DataSourceResult getWbsbList(DataSourceRequest dataSourceRequest);
DataSourceResult getStTbYsBVoKendoListCust(DataSourceRequest dataSourceRequest);
} }

View File

@ -15,6 +15,7 @@ import com.yfd.platform.common.PageInfo;
import com.yfd.platform.common.exception.BizException; import com.yfd.platform.common.exception.BizException;
import com.yfd.platform.env.wq.entity.vo.EnvWqDataVo; 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.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.WqBaseInfoVo;
import com.yfd.platform.env.wq.entity.vo.WqMsstbprptGroupVo; import com.yfd.platform.env.wq.entity.vo.WqMsstbprptGroupVo;
import com.yfd.platform.env.wq.entity.vo.WqVmsstbprptVo; import com.yfd.platform.env.wq.entity.vo.WqVmsstbprptVo;
@ -1718,4 +1719,180 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
result.setAggregates(new HashMap<>()); result.setAggregates(new HashMap<>());
return result; 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<String, Object> 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<StTbYsVo> list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, StTbYsVo.class);
DataSourceResult<StTbYsVo> 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<String, Object> paramMap,
int[] paramIndex) {
if (root == null) {
return "";
}
if (StrUtil.isNotBlank(root.getField())) {
return buildStTbYsLeafCondition(root, paramMap, paramIndex);
}
if (CollUtil.isEmpty(root.getFilters())) {
return "";
}
List<String> 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<String, Object> 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<String> 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<DataSourceRequest.SortDescriptor> sortList) {
if (CollUtil.isEmpty(sortList)) {
return " ORDER BY LOWER(t.TB_NAME) ASC, NVL(y.ORDER_INDEX, 999999) ASC, y.YS ASC";
}
List<String> 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);
}
} }