@ -1,5 +1,7 @@
package com.biutag.supervisiondata.service.impl ;
package com.biutag.supervisiondata.service.impl ;
import cn.hutool.core.bean.BeanUtil ;
import cn.hutool.core.util.StrUtil ;
import com.alibaba.fastjson2.JSON ;
import com.alibaba.fastjson2.JSON ;
import com.alibaba.fastjson2.JSONObject ;
import com.alibaba.fastjson2.JSONObject ;
import com.baomidou.mybatisplus.core.conditions.Wrapper ;
import com.baomidou.mybatisplus.core.conditions.Wrapper ;
@ -8,6 +10,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper ;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper ;
import com.baomidou.mybatisplus.core.toolkit.Wrappers ;
import com.baomidou.mybatisplus.core.toolkit.Wrappers ;
import com.biutag.supervisiondata.mapper.dwd.ModelClueDataMapper ;
import com.biutag.supervisiondata.mapper.dwd.ModelClueDataMapper ;
import com.biutag.supervisiondata.mapper.mine.AlarmNotificationMapper ;
import com.biutag.supervisiondata.mapper.mine.ModelClueMapper ;
import com.biutag.supervisiondata.mapper.mine.ModelClueMapper ;
import com.biutag.supervisiondata.mapper.wdpc2.ModelClueWdpc2Mapper ;
import com.biutag.supervisiondata.mapper.wdpc2.ModelClueWdpc2Mapper ;
import com.biutag.supervisiondata.pojo.entity.mine.* ;
import com.biutag.supervisiondata.pojo.entity.mine.* ;
@ -59,41 +62,135 @@ public class ModelClueServiceImpl implements ModelClueService {
private final ModelClueDataDMRepository modelClueDataDMRepository ;
private final ModelClueDataDMRepository modelClueDataDMRepository ;
private final AlarmNotificationMapper alarmNotificationMapper ;
private final SupDepartRepository departRepository ;
public void generate ( Integer modelId ) {
public void generate ( Integer modelId ) {
if ( modelId = = 1300 ) {
if ( modelId = = 1300 ) {
updateDepart ( ) ;
updateDepart ( ) ;
return ;
return ;
}
}
Model model = modelRepository . getById ( modelId ) ;
try {
List < ModelClue > modelClues = new ArrayList < > ( ) ;
Model model = modelRepository . getById ( modelId ) ;
if ( ! Objects . isNull ( model ) & & model . getModelingMethod ( ) . equals ( "2" ) ) {
List < ModelClue > modelClues = new ArrayList < > ( ) ;
modelClues . addAll ( getModelClueBySql ( "customModel" , modelId , model ) ) ;
if ( ! Objects . isNull ( model ) & & model . getModelingMethod ( ) . equals ( "2" ) ) {
} else if ( ! Objects . isNull ( model ) & & model . getModelSql ( ) ! = null ) {
modelClues . addAll ( getModelClueBySql ( "customModel" , modelId , model ) ) ;
modelClues . addAll ( getModelClueBySql ( model . getModelSql ( ) , modelId , null ) ) ;
} else if ( ! Objects . isNull ( model ) & & model . getModelSql ( ) ! = null ) {
}
modelClues . addAll ( getModelClueBySql ( model . getModelSql ( ) , modelId , null ) ) ;
System . out . println ( "模型结果1数量:" + modelClues . size ( ) ) ;
}
if ( ! modelClues . isEmpty ( ) ) {
log . info ( "模型线索数量:" + modelClues . size ( ) ) ;
List < ModelClue > result = new ArrayList < > ( ) ;
// 过滤掉单位为空的数据
for ( ModelClue modelClue : modelClues ) {
modelClues = modelClues . stream ( ) . filter ( item - > StrUtil . isNotBlank ( item . getInvolveDepartId ( ) ) ) . toList ( ) ;
modelClue . setModelId ( modelId ) ;
modelClues . forEach ( item - > {
modelClue . setCreateTime ( LocalDateTime . now ( ) ) ;
item . setModelId ( modelId ) ;
if ( modelClue . getInvolveDepartName ( ) ! = null & & ! modelClue . getInvolveDepartName ( ) . isEmpty ( ) ) {
item . setCreateTime ( LocalDateTime . now ( ) ) ;
result . add ( modelClue ) ;
} ) ;
log . info ( "模型线索数量(过滤单位为空的数据):" + modelClues . size ( ) ) ;
int size ;
log . info ( "模型的预警类型为 {}" , model . getModelDataType ( ) ) ;
// 提醒通知
if ( "2" . equals ( model . getModelDataType ( ) ) ) {
// 保存提醒通知
size = addAlarmNotification ( modelClues , model ) ;
}
// 模型线索
else {
if ( ! modelClues . isEmpty ( ) ) {
modelClueMapper . insert ( modelClues ) ;
}
}
size = modelClues . size ( ) ;
}
}
System . out . println ( "模型结果2数量:" + modelClues . size ( ) ) ;
log . info ( "模型结果数据 入库数量:" + size ) ;
modelClueMapper . insert ( result ) ;
modelClueRecordRepository . getBaseMapper ( ) . insert ( new ModelClueRecord ( ) . setModelId ( modelId ) . setSize ( size ) . setCreateTime ( LocalDateTime . now ( ) ) . setState ( "success" ) ) ;
modelClueRecordRepository . getBaseMapper ( ) . insert ( new ModelClueRecord ( ) . setModelId ( modelId ) . setSize ( result . size ( ) ) . setCreateTime ( LocalDateTime . now ( ) ) . setState ( "success" ) ) ;
} else {
modelClueRecordRepository . getBaseMapper ( ) . insert ( new ModelClueRecord ( ) . setModelId ( modelId ) . setSize ( 0 ) . setCreateTime ( LocalDateTime . now ( ) ) . setState ( "fail" ) . setErrMsg ( "数据为空" ) ) ;
}
if ( Objects . nonNull ( model ) ) {
model . setLatestRunTime ( LocalDateTime . now ( ) ) ;
model . setLatestRunTime ( LocalDateTime . now ( ) ) ;
modelRepository . updateById ( model ) ;
modelRepository . updateById ( model ) ;
} catch ( RuntimeException e ) {
log . error ( e . getMessage ( ) , e ) ;
modelClueRecordRepository . getBaseMapper ( ) . insert ( new ModelClueRecord ( ) . setModelId ( modelId ) . setSize ( 0 ) . setCreateTime ( LocalDateTime . now ( ) ) . setState ( "fail" ) . setErrMsg ( e . getMessage ( ) ) ) ;
}
}
}
}
public int addAlarmNotification ( List < ModelClue > modelClues , Model model ) {
if ( modelClues . isEmpty ( ) ) {
return 0 ;
}
List < AlarmNotification > list = new ArrayList < > ( ) ;
for ( ModelClue item : modelClues ) {
AlarmNotification notification = new AlarmNotification ( ) ;
notification . setAlarmTime ( LocalDateTime . now ( ) ) ;
notification . setAlarmTypeId ( 3L ) ;
notification . setAlarmType ( "提醒通知" ) ;
notification . setNotificationDepartId ( item . getInvolveDepartId ( ) ) ;
notification . setNotificationDepartName ( item . getInvolveDepartName ( ) ) ;
notification . setAlarmContent ( item . getThingDesc ( ) ) ;
notification . setReplyState ( 0 ) ;
notification . setModelId ( model . getId ( ) ) ;
notification . setDel ( 0 ) ;
list . add ( notification ) ;
}
log . info ( "模型的提醒通知单位类型为 {}" , model . getHandleDepartType ( ) ) ;
if ( "1" . equals ( model . getHandleDepartType ( ) ) ) {
alarmNotificationMapper . insert ( list ) ;
return list . size ( ) ;
}
if ( "2" . equals ( model . getHandleDepartType ( ) ) ) {
SupDepart depart = departRepository . getById ( model . getHandleDepartId ( ) ) ;
list . forEach ( item - > {
item . setNotificationDepartId ( depart . getId ( ) ) ;
item . setNotificationDepartName ( depart . getShortName ( ) ) ;
} ) ;
alarmNotificationMapper . insert ( list ) ;
return list . size ( ) ;
}
// 问题涉及单位+指定单位
if ( "3" . equals ( model . getHandleDepartType ( ) ) ) {
alarmNotificationMapper . insert ( list ) ;
int size = list . size ( ) ;
for ( AlarmNotification notification : list ) {
SupDepart depart = departRepository . getById ( notification . getNotificationDepartId ( ) ) ;
// 法制 17、督审 18、警保 19
List < Integer > groups = List . of ( 17 , 18 , 19 ) ;
if ( depart . getLevel ( ) = = 2 ) {
List < SupDepart > departs = departRepository . list ( new LambdaQueryWrapper < SupDepart > ( )
. eq ( SupDepart : : getPid , notification . getId ( ) )
. in ( SupDepart : : getStatisticsGroupId , groups ) ) ;
if ( ! departs . isEmpty ( ) ) {
for ( SupDepart d : departs ) {
AlarmNotification n = new AlarmNotification ( ) ;
BeanUtil . copyProperties ( notification , n ) ;
n . setId ( null ) ;
n . setNotificationDepartId ( d . getId ( ) ) ;
n . setNotificationDepartName ( d . getShortName ( ) ) ;
alarmNotificationMapper . insert ( n ) ;
size + = 1 ;
}
}
}
if ( depart . getLevel ( ) = = 3 ) {
List < SupDepart > departs = departRepository . list ( new LambdaQueryWrapper < SupDepart > ( )
. eq ( SupDepart : : getPid , depart . getPid ( ) )
. in ( SupDepart : : getStatisticsGroupId , groups ) ) ;
if ( ! departs . isEmpty ( ) ) {
for ( SupDepart d : departs ) {
AlarmNotification n = new AlarmNotification ( ) ;
BeanUtil . copyProperties ( notification , n ) ;
n . setId ( null ) ;
n . setNotificationDepartId ( d . getId ( ) ) ;
n . setNotificationDepartName ( d . getShortName ( ) ) ;
alarmNotificationMapper . insert ( n ) ;
size + = 1 ;
}
}
}
return size ;
}
}
return 0 ;
}
public void generateCustomModels ( ) {
public void generateCustomModels ( ) {
log . info ( "开始执行自建模型" ) ;
log . info ( "开始执行自建模型" ) ;
List < Model > customModels = modelRepository . getBaseMapper ( ) . selectList ( Wrappers . < Model > lambdaQuery ( ) . eq ( Model : : getModelingMethod , "2" ) ) ;
List < Model > customModels = modelRepository . getBaseMapper ( ) . selectList ( Wrappers . < Model > lambdaQuery ( ) . eq ( Model : : getModelingMethod , "2" ) ) ;
@ -176,7 +273,7 @@ public class ModelClueServiceImpl implements ModelClueService {
oldUniqueKeys = modelClueRepository . listObjs ( new LambdaQueryWrapper < ModelClue > ( ) . select ( ModelClue : : getUniqueKey ) . ne ( ModelClue : : getDistributionState , "2" ) . eq ( ModelClue : : getModelId , modelId ) , String : : valueOf ) ;
oldUniqueKeys = modelClueRepository . listObjs ( new LambdaQueryWrapper < ModelClue > ( ) . select ( ModelClue : : getUniqueKey ) . ne ( ModelClue : : getDistributionState , "2" ) . eq ( ModelClue : : getModelId , modelId ) , String : : valueOf ) ;
List < String > changeStatusIds = oldUniqueKeys . stream ( ) . filter ( item - > ! uniqueKeys . contains ( item ) ) . toList ( ) ;
List < String > changeStatusIds = oldUniqueKeys . stream ( ) . filter ( item - > ! uniqueKeys . contains ( item ) ) . toList ( ) ;
if ( ! changeStatusIds . isEmpty ( ) ) {
if ( ! changeStatusIds . isEmpty ( ) ) {
modelClueMapper . update ( null , new LambdaUpdateWrapper < ModelClue > ( ) . in ( ModelClue : : getUniqueKey , changeStatusIds ) . set ( ModelClue : : getDistributionState , "2" ) ) ;
//modelClueMapper.update(null, new LambdaUpdateWrapper<ModelClue>().in(ModelClue::getUniqueKey, changeStatusIds).set(ModelClue::getDistributionState, "2"));
}
}
}
}
List < String > needsInsertIds = new ArrayList < > ( ) ;
List < String > needsInsertIds = new ArrayList < > ( ) ;
@ -246,6 +343,10 @@ public class ModelClueServiceImpl implements ModelClueService {
}
}
}
}
thingDescGeneration = String . join ( "" , thingDescGenerationSplit ) ;
thingDescGeneration = String . join ( "" , thingDescGenerationSplit ) ;
// 如果已存在,则跳过
if ( modelClueMapper . exists ( new LambdaQueryWrapper < ModelClue > ( ) . eq ( ModelClue : : getThingDesc , thingDescGeneration ) ) ) {
continue ;
}
SupExternalDepart supExternalDepart = supExternalDepartRepository . getOne ( new LambdaQueryWrapper < SupExternalDepart > ( ) . eq ( SupExternalDepart : : getExternalId , Optional . ofNullable ( map . get ( modelGeneration . getInvolveDepartId ( ) ) )
SupExternalDepart supExternalDepart = supExternalDepartRepository . getOne ( new LambdaQueryWrapper < SupExternalDepart > ( ) . eq ( SupExternalDepart : : getExternalId , Optional . ofNullable ( map . get ( modelGeneration . getInvolveDepartId ( ) ) )
. map ( Object : : toString ) . orElse ( "" ) ) . eq ( SupExternalDepart : : getSource , model . getClueDepartSource ( ) ) . last ( "LIMIT 1" ) ) ;
. map ( Object : : toString ) . orElse ( "" ) ) . eq ( SupExternalDepart : : getSource , model . getClueDepartSource ( ) ) . last ( "LIMIT 1" ) ) ;
String involveDepartName = "" ;
String involveDepartName = "" ;
@ -281,7 +382,7 @@ public class ModelClueServiceImpl implements ModelClueService {
List < String > oldUniqueKeys = modelClueRepository . listObjs ( new LambdaQueryWrapper < ModelClue > ( ) . select ( ModelClue : : getUniqueKey ) . ne ( ModelClue : : getDistributionState , "2" ) . eq ( ModelClue : : getModelId , modelId ) , String : : valueOf ) ;
List < String > oldUniqueKeys = modelClueRepository . listObjs ( new LambdaQueryWrapper < ModelClue > ( ) . select ( ModelClue : : getUniqueKey ) . ne ( ModelClue : : getDistributionState , "2" ) . eq ( ModelClue : : getModelId , modelId ) , String : : valueOf ) ;
List < String > changeStatusIds = oldUniqueKeys . stream ( ) . filter ( item - > ! uniqueKeys . contains ( item ) ) . toList ( ) ;
List < String > changeStatusIds = oldUniqueKeys . stream ( ) . filter ( item - > ! uniqueKeys . contains ( item ) ) . toList ( ) ;
if ( ! changeStatusIds . isEmpty ( ) ) {
if ( ! changeStatusIds . isEmpty ( ) ) {
modelClueMapper . update ( null , new LambdaUpdateWrapper < ModelClue > ( ) . in ( ModelClue : : getUniqueKey , changeStatusIds ) . set ( ModelClue : : getDistributionState , "2" ) ) ;
//modelClueMapper.update(null, new LambdaUpdateWrapper<ModelClue>().in(ModelClue::getUniqueKey, changeStatusIds).set(ModelClue::getDistributionState, "2"));
}
}
List < String > needsInsertIds = new ArrayList < > ( ) ;
List < String > needsInsertIds = new ArrayList < > ( ) ;
for ( String uniqueKey : uniqueKeys ) {
for ( String uniqueKey : uniqueKeys ) {
@ -913,7 +1014,7 @@ public class ModelClueServiceImpl implements ModelClueService {
private void getModelCluesForModel20 ( String param , List < ModelClue > modelClues ) {
private void getModelCluesForModel20 ( String param , List < ModelClue > modelClues ) {
System . out . println ( "模型20开始查询数据库" ) ;
System . out . println ( "模型20开始查询数据库" ) ;
// 定时任务
// 定时任务
String sql = "select * from dwd_qb_nbgl_lxqtscsygxjl where STR_TO_DATE(tjrq, '%Y-%m-%d') = (CURDATE() - INTERVAL 1 DAY);" ;
String sql = "select * from dwd_qb_nbgl_lxqtscsygxjl where STR_TO_DATE(tjrq, '%Y-%m-%d') = (CURDATE() - INTERVAL 3 DAY);" ;
List < Map < String , Object > > sqlList = modelClueDataMapper . selectByUniqueKeys ( sql ) ;
List < Map < String , Object > > sqlList = modelClueDataMapper . selectByUniqueKeys ( sql ) ;
System . out . println ( "模型20查询数据库完毕,结果数量:" + sqlList . size ( ) ) ;
System . out . println ( "模型20查询数据库完毕,结果数量:" + sqlList . size ( ) ) ;
if ( sqlList . isEmpty ( ) ) {
if ( sqlList . isEmpty ( ) ) {
@ -943,7 +1044,7 @@ public class ModelClueServiceImpl implements ModelClueService {
private void getModelCluesForModel22 ( String param , List < ModelClue > modelClues ) {
private void getModelCluesForModel22 ( String param , List < ModelClue > modelClues ) {
System . out . println ( "模型22开始查询数据库" ) ;
System . out . println ( "模型22开始查询数据库" ) ;
// 定时任务
// 定时任务
String sql = "select * from \"JSDZ_4GDB\".\"v_anomaly_statistics\" where \"CREATETIME\" = \" " + getYesterdayString ( ) + "\" " ;
String sql = "select * from \"JSDZ_4GDB\".\"v_anomaly_statistics\" where CREATETIME = ' " + getYesterdayString ( ) + "' " ;
List < Map < String , Object > > sqlList = modelClueDataDMRepository . selectByUniqueKeys ( sql ) ;
List < Map < String , Object > > sqlList = modelClueDataDMRepository . selectByUniqueKeys ( sql ) ;
System . out . println ( "模型22查询数据库完毕,结果数量:" + sqlList . size ( ) ) ;
System . out . println ( "模型22查询数据库完毕,结果数量:" + sqlList . size ( ) ) ;
if ( sqlList . isEmpty ( ) ) {
if ( sqlList . isEmpty ( ) ) {