feat: 水生生态调查-水质数据列表
This commit is contained in:
parent
511745c1d0
commit
2b0709036c
@ -173,4 +173,10 @@ public class WeFishController {
|
||||
public ResponseResult getWeWtR(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
return ResponseResult.successData(weFishService.getWeWtR(dataSourceRequest));
|
||||
}
|
||||
|
||||
@PostMapping("/we/wewqr/GetKendoListCust")
|
||||
@Operation(summary = "水生生态调查-水质数据列表")
|
||||
public ResponseResult getWeWqR(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
return ResponseResult.successData(weFishService.getWeWqR(dataSourceRequest));
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,51 @@
|
||||
package com.yfd.platform.qgc_env.wte.entity.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
@Data
|
||||
public class WeWqVo {
|
||||
private String stcd;
|
||||
private String dcpc;
|
||||
private String name;
|
||||
private Date tm;
|
||||
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 chla;
|
||||
private BigDecimal clarity;
|
||||
private BigDecimal tu;
|
||||
private BigDecimal cyano;
|
||||
private String fid;
|
||||
private Integer parameter;
|
||||
}
|
||||
@ -60,4 +60,6 @@ public interface WeFishService {
|
||||
DataSourceResult getWeYr(String stcd);
|
||||
|
||||
DataSourceResult<WeWtVo> getWeWtR(DataSourceRequest dataSourceRequest);
|
||||
|
||||
DataSourceResult<WeWqVo> getWeWqR(DataSourceRequest dataSourceRequest);
|
||||
}
|
||||
|
||||
@ -1186,7 +1186,7 @@ public class WeFishServiceImpl implements WeFishService {
|
||||
StringBuilder sql = new StringBuilder();
|
||||
sql.append("SELECT t.DCPC, t.STCD, t1.WT AS wt, t.TM FROM SD_WE_R t ")
|
||||
.append("INNER JOIN SD_WEWT_R t1 ON t.ID = t1.WER_ID ")
|
||||
.append("WHERE NVL(t.IS_DELETED, 0) = 0 AND NVL(t.STATUS, 1) = 1 AND NVL(t1.IS_DELETED, 0) = 0 ");
|
||||
.append("WHERE NVL(t.IS_DELETED, 0) = 0 AND NVL(t1.IS_DELETED, 0) = 0 ");
|
||||
|
||||
String filterSql = buildWeWtFilterCondition(
|
||||
dataSourceRequest == null ? null : dataSourceRequest.getFilter(),
|
||||
@ -1379,6 +1379,251 @@ public class WeFishServiceImpl implements WeFishService {
|
||||
return " ORDER BY " + String.join(", ", orderByParts);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DataSourceResult<WeWqVo> getWeWqR(DataSourceRequest dataSourceRequest) {
|
||||
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
|
||||
GroupingInfo[] groupInfos = loadOptions == null ? null : loadOptions.getGroup();
|
||||
Map<String, Object> paramMap = new HashMap<>();
|
||||
|
||||
StringBuilder sql = new StringBuilder();
|
||||
sql.append("SELECT t.DCPC, t.STCD, t1.TM, t1.NAME, t1.PH, t1.DOX, t1.CODMN, t1.CODCR, t1.BOD5, t1.NH3N ")
|
||||
.append(", t1.TP, t1.TN, t1.CU, t1.ZN, t1.F, t1.SE, t1.ARS, t1.HG, t1.CD, t1.CR6, t1.PB, t1.CN, t1.VLPH, t1.OIL ")
|
||||
.append(", t1.LAS, t1.S2, t1.FCG, t1.CL, t1.SO4, t1.NO3, t1.THRD, t1.COND, t1.FE, t1.MN, t1.AL, t1.CHLA ")
|
||||
.append(", t1.CLARITY, t1.TU, t1.CYANO, t1.FID, t1.PARAMETER ")
|
||||
.append("FROM SD_WE_R t ")
|
||||
.append("INNER JOIN SD_WEWQ_R t1 ON t.ID = t1.WER_ID ")
|
||||
.append("WHERE NVL(t.IS_DELETED, 0) = 0 AND NVL(t1.IS_DELETED, 0) = 0 ");
|
||||
|
||||
String filterSql = buildWeWqFilterCondition(
|
||||
dataSourceRequest == null ? null : dataSourceRequest.getFilter(),
|
||||
paramMap,
|
||||
new int[]{0}
|
||||
);
|
||||
if (StrUtil.isNotBlank(filterSql)) {
|
||||
sql.append("AND ").append(filterSql).append(" ");
|
||||
}
|
||||
|
||||
DataSourceResult<WeWqVo> result = new DataSourceResult<>();
|
||||
if (CollUtil.isNotEmpty(dataSourceRequest == null ? null : dataSourceRequest.getGroup())) {
|
||||
String groupBy = KendoUtil.getGroupBy(dataSourceRequest);
|
||||
if (StrUtil.isNotBlank(groupBy)) {
|
||||
List<String> groupFields = new ArrayList<>();
|
||||
for (GroupingInfo item : groupInfos) {
|
||||
if (item != null && StrUtil.isNotBlank(item.getSelector())) {
|
||||
groupFields.add(item.getSelector());
|
||||
}
|
||||
}
|
||||
StringBuilder temp = new StringBuilder();
|
||||
temp.append("SELECT ").append(String.join(",", groupFields)).append(", count(*) as ");
|
||||
if (groupInfos.length > 1) {
|
||||
temp.append("count");
|
||||
} else {
|
||||
temp.append("count_").append(String.join("_", groupFields));
|
||||
}
|
||||
String groupedSql = temp.append(" FROM ( ").append(sql).append(" ) ").append(groupBy).toString();
|
||||
List<Map<String, Object>> rows = microservicDynamicSQLMapper.getAllList(groupedSql, paramMap);
|
||||
if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) {
|
||||
result.setData((List<WeWqVo>) (List<?>) new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos)));
|
||||
} else {
|
||||
result.setData((List<WeWqVo>) (List<?>) new GroupHelper().group(rows, Arrays.asList(groupInfos)));
|
||||
}
|
||||
result.setTotal((long) rows.size());
|
||||
result.setAggregates(new HashMap<>());
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
sql.append(buildWeWqOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort()));
|
||||
|
||||
Page<?> page = loadOptions == null ? null
|
||||
: QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
|
||||
List<WeWqVo> list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, WeWqVo.class);
|
||||
|
||||
result.setData(list);
|
||||
result.setTotal(page != null ? page.getTotal() : list.size());
|
||||
result.setAggregates(new HashMap<>());
|
||||
return result;
|
||||
}
|
||||
|
||||
private String buildWeWqFilterCondition(DataSourceRequest.FilterDescriptor filter,
|
||||
Map<String, Object> paramMap,
|
||||
int[] indexHolder) {
|
||||
if (filter == null) {
|
||||
return "";
|
||||
}
|
||||
List<String> conditions = new ArrayList<>();
|
||||
List<DataSourceRequest.FilterDescriptor> filters = filter.getFilters();
|
||||
if (CollUtil.isNotEmpty(filters)) {
|
||||
for (DataSourceRequest.FilterDescriptor child : filters) {
|
||||
String condition = buildWeWqFilterCondition(child, paramMap, indexHolder);
|
||||
if (StrUtil.isNotBlank(condition)) {
|
||||
conditions.add(condition);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
String leafCondition = buildWeWqLeafCondition(filter, paramMap, indexHolder);
|
||||
if (StrUtil.isNotBlank(leafCondition)) {
|
||||
conditions.add(leafCondition);
|
||||
}
|
||||
}
|
||||
if (conditions.isEmpty()) {
|
||||
return "";
|
||||
}
|
||||
String logic = "or".equalsIgnoreCase(filter.getLogic()) ? " OR " : " AND ";
|
||||
return "(" + String.join(logic, conditions) + ")";
|
||||
}
|
||||
|
||||
private String buildWeWqLeafCondition(DataSourceRequest.FilterDescriptor filter,
|
||||
Map<String, Object> paramMap,
|
||||
int[] indexHolder) {
|
||||
String column = mapWeWqColumn(filter.getField());
|
||||
if (StrUtil.isBlank(column)) {
|
||||
return "";
|
||||
}
|
||||
String operator = StrUtil.blankToDefault(filter.getOperator(), "eq").toLowerCase();
|
||||
if ("isnull".equals(operator)) {
|
||||
return column + " IS NULL";
|
||||
}
|
||||
if ("isnotnull".equals(operator)) {
|
||||
return column + " IS NOT NULL";
|
||||
}
|
||||
if ("isempty".equals(operator)) {
|
||||
return "(" + column + " IS NULL OR " + column + " = '')";
|
||||
}
|
||||
if ("isnotempty".equals(operator)) {
|
||||
return "(" + column + " IS NOT NULL AND " + column + " <> '')";
|
||||
}
|
||||
if ("in".equals(operator) || "ni".equals(operator)) {
|
||||
List<Object> values = normalizeWeFishQgcValues(filter.getValue());
|
||||
if (values.isEmpty()) {
|
||||
return "";
|
||||
}
|
||||
List<String> placeholders = new ArrayList<>();
|
||||
boolean isDateField = "t1.tm".equals(column);
|
||||
for (Object value : values) {
|
||||
String paramKey = "weWqParam" + indexHolder[0]++;
|
||||
paramMap.put(paramKey, value);
|
||||
if (isDateField) {
|
||||
String text = String.valueOf(value).trim();
|
||||
if (text.length() <= 10) {
|
||||
placeholders.add("TO_DATE(#{map." + paramKey + "}, 'YYYY-MM-DD')");
|
||||
} else {
|
||||
placeholders.add("TO_DATE(#{map." + paramKey + "}, 'YYYY-MM-DD HH24:MI:SS')");
|
||||
}
|
||||
} else {
|
||||
placeholders.add("#{map." + paramKey + "}");
|
||||
}
|
||||
}
|
||||
String prefix = "ni".equals(operator) ? "NOT " : "";
|
||||
return column + " " + prefix + "IN (" + String.join(", ", placeholders) + ")";
|
||||
}
|
||||
String paramKey = "weWqParam" + indexHolder[0]++;
|
||||
paramMap.put(paramKey, filter.getValue());
|
||||
boolean isDateField = "t1.tm".equals(column);
|
||||
String valueExpr;
|
||||
if (isDateField) {
|
||||
String text = String.valueOf(filter.getValue()).trim();
|
||||
if (text.length() <= 10) {
|
||||
valueExpr = "TO_DATE(#{map." + paramKey + "}, 'YYYY-MM-DD')";
|
||||
} else {
|
||||
valueExpr = "TO_DATE(#{map." + paramKey + "}, 'YYYY-MM-DD HH24:MI:SS')";
|
||||
}
|
||||
} else {
|
||||
valueExpr = "#{map." + paramKey + "}";
|
||||
}
|
||||
return switch (operator) {
|
||||
case "lt", "lessthan" -> column + " < " + valueExpr;
|
||||
case "lte", "lessthanorequals" -> column + " <= " + valueExpr;
|
||||
case "gt", "greaterthan" -> column + " > " + valueExpr;
|
||||
case "gte", "greaterthanorequals" -> column + " >= " + valueExpr;
|
||||
case "ne", "notequals" -> column + " <> " + valueExpr;
|
||||
case "contains", "doesnotcontain", "startswith", "endswith" -> {
|
||||
String pattern = switch (operator) {
|
||||
case "contains" -> "%#{map." + paramKey + "}%";
|
||||
case "doesnotcontain" -> "%#{map." + paramKey + "}%";
|
||||
case "startswith" -> "#{map." + paramKey + "}%";
|
||||
case "endswith" -> "%#{map." + paramKey + "}";
|
||||
default -> "%#{map." + paramKey + "}%";
|
||||
};
|
||||
String likePrefix = "doesnotcontain".equals(operator) ? "NOT " : "";
|
||||
yield column + " " + likePrefix + "LIKE " + pattern;
|
||||
}
|
||||
default -> column + " = " + valueExpr;
|
||||
};
|
||||
}
|
||||
|
||||
private String mapWeWqColumn(String field) {
|
||||
if (StrUtil.isBlank(field)) {
|
||||
return null;
|
||||
}
|
||||
return switch (field.toLowerCase()) {
|
||||
case "dcpc" -> "t.dcpc";
|
||||
case "stcd" -> "t.stcd";
|
||||
case "name" -> "t1.name";
|
||||
case "tm" -> "t1.tm";
|
||||
case "ph" -> "t1.ph";
|
||||
case "dox" -> "t1.dox";
|
||||
case "codmn" -> "t1.codmn";
|
||||
case "codcr" -> "t1.codcr";
|
||||
case "bod5" -> "t1.bod5";
|
||||
case "nh3n" -> "t1.nh3n";
|
||||
case "tp" -> "t1.tp";
|
||||
case "tn" -> "t1.tn";
|
||||
case "cu" -> "t1.cu";
|
||||
case "zn" -> "t1.zn";
|
||||
case "f" -> "t1.f";
|
||||
case "se" -> "t1.se";
|
||||
case "ars" -> "t1.ars";
|
||||
case "hg" -> "t1.hg";
|
||||
case "cd" -> "t1.cd";
|
||||
case "cr6" -> "t1.cr6";
|
||||
case "pb" -> "t1.pb";
|
||||
case "cn" -> "t1.cn";
|
||||
case "vlph" -> "t1.vlph";
|
||||
case "oil" -> "t1.oil";
|
||||
case "las" -> "t1.las";
|
||||
case "s2" -> "t1.s2";
|
||||
case "fcg" -> "t1.fcg";
|
||||
case "cl" -> "t1.cl";
|
||||
case "so4" -> "t1.so4";
|
||||
case "no3" -> "t1.no3";
|
||||
case "thrd" -> "t1.thrd";
|
||||
case "cond" -> "t1.cond";
|
||||
case "fe" -> "t1.fe";
|
||||
case "mn" -> "t1.mn";
|
||||
case "al" -> "t1.al";
|
||||
case "chla" -> "t1.chla";
|
||||
case "clarity" -> "t1.clarity";
|
||||
case "tu" -> "t1.tu";
|
||||
case "cyano" -> "t1.cyano";
|
||||
case "fid" -> "t1.fid";
|
||||
case "parameter" -> "t1.parameter";
|
||||
default -> null;
|
||||
};
|
||||
}
|
||||
|
||||
private String buildWeWqOrderBySql(List<DataSourceRequest.SortDescriptor> sorts) {
|
||||
if (CollUtil.isEmpty(sorts)) {
|
||||
return " ORDER BY t1.tm DESC NULLS LAST, t.stcd ASC";
|
||||
}
|
||||
List<String> orderByParts = new ArrayList<>();
|
||||
for (DataSourceRequest.SortDescriptor sort : sorts) {
|
||||
if (sort == null || StrUtil.isBlank(sort.getField())) {
|
||||
continue;
|
||||
}
|
||||
String column = mapWeWqColumn(sort.getField());
|
||||
if (StrUtil.isBlank(column)) {
|
||||
continue;
|
||||
}
|
||||
String direction = "desc".equalsIgnoreCase(sort.getDir()) ? "DESC" : "ASC";
|
||||
orderByParts.add(column + " " + direction + " NULLS LAST");
|
||||
}
|
||||
if (orderByParts.isEmpty()) {
|
||||
return " ORDER BY t1.tm DESC NULLS LAST, t.stcd ASC";
|
||||
}
|
||||
return " ORDER BY " + String.join(", ", orderByParts);
|
||||
}
|
||||
|
||||
private String buildWeFishQgcGroupSql(String baseSql, GroupingInfo[] groupInfos) {
|
||||
if (groupInfos == null || groupInfos.length == 0) {
|
||||
return baseSql;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user