From 509b0a8a349f941a17827a6c99cf5c6f4b9e5d36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=82=96=E6=99=8B=E9=A3=9E?= <378266566@qq.com> Date: Tue, 23 Dec 2025 14:42:21 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E5=88=9B=E5=BB=BA=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=E5=AE=9E=E4=BE=8B=E9=80=82=E9=85=8DANN?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/instant/vo/InstantPageReqVO.java | 3 + .../admin/instant/vo/pointInfo.java | 2 +- .../admin/model/vo/RunModelInfoVO.java | 7 +- .../dal/mysql/instant/InstantMapper.java | 1 + .../service/instant/InstantServiceImpl.java | 97 +++++++++++++------ 5 files changed, 78 insertions(+), 32 deletions(-) diff --git a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantPageReqVO.java b/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantPageReqVO.java index 7098d13..d0f0ba9 100644 --- a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantPageReqVO.java +++ b/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantPageReqVO.java @@ -24,6 +24,9 @@ public class InstantPageReqVO extends PageParam { @Schema(description = "模型名称", example = "yudao") private String mpName; + @Schema(description = "算法", example = "yudao") + private String algorithmId; + @Schema(description = "运行状态", example = "yudao") private String running; diff --git a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/pointInfo.java b/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/pointInfo.java index 4632675..66450e1 100644 --- a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/pointInfo.java +++ b/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/pointInfo.java @@ -20,5 +20,5 @@ public class pointInfo { @JsonProperty(value="type") @Schema(description = "ANN才有的字段---类型(输入-false;输出-true)", example = "yudao") - private Object type; + private Boolean type; } diff --git a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/RunModelInfoVO.java b/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/RunModelInfoVO.java index 92536d2..cb4a3bc 100644 --- a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/RunModelInfoVO.java +++ b/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/RunModelInfoVO.java @@ -31,12 +31,15 @@ public class RunModelInfoVO { /// /// /// - @JsonProperty(value="Model_info") +// @JsonProperty(value="Model_info") - public Model_info_ch_instant Model_info; +// public Model_info_ch_instant Model_info; @JsonProperty(value="limit") public double limit; + @JsonProperty(value="pre_s") + public List pre_s; + } @Data @NoArgsConstructor diff --git a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/instant/InstantMapper.java b/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/instant/InstantMapper.java index 5d2ac6a..ac819e3 100644 --- a/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/instant/InstantMapper.java +++ b/yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/instant/InstantMapper.java @@ -20,6 +20,7 @@ public interface InstantMapper extends BaseMapperX { .eqIfPresent(InstantDO::getUnitId,reqVO.getUnit()) .eqIfPresent(InstantDO::getSystemTypeId,reqVO.getType()) .eqIfPresent(InstantDO::getSystemId,reqVO.getSystem()) + .eqIfPresent(InstantDO::getAlgorithmId,reqVO.getAlgorithmId()) .orderByAsc(InstantDO::getMpId)); } 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 87fd040..4195df4 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 @@ -37,6 +37,7 @@ import org.springframework.transaction.annotation.Transactional; import java.io.IOException; import java.util.*; +import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; @@ -72,6 +73,7 @@ public class InstantServiceImpl implements InstantService { //PCA回算的http请求地址 @Value("${PCA.calcurl}") private String PCA_CALC_URL; + @Override @Transactional(rollbackFor = Exception.class) @LogRecord(type = SYSTEM_INSTANT_TYPE, subType = SYSTEM_INSTANT_CREATE_SUB_TYPE, bizNo = "{{#role.id}}", @@ -85,6 +87,7 @@ public class InstantServiceImpl implements InstantService { String modelVersion = versionMapper.selectById(createReqVO.getModelVersionId()).getVersion(); createReqVO.setModelVersion(modelVersion); + //插入除instantInfo外的所有数据,获取到id // 2. 插入到数据库-status、visible默认值 InstantTableDO instant = BeanUtils.toBean(createReqVO, InstantTableDO.class) @@ -120,7 +123,7 @@ public class InstantServiceImpl implements InstantService { unitList.add(pointInfoList.get(i).getUnit()); // 如果pointInfoList.get(i)有type字段,或者createReqVO对象中的算法是PCA就加一些重构值、时间值、偏差值 if (pointInfoList.get(i).getType() != null || Objects.equals(createReqVO.getAlgorithmId(), "1") - || createReqVO.getAlgorithmId().equals(1L)) { + || createReqVO.getAlgorithmId().equals(1L)) { //构建重构值对象 outpoint = HEAD + "M" + String.format("%04d", insertId) + String.format("%04d", i + 1) + "R"; point = new Point(); @@ -236,43 +239,77 @@ public class InstantServiceImpl implements InstantService { public void createWarn1(InstantTableDO instant, InstantSaveReqVO createReqVO) { try { - //调用预警表和评估报告表的mapper - // 从instant对象获取modelid和version字段 - Long modelId = instant.getModelId(); - String version = instant.getModelVersion(); - - // 调用reportMapper获取对应记录(假设存在selectByModelIdAndVersion方法) - ReportDO report = reportMapper.selectByModelIdAndVersion(modelId, version); - - // 如果report不为空且report字段不为空,则解析为Report类 - if (report != null && StrUtil.isNotBlank(report.getReport())) { - Report reportObj = JsonUtils.parseObject(report.getReport(), Report.class); - // 此处可根据业务需求处理解析后的Report对象(如后续预警逻辑) - // 循环getInputInfo构建并插入预警记录 - for (int j = 0; j < reportObj.getAssess().size(); j++) { - - + //如果createReqVO中算法是pca,则读取评估报告从而获取上下限;如果是ANN,则直接读取modelInfo中的上下限 + if (createReqVO.getAlgorithmId() == 2) { + String modelInfoStr = versionMapper.selectById(createReqVO.getModelVersionId()).getModelInfo(); + // 解析modelInfo为RunModelInfoVO类 + RunModelInfoVO modelInfo = JsonUtils.parseObject(modelInfoStr, RunModelInfoVO.class); + // 从modelInfo中获取上下限列表(ANN的上下限是存在模型中的,PCA是存在评估报告中的) + List pre_s = modelInfo.getPara().getPre_s(); + + //createReqVO.getOutPointInfo()已经是上一步筛选好的数据,筛选条件---type=true,如果是ANN就表示是输出,PCA是全部点 + // 遍历筛选后的输出点信息 + for (Integer i = 0; i < createReqVO.getOutPointInfo().size(); i++) { WarnSaveReqVO warnSaveReqVO = new WarnSaveReqVO(); // 设置预警ID(假设insertId为当前预警主记录ID) // warn.setId(insertId); //设置实例id warnSaveReqVO.setMpId(instant.getMpId()); warnSaveReqVO.setPointOrModel("point"); - - warnSaveReqVO.setPointId(createReqVO.getInputInfo().get(reportObj.getAssess().get(j).getIndex())); - warnSaveReqVO.setPointName(createReqVO.getInputName().get(reportObj.getAssess().get(j).getIndex())); - warnSaveReqVO.setGzpName(createReqVO.getInputName().get(reportObj.getAssess().get(j).getIndex())); - warnSaveReqVO.setEquation("[" + createReqVO.getBiasPointInfo().get(reportObj.getAssess().get(j).getIndex()) + "]>UPLIMIT or [" + createReqVO.getBiasPointInfo().get(reportObj.getAssess().get(j).getIndex()) + "]UPLIMIT or [" + createReqVO.getBiasPointInfo().get(i) + "]UPLIMIT or [" + createReqVO.getBiasPointInfo().get(reportObj.getAssess().get(j).getIndex()) + "]