diff --git a/src/main/java/com/biutag/supervisiondata/service/PersonalService.java b/src/main/java/com/biutag/supervisiondata/service/PersonalService.java index 21a7349..1702c65 100644 --- a/src/main/java/com/biutag/supervisiondata/service/PersonalService.java +++ b/src/main/java/com/biutag/supervisiondata/service/PersonalService.java @@ -11,11 +11,6 @@ import java.util.List; */ public interface PersonalService { - /** - * 拉取涉及警情相关人员信息 - */ - void pullJJDPersonalInfo(LocalDateTime start); - /** * 拉取重点人员信息 */ diff --git a/src/main/java/com/biutag/supervisiondata/service/impl/GBaseJJDServiceImpl.java b/src/main/java/com/biutag/supervisiondata/service/impl/GBaseJJDServiceImpl.java index 871878c..f212da0 100644 --- a/src/main/java/com/biutag/supervisiondata/service/impl/GBaseJJDServiceImpl.java +++ b/src/main/java/com/biutag/supervisiondata/service/impl/GBaseJJDServiceImpl.java @@ -27,7 +27,6 @@ import org.springframework.stereotype.Service; import java.time.LocalDate; import java.time.LocalDateTime; -import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.concurrent.CompletableFuture; @@ -77,8 +76,8 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { String idCards = PatternUtil.takeIdCard(item.getCjqk()); if (!idCards.isEmpty()) { person.setIdCode(idCards); - String[] strs = idCards.split(","); - for (String s : strs) { + String[] array = idCards.split(","); + for (String s : array) { idCodes1.add(s); jjdMap.computeIfAbsent(item.getBjrzjhm(), k -> new ArrayList<>()).add(item); } @@ -120,11 +119,11 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { List toInsert = new ArrayList<>(); for (RiskPersonal personal : personals) { if (personal.getIdCode() != null) { - String[] strs = personal.getIdCode().split(","); + String[] array = personal.getIdCode().split(","); // 多张身份证存入异常信息 personal.setIdCode(null); xxxInfo = new ArrayList<>(); - for (String s : strs) { + for (String s : array) { GBaseSYRKXX xx = idCodeMap.get(s); if (xx != null) { xxxInfo.add(xx); @@ -205,11 +204,9 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { personal.setControlDepartName(depart.getInternalShortName()); personal.setControlDepartType(DepartType.OTHER.getType()); // 如果有报警时间,暂时填报警时间 处理标签回正 - try { - LocalDateTime time = tmp.getBjsj().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); - personal.setCreateTime(time); - personal.setControlTime(time); - } catch (Exception e) { + personal.setCreateTime(DateTimeUtil.date2LocalDateTime(tmp.getBjsj())); + personal.setControlTime(personal.getCreateTime()); + if(personal.getCreateTime() == null) { personal.setCreateTime(LocalDateTime.now()); } } @@ -263,34 +260,13 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { Map> mobileMap = new WeakHashMap<>(); for (GBaseJJD gBaseJJD : result) { - String idCard = PatternUtil.takeIdCard(gBaseJJD.getCjqk()); - if (idCard.isEmpty()) { - idCard = PatternUtil.takeIdCard(gBaseJJD.getBjnr()); - } - if (!idCard.isEmpty()) { - List tmp = Arrays.stream(idCard.split(",")).toList(); - // 如果有多个号码,防止警察证件被录入 - for (String s : tmp) { - idCodeMap.computeIfAbsent(s, k -> new ArrayList<>()).add(gBaseJJD); - } - } - - String mobile = PatternUtil.takeMobile(gBaseJJD.getCjqk()); - if (mobile.isEmpty()) { - mobile = PatternUtil.takeMobile(gBaseJJD.getBjnr()); - } - if (!mobile.isEmpty()) { - List tmp = Arrays.stream(idCard.split(",")).toList(); - // 如果有多个号码,防止警察证件被录入 - for (String s : tmp) { - mobileMap.computeIfAbsent(s, k -> new ArrayList<>()).add(gBaseJJD); - } - } + List idCards = processIdCards(gBaseJJD); + idCards.forEach(idCard -> idCodeMap.computeIfAbsent(idCard, k -> new ArrayList<>()).add(gBaseJJD)); + List mobiles = processMobile(gBaseJJD); + mobiles.forEach(mobile -> mobileMap.computeIfAbsent(mobile, k -> new ArrayList<>()).add(gBaseJJD)); } - List oldList = Optional.ofNullable(domain.getMap().get(task.getModelId())).orElse(new ArrayList<>()); - // 按人分 - Map> personOldMap = oldList.stream().collect(Collectors.groupingBy(RiskModelTaskClue::getIdCode)); + Map oldMap = domain.getOldMap(task.getModelId(), true); List jjdList; List toInsert = new ArrayList<>(); for (RiskPersonal person : domain.getPersons()) { @@ -299,40 +275,21 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { if (jjdList.isEmpty()) { continue; } - jjdList = jjdList.stream().filter(StreamUtil.distinctByKey(GBaseJJD::getJjdbh)).toList(); - List olds = personOldMap.get(person.getIdCode()); - if (olds != null) { - // 是否类型只有一个 - continue; - } - LocalDateTime eventTime = null; + jjdList = jjdList.stream().filter(StreamUtil.distinctByKey(GBaseJJD::getJjdbh)).sorted().toList(); + RiskModelTaskClue old = oldMap.get(person.getIdCode()); + if (old != null) continue; StringBuilder sb = new StringBuilder("该人员存在" + jjdList.size() + "起平台涉警事件警情,相关警情接警单编号为:"); - for (GBaseJJD gBaseJJD : jjdList) { - sb.append(gBaseJJD.getJjdbh()).append(","); - try { - LocalDateTime tmp = gBaseJJD.getBjsj().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); - if (eventTime == null) { - eventTime = tmp; - continue; - } - if (eventTime.isBefore(tmp)) { - eventTime = tmp; - } - } catch (Exception ignored) { - } - - } - ClueData data = ClueData.builder() + LocalDateTime eventTime = findRecentTime(jjdList, sb); + toInsert.add(DataUtil.createClueData(task, ClueData.builder() .name(person.getName()) - .id("ptsjsj") + .id("") .idCode(person.getIdCode()) .tags(List.of("平台涉警事件")) .sourceData(sb.substring(0, sb.length() - 1)) - .eventTime(Optional.ofNullable(eventTime).orElse(LocalDateTime.now())) + .eventTime(eventTime) .personId(person.getId()) .score(Math.min(5, jjdList.size())) - .build(); - toInsert.add(DataUtil.createClueData(task, data)); + .build())); } log.info("保存袭警数据:{}", toInsert.size()); if (!toInsert.isEmpty()) { @@ -371,32 +328,12 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { if (riskPerson != null) { personJqList.computeIfAbsent(riskPerson.getIdCode(), k -> new ArrayList<>()).add(jjd); } + List idCards = processIdCards(jjd); + idCards.stream().filter(s -> idCodelMap.get(s) != null).forEach(s -> personJqList.computeIfAbsent(s, k -> new ArrayList<>()).add(jjd)); - // 一个都不放过 - String idCard = PatternUtil.takeIdCard(jjd.getCjqk()); - if (idCard.isEmpty()) { - idCard = PatternUtil.takeIdCard(jjd.getBjnr()); - } - if (!idCard.isEmpty()) { - String[] str = idCard.split(","); - for (String s : str) { - riskPerson = idCodelMap.get(s); - if (riskPerson == null) continue; - personJqList.computeIfAbsent(riskPerson.getIdCode(), k -> new ArrayList<>()).add(jjd); - } - } - - String mobile = PatternUtil.takeMobile(jjd.getCjqk()); - if (mobile.isEmpty()) { - mobile = PatternUtil.takeMobile(jjd.getBjnr()); - } - if (mobile.isEmpty()) continue; - String[] str = mobile.split(","); - for (String s : str) { - riskPerson = mobileMap.get(s); - if (riskPerson == null) continue; - personJqList.computeIfAbsent(riskPerson.getIdCode(), k -> new ArrayList<>()).add(jjd); - } + List mobiles = processIdCards(jjd); + mobiles.stream().map(mobileMap::get).filter(Objects::nonNull).map(RiskPersonal::getIdCode) + .forEach(s -> personJqList.computeIfAbsent(s, k -> new ArrayList<>()).add(jjd)); } } log.info("开始统计每个人的警情"); @@ -406,20 +343,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { List list; for (Map.Entry> entry : personJqList.entrySet()) { list = entry.getValue().stream().distinct().sorted().toList(); - LocalDateTime maxTime = null; - for (GBaseJJD gBaseJJD : list) { - LocalDateTime tmp = DateTimeUtil.date2LocalDateTime(gBaseJJD.getBjsj()); - if (maxTime == null) { - maxTime = tmp; - continue; - } - if (tmp.isAfter(maxTime)) { - maxTime = tmp; - } - } - if (maxTime == null) { - maxTime = LocalDateTime.now(); - } + LocalDateTime maxTime = Optional.ofNullable(findRecentTime(list, null)).orElse(LocalDateTime.now()); RiskPersonal person = idCodelMap.get(entry.getKey()); StringBuilder sb = new StringBuilder("该人员近一年来有" + list.size() + "起平台涉警事件,接警单编号为:"); @@ -460,7 +384,6 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { @Override public void syncHomeViolence(TaskParamDomain domain) { LocalDateTime limit = LocalDateTime.now().minusYears(1); - List result = gBaseJJDRepository.getBaseMapper().selectHomeViolence(limit.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); // 被家暴 RiskTask task = taskRepository.create(result.size(), 65); @@ -479,12 +402,8 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { Map> 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 tmp = Arrays.stream(idCard.split(",")).toList(); + List tmp = processIdCards(gBaseJJD); + if (!tmp.isEmpty()) { switch (tmp.size()) { case 1 -> shIdCodeMap.computeIfAbsent(tmp.getFirst(), k -> new ArrayList<>()).add(gBaseJJD); case 2 -> { @@ -498,12 +417,8 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { } continue; } - String mobile = PatternUtil.takeMobile(gBaseJJD.getCjqk()); - if (mobile.isEmpty()) { - mobile = PatternUtil.takeMobile(gBaseJJD.getBjnr()); - } - if (!mobile.isEmpty()) { - List tmp = Arrays.stream(idCard.split(",")).toList(); + tmp = processMobile(gBaseJJD); + if (!tmp.isEmpty()) { switch (tmp.size()) { case 1 -> shMobileMap.computeIfAbsent(tmp.getFirst(), k -> new ArrayList<>()).add(gBaseJJD); case 2 -> { @@ -596,7 +511,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { RiskModelTaskClue motherClue = collectionClue(motherIdCodeMap, new WeakHashMap<>(0), person, task2, "与母亲关系不合"); if (fatherClue != null) { RiskModelTaskClue fatherOld = fatherOldMap.get(person.getIdCode()); - if(fatherOld == null) { + if (fatherOld == null) { fatherDBData.getToInsert().add(fatherClue); } else { fatherOldMap.remove(person.getIdCode()); @@ -606,9 +521,9 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { } } } - if(motherClue == null) continue; + if (motherClue == null) continue; RiskModelTaskClue motherOld = motherOldMap.get(person.getIdCode()); - if(motherOld == null) { + if (motherOld == null) { motherDBData.getToInsert().add(motherClue); continue; } @@ -636,52 +551,14 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { Map> mobilesMap = new WeakHashMap<>(); for (GBaseJJD gBaseJJD : result) { - String idCard = PatternUtil.takeIdCard(gBaseJJD.getCjqk()); - if (idCard.isEmpty()) { - idCard = PatternUtil.takeIdCard(gBaseJJD.getBjnr()); - } - boolean mobileContinue = false; - if (!idCard.isEmpty()) { - List tmp = Arrays.stream(idCard.split(",")).toList(); - switch (tmp.size()) { - case 0 -> mobileContinue = true; - case 1 -> idCodesMap.computeIfAbsent(tmp.getFirst(), k -> new ArrayList<>()).add(gBaseJJD); - case 2 -> { - idCodesMap.computeIfAbsent(tmp.get(0), k -> new ArrayList<>()).add(gBaseJJD); - idCodesMap.computeIfAbsent(tmp.get(1), k -> new ArrayList<>()).add(gBaseJJD); - } - default -> { - for (int i = 1; i < 3; i++) { - idCodesMap.computeIfAbsent(tmp.get(i), k -> new ArrayList<>()).add(gBaseJJD); - } - } - } - if (!mobileContinue) { - continue; - } - } - String mobile = PatternUtil.takeMobile(gBaseJJD.getCjqk()); - if (mobile.isEmpty()) { - mobile = PatternUtil.takeMobile(gBaseJJD.getBjnr()); - } - if (mobile.isEmpty()) { + List tmp = processIdCards(gBaseJJD); + if (!tmp.isEmpty()) { + collectSingleMap(tmp, 3, idCodesMap, gBaseJJD); continue; } - List tmp = Arrays.stream(mobile.split(",")).toList(); - switch (tmp.size()) { - case 0 -> { - } - case 1 -> mobilesMap.computeIfAbsent(tmp.getFirst(), k -> new ArrayList<>()).add(gBaseJJD); - case 2 -> { - mobilesMap.computeIfAbsent(tmp.get(0), k -> new ArrayList<>()).add(gBaseJJD); - mobilesMap.computeIfAbsent(tmp.get(1), k -> new ArrayList<>()).add(gBaseJJD); - } - default -> { - for (int i = 1; i < tmp.size(); i++) { - mobilesMap.computeIfAbsent(tmp.get(i), k -> new ArrayList<>()).add(gBaseJJD); - } - } - } + tmp = processMobile(gBaseJJD); + if (tmp.isEmpty()) continue; + collectSingleMap(tmp, tmp.size(), mobilesMap, gBaseJJD); } Map oldMap = domain.getOldMap(task.getModelId(), true); @@ -716,52 +593,14 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { Map> mobilesMap = new WeakHashMap<>(); for (GBaseJJD gBaseJJD : result) { - String idCard = PatternUtil.takeIdCard(gBaseJJD.getCjqk()); - if (idCard.isEmpty()) { - idCard = PatternUtil.takeIdCard(gBaseJJD.getBjnr()); - } - boolean mobileContinue = false; - if (!idCard.isEmpty()) { - List tmp = Arrays.stream(idCard.split(",")).toList(); - switch (tmp.size()) { - case 0 -> mobileContinue = true; - case 1 -> idCodesMap.computeIfAbsent(tmp.getFirst(), k -> new ArrayList<>()).add(gBaseJJD); - case 2 -> { - idCodesMap.computeIfAbsent(tmp.get(0), k -> new ArrayList<>()).add(gBaseJJD); - idCodesMap.computeIfAbsent(tmp.get(1), k -> new ArrayList<>()).add(gBaseJJD); - } - default -> { - for (int i = 1; i < 3; i++) { - idCodesMap.computeIfAbsent(tmp.get(i), k -> new ArrayList<>()).add(gBaseJJD); - } - } - } - if (!mobileContinue) { - continue; - } - } - String mobile = PatternUtil.takeMobile(gBaseJJD.getCjqk()); - if (mobile.isEmpty()) { - mobile = PatternUtil.takeMobile(gBaseJJD.getBjnr()); - } - if (mobile.isEmpty()) { + List tmp = processIdCards(gBaseJJD); + if (!tmp.isEmpty()) { + collectSingleMap(tmp, tmp.size(), idCodesMap, gBaseJJD); continue; } - List tmp = Arrays.stream(mobile.split(",")).toList(); - switch (tmp.size()) { - case 0 -> { - } - case 1 -> mobilesMap.computeIfAbsent(tmp.getFirst(), k -> new ArrayList<>()).add(gBaseJJD); - case 2 -> { - mobilesMap.computeIfAbsent(tmp.get(0), k -> new ArrayList<>()).add(gBaseJJD); - mobilesMap.computeIfAbsent(tmp.get(1), k -> new ArrayList<>()).add(gBaseJJD); - } - default -> { - for (int i = 1; i < tmp.size(); i++) { - mobilesMap.computeIfAbsent(tmp.get(i), k -> new ArrayList<>()).add(gBaseJJD); - } - } - } + tmp = processMobile(gBaseJJD); + if (tmp.isEmpty()) continue; + collectSingleMap(tmp, tmp.size(), mobilesMap, gBaseJJD); } Map oldMap = domain.getOldMap(task.getModelId(), true); @@ -795,52 +634,14 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { Map> mobilesMap = new WeakHashMap<>(); for (GBaseJJD gBaseJJD : result) { - String idCard = PatternUtil.takeIdCard(gBaseJJD.getCjqk()); - if (idCard.isEmpty()) { - idCard = PatternUtil.takeIdCard(gBaseJJD.getBjnr()); - } - boolean mobileContinue = false; - if (!idCard.isEmpty()) { - List tmp = Arrays.stream(idCard.split(",")).toList(); - switch (tmp.size()) { - case 0 -> mobileContinue = true; - case 1 -> idCodesMap.computeIfAbsent(tmp.getFirst(), k -> new ArrayList<>()).add(gBaseJJD); - case 2 -> { - idCodesMap.computeIfAbsent(tmp.get(0), k -> new ArrayList<>()).add(gBaseJJD); - idCodesMap.computeIfAbsent(tmp.get(1), k -> new ArrayList<>()).add(gBaseJJD); - } - default -> { - for (int i = 1; i < tmp.size(); i++) { - idCodesMap.computeIfAbsent(tmp.get(i), k -> new ArrayList<>()).add(gBaseJJD); - } - } - } - if (!mobileContinue) { - continue; - } - } - String mobile = PatternUtil.takeMobile(gBaseJJD.getCjqk()); - if (mobile.isEmpty()) { - mobile = PatternUtil.takeMobile(gBaseJJD.getBjnr()); - } - if (mobile.isEmpty()) { + List tmp = processIdCards(gBaseJJD); + if (!tmp.isEmpty()) { + collectSingleMap(tmp, tmp.size(), idCodesMap, gBaseJJD); continue; } - List tmp = Arrays.stream(mobile.split(",")).toList(); - switch (tmp.size()) { - case 0 -> { - } - case 1 -> mobilesMap.computeIfAbsent(tmp.getFirst(), k -> new ArrayList<>()).add(gBaseJJD); - case 2 -> { - mobilesMap.computeIfAbsent(tmp.get(0), k -> new ArrayList<>()).add(gBaseJJD); - mobilesMap.computeIfAbsent(tmp.get(1), k -> new ArrayList<>()).add(gBaseJJD); - } - default -> { - for (int i = 1; i < tmp.size(); i++) { - mobilesMap.computeIfAbsent(tmp.get(i), k -> new ArrayList<>()).add(gBaseJJD); - } - } - } + tmp = processMobile(gBaseJJD); + if (tmp.isEmpty()) continue; + collectSingleMap(tmp, tmp.size(), mobilesMap, gBaseJJD); } Map oldMap = domain.getOldMap(task.getModelId(), true); @@ -876,12 +677,8 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { List others = new ArrayList<>(); for (GBaseJJD gBaseJJD : result) { - String idCard = PatternUtil.takeIdCard(gBaseJJD.getCjqk()); - if (idCard.isEmpty()) { - idCard = PatternUtil.takeIdCard(gBaseJJD.getBjnr()); - } - if (!idCard.isEmpty()) { - List tmp = Arrays.stream(idCard.split(",")).toList(); + List tmp = processIdCards(gBaseJJD); + if (!tmp.isEmpty()) { // 年龄22岁以下才算 for (String s : tmp) { Integer age = IdCodeUtil.idCard2Age(s, today); @@ -891,14 +688,9 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { } continue; } - String mobile = PatternUtil.takeMobile(gBaseJJD.getCjqk()); - if (mobile.isEmpty()) { - mobile = PatternUtil.takeMobile(gBaseJJD.getBjnr()); - } - if (mobile.isEmpty()) { - continue; - } - mobiles.addAll(Arrays.stream(mobile.split(",")).toList()); + tmp = processMobile(gBaseJJD); + if (tmp.isEmpty()) continue; + mobiles.addAll(tmp); others.add(gBaseJJD); } @@ -908,11 +700,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { Map> 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 tmp = Arrays.stream(mobile.split(",")).toList(); + List tmp = processMobile(other); List idCard = new ArrayList<>(); for (String s : tmp) { List arr = Optional.ofNullable(mobileRkMap.get(s)).orElse(new ArrayList<>()); @@ -921,12 +709,8 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { return age != null && age <= 22; }).toList()); } - if (idCard.isEmpty()) { - continue; - } - for (String s : idCard) { - idCodesMap.computeIfAbsent(s, k -> new ArrayList<>()).add(other); - } + if (idCard.isEmpty()) continue; + idCard.forEach(s -> idCodesMap.computeIfAbsent(s, k -> new ArrayList<>()).add(other)); } } Map oldMap = domain.getOldMap(task.getModelId(), true); @@ -939,14 +723,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { continue; } StringBuilder sb = new StringBuilder("该人员存在" + jjdList.size() + "起被欺凌警情,接警单编号:"); - LocalDateTime time = null; - for (GBaseJJD jjd : jjdList) { - sb.append(jjd.getJjdbh()).append(","); - LocalDateTime tmp = DateTimeUtil.date2LocalDateTime(jjd.getBjsj()); - if (time == null || (tmp != null && time.isBefore(tmp))) { - time = tmp; - } - } + LocalDateTime time = findRecentTime(jjdList, sb); String desc = sb.substring(0, sb.length() - 1); RiskModelTaskClue old = oldMap.get(person.getIdCode()); if (old == null) { @@ -1048,42 +825,24 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { Map> mobilesMap = new WeakHashMap<>(); for (GBaseJJD gBaseJJD : result) { - String idCard = PatternUtil.takeIdCard(gBaseJJD.getCjqk()); - if (idCard.isEmpty()) { - idCard = PatternUtil.takeIdCard(gBaseJJD.getBjnr()); - } - boolean mobileContinue = false; - if (!idCard.isEmpty()) { - List tmp = Arrays.stream(idCard.split(",")).toList(); - switch (tmp.size()) { - case 0 -> mobileContinue = true; - case 1 -> idCodesMap.computeIfAbsent(tmp.getFirst(), k -> new ArrayList<>()).add(gBaseJJD); - default -> { - for (int i = 1; i < tmp.size(); i++) { - idCodesMap.computeIfAbsent(tmp.get(i), k -> new ArrayList<>()).add(gBaseJJD); - } + List tmp = processIdCards(gBaseJJD); + if (!tmp.isEmpty()) { + if (tmp.size() == 1) { + idCodesMap.computeIfAbsent(tmp.getFirst(), k -> new ArrayList<>()).add(gBaseJJD); + } else { + for (int i = 1; i < tmp.size(); i++) { + idCodesMap.computeIfAbsent(tmp.get(i), k -> new ArrayList<>()).add(gBaseJJD); } } - if (!mobileContinue) { - continue; - } - } - String mobile = PatternUtil.takeMobile(gBaseJJD.getCjqk()); - if (mobile.isEmpty()) { - mobile = PatternUtil.takeMobile(gBaseJJD.getBjnr()); - } - if (mobile.isEmpty()) { continue; } - List tmp = Arrays.stream(mobile.split(",")).toList(); - switch (tmp.size()) { - case 0 -> { - } - case 1 -> mobilesMap.computeIfAbsent(tmp.getFirst(), k -> new ArrayList<>()).add(gBaseJJD); - default -> { - for (int i = 1; i < tmp.size(); i++) { - mobilesMap.computeIfAbsent(tmp.get(i), k -> new ArrayList<>()).add(gBaseJJD); - } + tmp = processMobile(gBaseJJD); + if (tmp.isEmpty()) continue; + if (tmp.size() == 1) { + mobilesMap.computeIfAbsent(tmp.getFirst(), k -> new ArrayList<>()).add(gBaseJJD); + } else { + for (int i = 1; i < tmp.size(); i++) { + mobilesMap.computeIfAbsent(tmp.get(i), k -> new ArrayList<>()).add(gBaseJJD); } } } @@ -1114,49 +873,31 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { List 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 tmp = processIdCards(gBaseJJD); + if (!tmp.isEmpty()) { // 找到身份证年龄小的 - List 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; + if (tmp.size() == 1) { + fatherIdCodeMap.computeIfAbsent(tmp.getFirst(), k -> new ArrayList<>()).add(gBaseJJD); + } else { + fatherIdCodeMap.computeIfAbsent(findSmallOne(tmp), k -> new ArrayList<>()).add(gBaseJJD); } - } - 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()); + tmp = processMobile(gBaseJJD); + if (tmp.isEmpty()) { + mobiles.addAll(tmp); others.add(gBaseJJD); } } if (mobiles.isEmpty()) { return fatherIdCodeMap; } - List xxList = gBaseSYRKXXRepository.list(new LambdaQueryWrapper() .select(GBaseSYRKXX::getGmsfhm, GBaseSYRKXX::getLxdh).in(GBaseSYRKXX::getLxdh, mobiles)); Map> 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 tmp = Arrays.stream(mobile.split(",")).toList(); + List tmp = processMobile(other); List idCard = new ArrayList<>(); for (String s : tmp) { List arr = Optional.ofNullable(mobileRkMap.get(s)).orElse(new ArrayList<>()); @@ -1205,6 +946,28 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { .orElse(null); } + List processIdCards(GBaseJJD jjd) { + String idCard = PatternUtil.takeIdCard(jjd.getCjqk()); + if (idCard.isEmpty()) { + idCard = PatternUtil.takeIdCard(jjd.getBjnr()); + } + if (idCard.isEmpty()) { + return new ArrayList<>(0); + } + return Arrays.stream(idCard.split(",")).toList(); + } + + List processMobile(GBaseJJD jjd) { + String mobiles = PatternUtil.takeMobile(jjd.getCjqk()); + if (mobiles.isEmpty()) { + mobiles = PatternUtil.takeMobile(jjd.getBjnr()); + } + if (mobiles.isEmpty()) { + return new ArrayList<>(0); + } + return Arrays.stream(mobiles.split(",")).toList(); + } + /** * 手机要搜索的clue数据 * @@ -1221,20 +984,12 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { if (jjdList.isEmpty()) return null; jjdList = jjdList.stream().filter(StreamUtil.distinctByKey(GBaseJJD::getJjdbh)).sorted().toList(); StringBuilder sb = new StringBuilder("该人员存在" + jjdList.size() + "起" + tag + "警情,接警单编号:"); - LocalDateTime time = null; - for (GBaseJJD gBaseJJD : jjdList) { - sb.append(gBaseJJD.getJjdbh()).append(","); - LocalDateTime tmp = DateTimeUtil.date2LocalDateTime(gBaseJJD.getBjsj()); - if (time == null || (tmp != null && time.isBefore(tmp))) { - time = tmp; - } - } return DataUtil.createClueData(task, ClueData.builder() .name(personal.getName()) .idCode(personal.getIdCode()) .tags(List.of(tag)) .personId(personal.getId()) - .eventTime(time) + .eventTime(findRecentTime(jjdList, sb)) .sourceData(sb.substring(0, sb.length() - 1)) .score(Math.min(jjdList.size(), 5)) .build()); @@ -1242,6 +997,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { /** * 多身份证对比名称 + * * @param infos 信息 * @param name 名称 * @return 正确信息 @@ -1275,9 +1031,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { personal.setGender(IdCodeUtil.idCard2Gender(personal.getIdCode())); personal.setAge(Optional.ofNullable(IdCodeUtil.idCard2Age(personal.getIdCode(), today)).orElse(-1)); if (personal.getAge() == null) { - LocalDate localDate = DateTimeUtil.date2LocalDate(info.getCsrq()); - int age = localDate.until(today).getYears(); - personal.setAge(age); + personal.setAge(Optional.ofNullable(DateTimeUtil.date2LocalDate(info.getCsrq())).map(date -> date.until(today).getYears()).orElse(null)); } if (personal.getGender() == null) { personal.setGender(info.getXbdm()); @@ -1318,4 +1072,31 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { } return tmp; } + + void collectSingleMap(List strList, int defaultEnd, Map> idCodesMap, GBaseJJD gBaseJJD) { + switch (strList.size()) { + case 1 -> idCodesMap.computeIfAbsent(strList.getFirst(), k -> new ArrayList<>()).add(gBaseJJD); + case 2 -> { + idCodesMap.computeIfAbsent(strList.get(0), k -> new ArrayList<>()).add(gBaseJJD); + idCodesMap.computeIfAbsent(strList.get(1), k -> new ArrayList<>()).add(gBaseJJD); + } + default -> { + for (int i = 1; i < defaultEnd; i++) { + idCodesMap.computeIfAbsent(strList.get(i), k -> new ArrayList<>()).add(gBaseJJD); + } + } + } + } + + LocalDateTime findRecentTime(List jjdList, StringBuilder sb) { + LocalDateTime time = null; + for (GBaseJJD gBaseJJD : jjdList) { + if(sb != null) sb.append(gBaseJJD.getJjdbh()).append(","); + LocalDateTime tmp = DateTimeUtil.date2LocalDateTime(gBaseJJD.getBjsj()); + if (time == null || (tmp != null && time.isBefore(tmp))) { + time = tmp; + } + } + return time; + } } \ No newline at end of file diff --git a/src/main/java/com/biutag/supervisiondata/service/impl/PersonalServiceImpl.java b/src/main/java/com/biutag/supervisiondata/service/impl/PersonalServiceImpl.java index 5e71832..dafff33 100644 --- a/src/main/java/com/biutag/supervisiondata/service/impl/PersonalServiceImpl.java +++ b/src/main/java/com/biutag/supervisiondata/service/impl/PersonalServiceImpl.java @@ -7,7 +7,6 @@ import com.biutag.supervisiondata.pojo.constants.Media; import com.biutag.supervisiondata.pojo.database.Contradiction; import com.biutag.supervisiondata.pojo.domain.PersonImageInfo; import com.biutag.supervisiondata.pojo.entity.ads.GBaseSYRKXX; -import com.biutag.supervisiondata.pojo.entity.dwd.GBaseJJD; import com.biutag.supervisiondata.pojo.entity.dwd.GBaseZDRY; import com.biutag.supervisiondata.pojo.entity.mine.*; import com.biutag.supervisiondata.pojo.entity.wdpc.WdpcPerson; @@ -23,7 +22,6 @@ import com.biutag.supervisiondata.service.RiskPersonalService; import com.biutag.supervisiondata.util.DepartUtil; import com.biutag.supervisiondata.util.IdCodeUtil; import com.biutag.supervisiondata.util.ImageUtil; -import com.biutag.supervisiondata.util.PatternUtil; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -48,127 +46,10 @@ import java.util.stream.IntStream; @AllArgsConstructor public class PersonalServiceImpl implements PersonalService { - private final GBaseJJDRepository gBaseJJDRepository; - private final GBaseSYRKXXRepository gBaseSYRKXXRepository; private final RiskPersonalService riskPersonalService; - @Override - public void pullJJDPersonalInfo(LocalDateTime start) { -// LocalDateTime start = Optional.ofNullable(personalRepository.getBaseMapper().selectMaxCreateTime()) -// .orElse(LocalDateTime.of(2024, 1, 1, 0, 0, 0)); - // 结束时间设置为人员的创建时间,保证下次提取是新的接警数据 - LocalDateTime end = LocalDateTime.now(); - - // 获取接警数据 - List result = gBaseJJDRepository.getBaseMapper().selectDataToRisk(start.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")), - end.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); - log.info("总条数 | {}条", result.size()); - - // 过滤数据 - List idCodes1 = new ArrayList<>(); - List mobiles1 = new ArrayList<>(); - - Map> jjdMap = new HashMap<>(); - Map> jjdMMap = new HashMap<>(); - List jjdList = new ArrayList<>(); - for (GBaseJJD item : result) { - if (item.getBjrzjhm() != null) { - jjdMap.computeIfAbsent(item.getBjrzjhm(), k -> new ArrayList<>()).add(item); - idCodes1.add(item.getBjrzjhm()); - jjdList.add(item); - continue; - } - String idCards = PatternUtil.takeIdCard(item.getCjqk()); - if (idCards.isEmpty() && item.getBjrlxdh() == null) { - continue; - } - jjdList.add(item); - if (!idCards.isEmpty()) { - idCodes1.addAll(Arrays.asList(idCards.split(","))); - } else { - jjdMMap.computeIfAbsent(item.getBjrlxdh(), k -> new ArrayList<>()).add(item); - mobiles1.add(item.getBjrlxdh()); - } - } - // 去重 - List idCodes2 = idCodes1.stream().distinct().collect(Collectors.toList()); - List mobiles2 = mobiles1.stream().distinct().collect(Collectors.toList()); - - // 切割 - List> idCodes = IntStream.range(0, (idCodes2.size() + 9999) / 10000) - .mapToObj(i -> idCodes2.subList(i * 10000, Math.min((i + 1) * 10000, idCodes2.size()))) - .collect(Collectors.toList()); - List> mobiles = IntStream.range(0, (mobiles2.size() + 9999) / 10000) - .mapToObj(i -> mobiles2.subList(i * 10000, Math.min((i + 1) * 10000, mobiles2.size()))) - .collect(Collectors.toList()); - - // 身份证查到的人 - List sFms = new ArrayList<>(); - // 手机号查到的人 - List lXfs = new ArrayList<>(); - // 同步查询 - CompletableFuture.allOf( - CompletableFutureUtil.runSyncObject(() -> sFms.addAll(getByIdCode(idCodes))), - CompletableFutureUtil.runSyncObject(() -> lXfs.addAll(getByMobiles(mobiles))) - ).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<>(); - // 已出现的份证 - HashSet cache = new HashSet<>(); - LocalDate now = LocalDate.now(); - for (GBaseJJD item : jjdList) { - GBaseSYRKXX syrkxx; - // 接警单证件号不为空并没入过库 - if (item.getBjrzjhm() != null && !cache.contains(item.getBjrzjhm())) { - syrkxx = idCodeMap.get(item.getBjrzjhm()); - cache.add(item.getBjrzjhm()); - if (syrkxx != null) { - RiskPersonal personal = createPerson(syrkxx, item.getBjsj(), now, end, Default.BIG_TAG_JJD); - if (personal != null) { - personals.add(personal); - } - } - continue; - } - String idCards = PatternUtil.takeIdCard(item.getCjqk()); - if (!idCards.isEmpty()) { - String[] arr = idCards.split(","); - for (String s : arr) { - if (cache.contains(s)) { - continue; - } - GBaseSYRKXX xx = idCodeMap.get(s); - if (xx == null) { - continue; - } - cache.add(xx.getGmsfhm()); - RiskPersonal personal = createPerson(xx, item.getBjsj(), now, end, Default.BIG_TAG_JJD); - if (personal == null) { - continue; - } - personals.add(personal); - } - continue; - } - List xxList = Optional.ofNullable(mobileMap.get(item.getBjdh())).orElse(new ArrayList<>()); - syrkxx = compare(xxList, item.getBjrxm()); - if (syrkxx != null) { - cache.add(syrkxx.getGmsfhm()); - RiskPersonal personal = createPerson(syrkxx, item.getBjsj(), now, end, Default.BIG_TAG_JJD); - if (personal == null) { - continue; - } - personals.add(personal); - } - } - riskPersonalService.saveDistinct(personals); - } - private final GBaseZDRYRepository zdryRepository; @Override @@ -568,18 +449,6 @@ public class PersonalServiceImpl implements PersonalService { return tmp; } - GBaseSYRKXX compare(List infos, String name) { - GBaseSYRKXX info = null; - for (GBaseSYRKXX gBaseSYRKXX : infos) { - if (gBaseSYRKXX.getXm().equals(name)) { - info = gBaseSYRKXX; - break; - } - } - return info; - } - - RiskPersonal createPerson(GBaseSYRKXX item, Date date, LocalDate now, LocalDateTime time, String tag) { RiskPersonal person = new RiskPersonal(); person.setName(item.getXm());