fix: 优化逻辑
This commit is contained in:
parent
de04f0ec49
commit
c234d57ccd
@ -13,12 +13,7 @@ import com.yfd.platform.common.GroupingInfo;
|
|||||||
import com.yfd.platform.common.MicroservicDynamicSQLMapper;
|
import com.yfd.platform.common.MicroservicDynamicSQLMapper;
|
||||||
import com.yfd.platform.common.PageInfo;
|
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.*;
|
||||||
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;
|
|
||||||
import com.yfd.platform.env.wq.service.EnvWqDataService;
|
import com.yfd.platform.env.wq.service.EnvWqDataService;
|
||||||
import com.yfd.platform.env.wt.entity.vo.WbsbVo;
|
import com.yfd.platform.env.wt.entity.vo.WbsbVo;
|
||||||
import com.yfd.platform.utils.KendoUtil;
|
import com.yfd.platform.utils.KendoUtil;
|
||||||
@ -28,14 +23,15 @@ import com.yfd.platform.utils.SecurityUtils;
|
|||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
|
import java.util.Date;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.math.BigDecimal;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@ -146,9 +142,257 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DataSourceResult getAlongWqKendoListCust(DataSourceRequest dataSourceRequest) {
|
public DataSourceResult getAlongWqKendoListCust(DataSourceRequest dataSourceRequest) {
|
||||||
|
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
|
||||||
|
String rvcd = findFilterFieldValue(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), "rvcd");
|
||||||
|
if (StrUtil.isBlank(rvcd) && loadOptions != null) {
|
||||||
|
rvcd = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "rvcd");
|
||||||
|
}
|
||||||
|
String baseId = findFilterFieldValue(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), "baseId");
|
||||||
|
if (StrUtil.isBlank(baseId) && loadOptions != null) {
|
||||||
|
baseId = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "baseId");
|
||||||
|
}
|
||||||
|
String tm = findFilterFieldValue(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), "tm");
|
||||||
|
if (StrUtil.isBlank(tm) && loadOptions != null) {
|
||||||
|
tm = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "tm");
|
||||||
|
}
|
||||||
|
if (StrUtil.isBlank(tm)) {
|
||||||
|
throw new BizException("时间(tm)不能为空.");
|
||||||
|
}
|
||||||
|
|
||||||
|
String[] tmRange = normalizeTmRange(tm);
|
||||||
|
Map<String, Object> maxTmParamMap = new HashMap<>();
|
||||||
|
if (StrUtil.isNotBlank(rvcd)) {
|
||||||
|
maxTmParamMap.put("rvcd", rvcd);
|
||||||
|
}
|
||||||
|
if (StrUtil.isNotBlank(baseId)) {
|
||||||
|
maxTmParamMap.put("baseId", baseId);
|
||||||
|
}
|
||||||
|
if (tmRange != null) {
|
||||||
|
maxTmParamMap.put("startTime", tmRange[0]);
|
||||||
|
maxTmParamMap.put("endTime", tmRange[1]);
|
||||||
|
}
|
||||||
|
List<Map<String, Object>> maxTmRows = microservicDynamicSQLMapper.pageAllList(
|
||||||
|
null,
|
||||||
|
buildAlongWqMaxTmSql(rvcd, baseId, tmRange != null),
|
||||||
|
maxTmParamMap
|
||||||
|
);
|
||||||
|
Date maxTm = null;
|
||||||
|
if (CollUtil.isNotEmpty(maxTmRows)) {
|
||||||
|
Object value = maxTmRows.get(0).get("TM");
|
||||||
|
if (value instanceof Date) {
|
||||||
|
maxTm = (Date) value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, Object> listParamMap = new HashMap<>();
|
||||||
|
if (StrUtil.isNotBlank(rvcd)) {
|
||||||
|
listParamMap.put("rvcd", rvcd);
|
||||||
|
}
|
||||||
|
if (StrUtil.isNotBlank(baseId)) {
|
||||||
|
listParamMap.put("baseId", baseId);
|
||||||
|
}
|
||||||
|
if (maxTm != null) {
|
||||||
|
listParamMap.put("maxTm", maxTm);
|
||||||
|
}
|
||||||
|
List<WqAlongVo> alongList = microservicDynamicSQLMapper.getAllListWithResultType(
|
||||||
|
buildAlongWqListSql(rvcd, baseId, maxTm != null),
|
||||||
|
listParamMap,
|
||||||
|
WqAlongVo.class
|
||||||
|
);
|
||||||
|
if (CollUtil.isEmpty(alongList)) {
|
||||||
return emptyResult();
|
return emptyResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Set<String> rstcdSet = alongList.stream()
|
||||||
|
.filter(item -> "WQ".equalsIgnoreCase(item.getSttp()))
|
||||||
|
.map(WqAlongVo::getRstcd)
|
||||||
|
.filter(StrUtil::isNotBlank)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
alongList = alongList.stream()
|
||||||
|
.filter(item -> "WQ".equalsIgnoreCase(item.getSttp()) || rstcdSet.contains(item.getStcd()))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
for (WqAlongVo item : alongList) {
|
||||||
|
item.setMinTm(maxTm);
|
||||||
|
item.setTm(maxTm);
|
||||||
|
item.setWqgrdName(getWqLevelName(item.getWqgrd()));
|
||||||
|
}
|
||||||
|
fillWqAlongLimit(alongList);
|
||||||
|
|
||||||
|
DataSourceResult<WqAlongVo> result = new DataSourceResult<>();
|
||||||
|
result.setData(alongList);
|
||||||
|
result.setTotal((long) alongList.size());
|
||||||
|
result.setAggregates(new HashMap<>());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String[] normalizeTmRange(String tm) {
|
||||||
|
if (StrUtil.isBlank(tm)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
String[] parts = tm.split(",");
|
||||||
|
if (parts.length != 2) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
String first = StrUtil.trim(parts[0]);
|
||||||
|
String second = StrUtil.trim(parts[1]);
|
||||||
|
if (StrUtil.isBlank(first) || StrUtil.isBlank(second)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return first.compareTo(second) <= 0 ? new String[]{first, second} : new String[]{second, first};
|
||||||
|
}
|
||||||
|
|
||||||
|
private String buildAlongWqMaxTmSql(String rvcd, String baseId, boolean hasTmRange) {
|
||||||
|
StringBuilder sql = new StringBuilder();
|
||||||
|
sql.append("SELECT TM FROM (")
|
||||||
|
.append("SELECT swr.TM ")
|
||||||
|
.append("FROM MS_ALONG_B mab ")
|
||||||
|
.append("INNER JOIN MS_ALONGDET_B sab ON mab.ID = sab.ALONG_ID AND mab.CODE = 'common' ")
|
||||||
|
.append("INNER JOIN SD_WQ_B_H wq ON wq.STCD = sab.STCD AND wq.STTP = 'WQ' AND NVL(wq.IS_DELETED, 0) = 0 ")
|
||||||
|
.append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = wq.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 ")
|
||||||
|
.append("LEFT JOIN (SELECT * FROM SD_WQ_R WHERE NVL(IS_DELETED, 0) = 0 ");
|
||||||
|
if (hasTmRange) {
|
||||||
|
sql.append("AND TM BETWEEN TO_DATE(#{map.startTime}, 'YYYY-MM-DD HH24:MI:SS') ")
|
||||||
|
.append("AND TO_DATE(#{map.endTime}, 'YYYY-MM-DD HH24:MI:SS') ");
|
||||||
|
}
|
||||||
|
sql.append(") swr ON swr.STCD = sab.STCD ")
|
||||||
|
.append("WHERE sab.STTP = 'WQ' ")
|
||||||
|
.append("AND NVL(mab.IS_DELETED, 0) = 0 ")
|
||||||
|
.append("AND NVL(sab.IS_DELETED, 0) = 0 ");
|
||||||
|
if (StrUtil.isNotBlank(rvcd)) {
|
||||||
|
sql.append("AND mab.RVCD = #{map.rvcd} ");
|
||||||
|
}
|
||||||
|
if (StrUtil.isNotBlank(baseId)) {
|
||||||
|
sql.append("AND eng.BASE_ID = #{map.baseId} ");
|
||||||
|
}
|
||||||
|
sql.append("AND swr.TM IS NOT NULL ")
|
||||||
|
.append("ORDER BY NVL(mab.ORDER_INDEX, 999999) ASC, NVL(sab.SORT, 999999) ASC, swr.TM DESC")
|
||||||
|
.append(") WHERE ROWNUM = 1");
|
||||||
|
return sql.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private String buildAlongWqListSql(String rvcd, String baseId, boolean hasMaxTm) {
|
||||||
|
StringBuilder sql = new StringBuilder();
|
||||||
|
sql.append("SELECT ")
|
||||||
|
.append("COALESCE(wq.STCD, engNode.STCD, sab.STCD) AS stcd, ")
|
||||||
|
.append("COALESCE(wq.RSTCD, sab.RSTCD, engNode.STCD) AS rstcd, ")
|
||||||
|
.append("COALESCE(wq.STNM, engNode.ENNM) AS stnm, ")
|
||||||
|
.append("sab.STTP AS sttp, ")
|
||||||
|
.append("swr.TM AS tm, ")
|
||||||
|
.append("swr.WTMP AS wtmp, ")
|
||||||
|
.append("swr.PH AS ph, ")
|
||||||
|
.append("swr.DOX AS dox, ")
|
||||||
|
.append("swr.CODMN AS codmn, ")
|
||||||
|
.append("swr.CODCR AS codcr, ")
|
||||||
|
.append("swr.BOD5 AS bod5, ")
|
||||||
|
.append("swr.NH3N AS nh3n, ")
|
||||||
|
.append("swr.TP AS tp, ")
|
||||||
|
.append("swr.TN AS tn, ")
|
||||||
|
.append("swr.CU AS cu, ")
|
||||||
|
.append("swr.ZN AS zn, ")
|
||||||
|
.append("swr.F AS f, ")
|
||||||
|
.append("swr.SE AS se, ")
|
||||||
|
.append("swr.ARS AS ars, ")
|
||||||
|
.append("swr.HG AS hg, ")
|
||||||
|
.append("swr.CD AS cd, ")
|
||||||
|
.append("swr.CR6 AS cr6, ")
|
||||||
|
.append("swr.PB AS pb, ")
|
||||||
|
.append("swr.CN AS cn, ")
|
||||||
|
.append("swr.VLPH AS vlph, ")
|
||||||
|
.append("swr.OIL AS oil, ")
|
||||||
|
.append("swr.LAS AS las, ")
|
||||||
|
.append("swr.S2 AS s2, ")
|
||||||
|
.append("swr.FCG AS fcg, ")
|
||||||
|
.append("swr.CL AS cl, ")
|
||||||
|
.append("swr.SO4 AS so4, ")
|
||||||
|
.append("swr.NO3 AS no3, ")
|
||||||
|
.append("swr.THRD AS thrd, ")
|
||||||
|
.append("swr.COND AS cond, ")
|
||||||
|
.append("swr.FE AS fe, ")
|
||||||
|
.append("swr.MN AS mn, ")
|
||||||
|
.append("swr.AL AS al, ")
|
||||||
|
.append("swr.CHLA AS chla, ")
|
||||||
|
.append("swr.CLARITY AS clarity, ")
|
||||||
|
.append("swr.TU AS tu, ")
|
||||||
|
.append("swr.CYANO AS cyano, ")
|
||||||
|
.append("TO_CHAR(wq.WWQTG) AS wwqtg, ")
|
||||||
|
.append("TO_CHAR(swr.WQGRD) AS wqgrd ")
|
||||||
|
.append("FROM MS_ALONG_B mab ")
|
||||||
|
.append("INNER JOIN MS_ALONGDET_B sab ON mab.ID = sab.ALONG_ID AND mab.CODE = 'common' ")
|
||||||
|
.append("LEFT JOIN SD_WQ_B_H wq ON wq.STCD = sab.STCD AND sab.STTP = 'WQ' AND NVL(wq.IS_DELETED, 0) = 0 ")
|
||||||
|
.append("LEFT JOIN SD_ENGINFO_B_H engNode ON engNode.STCD = sab.STCD AND sab.STTP = 'ENG' AND NVL(engNode.IS_DELETED, 0) = 0 ")
|
||||||
|
.append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = COALESCE(wq.RSTCD, sab.RSTCD, engNode.STCD) AND NVL(eng.IS_DELETED, 0) = 0 ")
|
||||||
|
.append("LEFT JOIN (SELECT * FROM SD_WQ_R WHERE NVL(IS_DELETED, 0) = 0 ");
|
||||||
|
if (hasMaxTm) {
|
||||||
|
sql.append("AND TM = #{map.maxTm} ");
|
||||||
|
} else {
|
||||||
|
sql.append("AND 1 = 0 ");
|
||||||
|
}
|
||||||
|
sql.append(") swr ON swr.STCD = sab.STCD ")
|
||||||
|
.append("WHERE NVL(mab.IS_DELETED, 0) = 0 ")
|
||||||
|
.append("AND NVL(sab.IS_DELETED, 0) = 0 ")
|
||||||
|
.append("AND sab.STTP IN ('ENG', 'WQ') ")
|
||||||
|
.append("AND ((sab.STTP = 'WQ' AND wq.STCD IS NOT NULL) OR (sab.STTP = 'ENG' AND engNode.STCD IS NOT NULL)) ");
|
||||||
|
if (StrUtil.isNotBlank(rvcd)) {
|
||||||
|
sql.append("AND mab.RVCD = #{map.rvcd} ");
|
||||||
|
}
|
||||||
|
if (StrUtil.isNotBlank(baseId)) {
|
||||||
|
sql.append("AND eng.BASE_ID = #{map.baseId} ");
|
||||||
|
}
|
||||||
|
sql.append("ORDER BY NVL(mab.ORDER_INDEX, 999999) ASC, NVL(sab.SORT, 999999) ASC");
|
||||||
|
return sql.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void fillWqAlongLimit(List<WqAlongVo> 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<Map<String, Object>> ruleList = microservicDynamicSQLMapper.pageAllList(null, sql, null);
|
||||||
|
if (CollUtil.isEmpty(ruleList)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Map<String, Integer> ruleDirectionMap = getWqLimitDirection(ruleList);
|
||||||
|
Map<String, List<Map<String, Object>>> levelRuleMap = ruleList.stream()
|
||||||
|
.filter(item -> StrUtil.isNotBlank(asString(item.get("lvl"))))
|
||||||
|
.collect(Collectors.groupingBy(item -> asString(item.get("lvl"))));
|
||||||
|
|
||||||
|
for (WqAlongVo item : list) {
|
||||||
|
if (StrUtil.isBlank(item.getWwqtg())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
List<Map<String, Object>> currentRules = levelRuleMap.get(item.getWwqtg());
|
||||||
|
if (CollUtil.isEmpty(currentRules)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
List<Map<String, Object>> max = new ArrayList<>();
|
||||||
|
List<Map<String, Object>> min = new ArrayList<>();
|
||||||
|
for (Map<String, Object> rule : currentRules) {
|
||||||
|
String ys = asString(rule.get("ys"));
|
||||||
|
Integer direction = ruleDirectionMap.get(ys);
|
||||||
|
Map<String, Object> maxMap = new LinkedHashMap<>();
|
||||||
|
Map<String, Object> 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DataSourceResult getMsstbprptList(DataSourceRequest dataSourceRequest) {
|
public DataSourceResult getMsstbprptList(DataSourceRequest dataSourceRequest) {
|
||||||
String groupField = "dtinType";
|
String groupField = "dtinType";
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user