@ -1,17 +1,28 @@
package cn.iocoder.yudao.module.alert.service.instant ;
import cn.hutool.core.util.ObjUtil ;
import cn.hutool.core.util.StrUtil ;
import cn.iocoder.yudao.framework.common.pojo.PageResult ;
import cn.iocoder.yudao.framework.common.util.json.JsonUtils ;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils ;
import cn.iocoder.yudao.module.alert.controller.admin.exa.vo.Point ;
import cn.iocoder.yudao.module.alert.controller.admin.instant.vo.* ;
import cn.iocoder.yudao.module.alert.controller.admin.model.vo.RunModelInfoVO ;
import cn.iocoder.yudao.module.alert.controller.admin.warn.vo.WarnSaveReqVO ;
import cn.iocoder.yudao.module.alert.dal.dataobject.instant.InstantDO ;
import cn.iocoder.yudao.module.alert.dal.dataobject.instant.InstantTableDO ;
import cn.iocoder.yudao.module.alert.dal.dataobject.report.Report ;
import cn.iocoder.yudao.module.alert.dal.dataobject.report.ReportDO ;
import cn.iocoder.yudao.module.alert.dal.dataobject.warn.WarnTableDO ;
import cn.iocoder.yudao.module.alert.dal.mysql.instant.InstantMapper ;
import cn.iocoder.yudao.module.alert.dal.mysql.instant.InstantTableMapper ;
import cn.iocoder.yudao.module.alert.dal.mysql.model.VersionMapper ;
import cn.iocoder.yudao.module.alert.dal.mysql.report.ReportMapper ;
import cn.iocoder.yudao.module.alert.dal.mysql.warn.WarnTableMapper ;
import cn.iocoder.yudao.module.alert.service.warn.WarnService ;
import cn.iocoder.yudao.module.alert.utils.EXAUtils ;
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO ;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils ;
import com.google.common.annotations.VisibleForTesting ;
import com.mzt.logapi.context.LogRecordContext ;
import com.mzt.logapi.service.impl.DiffParseFunction ;
@ -25,6 +36,7 @@ import cn.iocoder.yudao.module.system.dal.redis.RedisKeyConstants;
import org.springframework.transaction.annotation.Transactional ;
import java.io.IOException ;
import java.time.Instant ;
import java.util.ArrayList ;
import java.util.Arrays ;
import java.util.List ;
@ -41,6 +53,15 @@ public class InstantServiceImpl implements InstantService {
private InstantMapper instantMapper ;
@Resource
private InstantTableMapper instantTableMapper ;
@Resource
private ReportMapper reportMapper ;
@Resource
private VersionMapper versionMapper ;
@Resource
private WarnService warnService ;
EXAUtils exaUtils = new EXAUtils ( ) ;
@Value ( "${point.head}" )
private String HEAD ;
@ -55,6 +76,12 @@ public class InstantServiceImpl implements InstantService {
// 1. 校验角色
// validateRoleDuplicate(createReqVO.getName(), createReqVO.getCode(), null);
//根据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 )
@ -92,7 +119,7 @@ public class InstantServiceImpl implements InstantService {
//构建重构值对象
outpoint = HEAD + "M" + String . format ( "%04d" , insertId ) + String . format ( "%04d" , i + 1 ) + "R" ;
point = new Point ( ) ;
point . setGroupName ( "warn " ) ;
point . setGroupName ( "WARN " ) ;
outPointInfoList . add ( outpoint ) ;
point . setItemName ( outpoint ) ;
point . setDescriptor ( pointInfoList . get ( i ) . getDescription ( ) + "_重构值" ) ;
@ -103,7 +130,7 @@ public class InstantServiceImpl implements InstantService {
//构建时间值对象
outpoint = HEAD + "M" + String . format ( "%04d" , insertId ) + String . format ( "%04d" , i + 1 ) + "T" ;
point = new Point ( ) ;
point . setGroupName ( "warn " ) ;
point . setGroupName ( "WARN " ) ;
timePointInfoList . add ( outpoint ) ;
point . setItemName ( outpoint ) ;
point . setDescriptor ( pointInfoList . get ( i ) . getDescription ( ) + "_时间值" ) ;
@ -114,7 +141,7 @@ public class InstantServiceImpl implements InstantService {
//构建偏差值对象
outpoint = HEAD + "M" + String . format ( "%04d" , insertId ) + String . format ( "%04d" , i + 1 ) + "B" ;
point = new Point ( ) ;
point . setGroupName ( "warn " ) ;
point . setGroupName ( "WARN " ) ;
biasPointInfoList . add ( outpoint ) ;
point . setItemName ( outpoint ) ;
point . setDescriptor ( pointInfoList . get ( i ) . getDescription ( ) + "_偏差值" ) ;
@ -125,7 +152,7 @@ public class InstantServiceImpl implements InstantService {
//构建状态值对象
outpoint = HEAD + "M" + String . format ( "%04d" , insertId ) + String . format ( "%04d" , i + 1 ) + "F" ;
point = new Point ( ) ;
point . setGroupName ( "warn " ) ;
point . setGroupName ( "WARN " ) ;
faultVariablePointList . add ( outpoint ) ;
point . setItemName ( outpoint ) ;
point . setDescriptor ( pointInfoList . get ( i ) . getDescription ( ) + "_状态值" ) ;
@ -159,7 +186,7 @@ public class InstantServiceImpl implements InstantService {
//赋值-createReqVO
createReqVO . setModel_state ( outpoint ) ;
point = new Point ( ) ;
point . setGroupName ( "warn " ) ;
point . setGroupName ( "WARN " ) ;
point . setItemName ( outpoint ) ;
point . setDescriptor ( instant . getMpName ( ) + "_残差值" ) ;
point . setItemType ( 5 ) ;
@ -170,7 +197,7 @@ public class InstantServiceImpl implements InstantService {
//赋值-createReqVO
createReqVO . setModel_status ( outpoint ) ;
point = new Point ( ) ;
point . setGroupName ( "warn " ) ;
point . setGroupName ( "WARN " ) ;
point . setItemName ( outpoint ) ;
point . setDescriptor ( instant . getMpName ( ) + "_状态值" ) ;
point . setItemType ( 5 ) ;
@ -195,10 +222,55 @@ public class InstantServiceImpl implements InstantService {
String ss = exaUtils . setPoint ( EXA_IP , item ) ;
resultList . add ( ss ) ;
}
createWarn1 ( instant , createReqVO ) ;
return resultList ;
}
public void createWarn1 ( InstantTableDO instant , InstantSaveReqVO createReqVO ) {
//调用预警表和评估报告表的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 . getId ( ) ) ;
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 ) ;
}
}
}
@Override
public List < InstantPointRespVO > getInstantPoint ( Long id ) {
List < InstantPointRespVO > instantPointList = new ArrayList < > ( ) ;
@ -369,4 +441,37 @@ public class InstantServiceImpl implements InstantService {
// }
// }
@Override
@Transactional ( rollbackFor = Exception . class )
@LogRecord ( type = SYSTEM_INSTANT_TYPE , subType = SYSTEM_INSTANT_DELETE_SUB_TYPE , bizNo = "{{#id}}" ,
success = SYSTEM_INSTANT_DELETE_SUCCESS )
public void deleteInstant ( Long id ) {
// 1. 校验用户存在
InstantDO instant = validateInstantExists ( id ) ;
// 2.1 删除用户
instantTableMapper . deleteById ( id ) ;
// // 2.2 删除用户关联数据
// permissionService.processUserDeleted(id);
// // 2.2 删除用户岗位
// userPostMapper.deleteByUserId(id);
// 3. 记录操作日志上下文
LogRecordContext . putVariable ( "instant" , instant ) ;
}
@VisibleForTesting
InstantDO validateInstantExists ( Long id ) {
if ( id = = null ) {
return null ;
}
InstantDO instant = instantMapper . selectById ( id ) ;
if ( instant = = null ) {
throw exception ( INSTANT_NOT_EXISTS ) ;
}
return instant ;
}
}