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 244538e..ae2afed 100644 --- a/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseJJDMapper.java +++ b/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseJJDMapper.java @@ -114,7 +114,7 @@ public interface GBaseJJDMapper extends BaseMapper { /** * 婚姻纠纷 * @param start 开始时间 - * @return + * @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} ") @@ -122,10 +122,30 @@ public interface GBaseJJDMapper extends BaseMapper { /** * 恋爱纠纷 * @param start 开始时间 - * @return + * @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); + + /** + * 邻居和同事 + * @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 jqxzdm like '%纠纷%' and SUBSTR(jqxzdm, 1, 2) != '99' and bjsj >= #{start} ") + List selectNeighborAndColleagueDispute(@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 '%欺凌%') " + + " and SUBSTR(jqxzdm, 1, 2) != '99' and bjsj >= #{start} ") + List selectBullying(@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 8a75b4e..90b5fe9 100644 --- a/src/main/java/com/biutag/supervisiondata/service/GBaseJJDService.java +++ b/src/main/java/com/biutag/supervisiondata/service/GBaseJJDService.java @@ -40,4 +40,19 @@ public interface GBaseJJDService { * @param domain domain */ void syncParentRelation(TaskParamDomain domain); + /** + * 恋爱创伤 + * @param domain domain + */ + void syncLove(TaskParamDomain domain); + /** + * 婚姻矛盾 + * @param domain domain + */ + void syncMarryDispute(TaskParamDomain domain); + /** + * 邻里矛盾 + * @param domain domain + */ + void syncNeighborAndColleagueDispute(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 56292ac..99dd075 100644 --- a/src/main/java/com/biutag/supervisiondata/service/impl/GBaseJJDServiceImpl.java +++ b/src/main/java/com/biutag/supervisiondata/service/impl/GBaseJJDServiceImpl.java @@ -578,6 +578,270 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { taskRepository.updateTask(task2.getId(), toInsert2.size(), 0); } + @Override + public void syncLove(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 result = gBaseJJDRepository.getBaseMapper().selectLoveDispute(startTime); + // 恋爱创伤 + RiskTask task = taskRepository.create(result.size(), 71); + + Map> idCodesMap = new WeakHashMap<>(); + 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()) { + 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); + } + } + } + } + List oldList = Optional.ofNullable(domain.getMap().get(task.getModelId())).orElse(new ArrayList<>()); + // 按人分 + Map> personOldMap = oldList.stream().collect(Collectors.groupingBy(RiskModelTaskClue::getIdCode)); + + List toInsert = new ArrayList<>(); + for (RiskPersonal person : domain.getPersons()) { + toInsert.addAll(collectionClue(idCodesMap, mobilesMap, person, personOldMap, task, "个人恋爱创伤")); + } + List toUpdate = new ArrayList<>(); + List deleteIdCards = new ArrayList<>(); + for (RiskModelTaskClue clue : oldList) { + if(clue.getEventTime().isBefore(limit)) { + RiskModelTaskClue update = new RiskModelTaskClue(); + update.setId(update.getId()); + update.setDel(1); + toUpdate.add(update); + deleteIdCards.add(clue.getIdCode()); + } + } + log.info("恋爱创伤:{} | {}", toInsert.size(), toUpdate.size()); + if (!toInsert.isEmpty()) { + clueService.saveClues(toInsert, "较大影响负性事件"); + } + if (!toUpdate.isEmpty()) { + clueService.deleteCluesAndDeleteTag(toUpdate, deleteIdCards, "个人恋爱创伤"); + } + taskRepository.updateTask(task.getId(), toInsert.size(), toUpdate.size()); + } + + @Override + public void syncMarryDispute(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 result = gBaseJJDRepository.getBaseMapper().selectMarryDispute(startTime); + // 恋爱创伤 + RiskTask task = taskRepository.create(result.size(), 72); + + Map> idCodesMap = new WeakHashMap<>(); + 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()) { + 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); + } + } + } + } + List oldList = Optional.ofNullable(domain.getMap().get(task.getModelId())).orElse(new ArrayList<>()); + // 按人分 + Map> personOldMap = oldList.stream().collect(Collectors.groupingBy(RiskModelTaskClue::getIdCode)); + + List toInsert = new ArrayList<>(); + for (RiskPersonal person : domain.getPersons()) { + toInsert.addAll(collectionClue(idCodesMap, mobilesMap, person, personOldMap, task, "与配偶关系不和")); + } + List toUpdate = new ArrayList<>(); + List deleteIdCards = new ArrayList<>(); + for (RiskModelTaskClue clue : oldList) { + if(clue.getEventTime().isBefore(limit)) { + RiskModelTaskClue update = new RiskModelTaskClue(); + update.setId(update.getId()); + update.setDel(1); + toUpdate.add(update); + deleteIdCards.add(clue.getIdCode()); + } + } + log.info("与配偶关系不和:{} | {}", toInsert.size(), toUpdate.size()); + if (!toInsert.isEmpty()) { + clueService.saveClues(toInsert, Default.HOME_VIOLENCE); + } + if (!toUpdate.isEmpty()) { + clueService.deleteCluesAndDeleteTag(toUpdate, deleteIdCards, "与配偶关系不和"); + } + taskRepository.updateTask(task.getId(), toInsert.size(), toUpdate.size()); + } + + @Override + public void syncNeighborAndColleagueDispute(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 result = gBaseJJDRepository.getBaseMapper().selectNeighborAndColleagueDispute(startTime); + // 恋爱创伤 + RiskTask task = taskRepository.create(result.size(), 73); + + Map> idCodesMap = new WeakHashMap<>(); + 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()) { + 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); + } + } + } + } + List oldList = Optional.ofNullable(domain.getMap().get(task.getModelId())).orElse(new ArrayList<>()); + // 按人分 + Map> personOldMap = oldList.stream().collect(Collectors.groupingBy(RiskModelTaskClue::getIdCode)); + + List toInsert = new ArrayList<>(); + for (RiskPersonal person : domain.getPersons()) { + toInsert.addAll(collectionClue(idCodesMap, mobilesMap, person, personOldMap, task, "与邻居或同事纠纷")); + } + List toUpdate = new ArrayList<>(); + List deleteIdCards = new ArrayList<>(); + for (RiskModelTaskClue clue : oldList) { + if(clue.getEventTime().isBefore(limit)) { + RiskModelTaskClue update = new RiskModelTaskClue(); + update.setId(update.getId()); + update.setDel(1); + toUpdate.add(update); + deleteIdCards.add(clue.getIdCode()); + } + } + log.info("邻里和同事:{} | {}", toInsert.size(), toUpdate.size()); + if (!toInsert.isEmpty()) { + clueService.saveClues(toInsert, Default.HOME_VIOLENCE); + } + if (!toUpdate.isEmpty()) { + clueService.deleteCluesAndDeleteTag(toUpdate, deleteIdCards, "与邻居或同事纠纷"); + } + taskRepository.updateTask(task.getId(), toInsert.size(), toUpdate.size()); + } + Map> findTargetJJD(List jjdList) { Map> fatherIdCodeMap = new WeakHashMap<>(); @@ -645,6 +909,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { List toInsert = new ArrayList<>(); for (RiskPersonal person : domain.getPersons()) { List jjdList = fatherIdCodeMap.get(person.getIdCode()); + jjdList = jjdList.stream().filter(StreamUtil.distinctByKey(GBaseJJD::getJjdbh)).toList(); if(jjdList == null) { continue; }