@ -2,13 +2,14 @@ package com.biutag.supervisiondata.service.impl;
import com.alibaba.fastjson2.JSON ;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper ;
import com.biutag.supervisiondata.common.interfaces.CompletableFutureUtil ;
import com.biutag.supervisiondata.config.cache.RedisDao ;
import com.biutag.supervisiondata.mapper.mine.SupDepartMapper ;
import com.biutag.supervisiondata.pojo.ClueData ;
import com.biutag.supervisiondata.pojo.constants.Default ;
import com.biutag.supervisiondata.pojo.database.MuchCall ;
import com.biutag.supervisiondata.pojo.database.SecurityMan ;
import com.biutag.supervisiondata.pojo.domain.* ;
import com.biutag.supervisiondata.pojo.entity.dwd.GBaseJJD ;
import com.biutag.supervisiondata.pojo.entity.dwd.GBaseOilBuy ;
import com.biutag.supervisiondata.pojo.entity.dwd.GBaseTbDZdrylb ;
import com.biutag.supervisiondata.pojo.entity.dwd.GBaseZDRY ;
@ -30,6 +31,7 @@ import java.time.ZoneId;
import java.time.format.DateTimeFormatter ;
import java.util.* ;
import java.util.List ;
import java.util.concurrent.CompletableFuture ;
import java.util.function.Function ;
import java.util.stream.Collectors ;
@ -420,7 +422,7 @@ public class PointServiceImpl implements PointService {
public void syncOilBuy ( TaskParamDomain domain ) {
LocalDateTime currentTime = LocalDateTime . now ( ) . minusMonths ( 3 ) ;
List < GBaseOilBuy > buys = oilBuyRepository . list ( new LambdaQueryWrapper < GBaseOilBuy > ( )
. select ( GBaseOilBuy : : getId , GBaseOilBuy : : getNumber , GBaseOilBuy : : getOrgId , GBaseOilBuy : : getOrgName ,
. select ( GBaseOilBuy : : getXh , GBaseOilBuy : : getNumber , GBaseOilBuy : : getOrgId , GBaseOilBuy : : getOrgName ,
GBaseOilBuy : : getName , GBaseOilBuy : : getCompanyName , GBaseOilBuy : : getType , GBaseOilBuy : : getTime ,
GBaseOilBuy : : getUseTo , GBaseOilBuy : : getMobile , GBaseOilBuy : : getIdCode )
. ge ( GBaseOilBuy : : getTime , currentTime . format ( DateTimeFormatter . ofPattern ( "yyyy-MM-dd HH:mm:ss" ) ) ) ) ;
@ -432,6 +434,19 @@ public class PointServiceImpl implements PointService {
Map < String , RiskModelTaskClue > oldMap = oldList . stream ( ) . collect ( Collectors . toMap ( RiskModelTaskClue : : getCaseIds , Function . identity ( ) , ( val , old ) - > val ) ) ;
Map < String , List < GBaseOilBuy > > buyMap = buys . stream ( ) . collect ( Collectors . groupingBy ( GBaseOilBuy : : getIdCode ) ) ;
List < String > idCards = buyMap . keySet ( ) . stream ( ) . collect ( Collectors . toList ( ) ) ;
List < String > carMaster = new ArrayList < > ( ) ;
// 车主
if ( ! idCards . isEmpty ( ) ) {
carMaster . addAll ( zdryRepository . getBaseMapper ( ) . syncCarUser ( idCards ) ) ;
}
Map < String , Byte [ ] > carMt = new WeakHashMap < > ( ) ;
for ( String s : carMaster ) {
carMt . put ( s , new Byte [ 0 ] ) ;
}
// 新增记录
List < RiskModelTaskClue > toInsert = new ArrayList < > ( ) ;
for ( RiskPersonal person : domain . getPersons ( ) ) {
@ -440,18 +455,16 @@ public class PointServiceImpl implements PointService {
continue ;
}
for ( GBaseOilBuy item : mineBuy ) {
if ( oldMap . get ( BhUtil . oilBh ( item . getId ( ) ) ) ! = null ) {
if ( oldMap . get ( BhUtil . oilBh ( item . getXh ( ) ) ) ! = null ) {
continue ;
}
ClueData data = ClueData . builder ( )
. name ( person . getName ( ) )
. id ( BhUtil . oilBh ( item . getId ( ) ) )
. tag ( Default . OIL_BUY )
. id ( BhUtil . oilBh ( item . getXh ( ) ) )
. idCode ( person . getIdCode ( ) )
. departId ( item . getOrgId ( ) )
. departName ( item . getOrgName ( ) )
. personId ( person . getId ( ) )
. sourceData ( "发现该人员于" + item . getTime ( ) + "在" + item . getCompanyName ( ) + "购买容量为" + item . getNumber ( ) + "L的" + item . getType ( ) + ",用作" + item . getUseTo ( ) + ",风险分增加2分" )
. build ( ) ;
try {
data . setEventTime ( LocalDateTime . parse ( item . getTime ( ) , DateTimeFormatter . ofPattern ( "yyyy-MM-dd HH:mm:ss" ) ) ) ;
@ -459,43 +472,129 @@ public class PointServiceImpl implements PointService {
data . setEventTime ( LocalDateTime . now ( ) ) ;
log . error ( "散装油时间转化异常" ) ;
}
toInsert . add ( createClue ( task . getModelId ( ) , 2 , task . getId ( ) , data ) ) ;
if ( carMt . get ( person . getIdCode ( ) ) = = null ) {
data . setTag ( Default . NO_CAR_OIL_BUY ) ;
data . setSourceData ( "发现该人员属于无车人员,于" + item . getTime ( ) + "在" + item . getCompanyName ( ) + "购买容量为" + item . getNumber ( ) + "L的" + item . getType ( ) + ",用作" + item . getUseTo ( ) + ",风险分增加3分" ) ;
toInsert . add ( createClue ( task . getModelId ( ) , 3 , task . getId ( ) , data ) ) ;
} else {
data . setTag ( Default . OIL_BUY ) ;
data . setSourceData ( "发现该人员于" + item . getTime ( ) + "在" + item . getCompanyName ( ) + "购买容量为" + item . getNumber ( ) + "L的" + item . getType ( ) + ",用作" + item . getUseTo ( ) + ",风险分增加2分" ) ;
toInsert . add ( createClue ( task . getModelId ( ) , 2 , task . getId ( ) , data ) ) ;
}
}
}
List < RiskModelTaskClue > toDelete = new ArrayList < > ( ) ;
Map < String , Byte [ ] > deletePerson = new WeakHashMap < > ( ) ;
Map < String , Byte [ ] > livePerson = new WeakHashMap < > ( ) ;
// 删除记录
for ( RiskModelTaskClue clue : oldList ) {
if ( clue . getEventTime ( ) . isBefore ( currentTime ) ) {
RiskModelTaskClue delete = new RiskModelTaskClue ( ) ;
delete . setId ( clue . getId ( ) ) ;
delete . setDel ( 1 ) ;
toDelete . add ( delete ) ;
deletePerson . put ( clue . getIdCode ( ) , new Byte [ 0 ] ) ;
} else {
livePerson . put ( clue . getIdCode ( ) , new Byte [ 0 ] ) ;
if ( ! toInsert . isEmpty ( ) ) {
log . info ( "增加散装油人员:{}" , toInsert . size ( ) ) ;
modelTaskClueService . saveClues ( toInsert , Default . GOODS_IG ) ;
}
Map < String , List < RiskModelTaskClue > > tmp = oldList . stream ( ) . collect ( Collectors . groupingBy ( RiskModelTaskClue : : getRiskReason ) ) ;
int count = 0 ;
for ( Map . Entry < String , List < RiskModelTaskClue > > entry : tmp . entrySet ( ) ) {
List < RiskModelTaskClue > toDelete = new ArrayList < > ( ) ;
Map < String , Byte [ ] > deletePerson = new WeakHashMap < > ( ) ;
Map < String , Byte [ ] > livePerson = new WeakHashMap < > ( ) ;
// 删除记录
for ( RiskModelTaskClue clue : entry . getValue ( ) ) {
if ( clue . getEventTime ( ) . isBefore ( currentTime ) ) {
RiskModelTaskClue delete = new RiskModelTaskClue ( ) ;
delete . setId ( clue . getId ( ) ) ;
delete . setDel ( 1 ) ;
toDelete . add ( delete ) ;
deletePerson . put ( clue . getIdCode ( ) , new Byte [ 0 ] ) ;
count + + ;
} else {
livePerson . put ( clue . getIdCode ( ) , new Byte [ 0 ] ) ;
}
}
List < String > idCodes = new ArrayList < > ( ) ;
// 删除标签 从deletePerson遍历,存活中没有,新增没有,说明该标签就没了
for ( String s : deletePerson . keySet ( ) ) {
if ( livePerson . get ( s ) = = null & & buyMap . get ( s ) = = null ) {
idCodes . add ( s ) ;
}
}
if ( ! toDelete . isEmpty ( ) ) {
modelTaskClueService . deleteCluesAndDeleteTag ( toDelete , idCodes , entry . getKey ( ) ) ;
}
}
List < String > idCodes = new ArrayList < > ( ) ;
// 删除标签 从deletePerson遍历,存活中没有,新增没有,说明该标签就没了
for ( String s : deletePerson . keySet ( ) ) {
if ( livePerson . get ( s ) = = null & & buyMap . get ( s ) = = null ) {
idCodes . add ( s ) ;
RiskTask updateTask = new RiskTask ( ) ;
updateTask . setId ( task . getId ( ) ) ;
updateTask . setInsertSize ( toInsert . size ( ) ) ;
updateTask . setUpdateSize ( count ) ;
updateTask . setState ( 1 ) ;
updateTask . setEndTime ( LocalDateTime . now ( ) ) ;
taskRepository . updateById ( updateTask ) ;
}
@Override
public void syncSecurity ( TaskParamDomain domain ) {
List < SecurityMan > securityList = new ArrayList < > ( ) ;
CompletableFuture . allOf (
CompletableFutureUtil . runSyncObject ( ( ) - > securityList . addAll ( zdryRepository . getBaseMapper ( ) . syncSecurityMan1 ( ) ) ) ,
CompletableFutureUtil . runSyncObject ( ( ) - > securityList . addAll ( zdryRepository . getBaseMapper ( ) . syncSecurityMan2 ( ) ) )
) . join ( ) ;
Map < String , List < SecurityMan > > map = securityList . stream ( ) . collect ( Collectors . groupingBy ( SecurityMan : : getIdCode ) ) ;
RiskTask task = createTask ( map . size ( ) , 37 ) ;
taskRepository . save ( task ) ;
Map < String , RiskModelTaskClue > oldMap = domain . getOldMap ( task . getModelId ( ) , false ) ;
List < RiskModelTaskClue > toInsert = new ArrayList < > ( ) ;
for ( RiskPersonal person : domain . getPersons ( ) ) {
List < SecurityMan > mans = map . get ( person . getIdCode ( ) ) ;
if ( mans = = null | | oldMap . get ( person . getIdCode ( ) ) ! = null ) {
continue ;
}
SecurityMan real = null ;
for ( SecurityMan man : mans ) {
if ( real = = null ) {
real = man ;
continue ;
}
if ( man . getDataSource ( ) = = 1 ) {
real = man ;
break ;
}
}
ClueData data = ClueData . builder ( )
. name ( person . getName ( ) )
. id ( "security" )
. tag ( Default . BA_TAG )
. idCode ( person . getIdCode ( ) )
. departId ( person . getControlDepartId ( ) )
. departName ( person . getControlDepartName ( ) )
. personId ( person . getId ( ) )
. sourceData ( "发现该人员为保安人员,职位为:" + real . getJob ( ) + ",属于特种职业,增加风险分2分。" )
. build ( ) ;
try {
if ( real . getTime ( ) . indexOf ( "-" ) ! = - 1 ) {
data . setEventTime ( LocalDate . parse ( real . getTime ( ) , DateTimeFormatter . ofPattern ( "yyyy-MM-dd" ) ) . atTime ( 0 , 0 , 0 ) ) ;
} else if ( real . getTime ( ) . indexOf ( "." ) ! = - 1 ) {
data . setEventTime ( LocalDate . parse ( real . getTime ( ) , DateTimeFormatter . ofPattern ( "yyyy.M.d" ) ) . atTime ( 0 , 0 , 0 ) ) ;
} else {
data . setEventTime ( LocalDate . parse ( real . getTime ( ) , DateTimeFormatter . ofPattern ( "yyyy年MM月dd日" ) ) . atTime ( 0 , 0 , 0 ) ) ;
}
} catch ( Exception e ) {
log . info ( "保安日期异常" ) ;
}
toInsert . add ( createClue ( task . getModelId ( ) , 2 , task . getId ( ) , data ) ) ;
}
// 新增
if ( ! toInsert . isEmpty ( ) ) {
log . info ( "增加散装油人员:{}" , toInsert . size ( ) ) ;
modelTaskClueService . saveClues ( toInsert , Default . GOODS_IG ) ;
}
if ( ! toDelete . isEmpty ( ) ) {
modelTaskClueService . deleteCluesAndDeleteTag ( toDelete , idCodes , Default . OIL_BUY ) ;
log . info ( "新增保安人员:{}" , toInsert . size ( ) ) ;
modelTaskClueService . saveClues ( toInsert , Default . IMPORT_IG ) ;
}
RiskTask updateTask = new RiskTask ( ) ;
updateTask . setId ( task . getId ( ) ) ;
updateTask . setInsertSize ( toInsert . size ( ) ) ;
updateTask . setUpdateSize ( toDelete . size ( ) ) ;
updateTask . setUpdateSize ( 0 ) ;
updateTask . setState ( 1 ) ;
updateTask . setEndTime ( LocalDateTime . now ( ) ) ;
taskRepository . updateById ( updateTask ) ;