@ -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 < String > 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 < pointInfo > pointInfoList = createReqVO . getPointInfo ( ) ;
System . out . println ( pointInfoList ) ;
List < String > inputInfoList = new ArrayList < > ( ) ;
List < String > inputNameList = new ArrayList < > ( ) ;
List < String > unitList = new ArrayList < > ( ) ;
List < String > outPointInfoList = new ArrayList < > ( ) ;
List < String > timePointInfoList = new ArrayList < > ( ) ;
List < String > biasPointInfoList = new ArrayList < > ( ) ;
List < String > faultVariablePointList = new ArrayList < > ( ) ;
List < Point > 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 < pointInfo > pointInfoList = createReqVO . getPointInfo ( ) ;
System . out . println ( pointInfoList ) ;
List < String > inputInfoList = new ArrayList < > ( ) ;
List < String > inputNameList = new ArrayList < > ( ) ;
List < String > unitList = new ArrayList < > ( ) ;
List < String > outPointInfoList = new ArrayList < > ( ) ;
List < String > timePointInfoList = new ArrayList < > ( ) ;
List < String > biasPointInfoList = new ArrayList < > ( ) ;
List < String > faultVariablePointList = new ArrayList < > ( ) ;
List < Point > 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 < String > resultList = new ArrayList < String > ( ) ;
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 < String > resultList = new ArrayList < String > ( ) ;
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 ( ) ) + "]<LOWLIMIT" ) ;
warnSaveReqVO . setUplimit ( reportObj . getAssess ( ) . get ( j ) . getAmplitude ( ) ) ;
warnSaveReqVO . setLowlimit ( - reportObj . getAssess ( ) . get ( j ) . getAmplitude ( ) ) ;
warnSaveReqVO . setOutputPoint ( createReqVO . getOutPointInfo ( ) . get ( reportObj . getAssess ( ) . get ( j ) . getIndex ( ) ) ) ;
warnSaveReqVO . setUnit ( createReqVO . getUnit ( ) . get ( reportObj . getAssess ( ) . get ( j ) . getIndex ( ) ) ) ;
// 设置其他必要字段(根据实际业务补充)
warnSaveReqVO . setWarnStatus ( 1L ) ; // 示例:设置初始状态
// 插入数据库
warnService . createWarn ( warnSaveReqVO ) ;
// 调用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 ( "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 ( ) ) + "]<LOWLIMIT" ) ;
warnSaveReqVO . setUplimit ( reportObj . getAssess ( ) . get ( j ) . getAmplitude ( ) ) ;
warnSaveReqVO . setLowlimit ( - reportObj . getAssess ( ) . get ( j ) . getAmplitude ( ) ) ;
warnSaveReqVO . setOutputPoint ( createReqVO . getOutPointInfo ( ) . get ( reportObj . getAssess ( ) . get ( j ) . getIndex ( ) ) ) ;
warnSaveReqVO . setUnit ( createReqVO . getUnit ( ) . get ( reportObj . getAssess ( ) . get ( j ) . getIndex ( ) ) ) ;
// 设置其他必要字段(根据实际业务补充)
warnSaveReqVO . setWarnStatus ( 1L ) ; // 示例:设置初始状态
// 插入数据库
warnService . createWarn ( warnSaveReqVO ) ;
}
}
} catch ( Exception e ) {
log . error ( "模型实例创建失败,错误信息: " , e ) ;
throw exception ( CREATE_INSTANT_ERROR , "模型实例创建失败: " + e . getMessage ( ) ) ;
}
} catch ( Exception e ) {
log . error ( "模型实例创建失败,错误信息: " , e ) ;
throw exception ( CREATE_INSTANT_ERROR , "模型实例创建失败: " + e . getMessage ( ) ) ;
}
}
@ -497,8 +498,8 @@ try{
}
calcReqVO . setExA_IP ( EXA_IP ) ;
calcReqVO . setModel ( JsonUtils . toJsonString ( instant . getModelInfo ( ) ) ) ;
calcReqVO . setInstantInfo_Str ( JsonUtils . toJsonString ( instant . getInstantInfo ( ) ) ) ;
calcReqVO . setModel ( instant . getModelInfo ( ) ) ;
calcReqVO . setInstantInfo_Str ( instant . getInstantInfo ( ) ) ;
InstantInfoVO instantInfoVO = JsonUtils . parseObject ( instant . getInstantInfo ( ) , InstantInfoVO . class ) ;
List < String > 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 ;
}
}