From 219b10847fee27ab13aa2aab75065f84e9aea07e Mon Sep 17 00:00:00 2001 From: xjf <378266566@qq.com> Date: Mon, 15 Dec 2025 17:15:02 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E5=9B=9E=E7=AE=97=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/instant/vo/InstantCalcResultVO.java | 30 +- .../service/instant/InstantServiceImpl.java | 406 +++++++++--------- .../system/enums/ErrorCodeConstants.java | 2 +- 3 files changed, 240 insertions(+), 198 deletions(-) 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 index 190ab4d..73f09df 100644 --- 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 @@ -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; + } + + + 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 d8269b9..861be4a 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 @@ -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,212 +75,212 @@ public class InstantServiceImpl implements InstantService { success = SYSTEM_INSTANT_CREATE_SUCCESS) public List createInstant(InstantSaveReqVO createReqVO, Integer type) throws IOException { -try{ - // 1. 校验角色 + try { + // 1. 校验角色 // validateRoleDuplicate(createReqVO.getName(), createReqVO.getCode(), null); - //根据modelversionid查询modelversion,录入instantcfg表的modelversion字段 - String modelVersion = versionMapper.selectById(createReqVO.getModelVersionId()).getVersion(); - createReqVO.setModelVersion(modelVersion); + //根据modelversionid查询modelversion,录入instantcfg表的modelversion字段 + String modelVersion = versionMapper.selectById(createReqVO.getModelVersionId()).getVersion(); + createReqVO.setModelVersion(modelVersion); - //插入除instantInfo外的所有数据,获取到id - // 2. 插入到数据库-status、visible默认值 - InstantTableDO instant = BeanUtils.toBean(createReqVO, InstantTableDO.class) - .setInstantStatus(ObjUtil.defaultIfNull(createReqVO.getInstantStatus(), 1L)) - .setVisible(ObjUtil.defaultIfNull(createReqVO.getVisible(), 1L)); + //插入除instantInfo外的所有数据,获取到id + // 2. 插入到数据库-status、visible默认值 + InstantTableDO instant = BeanUtils.toBean(createReqVO, InstantTableDO.class) + .setInstantStatus(ObjUtil.defaultIfNull(createReqVO.getInstantStatus(), 1L)) + .setVisible(ObjUtil.defaultIfNull(createReqVO.getVisible(), 1L)); - instantTableMapper.insert(instant); + instantTableMapper.insert(instant); - // 3. 记录操作日志上下文 - LogRecordContext.putVariable("instant", instant); + // 3. 记录操作日志上下文 + LogRecordContext.putVariable("instant", instant); - Long insertId = instant.getMpId(); + Long insertId = instant.getMpId(); - //处理数据 + //处理数据 // inputInfo 各种转换 - List pointInfoList = createReqVO.getPointInfo(); - System.out.println(pointInfoList); - - List inputInfoList = new ArrayList<>(); - List inputNameList = new ArrayList<>(); - List unitList = new ArrayList<>(); - List outPointInfoList = new ArrayList<>(); - List timePointInfoList = new ArrayList<>(); - List biasPointInfoList = new ArrayList<>(); - List faultVariablePointList = new ArrayList<>(); - - List InstantPointList = new ArrayList<>(); - Point point = new Point(); - String outpoint = ""; - for (Integer i = 0; i < pointInfoList.size(); i++) { - inputInfoList.add(pointInfoList.get(i).getPointId()); - inputNameList.add(pointInfoList.get(i).getDescription()); - unitList.add(pointInfoList.get(i).getUnit()); - if (Objects.isNull(pointInfoList.get(i).getType()) || pointInfoList.get(i).getType().equals("1")) { - //构建重构值对象 - outpoint = HEAD + "M" + String.format("%04d", insertId) + String.format("%04d", i + 1) + "R"; - point = new Point(); - point.setGroupName("WARN"); - outPointInfoList.add(outpoint); - point.setItemName(outpoint); - point.setDescriptor(pointInfoList.get(i).getDescription() + "_重构值"); - point.setEngUnits(pointInfoList.get(i).getUnit()); - point.setItemType(5); - InstantPointList.add(point); - - //构建时间值对象 - outpoint = HEAD + "M" + String.format("%04d", insertId) + String.format("%04d", i + 1) + "T"; - point = new Point(); - point.setGroupName("WARN"); - timePointInfoList.add(outpoint); - point.setItemName(outpoint); - point.setDescriptor(pointInfoList.get(i).getDescription() + "_时间值"); - point.setEngUnits(pointInfoList.get(i).getUnit()); - point.setItemType(5); - InstantPointList.add(point); - - //构建偏差值对象 - outpoint = HEAD + "M" + String.format("%04d", insertId) + String.format("%04d", i + 1) + "B"; - point = new Point(); - point.setGroupName("WARN"); - biasPointInfoList.add(outpoint); - point.setItemName(outpoint); - point.setDescriptor(pointInfoList.get(i).getDescription() + "_偏差值"); - point.setEngUnits(pointInfoList.get(i).getUnit()); - point.setItemType(5); - InstantPointList.add(point); - - //构建状态值对象 - outpoint = HEAD + "M" + String.format("%04d", insertId) + String.format("%04d", i + 1) + "F"; - point = new Point(); - point.setGroupName("WARN"); - faultVariablePointList.add(outpoint); - point.setItemName(outpoint); - point.setDescriptor(pointInfoList.get(i).getDescription() + "_状态值"); - point.setEngUnits(pointInfoList.get(i).getUnit()); - point.setItemType(5); - InstantPointList.add(point); - } else { - outpoint = ""; - outPointInfoList.add(outpoint); - timePointInfoList.add(outpoint); - biasPointInfoList.add(outpoint); - faultVariablePointList.add(outpoint); - } - } - - - createReqVO.setMpId(insertId); - - createReqVO.setInstantStatus(instant.getInstantStatus()); - createReqVO.setVisible(instant.getVisible()); - createReqVO.setInputInfo(inputInfoList); - createReqVO.setInputName(inputNameList); - createReqVO.setUnit(unitList); - createReqVO.setOutPointInfo(outPointInfoList); - createReqVO.setTimePointInfo(timePointInfoList); - createReqVO.setBiasPointInfo(biasPointInfoList); - createReqVO.setFaultVariablePointInfo(faultVariablePointList); - - - //构建模型实例ste值-没有unit参数 - outpoint = HEAD + "M" + String.format("%04d", insertId) + "_ste"; - //赋值-createReqVO - createReqVO.setModel_state(outpoint); - point = new Point(); - point.setGroupName("WARN"); - point.setItemName(outpoint); - point.setDescriptor(instant.getMpName() + "_残差值"); - point.setItemType(5); - InstantPointList.add(point); - - //构建模型实例状态值-没有unit参数 - outpoint = HEAD + "M" + String.format("%04d", insertId) + "_status"; - //赋值-createReqVO - createReqVO.setModel_status(outpoint); - point = new Point(); - point.setGroupName("WARN"); - point.setItemName(outpoint); - point.setDescriptor(instant.getMpName() + "_状态值"); - point.setItemType(5); - InstantPointList.add(point); + List pointInfoList = createReqVO.getPointInfo(); + System.out.println(pointInfoList); + + List inputInfoList = new ArrayList<>(); + List inputNameList = new ArrayList<>(); + List unitList = new ArrayList<>(); + List outPointInfoList = new ArrayList<>(); + List timePointInfoList = new ArrayList<>(); + List biasPointInfoList = new ArrayList<>(); + List faultVariablePointList = new ArrayList<>(); + + List InstantPointList = new ArrayList<>(); + Point point = new Point(); + String outpoint = ""; + for (Integer i = 0; i < pointInfoList.size(); i++) { + inputInfoList.add(pointInfoList.get(i).getPointId()); + inputNameList.add(pointInfoList.get(i).getDescription()); + unitList.add(pointInfoList.get(i).getUnit()); + if (Objects.isNull(pointInfoList.get(i).getType()) || pointInfoList.get(i).getType().equals("1")) { + //构建重构值对象 + outpoint = HEAD + "M" + String.format("%04d", insertId) + String.format("%04d", i + 1) + "R"; + point = new Point(); + point.setGroupName("WARN"); + outPointInfoList.add(outpoint); + point.setItemName(outpoint); + point.setDescriptor(pointInfoList.get(i).getDescription() + "_重构值"); + point.setEngUnits(pointInfoList.get(i).getUnit()); + point.setItemType(5); + InstantPointList.add(point); + + //构建时间值对象 + outpoint = HEAD + "M" + String.format("%04d", insertId) + String.format("%04d", i + 1) + "T"; + point = new Point(); + point.setGroupName("WARN"); + timePointInfoList.add(outpoint); + point.setItemName(outpoint); + point.setDescriptor(pointInfoList.get(i).getDescription() + "_时间值"); + point.setEngUnits(pointInfoList.get(i).getUnit()); + point.setItemType(5); + InstantPointList.add(point); + + //构建偏差值对象 + outpoint = HEAD + "M" + String.format("%04d", insertId) + String.format("%04d", i + 1) + "B"; + point = new Point(); + point.setGroupName("WARN"); + biasPointInfoList.add(outpoint); + point.setItemName(outpoint); + point.setDescriptor(pointInfoList.get(i).getDescription() + "_偏差值"); + point.setEngUnits(pointInfoList.get(i).getUnit()); + point.setItemType(5); + InstantPointList.add(point); + + //构建状态值对象 + outpoint = HEAD + "M" + String.format("%04d", insertId) + String.format("%04d", i + 1) + "F"; + point = new Point(); + point.setGroupName("WARN"); + faultVariablePointList.add(outpoint); + point.setItemName(outpoint); + point.setDescriptor(pointInfoList.get(i).getDescription() + "_状态值"); + point.setEngUnits(pointInfoList.get(i).getUnit()); + point.setItemType(5); + InstantPointList.add(point); + } else { + outpoint = ""; + outPointInfoList.add(outpoint); + timePointInfoList.add(outpoint); + biasPointInfoList.add(outpoint); + faultVariablePointList.add(outpoint); + } + } + + + createReqVO.setMpId(insertId); + + createReqVO.setInstantStatus(instant.getInstantStatus()); + createReqVO.setVisible(instant.getVisible()); + createReqVO.setInputInfo(inputInfoList); + createReqVO.setInputName(inputNameList); + createReqVO.setUnit(unitList); + createReqVO.setOutPointInfo(outPointInfoList); + createReqVO.setTimePointInfo(timePointInfoList); + createReqVO.setBiasPointInfo(biasPointInfoList); + createReqVO.setFaultVariablePointInfo(faultVariablePointList); + + + //构建模型实例ste值-没有unit参数 + outpoint = HEAD + "M" + String.format("%04d", insertId) + "_ste"; + //赋值-createReqVO + createReqVO.setModel_state(outpoint); + point = new Point(); + point.setGroupName("WARN"); + point.setItemName(outpoint); + point.setDescriptor(instant.getMpName() + "_残差值"); + point.setItemType(5); + InstantPointList.add(point); + + //构建模型实例状态值-没有unit参数 + outpoint = HEAD + "M" + String.format("%04d", insertId) + "_status"; + //赋值-createReqVO + createReqVO.setModel_status(outpoint); + point = new Point(); + point.setGroupName("WARN"); + point.setItemName(outpoint); + point.setDescriptor(instant.getMpName() + "_状态值"); + point.setItemType(5); + InstantPointList.add(point); //更新instantInfo字段 - InstantSaveReqVO updateReqVO = new InstantSaveReqVO(); - updateReqVO.setMpId(instant.getMpId()); - updateReqVO.setInstantInfo(JsonUtils.toJsonString(createReqVO)); - - updateInstant(updateReqVO); - List resultList = new ArrayList(); - - resultList.add(instant.getMpId().toString()); - - - for (Point item : InstantPointList) { - // 每次循环输出list中的元素 - System.out.println(item.toString()); - //循环加点 - String ss = exaUtils.setPoint(EXA_IP, item); - resultList.add(ss); - } - createWarn1(instant, createReqVO); - log.info("模型实例创建成功,实例ID: {}", instant.getMpId()); - return resultList; - } catch (Exception e) { - log.error("模型实例创建失败,错误信息: ", e); - throw exception(CREATE_INSTANT_ERROR,"模型实例创建失败: " + e.getMessage()); - } + InstantSaveReqVO updateReqVO = new InstantSaveReqVO(); + updateReqVO.setMpId(instant.getMpId()); + updateReqVO.setInstantInfo(JsonUtils.toJsonString(createReqVO)); + + updateInstant(updateReqVO); + List resultList = new ArrayList(); + + resultList.add(instant.getMpId().toString()); + + + for (Point item : InstantPointList) { + // 每次循环输出list中的元素 + System.out.println(item.toString()); + //循环加点 + String ss = exaUtils.setPoint(EXA_IP, item); + resultList.add(ss); + } + createWarn1(instant, createReqVO); + log.info("模型实例创建成功,实例ID: {}", instant.getMpId()); + return resultList; + } catch (Exception e) { + log.error("模型实例创建失败,错误信息: ", e); + throw exception(CREATE_INSTANT_ERROR, "模型实例创建失败: " + e.getMessage()); + } } public void createWarn1(InstantTableDO instant, InstantSaveReqVO createReqVO) { - try{ - //调用预警表和评估报告表的mapper - // 从instant对象获取modelid和version字段 - Long modelId = instant.getModelId(); - String version = instant.getModelVersion(); + try { + //调用预警表和评估报告表的mapper + // 从instant对象获取modelid和version字段 + Long modelId = instant.getModelId(); + String version = instant.getModelVersion(); // modelId=11L; // version="v-test"; - // 调用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++) { - - - WarnSaveReqVO warnSaveReqVO = new WarnSaveReqVO(); - // 设置预警ID(假设insertId为当前预警主记录ID) - // warn.setId(insertId); - //设置实例id - warnSaveReqVO.setMpId(instant.getMpId()); - warnSaveReqVO.setPointOrModel("model"); - - 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(reportObj.getAssess().get(j).getIndex()) + "] 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; } - - - } diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java index c59a7ee..4728dad 100644 --- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java +++ b/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, "预警不存在");