Browse Source

fix:创建模型实例适配ANN

pull/54/head
肖晋飞 3 weeks ago
parent
commit
509b0a8a34
  1. 3
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/InstantPageReqVO.java
  2. 2
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/instant/vo/pointInfo.java
  3. 7
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/RunModelInfoVO.java
  4. 1
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/dal/mysql/instant/InstantMapper.java
  5. 45
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/instant/InstantServiceImpl.java

3
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;

2
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;
}

7
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 {
/// <summary>
///
/// </summary>
@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<Double> pre_s;
}
@Data
@NoArgsConstructor

1
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<InstantDO> {
.eqIfPresent(InstantDO::getUnitId,reqVO.getUnit())
.eqIfPresent(InstantDO::getSystemTypeId,reqVO.getType())
.eqIfPresent(InstantDO::getSystemId,reqVO.getSystem())
.eqIfPresent(InstantDO::getAlgorithmId,reqVO.getAlgorithmId())
.orderByAsc(InstantDO::getMpId));
}

45
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)
@ -236,6 +239,37 @@ public class InstantServiceImpl implements InstantService {
public void createWarn1(InstantTableDO instant, InstantSaveReqVO createReqVO) {
try {
//如果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<Double> 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(i));
warnSaveReqVO.setPointName(createReqVO.getInputName().get(i));
warnSaveReqVO.setGzpName(createReqVO.getInputName().get(i));
warnSaveReqVO.setEquation("[" + createReqVO.getBiasPointInfo().get(i) + "]>UPLIMIT or [" + createReqVO.getBiasPointInfo().get(i) + "]<LOWLIMIT");
warnSaveReqVO.setUplimit(pre_s.get(i));
warnSaveReqVO.setLowlimit(-pre_s.get(i));
warnSaveReqVO.setOutputPoint(createReqVO.getOutPointInfo().get(i));
warnSaveReqVO.setUnit(createReqVO.getUnit().get(i));
// 设置其他必要字段(根据实际业务补充)
warnSaveReqVO.setWarnStatus(1L); // 示例:设置初始状态
// 插入数据库
warnService.createWarn(warnSaveReqVO);
}
} else if (createReqVO.getAlgorithmId() == 1) {
//调用预警表和评估报告表的mapper
// 从instant对象获取modelid和version字段
Long modelId = instant.getModelId();
@ -250,8 +284,6 @@ public class InstantServiceImpl implements InstantService {
// 此处可根据业务需求处理解析后的Report对象(如后续预警逻辑)
// 循环getInputInfo构建并插入预警记录
for (int j = 0; j < reportObj.getAssess().size(); j++) {
WarnSaveReqVO warnSaveReqVO = new WarnSaveReqVO();
// 设置预警ID(假设insertId为当前预警主记录ID)
// warn.setId(insertId);
@ -273,6 +305,11 @@ public class InstantServiceImpl implements InstantService {
// 插入数据库
warnService.createWarn(warnSaveReqVO);
}
}
} else {
throw exception(CREATE_INSTANT_ERROR, "模型实例创建失败: 算法缺失");
}
} catch (Exception e) {
log.error("模型实例创建失败,错误信息: ", e);
@ -314,7 +351,9 @@ public class InstantServiceImpl implements InstantService {
//构造第一个图表数据
//获取数据库modelInfo字段,从而获取Kesi_99值
RunModelInfoVO runModelInfoVO = JsonUtils.parseObject(instant.getModelInfo(), RunModelInfoVO.class);
Double Kesi_99 = runModelInfoVO.getPara().getModel_info().getKesi_99();
//这个字段不知道咋回事没有了
// Double Kesi_99 = runModelInfoVO.getPara().getModel_info().getKesi_99();
Double Kesi_99 = 99.0;
//获取数据库instantInfo字段
InstantInfoVO instantInfoVO = JsonUtils.parseObject(instant.getInstantInfo(), InstantInfoVO.class);

Loading…
Cancel
Save