diff --git a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/InstantCalcController.java b/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/InstantCalcController.java deleted file mode 100644 index c4e2f5c..0000000 --- a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/InstantCalcController.java +++ /dev/null @@ -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; - - - - -} diff --git a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/InstantController.java b/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/InstantController.java index 22ab714..553aaea 100644 --- a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/InstantController.java +++ b/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 calcInstant( @Valid @RequestBody InstantCalcReqVO instantCalcReqVO) { + InstantCalcResultVO instantCalcResult= instantService.calcInstant(instantCalcReqVO); + return success(instantCalcResult); + } + + + + } diff --git a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantCalcReqVO.java b/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantCalcReqVO.java new file mode 100644 index 0000000..b50fdfd --- /dev/null +++ b/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; + + +} diff --git a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantCalcResultVO.java b/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantCalcResultVO.java new file mode 100644 index 0000000..190ab4d --- /dev/null +++ b/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; +} diff --git a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/warn/WarnCalcDO.java b/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/dataobject/warn/WarnCalcDO.java new file mode 100644 index 0000000..11f54bc --- /dev/null +++ b/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; + + +} diff --git a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/warn/WarnCalcMapper.java b/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/warn/WarnCalcMapper.java new file mode 100644 index 0000000..ebc7580 --- /dev/null +++ b/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 { + + // 新增:根据 pointId 查询单个告警记录 + default WarnCalcDO selectByPointId(String pointId) { + return selectOne(new LambdaQueryWrapperX() + .eq(WarnCalcDO::getPointId, pointId)); + } +} diff --git a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/instant/InstantService.java b/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/instant/InstantService.java index 782a664..e7e88cc 100644 --- a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/instant/InstantService.java +++ b/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); } diff --git a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/instant/InstantServiceImpl.java b/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/instant/InstantServiceImpl.java index bc12f90..d8269b9 100644 --- a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/instant/InstantServiceImpl.java +++ b/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 pointInfoList = instantInfoVO.getInputInfo(); + //循环point + // 新增:循环处理每个输入点,查询预警计算配置 + List> warnCalcMapList = new ArrayList<>(); + for (String pointId : pointInfoList) { + // 根据pointId查询预警计算记录(假设WarnCalcMapper有此查询方法) + WarnCalcDO warnCalc = warnCalcMapper.selectByPointId(pointId); + Map 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 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; + } + + + + + }