@ -110,7 +110,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
continue ;
} else {
mobiles1 . add ( item . getBjrlxdh ( ) ) ;
jjdMap . computeIfAbsent ( item . getBjrzjhm ( ) , k - > new ArrayList < > ( ) ) . add ( item ) ;
jjdMM ap . computeIfAbsent ( item . getBjrzjhm ( ) , k - > new ArrayList < > ( ) ) . add ( item ) ;
}
personals . add ( person ) ;
}
@ -165,8 +165,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
}
if ( personal . getMobileNumber ( ) ! = null & & info = = null ) {
xxxInfo = mobileMap . get ( personal . getMobileNumber ( ) ) ;
if ( xxxInfo = = null | | xxxInfo . isEmpty ( ) ) {
} else {
if ( xxxInfo = = null & & xxxInfo . isEmpty ( ) ) {
info = compare ( xxxInfo , personal . getName ( ) ) ;
}
if ( info = = null & & xxxInfo ! = null ) {
@ -233,7 +232,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
if ( depart = = null ) {
PointOrg org = orgCodeMap . get ( tmp . getGxdwdm ( ) ) ;
org = OrgUtil . findOrg ( org , orgIdMap ) ;
depart = Optional . ofNullable ( org ) . map ( PointOrg : : getDm ) . map ( item - > jqExternalDepart . get ( item ) ) . orElse ( null ) ;
depart = Optional . ofNullable ( org ) . map ( PointOrg : : getDm ) . map ( jqExternalDepart : : get ) . orElse ( null ) ;
}
if ( depart = = null ) {
personal . setControlDepartId ( null ) ;
@ -390,7 +389,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
. name ( person . getName ( ) )
. id ( BhUtil . jjdBh ( gBaseJJD . getJjdbh ( ) ) )
. idCode ( person . getIdCode ( ) )
. tag ( "有 平台涉警事件" )
. tag ( "平台涉警事件" )
. personId ( person . getId ( ) )
. build ( ) ;
StringBuilder sb = new StringBuilder ( "该人员存在平台涉警事件警情,接警单编号:" + gBaseJJD . getJjdbh ( ) ) ;
@ -410,12 +409,188 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
toInsert . add ( createClue ( task . getModelId ( ) , 5 , task . getId ( ) , data ) ) ;
}
}
log . info ( "保存袭警数据:{}" , toInsert . size ( ) ) ;
if ( ! toInsert . isEmpty ( ) ) {
clueService . saveClues ( toInsert , Default . WF_IG ) ;
}
taskRepository . updateTask ( task . getId ( ) , toInsert . size ( ) , 0 ) ;
}
@Override
public void syncHomeViolence ( TaskParamDomain domain ) {
String startTime = LocalDateTime . of ( 2023 , 12 , 6 , 0 , 0 , 0 ) . format ( DateTimeFormatter . ofPattern ( "yyyy-MM-dd HH:mm:ss" ) ) ;
LocalDateTime limit = LocalDateTime . now ( ) . minusYears ( 1 ) ;
List < GBaseJJD > result = gBaseJJDRepository . getBaseMapper ( ) . selectHomeViolence ( startTime ) ;
// 被家暴
RiskTask task = taskRepository . create ( result . size ( ) , 65 ) ;
// 家暴
RiskTask task2 = taskRepository . create ( result . size ( ) , 66 ) ;
// ****被家暴*****
// 证件相关警情
Map < String , List < GBaseJJD > > shIdCodeMap = new WeakHashMap < > ( ) ;
// 手机号相关警情
Map < String , List < GBaseJJD > > shMobileMap = new WeakHashMap < > ( ) ;
// ****家暴*****
// 证件相关警情
Map < String , List < GBaseJJD > > wfIdCodeMap = new WeakHashMap < > ( ) ;
// 手机号相关警情
Map < String , List < GBaseJJD > > wfMobileMap = new WeakHashMap < > ( ) ;
// 没有号码算报警人被家暴,一个号码算该人被家暴,两个号码算第一人被家暴,第二人家暴,3个号码从第二个开始算(第一个号码有可能是民警或报警人)
for ( GBaseJJD gBaseJJD : result ) {
String idCard = PatternUtil . takeIdCard ( gBaseJJD . getCjqk ( ) ) ;
if ( idCard . isEmpty ( ) ) {
idCard = PatternUtil . takeIdCard ( gBaseJJD . getBjnr ( ) ) ;
}
if ( ! idCard . isEmpty ( ) ) {
List < String > tmp = Arrays . stream ( idCard . split ( "," ) ) . toList ( ) ;
switch ( tmp . size ( ) ) {
case 1 - > shIdCodeMap . computeIfAbsent ( tmp . getFirst ( ) , k - > new ArrayList < > ( ) ) . add ( gBaseJJD ) ;
case 2 - > {
shIdCodeMap . computeIfAbsent ( tmp . getFirst ( ) , k - > new ArrayList < > ( ) ) . add ( gBaseJJD ) ;
wfIdCodeMap . computeIfAbsent ( tmp . get ( 1 ) , k - > new ArrayList < > ( ) ) . add ( gBaseJJD ) ;
}
default - > {
shIdCodeMap . computeIfAbsent ( tmp . get ( 1 ) , k - > new ArrayList < > ( ) ) . add ( gBaseJJD ) ;
wfIdCodeMap . computeIfAbsent ( tmp . get ( 2 ) , k - > new ArrayList < > ( ) ) . add ( gBaseJJD ) ;
}
}
continue ;
}
String mobile = PatternUtil . takeMobile ( gBaseJJD . getCjqk ( ) ) ;
if ( mobile . isEmpty ( ) ) {
mobile = PatternUtil . takeMobile ( gBaseJJD . getBjnr ( ) ) ;
}
if ( ! mobile . isEmpty ( ) ) {
List < String > tmp = Arrays . stream ( idCard . split ( "," ) ) . toList ( ) ;
switch ( tmp . size ( ) ) {
case 1 - > shMobileMap . computeIfAbsent ( tmp . getFirst ( ) , k - > new ArrayList < > ( ) ) . add ( gBaseJJD ) ;
case 2 - > {
shMobileMap . computeIfAbsent ( tmp . getFirst ( ) , k - > new ArrayList < > ( ) ) . add ( gBaseJJD ) ;
wfMobileMap . computeIfAbsent ( tmp . get ( 1 ) , k - > new ArrayList < > ( ) ) . add ( gBaseJJD ) ;
}
default - > {
shMobileMap . computeIfAbsent ( tmp . get ( 1 ) , k - > new ArrayList < > ( ) ) . add ( gBaseJJD ) ;
wfMobileMap . computeIfAbsent ( tmp . get ( 2 ) , k - > new ArrayList < > ( ) ) . add ( gBaseJJD ) ;
}
}
continue ;
}
if ( gBaseJJD . getBjrzjhm ( ) ! = null & & ! gBaseJJD . getBjrzjhm ( ) . isEmpty ( ) ) {
shIdCodeMap . computeIfAbsent ( gBaseJJD . getBjrzjhm ( ) , k - > new ArrayList < > ( ) ) . add ( gBaseJJD ) ;
continue ;
}
if ( gBaseJJD . getBjdh ( ) ! = null & & ! gBaseJJD . getBjdh ( ) . isEmpty ( ) ) {
shMobileMap . computeIfAbsent ( gBaseJJD . getBjdh ( ) , k - > new ArrayList < > ( ) ) . add ( gBaseJJD ) ;
}
}
List < RiskModelTaskClue > oldList = Optional . ofNullable ( domain . getMap ( ) . get ( task . getModelId ( ) ) ) . orElse ( new ArrayList < > ( ) ) ;
List < RiskModelTaskClue > oldList2 = Optional . ofNullable ( domain . getMap ( ) . get ( task2 . getModelId ( ) ) ) . orElse ( new ArrayList < > ( ) ) ;
// 按人分
Map < String , List < RiskModelTaskClue > > personOldMap = oldList . stream ( ) . collect ( Collectors . groupingBy ( RiskModelTaskClue : : getIdCode ) ) ;
Map < String , List < RiskModelTaskClue > > personOldMap2 = oldList2 . stream ( ) . collect ( Collectors . groupingBy ( RiskModelTaskClue : : getIdCode ) ) ;
List < RiskModelTaskClue > toInsert = new ArrayList < > ( ) ;
List < RiskModelTaskClue > toInsert2 = new ArrayList < > ( ) ;
for ( RiskPersonal person : domain . getPersons ( ) ) {
// 被家暴
toInsert . addAll ( collectionClue ( shIdCodeMap , shMobileMap , person , personOldMap , task , "被家暴" ) ) ;
toInsert2 . addAll ( collectionClue ( wfIdCodeMap , wfMobileMap , person , personOldMap2 , task2 , "家暴" ) ) ;
}
List < RiskModelTaskClue > toUpdate = new ArrayList < > ( ) ;
List < RiskModelTaskClue > toUpdate2 = new ArrayList < > ( ) ;
List < String > deleteIdCards = new ArrayList < > ( ) ;
List < String > deleteIdCards2 = new ArrayList < > ( ) ;
for ( RiskModelTaskClue clue : oldList ) {
if ( clue . getEventTime ( ) . isBefore ( limit ) ) {
RiskModelTaskClue update = new RiskModelTaskClue ( ) ;
update . setId ( update . getId ( ) ) ;
update . setDel ( 1 ) ;
toUpdate . add ( update ) ;
deleteIdCards . add ( clue . getIdCode ( ) ) ;
}
}
for ( RiskModelTaskClue clue : oldList2 ) {
if ( clue . getEventTime ( ) . isBefore ( limit ) ) {
RiskModelTaskClue update = new RiskModelTaskClue ( ) ;
update . setId ( update . getId ( ) ) ;
update . setDel ( 1 ) ;
toUpdate2 . add ( update ) ;
deleteIdCards2 . add ( clue . getIdCode ( ) ) ;
}
}
log . info ( "被家暴:{} | {}" , toInsert . size ( ) , toUpdate . size ( ) ) ;
if ( ! toInsert . isEmpty ( ) ) {
clueService . saveClues ( toInsert , Default . HOME_VIOLENCE ) ;
}
if ( ! toUpdate . isEmpty ( ) ) {
clueService . deleteCluesAndDeleteTag ( toUpdate , deleteIdCards , "被家暴" ) ;
}
log . info ( "家暴:{} | {}" , toInsert2 . size ( ) , toUpdate2 . size ( ) ) ;
if ( ! toInsert . isEmpty ( ) ) {
clueService . saveClues ( toInsert , Default . HOME_VIOLENCE ) ;
}
if ( ! toUpdate2 . isEmpty ( ) ) {
clueService . deleteCluesAndDeleteTag ( toUpdate2 , deleteIdCards , "家暴" ) ;
}
taskRepository . updateTask ( task . getId ( ) , toInsert . size ( ) , toUpdate . size ( ) ) ;
taskRepository . updateTask ( task2 . getId ( ) , toInsert . size ( ) , toUpdate2 . size ( ) ) ;
}
/ * *
* 手机要搜索的clue数据
* @param idCode 身份证Map
* @param mobile 手机号map
* @param personal 人员
* @param personOldMap 人员的旧clue
* @param task 任务
* @param tag 标签
* @return 要新增的clue
* /
List < RiskModelTaskClue > collectionClue ( Map < String , List < GBaseJJD > > idCode , Map < String , List < GBaseJJD > > mobile , RiskPersonal personal , Map < String , List < RiskModelTaskClue > > personOldMap , RiskTask task , String tag ) {
List < GBaseJJD > jjdList = Optional . of ( idCode . get ( personal . getIdCode ( ) ) ) . orElse ( new ArrayList < > ( ) ) ;
jjdList . addAll ( Optional . of ( mobile . get ( personal . getMobileNumber ( ) ) ) . orElse ( new ArrayList < > ( ) ) ) ;
if ( jjdList . isEmpty ( ) ) {
return new ArrayList < > ( ) ;
}
jjdList = jjdList . stream ( ) . filter ( StreamUtil . distinctByKey ( GBaseJJD : : getJjdbh ) ) . toList ( ) ;
List < RiskModelTaskClue > olds = Optional . ofNullable ( personOldMap . get ( personal . getIdCode ( ) ) ) . orElse ( new ArrayList < > ( ) ) ;
Map < String , RiskModelTaskClue > oldMap = olds . stream ( ) . collect ( Collectors . toMap ( RiskModelTaskClue : : getCaseIds , Function . identity ( ) , ( val , old ) - > val ) ) ;
List < RiskModelTaskClue > toInsert = new ArrayList < > ( ) ;
for ( GBaseJJD gBaseJJD : jjdList ) {
if ( oldMap . get ( BhUtil . jjdBh ( gBaseJJD . getJjdbh ( ) ) ) ! = null ) {
continue ;
}
ClueData data = ClueData . builder ( )
. name ( personal . getName ( ) )
. id ( BhUtil . jjdBh ( gBaseJJD . getJjdbh ( ) ) )
. idCode ( personal . getIdCode ( ) )
. tag ( tag )
. personId ( personal . getId ( ) )
. build ( ) ;
StringBuilder sb = new StringBuilder ( "该人员存在" + tag + "警情,接警单编号:" + gBaseJJD . getJjdbh ( ) ) ;
if ( gBaseJJD . getBjnr ( ) ! = null & & ! gBaseJJD . getBjnr ( ) . isEmpty ( ) ) {
sb . append ( ",报警内容;" + gBaseJJD . getBjnr ( ) ) ;
}
if ( gBaseJJD . getCjqk ( ) ! = null & & ! gBaseJJD . getCjqk ( ) . isEmpty ( ) ) {
sb . append ( ",处警情况;" + gBaseJJD . getCjqk ( ) ) ;
}
sb . append ( ",增加风险分5分" ) ;
data . setSourceData ( sb . toString ( ) ) ;
try {
data . setEventTime ( gBaseJJD . getBjsj ( ) . toInstant ( ) . atZone ( ZoneId . systemDefault ( ) ) . toLocalDateTime ( ) ) ;
} catch ( Exception ignored ) {
data . setEventTime ( LocalDateTime . now ( ) ) ;
}
toInsert . add ( createClue ( task . getModelId ( ) , 5 , task . getId ( ) , data ) ) ;
}
return toInsert ;
}
void toRedisCache ( List < GBaseJJD > jjdList , String keyName ) {
RedisDao . getInstance ( ) . removeListAll ( keyName ) ;
RedisDao . getInstance ( ) . pipeLineExec ( ( connection , key , value ) - > jjdList . forEach ( item - > {