Browse Source

fix:回算功能优化

pull/50/head
xjf 4 weeks ago
parent
commit
219b10847f
  1. 30
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantCalcResultVO.java
  2. 46
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/instant/InstantServiceImpl.java
  3. 2
      yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java

30
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantCalcResultVO.java

@ -1,12 +1,38 @@
package cn.iocoder.yudao.module.alert.controller.admin.instant.vo;
import com.alibaba.fastjson.annotation.JSONField;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
public class InstantCalcResultVO {
private String Dimension;
@JsonProperty("Dimension")
private Integer Dimension;
@JsonProperty("CoveredPercent")
private String CoveredPercent;
private String CalcSeconds;
@JsonProperty("AlarmToatlMinutes")
private String AlarmToatlMinutes;
@JsonProperty("AlarmNumber")
private Integer AlarmNumber;
@JsonProperty("CalcSeconds")
private String CalcSeconds;
}

46
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/instant/InstantServiceImpl.java

@ -22,6 +22,7 @@ import cn.iocoder.yudao.module.alert.dal.mysql.report.ReportMapper;
import cn.iocoder.yudao.module.alert.dal.mysql.warn.WarnCalcMapper;
import cn.iocoder.yudao.module.alert.service.warn.WarnService;
import cn.iocoder.yudao.module.alert.utils.EXAUtils;
import com.alibaba.fastjson.JSONObject;
import com.google.common.annotations.VisibleForTesting;
import com.mzt.logapi.context.LogRecordContext;
import com.mzt.logapi.service.impl.DiffParseFunction;
@ -74,7 +75,7 @@ public class InstantServiceImpl implements InstantService {
success = SYSTEM_INSTANT_CREATE_SUCCESS)
public List<String> createInstant(InstantSaveReqVO createReqVO, Integer type) throws IOException {
try{
try {
// 1. 校验角色
// validateRoleDuplicate(createReqVO.getName(), createReqVO.getCode(), null);
//根据modelversionid查询modelversion,录入instantcfg表的modelversion字段
@ -227,14 +228,14 @@ try{
return resultList;
} catch (Exception e) {
log.error("模型实例创建失败,错误信息: ", e);
throw exception(CREATE_INSTANT_ERROR,"模型实例创建失败: " + e.getMessage());
throw exception(CREATE_INSTANT_ERROR, "模型实例创建失败: " + e.getMessage());
}
}
public void createWarn1(InstantTableDO instant, InstantSaveReqVO createReqVO) {
try{
try {
//调用预警表和评估报告表的mapper
// 从instant对象获取modelid和version字段
Long modelId = instant.getModelId();
@ -259,7 +260,7 @@ try{
// warn.setId(insertId);
//设置实例id
warnSaveReqVO.setMpId(instant.getMpId());
warnSaveReqVO.setPointOrModel("model");
warnSaveReqVO.setPointOrModel("point");
warnSaveReqVO.setPointId(createReqVO.getInputInfo().get(reportObj.getAssess().get(j).getIndex()));
warnSaveReqVO.setPointName(createReqVO.getInputName().get(reportObj.getAssess().get(j).getIndex()));
@ -278,7 +279,7 @@ try{
}
} catch (Exception e) {
log.error("模型实例创建失败,错误信息: ", e);
throw exception(CREATE_INSTANT_ERROR,"模型实例创建失败: " + e.getMessage());
throw exception(CREATE_INSTANT_ERROR, "模型实例创建失败: " + e.getMessage());
}
}
@ -497,8 +498,8 @@ try{
}
calcReqVO.setExA_IP(EXA_IP);
calcReqVO.setModel(JsonUtils.toJsonString(instant.getModelInfo()));
calcReqVO.setInstantInfo_Str( JsonUtils.toJsonString(instant.getInstantInfo()));
calcReqVO.setModel(instant.getModelInfo());
calcReqVO.setInstantInfo_Str(instant.getInstantInfo());
InstantInfoVO instantInfoVO = JsonUtils.parseObject(instant.getInstantInfo(), InstantInfoVO.class);
List<String> pointInfoList = instantInfoVO.getInputInfo();
//循环point
@ -512,8 +513,7 @@ try{
calcInfoMap.put("logic", warnCalc.getLastFormula().replaceAll("UPLIMIT", warnCalc.getUplimit()).replaceAll("LOWLIMIT", warnCalc.getLowlimit()));
calcInfoMap.put("TimeLong", warnCalc.getTimeDurationThreshold());
calcInfoMap.put("Vaild", true); // 注意字段名是否与实体类一致
}
else{
} else {
calcInfoMap.put("logic", "1=1");
calcInfoMap.put("TimeLong", "0");
calcInfoMap.put("Vaild", false); // 注意字段名是否与实体类一致
@ -529,18 +529,34 @@ try{
//调用http接口,获取计算结果 http://120.26.116.243:8098/api/PCA/deepTrack
String url = "http://120.26.116.243:8098/api/PCA/deepTrack";
String params = JsonUtils.toJsonString(calcReqVO);
// 调用http接口,获取计算结果
String result = HttpUtils.post(url, null, JsonUtils.toJsonString(calcReqVO));
String httpResult = HttpUtils.post(url, null, params);
JSONObject jsonResult = JsonUtils.parseObject(httpResult, JSONObject.class);
try {
String result = jsonResult.getString("result");
if (!"OK".equals(result)) {
throw exception(CALCULATE_ERROR, "计算失败");
}
} catch (Exception e) {
throw exception(CALCULATE_ERROR, "结果有误,返回结果为: " +jsonResult+ ",异常信息为: "+e.getMessage());
}
// 解析返回结果
instantCalcResultVO = JsonUtils.parseObject(result, InstantCalcResultVO.class);
String rtn = jsonResult.getString("rtn");
// ... 新增:检查 rtn 是否为空
if (StrUtil.isBlank(rtn)) {
throw exception(CALCULATE_ERROR, "计算结果 rtn 为空");
}
// ... 新增:捕获 JSON 解析异常
try {
instantCalcResultVO = JsonUtils.parseObject(rtn, InstantCalcResultVO.class);
} catch (Exception e) {
throw exception(CALCULATE_ERROR, "解析计算结果失败,rtn: " + rtn + ",异常信息: " + e.getMessage());
}
// 3. 记录操作日志上下文
LogRecordContext.putVariable("instant", calcReqVO);
return instantCalcResultVO;
}
}

2
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java

@ -174,7 +174,7 @@ public interface ErrorCodeConstants {
ErrorCode CREATE_INSTANT_ERROR = new ErrorCode(3_001_001, "模型实例创建失败,失败原因:({})");
ErrorCode CALCULATE_ERROR = new ErrorCode(3_001_002, "模型实例计算失败,失败原因:({})");
// ========== 预警模块 4-001==========
ErrorCode WARN_NOT_EXISTS = new ErrorCode(4_001_000, "预警不存在");

Loading…
Cancel
Save