From da954b7d471dc6ac148200c35c2f3e9a4c33579c Mon Sep 17 00:00:00 2001 From: kami <605128600@qq.com> Date: Mon, 9 Dec 2024 16:46:03 +0800 Subject: [PATCH] =?UTF-8?q?=E7=88=B6=E6=AF=8D=E5=85=B3=E7=B3=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/dwd/GBaseJJDMapper.java | 44 +++++ .../service/GBaseJJDService.java | 10 ++ .../service/impl/GBaseJJDServiceImpl.java | 156 ++++++++++++++++++ .../service/impl/GBaseSHRWFRServiceImpl.java | 2 +- 4 files changed, 211 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseJJDMapper.java b/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseJJDMapper.java index 77038e6..6b1705e 100644 --- a/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseJJDMapper.java +++ b/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseJJDMapper.java @@ -77,4 +77,48 @@ public interface GBaseJJDMapper extends BaseMapper { */ @Select(" select jjdbh, bjdh,bjrxm ,bjrzjhm, bjnr, cjqk, bjsj from dwd_asj_zhtx_jjd where (bjnr like '%家暴%' or cjqk like '%家暴%' or jqxzmc like '%家庭暴力%' or cjqk like '%家庭暴力%' or bjnr like '%家庭暴力%') and SUBSTR(jqxzdm, 1, 2) != '99' and bjsj >= #{start}") List selectHomeViolence(@Param("start")String start); + + @Select(" select jjdbh, bjdh,bjrxm ,bjrzjhm, bjnr, cjqk, bjsj from dwd_asj_zhtx_jjd " + + " where jqxzmc like '%纠纷%' and SUBSTR(jqxzdm, 1, 2) != '99' and bjsj >= #{start} and " + + " (bjnr like '%与父亲%' or cjqk like '%与父亲%' or " + + " bjnr like '%和父亲%' or cjqk like '%和父亲%' or " + + " bjnr like '%与爸爸%' or cjqk like '%与爸爸%' or " + + " bjnr like '%和爸爸%' or cjqk like '%和爸爸%' or " + + " ((bjnr like '%和儿子%' or cjqk like '%和儿子%' or bjnr like '%与儿子%' or cjqk like '%与儿子%' or " + + " bjnr like '%和女儿%' or cjqk like '%和女儿%' or bjnr like '%与女儿%' or cjqk like '%与女儿%' or" + + " bjnr like '%和子女%' or cjqk like '%和子女%' or bjnr like '%与子女%' or cjqk like '%与子女%') and ( " + + " bjnr like '%系父亲%' or cjqk like '%系父亲%' or bjnr like '%系爸爸%' or cjqk like '%系爸爸%' or " + + " bjnr like '%是父亲%' or cjqk like '%是父亲%' or bjnr like '%是爸爸%' or cjqk like '%是爸爸%')) ") + List selectFatherRelation(@Param("start")String start); + + @Select(" select jjdbh, bjdh,bjrxm ,bjrzjhm, bjnr, cjqk, bjsj from dwd_asj_zhtx_jjd " + + " where jqxzmc like '%纠纷%' and SUBSTR(jqxzdm, 1, 2) != '99' and bjsj >= #{start} and " + + " (bjnr like '%与母亲%' or cjqk like '%与母亲%' or " + + " bjnr like '%和母亲%' or cjqk like '%和母亲%' or " + + " bjnr like '%与妈妈%' or cjqk like '%与妈妈%' or " + + " bjnr like '%和妈妈%' or cjqk like '%和妈妈%' or " + + " ((bjnr like '%和儿子%' or cjqk like '%和儿子%' or bjnr like '%与儿子%' or cjqk like '%与儿子%' or " + + " bjnr like '%和女儿%' or cjqk like '%和女儿%' or bjnr like '%与女儿%' or cjqk like '%与女儿%' or" + + " bjnr like '%和子女%' or cjqk like '%和子女%' or bjnr like '%与子女%' or cjqk like '%与子女%') and (" + + " bjnr like '%系母亲%' or cjqk like '%系母亲%' or bjnr like '%系妈妈%' or cjqk like '%系妈妈%' or " + + " bjnr like '%是母亲%' or cjqk like '%是母亲%' or bjnr like '%是妈妈%' or cjqk like '%是妈妈%')) ") + List selectMotherRelation(@Param("start")String start); + + /** + * 婚姻纠纷 + * @param start 开始时间 + * @return + */ + @Select(" select jjdbh, bjdh,bjrxm ,bjrzjhm, bjnr, cjqk, bjsj from dwd_asj_zhtx_jjd " + + " where (jqxzmc like '%感情%' or jqxzmc like '%婚姻%') and SUBSTR(jqxzdm, 1, 2) != '99' and bjsj >= #{start} ") + List selectMarryDispute(@Param("start")String start); + /** + * 恋爱纠纷 + * @param start 开始时间 + * @return + */ + @Select(" select jjdbh, bjdh,bjrxm ,bjrzjhm, bjnr, cjqk, bjsj from dwd_asj_zhtx_jjd" + + " where (bjnr like '%失恋%' or cjqk like '%失恋%' or bjnr like '%分手%' or cjqk like '%分手%') " + + " and SUBSTR(jqxzdm, 1, 2) != '99' and bjsj >= #{start} ") + List selectLoveDispute(@Param("start")String start); } diff --git a/src/main/java/com/biutag/supervisiondata/service/GBaseJJDService.java b/src/main/java/com/biutag/supervisiondata/service/GBaseJJDService.java index 018766a..8a75b4e 100644 --- a/src/main/java/com/biutag/supervisiondata/service/GBaseJJDService.java +++ b/src/main/java/com/biutag/supervisiondata/service/GBaseJJDService.java @@ -18,16 +18,26 @@ public interface GBaseJJDService { void pullAndSave(LocalDateTime start, LocalDateTime end); /** * 同步警情 厌世、报复、自杀、遭遇不公 + * @param start 接警开始范围 + * @param end 接警结束范围 */ void pullDataAndSaveRedis(LocalDateTime start, LocalDateTime end); void pullPoliceInstance(LocalDateTime start, LocalDateTime end); /** * 攻击警察 + * @param domain domain */ void syncPoliceAttack(TaskParamDomain domain); /** * 家暴 + * @param domain domain */ void syncHomeViolence(TaskParamDomain domain); + + /** + * 与父母关系 + * @param domain domain + */ + void syncParentRelation(TaskParamDomain domain); } 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 cb11fe1..56292ac 100644 --- a/src/main/java/com/biutag/supervisiondata/service/impl/GBaseJJDServiceImpl.java +++ b/src/main/java/com/biutag/supervisiondata/service/impl/GBaseJJDServiceImpl.java @@ -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 fathers = gBaseJJDRepository.getBaseMapper().selectFatherRelation(startTime); + + List mothers = gBaseJJDRepository.getBaseMapper().selectMotherRelation(startTime); + + RiskTask task = taskRepository.create(fathers.size(), 69); + RiskTask task2 = taskRepository.create(mothers.size(), 70); + + // ****父亲矛盾***** + Map> fatherIdCodeMap = findTargetJJD(fathers); + // ****母亲矛盾***** + Map> motherIdCodeMap = findTargetJJD(mothers); + + List toInsert = eachClue2Save(domain, task, fatherIdCodeMap, "父亲"); + + List 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> findTargetJJD(List jjdList) { + + Map> fatherIdCodeMap = new WeakHashMap<>(); + List others = new ArrayList<>(); + + 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 = 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 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 idCard = new ArrayList<>(); + for (String s : tmp) { + List 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 eachClue2Save(TaskParamDomain domain, RiskTask task,Map> fatherIdCodeMap, String tag) { + List oldList = domain.getMap().get(task.getModelId()); + Map> personMap = oldList.stream().collect(Collectors.groupingBy(RiskModelTaskClue::getIdCode)); + List toInsert = new ArrayList<>(); + for (RiskPersonal person : domain.getPersons()) { + List jjdList = fatherIdCodeMap.get(person.getIdCode()); + if(jjdList == null) { + continue; + } + List olds = Optional.ofNullable(personMap.get(person.getIdCode())).orElse(new ArrayList<>()); + Map 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 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 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 ac1bc23..aad5a93 100644 --- a/src/main/java/com/biutag/supervisiondata/service/impl/GBaseSHRWFRServiceImpl.java +++ b/src/main/java/com/biutag/supervisiondata/service/impl/GBaseSHRWFRServiceImpl.java @@ -373,7 +373,7 @@ public class GBaseSHRWFRServiceImpl implements GBaseSHRWFRService { // 职业等级 RiskTask task = taskRepository.create(domain.getPersons().size(), 37); // 有无职业 - RiskTask task2 = taskRepository.create(domain.getPersons().size(), 67); + RiskTask task2 = taskRepository.create(domain.getPersons().size(), 68); List lxList = zblxRepository.list(new LambdaQueryWrapper() .in(WdpcGrjdZblx::getLxdm, List.of("9", "12")));