fix: 优化生态流量限制
This commit is contained in:
parent
14930678e6
commit
e362d42410
@ -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<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,
|
||||
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<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(") ");
|
||||
}
|
||||
}
|
||||
|
||||
@ -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, ")
|
||||
|
||||
Loading…
Reference in New Issue
Block a user