diff --git a/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseSHRXXMapper.java b/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseSHRXXMapper.java index 461ee09..71afcf6 100644 --- a/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseSHRXXMapper.java +++ b/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseSHRXXMapper.java @@ -1,6 +1,7 @@ package com.biutag.supervisiondata.mapper.dwd; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervisiondata.pojo.domain.WFSHPerson; import com.biutag.supervisiondata.pojo.entity.dwd.GBaseAJJBXX; import com.biutag.supervisiondata.pojo.entity.dwd.GBaseSHRXX; import org.apache.ibatis.annotations.Param; @@ -25,4 +26,10 @@ public interface GBaseSHRXXMapper extends BaseMapper { " where shrq between #{startTime} and #{endTime} " + " and ajbh is not null") List selectDataToRisk(@Param("startTime")String startTime, @Param("endTime")String endTime); + + @Select(" select a.ajbh as ajbh,a.xm as name,a.gmsfhm as idCode,a.lxdh as mobile ,b.badwiddm as departId, b.barq as barq from dwd_asj_zfba_shrxx a " + + " left join dwd_asj_zfba_ajjbxx b on a.ajbh = b.ajbh " + + " where a.gmsfhm is not null and a.ajbh is not null " + + " and b.barq between #{startTime} and #{endTime} ") + List selectSHData(@Param("startTime")String startTime, @Param("endTime")String endTime); } diff --git a/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseWFRXXMapper.java b/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseWFRXXMapper.java index e0d02f7..f3688e1 100644 --- a/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseWFRXXMapper.java +++ b/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseWFRXXMapper.java @@ -1,6 +1,7 @@ package com.biutag.supervisiondata.mapper.dwd; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervisiondata.pojo.domain.WFSHPerson; import com.biutag.supervisiondata.pojo.entity.dwd.GBaseSHRXX; import com.biutag.supervisiondata.pojo.entity.dwd.GBaseWFRXX; import org.apache.ibatis.annotations.Param; @@ -26,6 +27,11 @@ public interface GBaseWFRXXMapper extends BaseMapper { " and ajbh is not null") List selectDataToRisk(@Param("startTime")String startTime, @Param("endTime")String endTime); + @Select(" select a.ajbh as ajbh,a.xm as name,a.zjhm as idCode,a.lxdh as mobile ,b.badwiddm as departId, b.barq as barq from dwd_ry_zfba_wfryxx a " + + " left join dwd_asj_zfba_ajjbxx b on a.ajbh = b.ajbh " + + " where a.zjhm is not null and a.ajbh is not null " + + " and b.barq between #{startTime} and #{endTime} ") + List selectWFData(@Param("startTime")String startTime, @Param("endTime")String endTime); /** * 5年内犯罪 diff --git a/src/main/java/com/biutag/supervisiondata/pojo/domain/WFSHPerson.java b/src/main/java/com/biutag/supervisiondata/pojo/domain/WFSHPerson.java new file mode 100644 index 0000000..8f7d25d --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/domain/WFSHPerson.java @@ -0,0 +1,29 @@ +package com.biutag.supervisiondata.pojo.domain; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * @author kami on 2024-12-11 14:17:28 + * @version 0.0.1 + * @since 1.8 + */ +@Data +public class WFSHPerson implements Serializable { + /** + * 案件编号 + */ + String ajbh; + + String name; + + String idCode; + + String mobile; + + String departId; + + Date barq; +} diff --git a/src/main/java/com/biutag/supervisiondata/service/impl/GBaseSHRWFRServiceImpl.java b/src/main/java/com/biutag/supervisiondata/service/impl/GBaseSHRWFRServiceImpl.java index 6cd94ad..90dbb48 100644 --- a/src/main/java/com/biutag/supervisiondata/service/impl/GBaseSHRWFRServiceImpl.java +++ b/src/main/java/com/biutag/supervisiondata/service/impl/GBaseSHRWFRServiceImpl.java @@ -6,10 +6,8 @@ import com.biutag.supervisiondata.pojo.ClueData; import com.biutag.supervisiondata.pojo.constants.Default; import com.biutag.supervisiondata.pojo.database.PointOrg; import com.biutag.supervisiondata.pojo.domain.TaskParamDomain; +import com.biutag.supervisiondata.pojo.domain.WFSHPerson; import com.biutag.supervisiondata.pojo.entity.ads.GBaseSYRKXX; -import com.biutag.supervisiondata.pojo.entity.dwd.GBaseAJJBXX; -import com.biutag.supervisiondata.pojo.entity.dwd.GBaseJJD; -import com.biutag.supervisiondata.pojo.entity.dwd.GBaseSHRXX; import com.biutag.supervisiondata.pojo.entity.dwd.GBaseWFRXX; import com.biutag.supervisiondata.pojo.entity.mine.RiskModelTaskClue; import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonal; @@ -53,8 +51,6 @@ public class GBaseSHRWFRServiceImpl implements GBaseSHRWFRService { private final GBaseSYRKXXRepository gBaseSYRKXXRepository; - private final GBaseAJJBXXRepository ajjbxxRepository; - private final RiskPersonalService riskPersonalService; private final GBaseZDRYRepository zdryRepository; @@ -66,10 +62,8 @@ public class GBaseSHRWFRServiceImpl implements GBaseSHRWFRService { List orgs = zdryRepository.getBaseMapper().selectOrg(); List supDeparts = externalDepartRepository.list(new LambdaQueryWrapper() .select(SupExternalDepart::getExternalId, SupExternalDepart::getInternalId, SupExternalDepart::getInternalName, SupExternalDepart::getSource) - .in(SupExternalDepart::getSource, List.of("重点人员", "情指行"))); - Map> amp = supDeparts.stream().collect(Collectors.groupingBy(SupExternalDepart::getSource)); - Map pointExternalDepart = amp.get("重点人员").stream().collect(Collectors.toMap(SupExternalDepart::getExternalId, Function.identity(), (val, old) -> val)); - Map jqExternalDepart = amp.get("情指行").stream().collect(Collectors.toMap(SupExternalDepart::getExternalId, Function.identity(), (val, old) -> val)); + .in(SupExternalDepart::getSource, List.of("情指行"))); + Map externalDepart = supDeparts.stream().collect(Collectors.toMap(SupExternalDepart::getExternalId, Function.identity(), (val, old) -> val)); Map orgIdMap = new WeakHashMap<>(); Map orgCodeMap = new WeakHashMap<>(); @@ -78,233 +72,66 @@ public class GBaseSHRWFRServiceImpl implements GBaseSHRWFRService { orgCodeMap.put(org.getDm(), org); } - - List shrList = new ArrayList<>(); - List wxrList = new ArrayList<>(); - - // 统计出所有的案件编号批量查询 - List ajNos = new ArrayList<>(); - // 手机号 - List mobiles = new ArrayList<>(); - // 身份证 - List idCards = new ArrayList<>(); + List shrTmp = new ArrayList<>(); + List wfrTmp = new ArrayList<>(); // 分别拉取受害人和违法人信息 CompletableFuture.allOf( - CompletableFutureUtil.runSyncObject(() -> { - List shrTmp = shrxxRepository.getBaseMapper().selectDataToRisk(start.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")), - end.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); - for (GBaseSHRXX gBaseSHRXX : shrTmp) { - if (gBaseSHRXX.getGmsfhm() != null) { - idCards.add(gBaseSHRXX.getGmsfhm()); - } else if (gBaseSHRXX.getLxdh() != null) { - mobiles.add(gBaseSHRXX.getLxdh()); - } else { - continue; - } - shrList.add(gBaseSHRXX); - ajNos.add(gBaseSHRXX.getAjbh()); - } - }), - CompletableFutureUtil.runSyncObject(() -> { - List wfrTmp = wfrxxRepository.getBaseMapper().selectDataToRisk("2019-12-06 00:00:00", - end.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); - for (GBaseWFRXX gBaseWFRXX : wfrTmp) { - if (gBaseWFRXX.getZjhm() != null) { - idCards.add(gBaseWFRXX.getZjhm()); - } else if (gBaseWFRXX.getLxdh() != null) { - mobiles.add(gBaseWFRXX.getLxdh()); - } else { - continue; - } - wxrList.add(gBaseWFRXX); - ajNos.add(gBaseWFRXX.getAjbh()); - } - }) - ).join(); - - List distinctAJ = ajNos.stream().distinct().toList(); - // 切割 每次查10000条 - List> ajs = IntStream.range(0, (distinctAJ.size() + 9999) / 10000) - .mapToObj(i -> distinctAJ.subList(i * 10000, Math.min((i + 1) * 10000, distinctAJ.size()))) - .toList(); - - List idCards2 = idCards.stream().distinct().toList(); - List mobiles2 = mobiles.stream().distinct().toList(); - - List xxList = new ArrayList<>(); - for (List aj : ajs) { - xxList.addAll(ajjbxxRepository.list(new LambdaQueryWrapper() - .select(GBaseAJJBXX::getAjbh, GBaseAJJBXX::getBadwidmc, GBaseAJJBXX::getBadwiddm, GBaseAJJBXX::getBarq) - .in(GBaseAJJBXX::getAjbh, aj))); - } - // 案件转map方便提取 - Map xxMap = xxList.stream().collect(Collectors.toMap(GBaseAJJBXX::getAjbh, Function.identity(), (oldValue, newValue) -> newValue)); - - // 人员信息查询 - // 身份证查到的人 - List sFms = new ArrayList<>(); - // 手机号查到的人 - List lXfs = new ArrayList<>(); - CompletableFuture.allOf( - CompletableFutureUtil.runSyncObject(() -> { - List> idCode = IntStream.range(0, (idCards2.size() + 9999) / 10000) - .mapToObj(i -> idCards2.subList(i * 10000, Math.min((i + 1) * 10000, idCards2.size()))) - .toList(); - int count = idCode.size(); - for (List arr : idCode) { - List list = gBaseSYRKXXRepository.list(new LambdaQueryWrapper() - .select(GBaseSYRKXX::getLxdh, GBaseSYRKXX::getGmsfhm, GBaseSYRKXX::getXm, GBaseSYRKXX::getXbdm, GBaseSYRKXX::getSspcsdm) - .in(GBaseSYRKXX::getGmsfhm, arr)); - sFms.addAll(list); - log.info("身份证进度 | {}", --count); - } - }), - CompletableFutureUtil.runSyncObject(() -> { - List> mobile = IntStream.range(0, (mobiles2.size() + 9999) / 10000) - .mapToObj(i -> mobiles2.subList(i * 10000, Math.min((i + 1) * 10000, mobiles2.size()))) - .toList(); - int count = mobile.size(); - for (List arr : mobile) { - List list = gBaseSYRKXXRepository.list(new LambdaQueryWrapper() - .select(GBaseSYRKXX::getLxdh, GBaseSYRKXX::getGmsfhm, GBaseSYRKXX::getXm, GBaseSYRKXX::getXbdm, GBaseSYRKXX::getSspcsdm) - .in(GBaseSYRKXX::getLxdh, arr)); - lXfs.addAll(list); - log.info("手机号进度 | {}", --count); - } - }) + CompletableFutureUtil.runSyncObject(() -> shrTmp.addAll(shrxxRepository.getBaseMapper().selectSHData(start.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")), + end.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))))), + CompletableFutureUtil.runSyncObject(() -> wfrTmp.addAll(wfrxxRepository.getBaseMapper().selectWFData("2019-12-06 00:00:00", + end.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))))) ).join(); - - Map idCodeMap = sFms.stream().collect(Collectors.toMap(GBaseSYRKXX::getGmsfhm, Function.identity(), (oldValue, newValue) -> newValue)); - Map> mobileMap = lXfs.stream().collect(Collectors.groupingBy(GBaseSYRKXX::getLxdh)); - List personals = new ArrayList<>(); - - Map> shrMap = new HashMap<>(); - for (GBaseSHRXX gBaseSHRXX : shrList) { - GBaseAJJBXX ajjbxx = xxMap.get(gBaseSHRXX.getAjbh()); - if (ajjbxx == null) { + // 信息全的数据 + Map tmpMap = new WeakHashMap<>(); + // 要补全的数据 + List idCodes = new ArrayList<>(); + for (WFSHPerson wfshPerson : shrTmp) { + if (tmpMap.get(wfshPerson.getIdCode()) != null) { continue; } - GBaseSYRKXX rkxx = Optional.ofNullable(gBaseSHRXX.getGmsfhm()).map(idCodeMap::get) - .orElse(null); - if (gBaseSHRXX.getLxdh() != null && rkxx == null) { - List rkxxList = mobileMap.get(gBaseSHRXX.getLxdh()); - if (rkxxList != null) { - rkxx = compare(rkxxList, gBaseSHRXX.getXm()); - } - } - if (rkxx != null) { - RiskPersonal person = createPerson(Default.SHR_TAG, ajjbxx, rkxx); - if (rkxx.getSspcsdm() != null) { - PointOrg org = orgCodeMap.get(rkxx.getSspcsdm()); - org = findOrg(org, orgIdMap); - if (org != null) { - SupExternalDepart depart = pointExternalDepart.get(org.getDm()); - if (depart != null) { - person.setControlDepartId(depart.getInternalId()); - person.setControlDepartName(depart.getInternalName()); - person.setControlDepartType(DepartType.HUMAN.getType()); - person.setControlTime(LocalDateTime.now()); - person.setCreateTime(person.getControlTime()); - } - } - } - - if (person.getIdCode() != null) { - shrMap.computeIfAbsent(person.getIdCode(), k -> new ArrayList<>()).add(ajjbxx); - } - personals.add(person); - } - } - for (GBaseWFRXX gBaseWFRXX : wxrList) { - GBaseAJJBXX ajjbxx = xxMap.get(gBaseWFRXX.getAjbh()); - if (ajjbxx == null) { + if (wfshPerson.getName() == null || wfshPerson.getName().isEmpty() || wfshPerson.getMobile() == null + || wfshPerson.getMobile().isEmpty() || wfshPerson.getMobile().equals("无")) { + idCodes.add(wfshPerson.getIdCode()); continue; } - GBaseSYRKXX rkxx = null; - if (gBaseWFRXX.getZjhm() != null) { - rkxx = idCodeMap.get(gBaseWFRXX.getZjhm()); - } - if (gBaseWFRXX.getLxdh() != null && rkxx == null) { - List rkxxList = mobileMap.get(gBaseWFRXX.getLxdh()); - if (rkxxList != null) { - rkxx = compare(rkxxList, gBaseWFRXX.getXm()); - } - } - if (rkxx != null) { - RiskPersonal person = createPerson(Default.WFR_TAG, ajjbxx, rkxx); - if (rkxx.getSspcsdm() != null) { - PointOrg org = orgCodeMap.get(rkxx.getSspcsdm()); - org = findOrg(org, orgIdMap); - if (org != null) { - SupExternalDepart depart = pointExternalDepart.get(org.getDm()); - if (depart != null) { - person.setControlDepartId(depart.getInternalId()); - person.setControlDepartName(depart.getInternalName()); - person.setControlDepartType(DepartType.HUMAN.getType()); - person.setControlTime(LocalDateTime.now()); - person.setCreateTime(person.getControlTime()); - } - } - } - shrMap.computeIfAbsent(person.getIdCode(), k -> new ArrayList<>()).add(ajjbxx); - personals.add(person); - } + tmpMap.put(wfshPerson.getIdCode(), wfshPerson); } - for (RiskPersonal personal : personals) { - if (personal.getControlDepartType() != null && personal.getControlDepartType() >= DepartType.HUMAN.getType()) { + for (WFSHPerson wfshPerson : wfrTmp) { + if (tmpMap.get(wfshPerson.getIdCode()) != null) { continue; } - List tmp = shrMap.get(personal.getIdCode()); - if (tmp == null || tmp.isEmpty()) { + if (wfshPerson.getName() == null || wfshPerson.getName().isEmpty() || wfshPerson.getMobile() == null + || wfshPerson.getMobile().isEmpty() || wfshPerson.getMobile().equals("无")) { + idCodes.add(wfshPerson.getIdCode()); continue; } - GBaseAJJBXX jjx = null; - for (GBaseAJJBXX gBaseAJJBXX : tmp) { - if (jjx == null) { - jjx = gBaseAJJBXX; - continue; - } - try { - LocalDateTime time = gBaseAJJBXX.getBarq().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); - if (time.isAfter(jjx.getBarq().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime())) { - jjx = gBaseAJJBXX; - } - } catch (Exception e) { - log.info("报警时间处理异常"); - } - } - if (jjx == null || jjx.getBadwiddm() == null) { - personal.setControlDepartId(null); - personal.setControlDepartName(null); - personal.setControlTime(null); - personal.setControlDepartType(null); - continue; - } - PointOrg org = orgCodeMap.get(jjx.getBadwiddm()); - org = findOrg(org, orgIdMap); - SupExternalDepart depart = Optional.ofNullable(org).map(PointOrg::getDm).map(jqExternalDepart::get).orElse(null); - if (depart == null) { - personal.setControlDepartId(null); - personal.setControlDepartName(null); - personal.setControlTime(null); - personal.setControlDepartType(null); - continue; - } - personal.setControlDepartId(depart.getInternalId()); - personal.setControlDepartName(depart.getInternalName()); - personal.setControlDepartType(DepartType.OTHER.getType()); - // 如果有报警时间,暂时填报警时间 处理标签回正 - try { - LocalDateTime time = jjx.getBarq().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); - personal.setCreateTime(time); - personal.setControlTime(time); - } catch (Exception e) { - personal.setCreateTime(LocalDateTime.now()); - log.info("报警时间处理异常"); - } + tmpMap.put(wfshPerson.getIdCode(), wfshPerson); + } + + List idCards = idCodes.stream().distinct().toList(); + List> idCode = IntStream.range(0, (idCards.size() + 9999) / 10000) + .mapToObj(i -> idCards.subList(i * 10000, Math.min((i + 1) * 10000, idCards.size()))) + .toList(); + + log.info("获取补全违法人和受害人:{}", idCode.size()); + List xxList = new ArrayList<>(); + int count = idCode.size(); + for (List arr : idCode) { + xxList.addAll(gBaseSYRKXXRepository.list(new LambdaQueryWrapper() + .select(GBaseSYRKXX::getLxdh, GBaseSYRKXX::getGmsfhm, GBaseSYRKXX::getXm, GBaseSYRKXX::getXbdm, GBaseSYRKXX::getSspcsdm) + .in(GBaseSYRKXX::getGmsfhm, arr))); + log.info("身份证进度 | {}", --count); } - log.info("人数: {}", personals.size()); - riskPersonalService.formatAndSave(personals, Default.BIG_TAG_SHWFR); + + Map idCodeMap = xxList.stream().collect(Collectors.toMap(GBaseSYRKXX::getGmsfhm, Function.identity(), (oldValue, newValue) -> newValue)); + + List toInsert1 = createInsertData(Default.WFR_TAG, wfrTmp, tmpMap, idCodeMap, orgCodeMap, orgIdMap, externalDepart); + List toInsert2 = createInsertData(Default.SHR_TAG, shrTmp, tmpMap, idCodeMap, orgCodeMap, orgIdMap, externalDepart); + + log.info("违法人数: {}", toInsert1.size()); + riskPersonalService.formatAndSave(toInsert1, Default.WFR_TAG); + log.info("受害人数: {}", toInsert2.size()); + riskPersonalService.formatAndSave(toInsert2, Default.SHR_TAG); } private final RiskTaskRepository taskRepository; @@ -585,33 +412,75 @@ public class GBaseSHRWFRServiceImpl implements GBaseSHRWFRService { return info; } - RiskPersonal createPerson(String tag, GBaseAJJBXX ajjbxx, GBaseSYRKXX rkxx) { + RiskPersonal createPerson(WFSHPerson person, GBaseSYRKXX xx, String tag) { RiskPersonal personal = new RiskPersonal(); - personal.setIdCode(rkxx.getGmsfhm()); - personal.setName(rkxx.getXm()); - personal.setMobileNumber(rkxx.getLxdh()); - personal.setControlDepartId(ajjbxx.getBadwiddm()); - personal.setControlDepartName(ajjbxx.getBadwidmc()); - personal.setGender(IdCodeUtil.idCard2Gender(rkxx.getGmsfhm())); - if (personal.getGender() == null) { - personal.setGender(rkxx.getXbdm()); - } - personal.setControlDepartType(DepartType.OTHER.getType()); - // 如果有报警时间,暂时填报警时间 处理标签回正 - try { - LocalDateTime time = ajjbxx.getBarq().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); - personal.setCreateTime(time); - personal.setControlTime(time); - } catch (Exception e) { - personal.setCreateTime(LocalDateTime.now()); - log.info("报警时间处理异常"); + personal.setIdCode(person.getIdCode()); + if (xx != null) { + personal.setName(xx.getXm()); + personal.setMobileNumber(xx.getLxdh()); + personal.setControlTime(LocalDateTime.now()); + } else { + personal.setName(person.getName()); + personal.setName(person.getMobile()); + try { + personal.setControlTime(person.getBarq().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); + } catch (Exception e) { + log.error("案件日期转换异常"); + } } + personal.setGender(IdCodeUtil.idCard2Gender(person.getIdCode())); personal.setAge(Optional.ofNullable(IdCodeUtil.idCard2Age(personal.getIdCode(), LocalDate.now())).orElse(-1)); - // 这里暂时将小标签放到预览属性 处理标签回正 + personal.setCreateTime(LocalDateTime.now()); personal.setTags(tag); return personal; } + List createInsertData(String tag, List list, Map tmpMap, Map idCodeMap, + Map orgCodeMap, Map orgIdMap, Map externalDepart) { + Map departMap = new WeakHashMap<>(); + Map exist = new WeakHashMap<>(); + List toInsert = new ArrayList<>(); + for (WFSHPerson person : list) { + if (exist.get(person.getIdCode()) != null) { + continue; + } + WFSHPerson result = tmpMap.get(person.getIdCode()); + RiskPersonal personal; + + String departId; + if (result != null) { + personal = createPerson(result, null, tag); + personal.setControlDepartType(DepartType.OTHER.getType()); + departId = result.getDepartId(); + } else { + GBaseSYRKXX xx = idCodeMap.get(person.getIdCode()); + personal = createPerson(person, xx, tag); + personal.setControlDepartType(DepartType.HUMAN.getType()); + departId = xx.getSspcsdm(); + } + if (departId == null) { + toInsert.add(personal); + continue; + } + SupExternalDepart depart = departMap.get(departId); + if (depart == null) { + PointOrg org = orgCodeMap.get(departId); + org = findOrg(org, orgIdMap); + if (org != null) { + depart = externalDepart.get(org.getDm()); + departMap.put(departId, depart); + } + } + if (depart != null) { + personal.setControlDepartId(depart.getInternalId()); + personal.setControlDepartName(depart.getInternalName()); + } + toInsert.add(personal); + exist.put(person.getIdCode(), new Byte[0]); + } + return toInsert; + } + PointOrg findOrg(PointOrg org, Map orgIdMap) { if (org == null) { return null;