@ -28,6 +28,7 @@ import com.biutag.supervisiondata.util.OrgUtil;
import com.biutag.supervisiondata.util.PatternUtil ;
import lombok.AllArgsConstructor ;
import lombok.extern.slf4j.Slf4j ;
import org.springframework.cglib.core.Local ;
import org.springframework.stereotype.Service ;
import java.time.LocalDate ;
@ -544,6 +545,161 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
taskRepository . updateTask ( task2 . getId ( ) , toInsert . size ( ) , toUpdate2 . size ( ) ) ;
}
@Override
public void syncParentRelation ( 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 > fathers = gBaseJJDRepository . getBaseMapper ( ) . selectFatherRelation ( startTime ) ;
List < GBaseJJD > mothers = gBaseJJDRepository . getBaseMapper ( ) . selectMotherRelation ( startTime ) ;
RiskTask task = taskRepository . create ( fathers . size ( ) , 69 ) ;
RiskTask task2 = taskRepository . create ( mothers . size ( ) , 70 ) ;
// ****父亲矛盾*****
Map < String , List < GBaseJJD > > fatherIdCodeMap = findTargetJJD ( fathers ) ;
// ****母亲矛盾*****
Map < String , List < GBaseJJD > > motherIdCodeMap = findTargetJJD ( mothers ) ;
List < RiskModelTaskClue > toInsert = eachClue2Save ( domain , task , fatherIdCodeMap , "父亲" ) ;
List < RiskModelTaskClue > toInsert2 = eachClue2Save ( domain , task2 , motherIdCodeMap , "母亲" ) ;
if ( ! toInsert . isEmpty ( ) ) {
log . info ( "父亲矛盾增加 {}" , toInsert . size ( ) ) ;
clueService . saveClues ( toInsert , "家庭、人际、两性关系" ) ;
}
if ( ! toInsert2 . isEmpty ( ) ) {
log . info ( "母亲矛盾增加 {}" , toInsert2 . size ( ) ) ;
clueService . saveClues ( toInsert2 , "家庭、人际、两性关系" ) ;
}
taskRepository . updateTask ( task . getId ( ) , toInsert . size ( ) , 0 ) ;
taskRepository . updateTask ( task2 . getId ( ) , toInsert2 . size ( ) , 0 ) ;
}
Map < String , List < GBaseJJD > > findTargetJJD ( List < GBaseJJD > jjdList ) {
Map < String , List < GBaseJJD > > fatherIdCodeMap = new WeakHashMap < > ( ) ;
List < GBaseJJD > others = new ArrayList < > ( ) ;
List < String > mobiles = new ArrayList < > ( ) ;
// 第一轮排除掉有身份证的
for ( GBaseJJD gBaseJJD : jjdList ) {
boolean continueMobile = false ;
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 0 - > continueMobile = true ;
case 1 - > fatherIdCodeMap . computeIfAbsent ( tmp . getFirst ( ) , k - > new ArrayList < > ( ) ) . add ( gBaseJJD ) ;
default - > fatherIdCodeMap . computeIfAbsent ( findSmallOne ( tmp ) , k - > new ArrayList < > ( ) ) . add ( gBaseJJD ) ;
}
if ( ! continueMobile ) {
continue ;
}
}
String mobile = PatternUtil . takeMobile ( gBaseJJD . getCjqk ( ) ) ;
if ( ! mobile . isEmpty ( ) ) {
mobiles . addAll ( Arrays . stream ( mobile . split ( "," ) ) . toList ( ) ) ;
others . add ( gBaseJJD ) ;
continue ;
}
mobile = PatternUtil . takeMobile ( gBaseJJD . getBjnr ( ) ) ;
if ( ! mobile . isEmpty ( ) ) {
mobiles . addAll ( Arrays . stream ( mobile . split ( "," ) ) . toList ( ) ) ;
others . add ( gBaseJJD ) ;
}
}
List < GBaseSYRKXX > xxList = gBaseSYRKXXRepository . list ( new LambdaQueryWrapper < GBaseSYRKXX > ( )
. select ( GBaseSYRKXX : : getGmsfhm , GBaseSYRKXX : : getLxdh ) . in ( GBaseSYRKXX : : getLxdh , mobiles ) ) ;
Map < String , List < GBaseSYRKXX > > mobileRkMap = xxList . stream ( ) . collect ( Collectors . groupingBy ( GBaseSYRKXX : : getLxdh ) ) ;
// 第二轮通过手机号找身份证
for ( GBaseJJD other : others ) {
String mobile = PatternUtil . takeMobile ( other . getCjqk ( ) ) ;
if ( mobile . isEmpty ( ) ) {
mobile = PatternUtil . takeMobile ( other . getBjnr ( ) ) ;
}
List < String > tmp = Arrays . stream ( mobile . split ( "," ) ) . toList ( ) ;
List < String > idCard = new ArrayList < > ( ) ;
for ( String s : tmp ) {
List < GBaseSYRKXX > arr = Optional . ofNullable ( mobileRkMap . get ( s ) ) . orElse ( new ArrayList < > ( ) ) ;
idCard . addAll ( arr . stream ( ) . map ( GBaseSYRKXX : : getGmsfhm ) . filter ( Objects : : nonNull ) . toList ( ) ) ;
}
if ( idCard . isEmpty ( ) ) {
continue ;
}
fatherIdCodeMap . computeIfAbsent ( findSmallOne ( idCard ) , k - > new ArrayList < > ( ) ) . add ( other ) ;
}
return fatherIdCodeMap ;
}
List < RiskModelTaskClue > eachClue2Save ( TaskParamDomain domain , RiskTask task , Map < String , List < GBaseJJD > > fatherIdCodeMap , String tag ) {
List < RiskModelTaskClue > oldList = domain . getMap ( ) . get ( task . getModelId ( ) ) ;
Map < String , List < RiskModelTaskClue > > personMap = oldList . stream ( ) . collect ( Collectors . groupingBy ( RiskModelTaskClue : : getIdCode ) ) ;
List < RiskModelTaskClue > toInsert = new ArrayList < > ( ) ;
for ( RiskPersonal person : domain . getPersons ( ) ) {
List < GBaseJJD > jjdList = fatherIdCodeMap . get ( person . getIdCode ( ) ) ;
if ( jjdList = = null ) {
continue ;
}
List < RiskModelTaskClue > olds = Optional . ofNullable ( personMap . get ( person . getIdCode ( ) ) ) . orElse ( new ArrayList < > ( ) ) ;
Map < String , RiskModelTaskClue > oldMap = olds . stream ( ) . collect ( Collectors . toMap ( RiskModelTaskClue : : getCaseIds , Function . identity ( ) , ( val , old ) - > val ) ) ;
for ( GBaseJJD jjd : jjdList ) {
if ( oldMap . get ( BhUtil . jjdBh ( jjd . getJjdbh ( ) ) ) ! = null ) {
continue ;
}
ClueData data = ClueData . builder ( )
. name ( person . getName ( ) )
. id ( BhUtil . jjdBh ( jjd . getJjdbh ( ) ) )
. idCode ( person . getIdCode ( ) )
. tag ( "与" + tag + "存在矛盾" )
. personId ( person . getId ( ) )
. build ( ) ;
StringBuilder sb = new StringBuilder ( "该人员与" + tag + "存在矛盾,接警单编号:" + jjd . getJjdbh ( ) ) ;
if ( jjd . getBjnr ( ) ! = null & & ! jjd . getBjnr ( ) . isEmpty ( ) ) {
sb . append ( ",报警内容;" + jjd . getBjnr ( ) ) ;
}
if ( jjd . getCjqk ( ) ! = null & & ! jjd . getCjqk ( ) . isEmpty ( ) ) {
sb . append ( ",处警情况;" + jjd . getCjqk ( ) ) ;
}
sb . append ( ",增加风险分5分" ) ;
data . setSourceData ( sb . toString ( ) ) ;
try {
data . setEventTime ( jjd . getBjsj ( ) . toInstant ( ) . atZone ( ZoneId . systemDefault ( ) ) . toLocalDateTime ( ) ) ;
} catch ( Exception ignored ) {
data . setEventTime ( LocalDateTime . now ( ) ) ;
}
toInsert . add ( createClue ( task . getModelId ( ) , 5 , task . getId ( ) , data ) ) ;
}
}
return toInsert ;
}
String findSmallOne ( List < String > list ) {
LocalDate today = LocalDate . now ( ) ;
String idCode = null ;
int age = 0 ;
for ( String s : list ) {
if ( idCode = = null ) {
idCode = s ;
age = Optional . ofNullable ( IdCodeUtil . idCard2Age ( s , today ) ) . orElse ( 0 ) ;
continue ;
}
int tmp = Optional . ofNullable ( IdCodeUtil . idCard2Age ( s , today ) ) . orElse ( 0 ) ;
if ( tmp < age ) {
age = tmp ;
idCode = s ;
}
}
return idCode ;
}
/ * *
* 手机要搜索的clue数据
* @param idCode 身份证Map