From e362d42410a7a6e0056ce191e2248f2fa9aff107 Mon Sep 17 00:00:00 2001 From: tangwei Date: Fri, 10 Jul 2026 14:40:55 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E7=94=9F=E6=80=81?= =?UTF-8?q?=E6=B5=81=E9=87=8F=E9=99=90=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eq/service/impl/EngEqDataServiceImpl.java | 163 ++++++++++++++++++ .../fb/service/impl/FbStationServiceImpl.java | 2 +- 2 files changed, 164 insertions(+), 1 deletion(-) diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/impl/EngEqDataServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/impl/EngEqDataServiceImpl.java index 53472205..b1801412 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/impl/EngEqDataServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/impl/EngEqDataServiceImpl.java @@ -37,6 +37,7 @@ import com.yfd.platform.qgc_eng.eq.entity.vo.WbsbVo; import com.yfd.platform.qgc_eng.eq.entity.vo.StBaseInfo; import com.yfd.platform.qgc_eng.eq.entity.vo.StcdInfoVo; import com.yfd.platform.qgc_eng.eq.service.EngEqDataService; +import com.yfd.platform.qgc_env.wq.entity.vo.MsWarnRuleDetailBVo; import com.yfd.platform.qgc_env.wt.utils.SiteAvoidanceUtils; import com.yfd.platform.utils.QgcQueryWrapperUtil; import jakarta.annotation.Resource; @@ -6000,6 +6001,20 @@ public class EngEqDataServiceImpl implements EngEqDataService { resultList.add(eqdsVo); } + Map qecLimitQueryMap = new LinkedHashMap<>(); + Date currentDate = new Date(); + for (EngEqdsVo eqdsVo : resultList) { + if (eqdsVo == null || StrUtil.isBlank(eqdsVo.getRstcd()) || qecLimitQueryMap.containsKey(eqdsVo.getRstcd())) { + continue; + } + qecLimitQueryMap.put(eqdsVo.getRstcd(), currentDate); + } + Map qecLimitMap = getQecLimitMap(qecLimitQueryMap); + for (EngEqdsVo eqdsVo : resultList) { + MsWarnRuleDetailBVo ruleDetail = qecLimitMap.get(eqdsVo.getRstcd()); + eqdsVo.setQecLimit(ruleDetail == null ? null : ruleDetail.getMinVal()); + } + SiteAvoidanceUtils.calcSiteMapLev(resultList, EngEqdsVo::getStcd, EngEqdsVo::getLgtd, @@ -6011,4 +6026,152 @@ public class EngEqDataServiceImpl implements EngEqDataService { dataSourceResult.setTotal(page == null ? resultList.size() : page.getTotal()); return dataSourceResult; } + + private Map getQecLimitMap(Map stcdTmMap) { + Map resultMap = new HashMap<>(); + if (stcdTmMap == null || stcdTmMap.isEmpty()) { + return resultMap; + } + + Map paramMap = new HashMap<>(); + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append("rel.STCD AS stcd, ") + .append("det.ID AS id, ") + .append("det.RULE_ID AS ruleId, ") + .append("det.TB_ID AS tbId, ") + .append("det.YS AS ys, ") + .append("det.TM AS tm, ") + .append("det.BEGIN_TIME AS beginTime, ") + .append("det.END_TIME AS endTime, ") + .append("det.MIN_VAL AS minVal, ") + .append("det.MAX_VAL AS maxVal, ") + .append("det.VLSR AS vlsr, ") + .append("det.VLSR_TM AS vlsrTm ") + .append("FROM MS_WARN_RULE_STBPRP_B rel ") + .append("INNER JOIN MS_WARN_RULE_B rule ON rule.ID = rel.RULE_ID ") + .append(" AND rule.RULE_TYPE = 'EQMN' ") + .append(" AND NVL(rule.IS_DELETED, 0) = 0 ") + .append("INNER JOIN MS_WARN_RULE_DETAIL_B det ON det.RULE_ID = rule.ID ") + .append(" AND det.YS = 'QEC' ") + .append(" AND NVL(det.IS_DELETED, 0) = 0 ") + .append("INNER JOIN ST_TB_B tb ON tb.ID = det.TB_ID ") + .append(" AND tb.TB_CODE = 'QEC_R' ") + .append(" AND NVL(tb.IS_DELETED, 0) = 0 ") + .append("WHERE NVL(rel.IS_DELETED, 0) = 0 "); + appendInCondition(sql, paramMap, "rel.STCD", stcdTmMap.keySet(), "qecLimitStcd"); + sql.append("ORDER BY rel.STCD, det.TM DESC, LPAD(det.BEGIN_TIME, 4, '0') DESC NULLS LAST, ") + .append("LPAD(det.END_TIME, 4, '0') DESC NULLS LAST"); + + List> ruleRows = microservicDynamicSQLMapper.pageAllList(null, sql.toString(), paramMap); + if (CollUtil.isEmpty(ruleRows)) { + return resultMap; + } + + Map> groupedRuleMap = new HashMap<>(); + for (Map row : ruleRows) { + String stcd = asString(row.get("STCD")); + if (StrUtil.isBlank(stcd)) { + continue; + } + groupedRuleMap.computeIfAbsent(stcd, key -> new ArrayList<>()).add(toMsWarnRuleDetailBVo(row)); + } + + for (Map.Entry entry : stcdTmMap.entrySet()) { + MsWarnRuleDetailBVo detail = resolveQecLimitDetail(entry.getValue(), groupedRuleMap.get(entry.getKey())); + if (detail != null) { + resultMap.put(entry.getKey(), detail); + } + } + return resultMap; + } + + private MsWarnRuleDetailBVo resolveQecLimitDetail(Date queryDate, List ruleRows) { + if (queryDate == null || CollUtil.isEmpty(ruleRows)) { + return null; + } + Date currentTm = null; + List currentRows = new ArrayList<>(); + String monthDay = DateTimeFormatter.ofPattern("MMdd").format( + queryDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate() + ); + for (MsWarnRuleDetailBVo row : ruleRows) { + Date tm = row.getTm(); + if (tm == null || queryDate.compareTo(tm) < 0) { + continue; + } + if (currentTm != null && !currentTm.equals(tm)) { + return matchQecLimitDetail(monthDay, currentRows); + } + currentTm = tm; + currentRows.add(row); + } + if (currentTm == null) { + return null; + } + return matchQecLimitDetail(monthDay, currentRows); + } + + private MsWarnRuleDetailBVo matchQecLimitDetail(String monthDay, List ruleRows) { + MsWarnRuleDetailBVo defaultValue = null; + for (MsWarnRuleDetailBVo row : ruleRows) { + if (row == null || row.getMinVal() == null) { + continue; + } + String beginTime = normalizeMonthDay(row.getBeginTime()); + String endTime = normalizeMonthDay(row.getEndTime()); + if (StrUtil.isNotBlank(beginTime) && StrUtil.isNotBlank(endTime)) { + if (isMonthDayInRange(monthDay, beginTime, endTime)) { + return row; + } + continue; + } + if (StrUtil.isBlank(beginTime) && StrUtil.isBlank(endTime)) { + defaultValue = row; + } + } + return defaultValue; + } + + private MsWarnRuleDetailBVo toMsWarnRuleDetailBVo(Map row) { + MsWarnRuleDetailBVo vo = new MsWarnRuleDetailBVo(); + vo.setId(asString(row.get("ID"))); + vo.setRuleId(asString(row.get("RULEID"))); + vo.setTbId(asString(row.get("TBID"))); + vo.setYs(asString(row.get("YS"))); + vo.setTm(toDate(row.get("TM"))); + vo.setBeginTime(asString(row.get("BEGINTIME"))); + vo.setEndTime(asString(row.get("ENDTIME"))); + vo.setMinVal(toBigDecimal(row.get("MINVAL"))); + vo.setMaxVal(toBigDecimal(row.get("MAXVAL"))); + vo.setVlsr(asString(row.get("VLSR"))); + vo.setVlsrTm(toDate(row.get("VLSRTM"))); + return vo; + } + + private void appendInCondition(StringBuilder sql, + Map paramMap, + String column, + Iterable values, + String prefix) { + if (values == null) { + return; + } + List placeholders = new ArrayList<>(); + int index = 0; + for (String value : values) { + if (StrUtil.isBlank(value)) { + continue; + } + String key = prefix + index++; + paramMap.put(key, value.trim()); + placeholders.add("#{map." + key + "}"); + } + if (CollUtil.isEmpty(placeholders)) { + return; + } + sql.append(" AND ").append(column).append(" IN (") + .append(String.join(", ", placeholders)) + .append(") "); + } } diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fb/service/impl/FbStationServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/fb/service/impl/FbStationServiceImpl.java index 98201b27..af960fd2 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/fb/service/impl/FbStationServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fb/service/impl/FbStationServiceImpl.java @@ -4626,7 +4626,7 @@ public class FbStationServiceImpl implements FbStationService { .append("a.RSTCD AS rstcds, ") .append("a.BASE_ID AS baseId, ") .append("a.DTIN AS dtin, ") - .append("eng.ENNM AS ennm, ") + .append("COALESCE(eng.ENNM, '') AS ennm, ") .append("eng.RVCD AS rvcd, ") .append("eng.ADDVCD AS addvcd, ") .append("NVL(siteSort.SORT, 999999) AS siteStepSort, ")