|
|
|
@ -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); |
|
|
|
@ -536,7 +575,7 @@ public class InstantServiceImpl implements InstantService { |
|
|
|
throw exception(CALCULATE_ERROR, "计算失败"); |
|
|
|
} |
|
|
|
} catch (Exception e) { |
|
|
|
throw exception(CALCULATE_ERROR, "结果有误,返回结果为: " +jsonResult+ ",异常信息为: "+e.getMessage()); |
|
|
|
throw exception(CALCULATE_ERROR, "结果有误,返回结果为: " + jsonResult + ",异常信息为: " + e.getMessage()); |
|
|
|
} |
|
|
|
// 解析返回结果
|
|
|
|
String rtn = jsonResult.getString("rtn"); |
|
|
|
|