Browse Source

fix:回算功能

pull/50/head
xjf 4 weeks ago
parent
commit
ac0c868e97
  1. 21
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/InstantCalcController.java
  2. 12
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/InstantController.java
  3. 27
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantCalcReqVO.java
  4. 12
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantCalcResultVO.java
  5. 33
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/warn/WarnCalcDO.java
  6. 19
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/warn/WarnCalcMapper.java
  7. 10
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/instant/InstantService.java
  8. 75
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/instant/InstantServiceImpl.java

21
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/InstantCalcController.java

@ -1,21 +0,0 @@
package cn.iocoder.yudao.module.alert.controller.admin.instant;
import cn.iocoder.yudao.module.alert.service.instant.InstantService;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Tag(name = "运行中心 - 模型实例-回算")
@RestController
@RequestMapping("/alert/instant/calc")
@Validated
public class InstantCalcController {
@Resource
private InstantService instantService;
}

12
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/InstantController.java

@ -111,4 +111,16 @@ public class InstantController {
return success(true);
}
@PostMapping("/calc")
@Operation(summary = "回算模型实例" )
@PreAuthorize("@ss.hasPermission('run:instant:query')")
public CommonResult<InstantCalcResultVO> calcInstant( @Valid @RequestBody InstantCalcReqVO instantCalcReqVO) {
InstantCalcResultVO instantCalcResult= instantService.calcInstant(instantCalcReqVO);
return success(instantCalcResult);
}
}

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

@ -0,0 +1,27 @@
package cn.iocoder.yudao.module.alert.controller.admin.instant.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
public class InstantCalcReqVO {
@Schema(description = "实例id")
private String mpId;
@Schema(description = "开始时间")
private String st;
@Schema(description = "结束时间")
private String et;
@Schema(description = "间隔时间-以秒为单位传入,会自动转为毫秒")
private Long interval;
private int indexType=1;
private int sigmaType=1;
private String exA_IP;
private String warn_Instants_Str;
private String model;
private String instantInfo_Str;
}

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

@ -0,0 +1,12 @@
package cn.iocoder.yudao.module.alert.controller.admin.instant.vo;
import lombok.Data;
@Data
public class InstantCalcResultVO {
private String Dimension;
private String CoveredPercent;
private String CalcSeconds;
private String AlarmToatlMinutes;
}

33
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/warn/WarnCalcDO.java

@ -0,0 +1,33 @@
package cn.iocoder.yudao.module.alert.dal.dataobject.warn;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
@TableName(value = "WARN_ONLINE_CFG_VIEW_For_Calc", autoResultMap = true)
@KeySequence("system_role_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
public class WarnCalcDO extends BaseDO {
@TableId(value="warn_id")
private Long warnId;
private Long mpId;
private String pointId;
private String TimeDurationThreshold;
private String uplimit;
private String lowlimit;
private String lastFormula;
}

19
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/warn/WarnCalcMapper.java

@ -0,0 +1,19 @@
package cn.iocoder.yudao.module.alert.dal.mysql.warn;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.alert.controller.admin.warn.vo.WarnPageReqVO;
import cn.iocoder.yudao.module.alert.dal.dataobject.warn.WarnCalcDO;
import cn.iocoder.yudao.module.alert.dal.dataobject.warn.WarnDO;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface WarnCalcMapper extends BaseMapperX<WarnCalcDO> {
// 新增:根据 pointId 查询单个告警记录
default WarnCalcDO selectByPointId(String pointId) {
return selectOne(new LambdaQueryWrapperX<WarnCalcDO>()
.eq(WarnCalcDO::getPointId, pointId));
}
}

10
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/instant/InstantService.java

@ -60,4 +60,14 @@ public interface InstantService {
*/
void deleteInstant(Long id);
/**
* 回算模型实例
*
* @param calcReqVO 回算模型实例信息
* @return 回算结果
*/
InstantCalcResultVO calcInstant(InstantCalcReqVO calcReqVO);
}

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

@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.alert.service.instant;
import cn.hutool.core.util.ObjUtil;
import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.http.HttpUtils;
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.alert.controller.admin.exa.vo.Point;
@ -13,16 +14,14 @@ import cn.iocoder.yudao.module.alert.dal.dataobject.instant.InstantDO;
import cn.iocoder.yudao.module.alert.dal.dataobject.instant.InstantTableDO;
import cn.iocoder.yudao.module.alert.dal.dataobject.report.Report;
import cn.iocoder.yudao.module.alert.dal.dataobject.report.ReportDO;
import cn.iocoder.yudao.module.alert.dal.dataobject.warn.WarnTableDO;
import cn.iocoder.yudao.module.alert.dal.dataobject.warn.WarnCalcDO;
import cn.iocoder.yudao.module.alert.dal.mysql.instant.InstantMapper;
import cn.iocoder.yudao.module.alert.dal.mysql.instant.InstantTableMapper;
import cn.iocoder.yudao.module.alert.dal.mysql.model.VersionMapper;
import cn.iocoder.yudao.module.alert.dal.mysql.report.ReportMapper;
import cn.iocoder.yudao.module.alert.dal.mysql.warn.WarnTableMapper;
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 cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.google.common.annotations.VisibleForTesting;
import com.mzt.logapi.context.LogRecordContext;
import com.mzt.logapi.service.impl.DiffParseFunction;
@ -36,13 +35,8 @@ import cn.iocoder.yudao.module.system.dal.redis.RedisKeyConstants;
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.*;
import static cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants.UNKNOWN;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
import static cn.iocoder.yudao.module.system.enums.LogRecordConstants.*;
@ -50,6 +44,7 @@ import static cn.iocoder.yudao.module.system.enums.LogRecordConstants.*;
@Service
@Slf4j
public class InstantServiceImpl implements InstantService {
@Resource
private InstantMapper instantMapper;
@Resource
@ -63,7 +58,11 @@ public class InstantServiceImpl implements InstantService {
private WarnService warnService;
// 新增:注入WarnCalcMapper用于查询预警计算配置
@Resource
private WarnCalcMapper warnCalcMapper;
EXAUtils exaUtils = new EXAUtils();
// 新增:从配置文件注入exaip
@Value("${point.head}")
private String HEAD;
@Value("${EXA.ip}")
@ -488,4 +487,60 @@ try{
}
@Override
public InstantCalcResultVO calcInstant(InstantCalcReqVO calcReqVO) {
InstantCalcResultVO instantCalcResultVO = new InstantCalcResultVO();
//根据mpId读取实例信息
InstantDO instant = instantMapper.selectById(calcReqVO.getMpId());
if (instant == null) {
throw exception(INSTANT_NOT_EXISTS);
}
calcReqVO.setExA_IP(EXA_IP);
calcReqVO.setModel(JsonUtils.toJsonString(instant.getModelInfo()));
calcReqVO.setInstantInfo_Str( JsonUtils.toJsonString(instant.getInstantInfo()));
InstantInfoVO instantInfoVO = JsonUtils.parseObject(instant.getInstantInfo(), InstantInfoVO.class);
List<String> pointInfoList = instantInfoVO.getInputInfo();
//循环point
// 新增:循环处理每个输入点,查询预警计算配置
List<Map<String, Object>> warnCalcMapList = new ArrayList<>();
for (String pointId : pointInfoList) {
// 根据pointId查询预警计算记录(假设WarnCalcMapper有此查询方法)
WarnCalcDO warnCalc = warnCalcMapper.selectByPointId(pointId);
Map<String, Object> calcInfoMap = new HashMap<>(3);
if (warnCalc != null) {
calcInfoMap.put("logic", warnCalc.getLastFormula().replaceAll("UPLIMIT", warnCalc.getUplimit()).replaceAll("LOWLIMIT", warnCalc.getLowlimit()));
calcInfoMap.put("TimeLong", warnCalc.getTimeDurationThreshold());
calcInfoMap.put("Vaild", true); // 注意字段名是否与实体类一致
}
else{
calcInfoMap.put("logic", "1=1");
calcInfoMap.put("TimeLong", "0");
calcInfoMap.put("Vaild", false); // 注意字段名是否与实体类一致
}
warnCalcMapList.add(calcInfoMap);
}
// 构建WarnInstants对象并转换为JSON字符串
Map<String, Object> warnInstantsObj = new HashMap<>();
warnInstantsObj.put("WarnInstants", warnCalcMapList);
String warnInstantsJson = JsonUtils.toJsonString(warnInstantsObj);
calcReqVO.setWarn_Instants_Str(warnInstantsJson); // 假设InstantCalcResultVO有此setter方法
//调用http接口,获取计算结果 http://120.26.116.243:8098/api/PCA/deepTrack
String url = "http://120.26.116.243:8098/api/PCA/deepTrack";
// 调用http接口,获取计算结果
String result = HttpUtils.post(url, null, JsonUtils.toJsonString(calcReqVO));
// 解析返回结果
instantCalcResultVO = JsonUtils.parseObject(result, InstantCalcResultVO.class);
// 3. 记录操作日志上下文
LogRecordContext.putVariable("instant", calcReqVO);
return instantCalcResultVO;
}
}

Loading…
Cancel
Save