fix: 优化逻辑
This commit is contained in:
parent
aea105c1f3
commit
8e8c5dc2f4
@ -24,7 +24,7 @@ public interface IMsWarnRuleBService extends IService<MsWarnRuleB> {
|
||||
/**
|
||||
* 获取告警类型对应的要素列表
|
||||
*/
|
||||
List<WarnYsVo> getAllYs(String ruleType);
|
||||
List<WarnYsVo> getAllYs(String ruleId,String ruleType);
|
||||
|
||||
/**
|
||||
* 新增或修改预警规则
|
||||
|
||||
@ -2,6 +2,7 @@ package com.yfd.platform.qgc_base.service.impl;
|
||||
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
@ -25,10 +26,12 @@ import com.yfd.platform.qgc_sys.warnRule.vo.WarnYsVo;
|
||||
import com.yfd.platform.utils.*;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.stream.Collectors;
|
||||
@ -115,18 +118,59 @@ public class MsWarnRuleBServiceImpl extends ServiceImpl<MsWarnRuleBMapper, MsWar
|
||||
return count > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 最小值
|
||||
*/
|
||||
private BigDecimal minVal;
|
||||
|
||||
/**
|
||||
* 最大值
|
||||
*/
|
||||
private BigDecimal maxVal;
|
||||
|
||||
@Override
|
||||
public List<WarnYsVo> getAllYs(String ruleType) {
|
||||
public List<WarnYsVo> getAllYs(String ruleId, String ruleType) {
|
||||
String dbRuleType = getOldRuleType(ruleType);
|
||||
String sql = "SELECT t2.TB_ID AS tbId, t2.YS, t3.YS_SHOW_NAME AS ysName\n" +
|
||||
"FROM MS_WARN_RULE_B t1\n" +
|
||||
"INNER JOIN MS_WARN_RULE_DETAIL_B t2 ON t1.ID = t2.RULE_ID\n" +
|
||||
"INNER JOIN ST_YS_B t3 ON t2.YS = t3.YS\n" +
|
||||
"WHERE t1.RULE_TYPE ='" + dbRuleType + "'\n" +
|
||||
" AND t1.IS_DELETED = 0\n" +
|
||||
" AND t2.IS_DELETED = 0\n" +
|
||||
"GROUP BY t2.TB_ID, t2.YS, t3.YS_SHOW_NAME";
|
||||
boolean hasRuleId = (ruleId != null && !ruleId.isEmpty());
|
||||
|
||||
// 动态构建 SELECT 子句
|
||||
StringBuilder selectClause = new StringBuilder(
|
||||
"SELECT t2.TB_ID AS tbId, t2.YS, t3.YS_SHOW_NAME AS ysName"
|
||||
);
|
||||
// 有 ruleId 时额外查询 MIN_VAL 和 MAX_VAL
|
||||
if (hasRuleId) {
|
||||
selectClause.append(",t2.WARN_LEVEL,t2.MARK,t2.LVL, t2.MIN_VAL, t2.MAX_VAL");
|
||||
}
|
||||
|
||||
// 动态构建 GROUP BY 子句(与 SELECT 对应)
|
||||
StringBuilder groupByClause = new StringBuilder(
|
||||
"GROUP BY t2.TB_ID, t2.YS, t3.YS_SHOW_NAME"
|
||||
);
|
||||
if (hasRuleId) {
|
||||
groupByClause.append(",t2.WARN_LEVEL,t2.MARK,t2.LVL, t2.MIN_VAL, t2.MAX_VAL");
|
||||
}
|
||||
|
||||
// 基础 FROM / JOIN 和固定过滤条件(删除标志)
|
||||
String fromJoin = "\nFROM MS_WARN_RULE_B t1" +
|
||||
"\nINNER JOIN MS_WARN_RULE_DETAIL_B t2 ON t1.ID = t2.RULE_ID" +
|
||||
"\nINNER JOIN ST_YS_B t3 ON t2.YS = t3.YS" +
|
||||
"\nWHERE t1.IS_DELETED = 0" +
|
||||
"\n AND t2.IS_DELETED = 0";
|
||||
|
||||
// 动态条件(使用占位符)
|
||||
String condition;
|
||||
Map<String, Object> paramMap = new HashMap<>();
|
||||
if (hasRuleId) {
|
||||
condition = "\n AND t1.ID = #{map.ruleId}";
|
||||
paramMap.put("ruleId", ruleId);
|
||||
} else {
|
||||
condition = "\n AND t1.RULE_TYPE = #{map.ruleType}";
|
||||
paramMap.put("ruleType", dbRuleType);
|
||||
}
|
||||
|
||||
// 组装完整 SQL
|
||||
String sql = selectClause + fromJoin + condition + "\n" + groupByClause;
|
||||
|
||||
return microservicDynamicSQLMapper.getAllListWithResultType(sql, paramMap, WarnYsVo.class);
|
||||
}
|
||||
|
||||
@ -139,11 +183,11 @@ public class MsWarnRuleBServiceImpl extends ServiceImpl<MsWarnRuleBMapper, MsWar
|
||||
org.springframework.beans.BeanUtils.copyProperties(vo, entity);
|
||||
entity.setId(vo.getId());
|
||||
entity.setModifyTime(new Date());
|
||||
|
||||
// entity.setRuleType(getOldRuleType(entity.getRuleType()));
|
||||
List<MsWarnRuleDetailVo> detail = vo.getDetail();
|
||||
Integer lvl = null;
|
||||
if (!CollectionUtils.isEmpty(detail) && detail.get(0) != null && detail.get(0).getLvl() != null) {
|
||||
lvl = Integer.parseInt(detail.get(0).getLvl());
|
||||
if (!CollectionUtils.isEmpty(detail) && detail.getFirst() != null && detail.getFirst().getLvl() != null) {
|
||||
lvl = Integer.parseInt(detail.getFirst().getLvl());
|
||||
}
|
||||
|
||||
List<MsWarnRuleDetailB> detailBList = new ArrayList<>();
|
||||
@ -156,10 +200,13 @@ public class MsWarnRuleBServiceImpl extends ServiceImpl<MsWarnRuleBMapper, MsWar
|
||||
i.getAndIncrement();
|
||||
MsWarnRuleDetailB detailB = new MsWarnRuleDetailB();
|
||||
detailB.setRuleId(vo.getId());
|
||||
detailB.setTbId(ysVo.getTbId());
|
||||
detailB.setYs(ysVo.getYs());
|
||||
detailB.setWarnLevel(detailVo.getWarnLevel());
|
||||
detailB.setLvl(detailVo.getLvl() != null ? Integer.parseInt(detailVo.getLvl()) : null);
|
||||
detailB.setTbId(ysVo.getTbId());
|
||||
detailB.setYs(ysVo.getYs());
|
||||
detailB.setMinVal(ysVo.getMinVal());
|
||||
detailB.setMaxVal(ysVo.getMaxVal());
|
||||
detailB.setMark(ysVo.getMark());
|
||||
DateTime dateTime = DateUtil.offsetSecond(new Date(), i.get());
|
||||
detailB.setTm(dateTime);
|
||||
detailB.setRecordUser(SecurityUtils.getCurrentUsername());
|
||||
@ -326,15 +373,15 @@ public class MsWarnRuleBServiceImpl extends ServiceImpl<MsWarnRuleBMapper, MsWar
|
||||
DataSourceResult<MsWarnRuleBVo> dataSourceResult = new DataSourceResult<>();
|
||||
StringBuilder sql = new StringBuilder();
|
||||
sql.append("SELECT id AS bindId, STCD, STNM, STTP_CODE AS sttpCode, RULE_NAME AS ruleName, ")
|
||||
.append("RULE_TYPE AS ruleType, recordUser, MODIFY_TIME AS modifyTime, isShow, RULE_CODE AS ruleCode ")
|
||||
.append("FROM (\n")
|
||||
.append("SELECT t1.ID, t1.STCD, t3.STNM, t3.STTP_CODE, t2.RULE_NAME, t2.RULE_TYPE, ")
|
||||
.append("t2.RECORD_USER AS recordUser, t2.MODIFY_TIME, t2.DESCRIPTION, t2.IS_SHOW AS isShow, t2.RULE_CODE ")
|
||||
.append("FROM MS_WARN_RULE_STBPRP_B t1\n")
|
||||
.append("INNER JOIN MS_WARN_RULE_B t2 ON t1.RULE_ID = t2.ID\n")
|
||||
.append("INNER JOIN V_MS_STBPRP_T t3 ON t1.STCD = t3.STCD\n")
|
||||
.append("WHERE t2.RULE_CODE IN ('common','custom')\n")
|
||||
.append(") WHERE 1=1");
|
||||
.append("RULE_TYPE AS ruleType, recordUser, MODIFY_TIME AS modifyTime, isShow, RULE_CODE AS ruleCode ")
|
||||
.append("FROM (\n")
|
||||
.append("SELECT t1.ID, t1.STCD, t3.STNM, t3.STTP_CODE, t2.RULE_NAME, t2.RULE_TYPE, ")
|
||||
.append("t2.RECORD_USER AS recordUser, t2.MODIFY_TIME, t2.DESCRIPTION, t2.IS_SHOW AS isShow, t2.RULE_CODE ")
|
||||
.append("FROM MS_WARN_RULE_STBPRP_B t1\n")
|
||||
.append("INNER JOIN MS_WARN_RULE_B t2 ON t1.RULE_ID = t2.ID\n")
|
||||
.append("INNER JOIN V_MS_STBPRP_T t3 ON t1.STCD = t3.STCD\n")
|
||||
.append("WHERE t2.RULE_CODE IN ('common','custom')\n")
|
||||
.append(") WHERE 1=1");
|
||||
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
// 处理过滤条件
|
||||
|
||||
@ -52,6 +52,7 @@ public class OverviewVmsstbprptVo implements Serializable {
|
||||
private BigDecimal inv;
|
||||
private Integer invinmn;
|
||||
private Date stdsdt;
|
||||
private String precis;
|
||||
private Date pststdt;
|
||||
private Date pesstdt;
|
||||
private Date swdt;
|
||||
|
||||
@ -1,9 +1,11 @@
|
||||
package com.yfd.platform.qgc_sys.warnRule.controller;
|
||||
|
||||
import com.yfd.platform.common.DataSourceLoadOptionsBase;
|
||||
import com.yfd.platform.common.DataSourceRequest;
|
||||
import com.yfd.platform.config.ResponseResult;
|
||||
import com.yfd.platform.qgc_base.service.IMsWarnRuleBService;
|
||||
import com.yfd.platform.qgc_sys.warnRule.vo.MsWarnRuleBVo;
|
||||
import com.yfd.platform.utils.QgcQueryWrapperUtil;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
@ -33,11 +35,13 @@ public class MsWarnRuleBController {
|
||||
@PostMapping("/ysList")
|
||||
@Operation(summary = "获取告警类型对应的要素")
|
||||
public ResponseResult getAllYs(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
String ruleType = getFilterFieldValue(dataSourceRequest, "ruleType");
|
||||
DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest();
|
||||
String ruleType = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "ruleType");
|
||||
String ruleId = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "ruleId");
|
||||
if (ruleType == null || ruleType.isEmpty()) {
|
||||
return ResponseResult.error("ruleType 不能为空");
|
||||
}
|
||||
return ResponseResult.successData(msWarnRuleBService.getAllYs(ruleType));
|
||||
return ResponseResult.successData(msWarnRuleBService.getAllYs(ruleId,ruleType));
|
||||
}
|
||||
|
||||
@PostMapping("/addOrUpdate")
|
||||
@ -108,31 +112,31 @@ public class MsWarnRuleBController {
|
||||
return ResponseResult.successData(msWarnRuleBService.getRuleListByStcd(stcd, ruleType, lvl));
|
||||
}
|
||||
|
||||
/**
|
||||
* 从 DataSourceRequest 过滤条件中提取指定字段的值
|
||||
*/
|
||||
private String getFilterFieldValue(DataSourceRequest request, String fieldName) {
|
||||
if (request == null || request.getFilter() == null) {
|
||||
return null;
|
||||
}
|
||||
return findFilterValue(request.getFilter(), fieldName);
|
||||
}
|
||||
|
||||
private String findFilterValue(DataSourceRequest.FilterDescriptor filter, String fieldName) {
|
||||
if (filter == null) {
|
||||
return null;
|
||||
}
|
||||
if (fieldName.equals(filter.getField()) && filter.getValue() != null) {
|
||||
return filter.getValue().toString();
|
||||
}
|
||||
if (filter.getFilters() != null) {
|
||||
for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) {
|
||||
String value = findFilterValue(child, fieldName);
|
||||
if (value != null) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
// /**
|
||||
// * 从 DataSourceRequest 过滤条件中提取指定字段的值
|
||||
// */
|
||||
// private String getFilterFieldValue(DataSourceRequest request, String fieldName) {
|
||||
// if (request == null || request.getFilter() == null) {
|
||||
// return null;
|
||||
// }
|
||||
// return findFilterValue(request.getFilter(), fieldName);
|
||||
// }
|
||||
//
|
||||
// private String findFilterValue(DataSourceRequest.FilterDescriptor filter, String fieldName) {
|
||||
// if (filter == null) {
|
||||
// return null;
|
||||
// }
|
||||
// if (fieldName.equals(filter.getField()) && filter.getValue() != null) {
|
||||
// return filter.getValue().toString();
|
||||
// }
|
||||
// if (filter.getFilters() != null) {
|
||||
// for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) {
|
||||
// String value = findFilterValue(child, fieldName);
|
||||
// if (value != null) {
|
||||
// return value;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// return null;
|
||||
// }
|
||||
}
|
||||
|
||||
@ -15,6 +15,12 @@ public class WarnYsVo {
|
||||
/** 要素编码 */
|
||||
private String ys;
|
||||
|
||||
/** 等级 */
|
||||
private String lvl;
|
||||
|
||||
/** 告警等级 */
|
||||
private String warnLevel;
|
||||
|
||||
/** 要素名称 */
|
||||
private String ysName;
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user