fix: 优化水质接口
This commit is contained in:
parent
767a7ac8a5
commit
914a3b68d8
@ -197,13 +197,10 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
|
|||||||
@Override
|
@Override
|
||||||
public DataSourceResult getVmsstbprptList(DataSourceRequest dataSourceRequest) {
|
public DataSourceResult getVmsstbprptList(DataSourceRequest dataSourceRequest) {
|
||||||
DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest();
|
DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest();
|
||||||
String mway = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "mway");
|
String sttpCode = findFilterFieldValue(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), "sttpCode");
|
||||||
String sttpCode = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "sttpCode");
|
if (StrUtil.isBlank(sttpCode)) {
|
||||||
String dtinType = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "dtinType");
|
sttpCode = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "sttpCode");
|
||||||
String rstcd = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "rstcd");
|
}
|
||||||
String stnm = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "stnm");
|
|
||||||
String coenvwState = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "coenvwState");
|
|
||||||
|
|
||||||
StringBuilder sql = new StringBuilder();
|
StringBuilder sql = new StringBuilder();
|
||||||
boolean queryEngDirectly = "ENG".equalsIgnoreCase(sttpCode);
|
boolean queryEngDirectly = "ENG".equalsIgnoreCase(sttpCode);
|
||||||
if (queryEngDirectly) {
|
if (queryEngDirectly) {
|
||||||
@ -255,48 +252,17 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Map<String, Object> paramMap = new HashMap<>();
|
Map<String, Object> paramMap = new HashMap<>();
|
||||||
if (!queryEngDirectly && StrUtil.isNotBlank(mway)) {
|
String filterSql = buildVmsstbprptFilterCondition(
|
||||||
paramMap.put("mway", mway);
|
dataSourceRequest == null ? null : dataSourceRequest.getFilter(),
|
||||||
sql.append("AND wq.MWAY = #{map.mway} ");
|
paramMap,
|
||||||
}
|
new int[]{0},
|
||||||
if (!queryEngDirectly && StrUtil.isNotBlank(sttpCode)) {
|
queryEngDirectly
|
||||||
paramMap.put("sttpCode", sttpCode);
|
);
|
||||||
sql.append("AND wq.STTP = #{map.sttpCode} ");
|
if (StrUtil.isNotBlank(filterSql)) {
|
||||||
}
|
sql.append(" AND ").append(filterSql).append(" ");
|
||||||
if (StrUtil.isNotBlank(dtinType)) {
|
|
||||||
paramMap.put("dtinType", dtinType);
|
|
||||||
if (queryEngDirectly) {
|
|
||||||
sql.append("AND NVL(eng.DTIN, 0) = #{map.dtinType} ");
|
|
||||||
} else {
|
|
||||||
sql.append("AND wq.DTIN_TYPE = #{map.dtinType} ");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (StrUtil.isNotBlank(rstcd)) {
|
|
||||||
paramMap.put("rstcd", rstcd);
|
|
||||||
if (queryEngDirectly) {
|
|
||||||
sql.append("AND eng.STCD = #{map.rstcd} ");
|
|
||||||
} else {
|
|
||||||
sql.append("AND wq.RSTCD = #{map.rstcd} ");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (StrUtil.isNotBlank(stnm)) {
|
|
||||||
paramMap.put("stnm", "%" + stnm + "%");
|
|
||||||
if (queryEngDirectly) {
|
|
||||||
sql.append("AND eng.ENNM LIKE #{map.stnm} ");
|
|
||||||
} else {
|
|
||||||
sql.append("AND wq.STNM LIKE #{map.stnm} ");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (StrUtil.isNotBlank(coenvwState)) {
|
|
||||||
paramMap.put("coenvwState", coenvwState);
|
|
||||||
if (queryEngDirectly) {
|
|
||||||
sql.append("AND CASE WHEN NVL(eng.DTIN, 0) = 1 THEN 1 ELSE 0 END = #{map.coenvwState} ");
|
|
||||||
} else {
|
|
||||||
sql.append("AND CASE WHEN recent.STCD IS NOT NULL THEN 1 ELSE 0 END = #{map.coenvwState} ");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
sql.append(buildVmsstbprptOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort(), queryEngDirectly));
|
||||||
|
|
||||||
// sql.append(buildEnvWqOrderBySql(dataSourceRequest.getSort()));
|
|
||||||
PageInfo pageInfo = QgcQueryWrapperUtil.getPageInfo(loadOptions);
|
PageInfo pageInfo = QgcQueryWrapperUtil.getPageInfo(loadOptions);
|
||||||
Page<?> page = pageInfo.getHasPageInfo() ? pageInfo.getPage() : null;
|
Page<?> page = pageInfo.getHasPageInfo() ? pageInfo.getPage() : null;
|
||||||
List<WqVmsstbprptVo> list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, WqVmsstbprptVo.class);
|
List<WqVmsstbprptVo> list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, WqVmsstbprptVo.class);
|
||||||
@ -308,6 +274,25 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String findFilterFieldValue(DataSourceRequest.FilterDescriptor filter, String field) {
|
||||||
|
if (filter == null || StrUtil.isBlank(field)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (field.equalsIgnoreCase(filter.getField()) && filter.getValue() != null) {
|
||||||
|
return String.valueOf(filter.getValue());
|
||||||
|
}
|
||||||
|
if (CollUtil.isEmpty(filter.getFilters())) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) {
|
||||||
|
String value = findFilterFieldValue(child, field);
|
||||||
|
if (StrUtil.isNotBlank(value)) {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public WqBaseInfoVo getStcdInfo(String stcd) {
|
public WqBaseInfoVo getStcdInfo(String stcd) {
|
||||||
if (StrUtil.isBlank(stcd)) {
|
if (StrUtil.isBlank(stcd)) {
|
||||||
@ -1217,6 +1202,166 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String buildVmsstbprptFilterCondition(DataSourceRequest.FilterDescriptor filter,
|
||||||
|
Map<String, Object> paramMap,
|
||||||
|
int[] indexHolder,
|
||||||
|
boolean queryEngDirectly) {
|
||||||
|
if (filter == null) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
if (StrUtil.isNotBlank(filter.getField())) {
|
||||||
|
return buildVmsstbprptLeafCondition(filter, paramMap, indexHolder, queryEngDirectly);
|
||||||
|
}
|
||||||
|
if (CollUtil.isEmpty(filter.getFilters())) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
List<String> conditions = new ArrayList<>();
|
||||||
|
for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) {
|
||||||
|
String childSql = buildVmsstbprptFilterCondition(child, paramMap, indexHolder, queryEngDirectly);
|
||||||
|
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 buildVmsstbprptLeafCondition(DataSourceRequest.FilterDescriptor filter,
|
||||||
|
Map<String, Object> paramMap,
|
||||||
|
int[] indexHolder,
|
||||||
|
boolean queryEngDirectly) {
|
||||||
|
String column = mapVmsstbprptColumn(filter.getField(), queryEngDirectly);
|
||||||
|
if (StrUtil.isBlank(column)) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
String operator = StrUtil.blankToDefault(filter.getOperator(), "eq").toLowerCase();
|
||||||
|
Object value = filter.getValue();
|
||||||
|
boolean dateField = "jcdt".equalsIgnoreCase(filter.getField());
|
||||||
|
|
||||||
|
if ("isnull".equals(operator)) {
|
||||||
|
return column + " IS NULL";
|
||||||
|
}
|
||||||
|
if ("isnotnull".equals(operator)) {
|
||||||
|
return column + " IS NOT NULL";
|
||||||
|
}
|
||||||
|
if ("in".equals(operator)) {
|
||||||
|
List<Object> values = normalizeMsstbprptValues(value);
|
||||||
|
if (values.isEmpty()) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
List<String> placeholders = new ArrayList<>();
|
||||||
|
for (Object item : values) {
|
||||||
|
String paramKey = "vmsP" + indexHolder[0]++;
|
||||||
|
paramMap.put(paramKey, item);
|
||||||
|
placeholders.add("#{map." + paramKey + "}");
|
||||||
|
}
|
||||||
|
return column + " IN (" + String.join(", ", placeholders) + ")";
|
||||||
|
}
|
||||||
|
|
||||||
|
String key = "vmsP" + indexHolder[0]++;
|
||||||
|
switch (operator) {
|
||||||
|
case "eq":
|
||||||
|
paramMap.put(key, value);
|
||||||
|
return dateField ? column + " = TO_DATE(#{map." + key + "}, 'YYYY-MM-DD HH24:MI:SS')" : column + " = #{map." + key + "}";
|
||||||
|
case "neq":
|
||||||
|
paramMap.put(key, value);
|
||||||
|
return dateField ? column + " <> TO_DATE(#{map." + key + "}, 'YYYY-MM-DD HH24:MI:SS')" : column + " <> #{map." + key + "}";
|
||||||
|
case "gt":
|
||||||
|
paramMap.put(key, value);
|
||||||
|
return dateField ? column + " > TO_DATE(#{map." + key + "}, 'YYYY-MM-DD HH24:MI:SS')" : column + " > #{map." + key + "}";
|
||||||
|
case "gte":
|
||||||
|
paramMap.put(key, value);
|
||||||
|
return dateField ? column + " >= TO_DATE(#{map." + key + "}, 'YYYY-MM-DD HH24:MI:SS')" : column + " >= #{map." + key + "}";
|
||||||
|
case "lt":
|
||||||
|
paramMap.put(key, value);
|
||||||
|
return dateField ? column + " < TO_DATE(#{map." + key + "}, 'YYYY-MM-DD HH24:MI:SS')" : column + " < #{map." + key + "}";
|
||||||
|
case "lte":
|
||||||
|
paramMap.put(key, value);
|
||||||
|
return dateField ? column + " <= TO_DATE(#{map." + key + "}, 'YYYY-MM-DD HH24:MI:SS')" : column + " <= #{map." + key + "}";
|
||||||
|
case "contains":
|
||||||
|
paramMap.put(key, "%" + value + "%");
|
||||||
|
return column + " LIKE #{map." + key + "}";
|
||||||
|
case "startswith":
|
||||||
|
paramMap.put(key, value + "%");
|
||||||
|
return column + " LIKE #{map." + key + "}";
|
||||||
|
case "endswith":
|
||||||
|
paramMap.put(key, "%" + value);
|
||||||
|
return column + " LIKE #{map." + key + "}";
|
||||||
|
default:
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String mapVmsstbprptColumn(String field, boolean queryEngDirectly) {
|
||||||
|
if (StrUtil.isBlank(field)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (queryEngDirectly) {
|
||||||
|
return switch (field) {
|
||||||
|
case "baseName" -> "hb.BASENAME";
|
||||||
|
case "baseId" -> "hb.BASEID";
|
||||||
|
case "stnm", "ennm" -> "eng.ENNM";
|
||||||
|
case "jcdt" -> "eng.JCDT";
|
||||||
|
case "stindx" -> "NULL";
|
||||||
|
case "coenvwState", "dtin", "dtinType" -> "CASE WHEN NVL(eng.DTIN, 0) = 1 THEN 1 ELSE 0 END";
|
||||||
|
case "sttpCode" -> "'ENG'";
|
||||||
|
case "stcd", "rstcd" -> "eng.STCD";
|
||||||
|
case "dvtp" -> "eng.DVTP";
|
||||||
|
case "baseStepSort" -> "hb.ORDER_INDEX";
|
||||||
|
case "hbrvcd" -> "eng.HBRVCD";
|
||||||
|
case "rstcdStepSort", "siteStepSort" -> "eng.ORDER_INDEX";
|
||||||
|
default -> null;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return switch (field) {
|
||||||
|
case "baseName" -> "hb.BASENAME";
|
||||||
|
case "baseId" -> "hb.BASEID";
|
||||||
|
case "stnm" -> "wq.STNM";
|
||||||
|
case "ennm" -> "eng.ENNM";
|
||||||
|
case "jcdt" -> "wq.JCDT";
|
||||||
|
case "stindx" -> "wq.STINDX";
|
||||||
|
case "coenvwState" -> "CASE WHEN recent.STCD IS NOT NULL THEN 1 ELSE 0 END";
|
||||||
|
case "sttpCode" -> "wq.STTP";
|
||||||
|
case "stcd" -> "wq.STCD";
|
||||||
|
case "rstcd" -> "wq.RSTCD";
|
||||||
|
case "dvtp" -> "eng.DVTP";
|
||||||
|
case "baseStepSort" -> "hb.ORDER_INDEX";
|
||||||
|
case "hbrvcd" -> "eng.HBRVCD";
|
||||||
|
case "rstcdStepSort" -> "eng.ORDER_INDEX";
|
||||||
|
case "siteStepSort" -> "wq.ORDER_INDEX";
|
||||||
|
case "mway" -> "wq.MWAY";
|
||||||
|
case "dtinType" -> "wq.DTIN_TYPE";
|
||||||
|
case "dtin" -> "wq.DTIN";
|
||||||
|
case "isDeleted" -> "NVL(wq.IS_DELETED, 0)";
|
||||||
|
default -> null;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private String buildVmsstbprptOrderBySql(List<DataSourceRequest.SortDescriptor> sortList, boolean queryEngDirectly) {
|
||||||
|
List<String> orderColumns = new ArrayList<>();
|
||||||
|
if (sortList != null) {
|
||||||
|
for (DataSourceRequest.SortDescriptor sortDescriptor : sortList) {
|
||||||
|
if (sortDescriptor == null || StrUtil.isBlank(sortDescriptor.getField())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String column = mapVmsstbprptColumn(sortDescriptor.getField(), queryEngDirectly);
|
||||||
|
if (StrUtil.isBlank(column) || "NULL".equalsIgnoreCase(column)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String dir = ("desc".equalsIgnoreCase(sortDescriptor.getDir()) || "des".equalsIgnoreCase(sortDescriptor.getDir())) ? "DESC" : "ASC";
|
||||||
|
orderColumns.add(column + " " + dir);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (orderColumns.isEmpty()) {
|
||||||
|
return " ORDER BY hb.ORDER_INDEX ASC NULLS LAST, eng.HBRVCD ASC NULLS LAST, eng.ORDER_INDEX ASC NULLS LAST"
|
||||||
|
+ (queryEngDirectly ? ", eng.ORDER_INDEX ASC NULLS LAST" : ", wq.ORDER_INDEX ASC NULLS LAST");
|
||||||
|
}
|
||||||
|
return " ORDER BY " + String.join(", ", orderColumns);
|
||||||
|
}
|
||||||
|
|
||||||
private String buildMsstbprptFilterCondition(DataSourceRequest.FilterDescriptor filter,
|
private String buildMsstbprptFilterCondition(DataSourceRequest.FilterDescriptor filter,
|
||||||
Map<String, Object> paramMap,
|
Map<String, Object> paramMap,
|
||||||
int[] indexHolder) {
|
int[] indexHolder) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user