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 b1d7e63..77038e6 100644 --- a/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseJJDMapper.java +++ b/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseJJDMapper.java @@ -64,6 +64,17 @@ public interface GBaseJJDMapper extends BaseMapper { " where (bjnr like '%报复%' or cjqk like '%报复%') and bjsj between #{start} and #{end} ") List selectRevenge(@Param("start")String start, @Param("end")String end); - @Select(" select jjdbh, bjdh,bjrxm ,bjrzjhm, bjnr, cjqk, bjsj from dwd_asj_zhtx_jjd where (bjnr like '%袭警%' or cjqk like '%袭警%' or jqxzmc like '%阻碍%' or jqxzmc like '%袭击%') and bjsj >= #{start}") + /** + * 袭警 + * @return 列表 + */ + @Select(" select jjdbh, bjdh,bjrxm ,bjrzjhm, bjnr, cjqk, bjsj from dwd_asj_zhtx_jjd where (bjnr like '%袭警%' or cjqk like '%袭警%' or jqxzmc like '%阻碍%' or jqxzmc like '%袭击%') and SUBSTR(jqxzdm, 1, 2) != '99' and bjsj >= #{start}") List selectAttackPolist(@Param("start")String start); + + /** + * 家暴 + * @return 列表 + */ + @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); } diff --git a/src/main/java/com/biutag/supervisiondata/pojo/constants/Default.java b/src/main/java/com/biutag/supervisiondata/pojo/constants/Default.java index 08814fb..a569e1e 100644 --- a/src/main/java/com/biutag/supervisiondata/pojo/constants/Default.java +++ b/src/main/java/com/biutag/supervisiondata/pojo/constants/Default.java @@ -102,6 +102,8 @@ public class Default { public static final String WF_IG = "涉访涉诉、前科劣迹"; + public static final String HOME_VIOLENCE = "家庭、人际、两性关系"; + public static final String IS_PETITION = "信访、投诉-信访局信访"; public static final String FATHER_EDUCATION = "父亲文化程度"; diff --git a/src/main/java/com/biutag/supervisiondata/service/GBaseJJDService.java b/src/main/java/com/biutag/supervisiondata/service/GBaseJJDService.java index fe900aa..018766a 100644 --- a/src/main/java/com/biutag/supervisiondata/service/GBaseJJDService.java +++ b/src/main/java/com/biutag/supervisiondata/service/GBaseJJDService.java @@ -26,4 +26,8 @@ public interface GBaseJJDService { * 攻击警察 */ void syncPoliceAttack(TaskParamDomain domain); + /** + * 家暴 + */ + void syncHomeViolence(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 d755a14..edda8b6 100644 --- a/src/main/java/com/biutag/supervisiondata/service/impl/GBaseJJDServiceImpl.java +++ b/src/main/java/com/biutag/supervisiondata/service/impl/GBaseJJDServiceImpl.java @@ -110,7 +110,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { continue; } else { mobiles1.add(item.getBjrlxdh()); - jjdMap.computeIfAbsent(item.getBjrzjhm(), k -> new ArrayList<>()).add(item); + jjdMMap.computeIfAbsent(item.getBjrzjhm(), k -> new ArrayList<>()).add(item); } personals.add(person); } @@ -165,8 +165,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { } if (personal.getMobileNumber() != null && info == null) { xxxInfo = mobileMap.get(personal.getMobileNumber()); - if (xxxInfo == null || xxxInfo.isEmpty()) { - } else { + if (xxxInfo == null && xxxInfo.isEmpty()) { info = compare(xxxInfo, personal.getName()); } if (info == null && xxxInfo != null) { @@ -233,7 +232,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { if (depart == null) { PointOrg org = orgCodeMap.get(tmp.getGxdwdm()); org = OrgUtil.findOrg(org, orgIdMap); - depart = Optional.ofNullable(org).map(PointOrg::getDm).map(item -> jqExternalDepart.get(item)).orElse(null); + depart = Optional.ofNullable(org).map(PointOrg::getDm).map(jqExternalDepart::get).orElse(null); } if (depart == null) { personal.setControlDepartId(null); @@ -390,7 +389,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { .name(person.getName()) .id(BhUtil.jjdBh(gBaseJJD.getJjdbh())) .idCode(person.getIdCode()) - .tag("有平台涉警事件") + .tag("平台涉警事件") .personId(person.getId()) .build(); StringBuilder sb = new StringBuilder("该人员存在平台涉警事件警情,接警单编号:" + gBaseJJD.getJjdbh()); @@ -410,12 +409,188 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { toInsert.add(createClue(task.getModelId(), 5, task.getId(), data)); } } + log.info("保存袭警数据:{}", toInsert.size()); if (!toInsert.isEmpty()) { clueService.saveClues(toInsert, Default.WF_IG); } taskRepository.updateTask(task.getId(), toInsert.size(), 0); } + @Override + public void syncHomeViolence(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().selectHomeViolence(startTime); + // 被家暴 + RiskTask task = taskRepository.create(result.size(), 65); + // 家暴 + RiskTask task2 = taskRepository.create(result.size(), 66); + + // ****被家暴***** + // 证件相关警情 + Map> shIdCodeMap = new WeakHashMap<>(); + // 手机号相关警情 + Map> shMobileMap = new WeakHashMap<>(); + // ****家暴***** + // 证件相关警情 + Map> wfIdCodeMap = new WeakHashMap<>(); + // 手机号相关警情 + 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(); + switch (tmp.size()) { + case 1 -> shIdCodeMap.computeIfAbsent(tmp.getFirst(), k -> new ArrayList<>()).add(gBaseJJD); + case 2 -> { + shIdCodeMap.computeIfAbsent(tmp.getFirst(), k -> new ArrayList<>()).add(gBaseJJD); + wfIdCodeMap.computeIfAbsent(tmp.get(1), k -> new ArrayList<>()).add(gBaseJJD); + } + default -> { + shIdCodeMap.computeIfAbsent(tmp.get(1), k -> new ArrayList<>()).add(gBaseJJD); + wfIdCodeMap.computeIfAbsent(tmp.get(2), k -> new ArrayList<>()).add(gBaseJJD); + } + } + 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(); + switch (tmp.size()) { + case 1 -> shMobileMap.computeIfAbsent(tmp.getFirst(), k -> new ArrayList<>()).add(gBaseJJD); + case 2 -> { + shMobileMap.computeIfAbsent(tmp.getFirst(), k -> new ArrayList<>()).add(gBaseJJD); + wfMobileMap.computeIfAbsent(tmp.get(1), k -> new ArrayList<>()).add(gBaseJJD); + } + default -> { + shMobileMap.computeIfAbsent(tmp.get(1), k -> new ArrayList<>()).add(gBaseJJD); + wfMobileMap.computeIfAbsent(tmp.get(2), k -> new ArrayList<>()).add(gBaseJJD); + } + } + continue; + } + if (gBaseJJD.getBjrzjhm() != null && !gBaseJJD.getBjrzjhm().isEmpty()) { + shIdCodeMap.computeIfAbsent(gBaseJJD.getBjrzjhm(), k -> new ArrayList<>()).add(gBaseJJD); + continue; + } + if (gBaseJJD.getBjdh() != null && !gBaseJJD.getBjdh().isEmpty()) { + shMobileMap.computeIfAbsent(gBaseJJD.getBjdh(), k -> new ArrayList<>()).add(gBaseJJD); + } + } + + List oldList = Optional.ofNullable(domain.getMap().get(task.getModelId())).orElse(new ArrayList<>()); + List oldList2 = Optional.ofNullable(domain.getMap().get(task2.getModelId())).orElse(new ArrayList<>()); + // 按人分 + Map> personOldMap = oldList.stream().collect(Collectors.groupingBy(RiskModelTaskClue::getIdCode)); + Map> personOldMap2 = oldList2.stream().collect(Collectors.groupingBy(RiskModelTaskClue::getIdCode)); + + List toInsert = new ArrayList<>(); + List toInsert2 = new ArrayList<>(); + for (RiskPersonal person : domain.getPersons()) { + // 被家暴 + toInsert.addAll(collectionClue(shIdCodeMap,shMobileMap, person, personOldMap, task, "被家暴")); + toInsert2.addAll(collectionClue(wfIdCodeMap,wfMobileMap, person, personOldMap2, task2, "家暴")); + } + List toUpdate = new ArrayList<>(); + List toUpdate2 = new ArrayList<>(); + List deleteIdCards = new ArrayList<>(); + List deleteIdCards2 = 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()); + } + } + + for (RiskModelTaskClue clue : oldList2) { + if(clue.getEventTime().isBefore(limit)) { + RiskModelTaskClue update = new RiskModelTaskClue(); + update.setId(update.getId()); + update.setDel(1); + toUpdate2.add(update); + deleteIdCards2.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, "被家暴"); + } + log.info("家暴:{} | {}", toInsert2.size(), toUpdate2.size()); + if (!toInsert.isEmpty()) { + clueService.saveClues(toInsert, Default.HOME_VIOLENCE); + } + if (!toUpdate2.isEmpty()) { + clueService.deleteCluesAndDeleteTag(toUpdate2, deleteIdCards, "家暴"); + } + taskRepository.updateTask(task.getId(), toInsert.size(), toUpdate.size()); + taskRepository.updateTask(task2.getId(), toInsert.size(), toUpdate2.size()); + } + + /** + * 手机要搜索的clue数据 + * @param idCode 身份证Map + * @param mobile 手机号map + * @param personal 人员 + * @param personOldMap 人员的旧clue + * @param task 任务 + * @param tag 标签 + * @return 要新增的clue + */ + List collectionClue(Map> idCode, Map> mobile,RiskPersonal personal,Map> personOldMap, RiskTask task, String tag) { + List jjdList = Optional.of(idCode.get(personal.getIdCode())).orElse(new ArrayList<>()); + jjdList.addAll(Optional.of(mobile.get(personal.getMobileNumber())).orElse(new ArrayList<>())); + if (jjdList.isEmpty()) { + return new ArrayList<>(); + } + jjdList = jjdList.stream().filter(StreamUtil.distinctByKey(GBaseJJD::getJjdbh)).toList(); + List olds = Optional.ofNullable(personOldMap.get(personal.getIdCode())).orElse(new ArrayList<>()); + Map oldMap = olds.stream().collect(Collectors.toMap(RiskModelTaskClue::getCaseIds, Function.identity(), (val, old) -> val)); + List toInsert = new ArrayList<>(); + for (GBaseJJD gBaseJJD : jjdList) { + if (oldMap.get(BhUtil.jjdBh(gBaseJJD.getJjdbh())) != null) { + continue; + } + ClueData data = ClueData.builder() + .name(personal.getName()) + .id(BhUtil.jjdBh(gBaseJJD.getJjdbh())) + .idCode(personal.getIdCode()) + .tag(tag) + .personId(personal.getId()) + .build(); + StringBuilder sb = new StringBuilder("该人员存在"+tag+"警情,接警单编号:" + gBaseJJD.getJjdbh()); + if (gBaseJJD.getBjnr() != null && !gBaseJJD.getBjnr().isEmpty()) { + sb.append(",报警内容;" + gBaseJJD.getBjnr()); + } + if (gBaseJJD.getCjqk() != null && !gBaseJJD.getCjqk().isEmpty()) { + sb.append(",处警情况;" + gBaseJJD.getCjqk()); + } + sb.append(",增加风险分5分"); + data.setSourceData(sb.toString()); + try { + data.setEventTime(gBaseJJD.getBjsj().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); + } catch (Exception ignored) { + data.setEventTime(LocalDateTime.now()); + } + toInsert.add(createClue(task.getModelId(), 5, task.getId(), data)); + } + return toInsert; + } + void toRedisCache(List jjdList, String keyName) { RedisDao.getInstance().removeListAll(keyName); RedisDao.getInstance().pipeLineExec((connection, key, value) -> jjdList.forEach(item -> { diff --git a/src/main/java/com/biutag/supervisiondata/service/impl/RiskTaskServiceImpl.java b/src/main/java/com/biutag/supervisiondata/service/impl/RiskTaskServiceImpl.java index 2f7dc27..097d0aa 100644 --- a/src/main/java/com/biutag/supervisiondata/service/impl/RiskTaskServiceImpl.java +++ b/src/main/java/com/biutag/supervisiondata/service/impl/RiskTaskServiceImpl.java @@ -286,15 +286,6 @@ public class RiskTaskServiceImpl implements RiskTaskService { last = riskPersonalControlRecord; } } -// if (last != null && last.getId() == null) { -// // 说明不是老数据 修改风险人员管控 -// RiskPersonal p = new RiskPersonal(); -// p.setId(person.getId()); -// p.setControlDepartName(last.getControlDepartName()); -// p.setControlDepartId(last.getControlDepartId()); -// p.setControlTime(last.getControlTime()); -// toUpdatePerson.add(p); -// } // 记录中的案件编号 RiskModelTaskClue old = oldMap.get(person.getIdCode()); String caseIds = Optional.ofNullable(old).map(RiskModelTaskClue::getCaseIds).orElse("");