fix: 优化生态流量限制

This commit is contained in:
tangwei 2026-07-10 14:40:55 +08:00
parent 14930678e6
commit e362d42410
2 changed files with 164 additions and 1 deletions

View File

@ -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.StBaseInfo;
import com.yfd.platform.qgc_eng.eq.entity.vo.StcdInfoVo; import com.yfd.platform.qgc_eng.eq.entity.vo.StcdInfoVo;
import com.yfd.platform.qgc_eng.eq.service.EngEqDataService; 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.qgc_env.wt.utils.SiteAvoidanceUtils;
import com.yfd.platform.utils.QgcQueryWrapperUtil; import com.yfd.platform.utils.QgcQueryWrapperUtil;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
@ -6000,6 +6001,20 @@ public class EngEqDataServiceImpl implements EngEqDataService {
resultList.add(eqdsVo); resultList.add(eqdsVo);
} }
Map<String, Date> 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<String, MsWarnRuleDetailBVo> qecLimitMap = getQecLimitMap(qecLimitQueryMap);
for (EngEqdsVo eqdsVo : resultList) {
MsWarnRuleDetailBVo ruleDetail = qecLimitMap.get(eqdsVo.getRstcd());
eqdsVo.setQecLimit(ruleDetail == null ? null : ruleDetail.getMinVal());
}
SiteAvoidanceUtils.calcSiteMapLev(resultList, SiteAvoidanceUtils.calcSiteMapLev(resultList,
EngEqdsVo::getStcd, EngEqdsVo::getStcd,
EngEqdsVo::getLgtd, EngEqdsVo::getLgtd,
@ -6011,4 +6026,152 @@ public class EngEqDataServiceImpl implements EngEqDataService {
dataSourceResult.setTotal(page == null ? resultList.size() : page.getTotal()); dataSourceResult.setTotal(page == null ? resultList.size() : page.getTotal());
return dataSourceResult; return dataSourceResult;
} }
private Map<String, MsWarnRuleDetailBVo> getQecLimitMap(Map<String, Date> stcdTmMap) {
Map<String, MsWarnRuleDetailBVo> resultMap = new HashMap<>();
if (stcdTmMap == null || stcdTmMap.isEmpty()) {
return resultMap;
}
Map<String, Object> 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<Map<String, Object>> ruleRows = microservicDynamicSQLMapper.pageAllList(null, sql.toString(), paramMap);
if (CollUtil.isEmpty(ruleRows)) {
return resultMap;
}
Map<String, List<MsWarnRuleDetailBVo>> groupedRuleMap = new HashMap<>();
for (Map<String, Object> 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<String, Date> 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<MsWarnRuleDetailBVo> ruleRows) {
if (queryDate == null || CollUtil.isEmpty(ruleRows)) {
return null;
}
Date currentTm = null;
List<MsWarnRuleDetailBVo> 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<MsWarnRuleDetailBVo> 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<String, Object> 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<String, Object> paramMap,
String column,
Iterable<String> values,
String prefix) {
if (values == null) {
return;
}
List<String> 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(") ");
}
} }

View File

@ -4626,7 +4626,7 @@ public class FbStationServiceImpl implements FbStationService {
.append("a.RSTCD AS rstcds, ") .append("a.RSTCD AS rstcds, ")
.append("a.BASE_ID AS baseId, ") .append("a.BASE_ID AS baseId, ")
.append("a.DTIN AS dtin, ") .append("a.DTIN AS dtin, ")
.append("eng.ENNM AS ennm, ") .append("COALESCE(eng.ENNM, '') AS ennm, ")
.append("eng.RVCD AS rvcd, ") .append("eng.RVCD AS rvcd, ")
.append("eng.ADDVCD AS addvcd, ") .append("eng.ADDVCD AS addvcd, ")
.append("NVL(siteSort.SORT, 999999) AS siteStepSort, ") .append("NVL(siteSort.SORT, 999999) AS siteStepSort, ")