From 48ccc6bfe70f7e1ec809a42d857f0c75d60044dd Mon Sep 17 00:00:00 2001 From: kami <605128600@qq.com> Date: Tue, 7 Jan 2025 11:15:37 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../event/ApplicationEvent.java | 2 +- .../supervisiondata/pojo/domain/DBData.java | 31 + .../service/GBaseJJDService.java | 8 +- .../service/impl/GBaseJJDServiceImpl.java | 632 ++++-------------- .../supervisiondata/task/TaskService.java | 1 + .../supervisiondata/util/DateTimeUtil.java | 9 + 6 files changed, 179 insertions(+), 504 deletions(-) create mode 100644 src/main/java/com/biutag/supervisiondata/pojo/domain/DBData.java diff --git a/src/main/java/com/biutag/supervisiondata/event/ApplicationEvent.java b/src/main/java/com/biutag/supervisiondata/event/ApplicationEvent.java index 8177cc2..4e6a8c8 100644 --- a/src/main/java/com/biutag/supervisiondata/event/ApplicationEvent.java +++ b/src/main/java/com/biutag/supervisiondata/event/ApplicationEvent.java @@ -124,7 +124,7 @@ public class ApplicationEvent { // // pointService.syncControlNoPower(initDomain(List.of(48))); // pointService.syncOilBuy(initDomain(List.of(52))); -// gBaseJJDService.pullPoliceInstance(LocalDateTime.of(2023, 12, 6, 0, 0, 0), end, initDomain(List.of(55,56,57,58))); +// gBaseJJDService.pullPoliceInstance(initDomain(List.of(55,56,57,58))); // jsbryService.syncPys(initDomain(List.of(59))); // gBaseSHRWFRService.combatCrime(initDomain(List.of(63))); // gBaseJJDService.warningInstance(initDomain(List.of(64))); diff --git a/src/main/java/com/biutag/supervisiondata/pojo/domain/DBData.java b/src/main/java/com/biutag/supervisiondata/pojo/domain/DBData.java new file mode 100644 index 0000000..07da80a --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/domain/DBData.java @@ -0,0 +1,31 @@ +package com.biutag.supervisiondata.pojo.domain; + +import com.biutag.supervisiondata.pojo.entity.mine.RiskModelTaskClue; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +/** + * DBData + * + * @author kami on 2025/1/7 9:33 + * @version 1.0.0 + * @since 21 + */ +@Data +public class DBData implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + List toInsert = new ArrayList<>(); + + List toUpdate = new ArrayList<>(); + + List toDelete = new ArrayList<>(); + + List deleteIdCards = new ArrayList<>(); +} diff --git a/src/main/java/com/biutag/supervisiondata/service/GBaseJJDService.java b/src/main/java/com/biutag/supervisiondata/service/GBaseJJDService.java index edf91d9..a8b1ea9 100644 --- a/src/main/java/com/biutag/supervisiondata/service/GBaseJJDService.java +++ b/src/main/java/com/biutag/supervisiondata/service/GBaseJJDService.java @@ -16,14 +16,8 @@ public interface GBaseJJDService { * @param end 接警结束范围 */ void pullAndSave(LocalDateTime start, LocalDateTime end); - /** - * 同步警情 厌世、报复、自杀、遭遇不公 - * @param start 接警开始范围 - * @param end 接警结束范围 - */ - void pullDataAndSaveRedis(LocalDateTime start, LocalDateTime end); - void pullPoliceInstance(LocalDateTime start, LocalDateTime end,TaskParamDomain domain); + void pullPoliceInstance(TaskParamDomain domain); /** * 攻击警察 * @param domain 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 7155af3..871878c 100644 --- a/src/main/java/com/biutag/supervisiondata/service/impl/GBaseJJDServiceImpl.java +++ b/src/main/java/com/biutag/supervisiondata/service/impl/GBaseJJDServiceImpl.java @@ -1,14 +1,12 @@ package com.biutag.supervisiondata.service.impl; -import com.alibaba.fastjson2.JSON; -import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.biutag.supervisiondata.common.interfaces.CompletableFutureUtil; import com.biutag.supervisiondata.common.utils.StreamUtil; -import com.biutag.supervisiondata.config.cache.RedisDao; import com.biutag.supervisiondata.pojo.ClueData; import com.biutag.supervisiondata.pojo.constants.Default; import com.biutag.supervisiondata.pojo.domain.Contradict; +import com.biutag.supervisiondata.pojo.domain.DBData; import com.biutag.supervisiondata.pojo.domain.TaskParamDomain; import com.biutag.supervisiondata.pojo.entity.ads.GBaseSYRKXX; import com.biutag.supervisiondata.pojo.entity.dwd.GBaseJJD; @@ -137,9 +135,6 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { } else { info = compare(xxxInfo, personal.getName()); } - if (info == null) { - personal.setErrorMsg(personal.getIdCode()); - } } if (personal.getMobileNumber() != null && info == null) { xxxInfo = mobileMap.get(personal.getMobileNumber()); @@ -175,7 +170,6 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { if (personal.getControlDepartType() != null && personal.getControlDepartType() >= DepartType.HUMAN.getType()) { continue; } - List jjds = jjdMap.get(personal.getIdCode()); if (jjds == null) { jjds = jjdMMap.get(Optional.ofNullable(personal.getMobileNumber()).orElse("")); @@ -186,9 +180,10 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { GBaseJJD tmp = jjds.getFirst(); jjds.removeFirst(); for (GBaseJJD jjd : jjds) { + LocalDateTime time = DateTimeUtil.date2LocalDateTime(jjd.getBjsj()); + LocalDateTime last = DateTimeUtil.date2LocalDateTime(tmp.getBjsj()); try { - LocalDateTime time = jjd.getBjsj().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); - if (time.isAfter(jjd.getBjsj().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime())) { + if (time.isAfter(last)) { tmp = jjd; } } catch (Exception ignored) { @@ -224,93 +219,30 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { } @Override - public void pullDataAndSaveRedis(LocalDateTime start, LocalDateTime end) { - RedisDao.getInstance().removeListAll("jjd"); - RedisDao.getInstance().opsForHashDelAll("jjd_cache"); - 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"))); - for (GBaseJJD gBaseJJD : result) { - String bjnr = Optional.ofNullable(gBaseJJD.getBjnr()).orElse(""); - String cjqk = Optional.ofNullable(gBaseJJD.getCjqk()).orElse(""); - if (bjnr.length() <= 2 && cjqk.length() <= 2) { - continue; - } - JSONObject ob = new JSONObject(); - ob.put("id", gBaseJJD.getJjdbh()); - ob.put("name", gBaseJJD.getBjrxm()); - ob.put("mobile", gBaseJJD.getBjdh()); - ob.put("idCode", Optional.ofNullable(gBaseJJD.getBjrzjhm()).orElse("暂无")); - ob.put("bjnr", bjnr); - ob.put("cjqk", cjqk); - - String str1 = PatternUtil.takeIdCard(ob.getString("bjnr")); - String str2 = PatternUtil.takeIdCard(ob.getString("cjqk")); - String str3 = PatternUtil.takeMobile(ob.getString("bjnr")); - String str4 = PatternUtil.takeMobile(ob.getString("cjqk")); - - List idCodes = new ArrayList<>(); - List mobiles = new ArrayList<>(); - idCodes.addAll(Arrays.stream(str1.split(",")).filter(item -> item.length() > 2).toList()); - idCodes.addAll(Arrays.stream(str2.split(",")).filter(item -> item.length() > 2).toList()); - mobiles.addAll(Arrays.stream(str3.split(",")).filter(item -> item.length() > 2).toList()); - mobiles.addAll(Arrays.stream(str4.split(",")).filter(item -> item.length() > 2).toList()); - mobiles.add(ob.getString("mobile")); - idCodes = idCodes.stream().distinct().toList(); - mobiles = mobiles.stream().distinct().toList(); - - ob.put("idCodes", idCodes); - ob.put("mobiles", mobiles); - RedisDao.getInstance().rightPush("jjd", ob.toJSONString()); - RedisDao.getInstance().opsForHashSave("jjd_cache", gBaseJJD.getJjdbh(), JSON.toJSONString(gBaseJJD)); - } - log.info("完成缓存"); - } - - @Override - public void pullPoliceInstance(LocalDateTime start, LocalDateTime end, TaskParamDomain domain) { - String startTime = start.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); - String endTime = end.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + public void pullPoliceInstance(TaskParamDomain domain) { + String endTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + String startTime = LocalDateTime.now().minusYears(1).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); CompletableFuture.allOf( CompletableFutureUtil.runSyncObject(() -> { List jjdList = gBaseJJDRepository.getBaseMapper().selectRevenge(startTime, endTime); RiskTask task = taskRepository.create(jjdList.size(), 58); - List list = collectJJD(task, "表达报复社会", jjdList, domain); - if (!list.isEmpty()) { - log.info("保存复仇者联盟:{}", list.size()); - clueService.saveClues(list, "B83表达报复社会"); - } - taskRepository.updateTask(task.getId(), list.size(), 0); + collectJJD(task, "表达报复社会", jjdList, domain, "B83表达报复社会"); }), CompletableFutureUtil.runSyncObject(() -> { List jjdList = gBaseJJDRepository.getBaseMapper().selectHater(startTime, endTime); RiskTask task = taskRepository.create(jjdList.size(), 55); - List list = collectJJD(task, "表达厌世情绪", jjdList, domain); - if (!list.isEmpty()) { - log.info("厌世强者:{}", list.size()); - clueService.saveClues(list, "B80表达厌世情绪"); - } - taskRepository.updateTask(task.getId(), list.size(), 0); + collectJJD(task, "表达厌世情绪", jjdList, domain, "B80表达厌世情绪"); }), CompletableFutureUtil.runSyncObject(() -> { List jjdList = gBaseJJDRepository.getBaseMapper().selectInjustice(startTime, endTime); RiskTask task = taskRepository.create(jjdList.size(), 57); - List list = collectJJD(task, "表达遭受不公", jjdList, domain); - if (!list.isEmpty()) { - log.info("我命由我不由天:{}", list.size()); - clueService.saveClues(list, "B82表达遭受不公"); - } - taskRepository.updateTask(task.getId(), list.size(), 0); + collectJJD(task, "表达遭受不公", jjdList, domain, "B82表达遭受不公"); }), CompletableFutureUtil.runSyncObject(() -> { List jjdList = gBaseJJDRepository.getBaseMapper().selectSuicide(startTime, endTime); RiskTask task = taskRepository.create(jjdList.size(), 56); - List list = collectJJD(task, "尝试自杀", jjdList, domain); - if (!list.isEmpty()) { - log.info("毁灭吧:{}", list.size()); - clueService.saveClues(list, "B81尝试自杀"); - } - taskRepository.updateTask(task.getId(), list.size(), 0); + collectJJD(task, "尝试自杀", jjdList, domain, "B81尝试自杀"); }) ).join(); } @@ -468,17 +400,12 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { } } log.info("开始统计每个人的警情"); - List toInsert = new ArrayList<>(); - List toUpdate = new ArrayList<>(); - List toDelete = new ArrayList<>(); - List deleteIds = new ArrayList<>(); + DBData data = new DBData(); Map oldMap = domain.getOldMap(task.getModelId(), true); - 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()); @@ -512,12 +439,11 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { update.setTags(List.of(list.size() + "起平台涉警事件")); update.setData(desc); update.setEventTime(maxTime); - toUpdate.add(update); + data.getToUpdate().add(update); } continue; } - - ClueData data = ClueData.builder() + data.getToInsert().add(DataUtil.createClueData(task, ClueData.builder() .name(person.getName()) .idCode(person.getIdCode()) .tags(List.of(list.size() + "起平台涉警事件")) @@ -525,31 +451,10 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { .eventTime(maxTime) .personId(person.getId()) .score(Math.min(5, list.size())) - .build(); - toInsert.add(DataUtil.createClueData(task, data)); - } - - for (Map.Entry entry : oldMap.entrySet()) { - RiskModelTaskClue delete = new RiskModelTaskClue(); - delete.setId(entry.getValue().getId()); - delete.setDel(1); - toDelete.add(delete); - deleteIds.add(entry.getKey()); - } - - if (!toInsert.isEmpty()) { - log.info("保存平台涉警事件数据:{}", toInsert.size()); - clueService.saveClues(toInsert, "B28平台涉警事件"); - } - if (!toUpdate.isEmpty()) { - log.info("修改平台涉警事件数据:{}", toUpdate.size()); - clueService.updateClues(toUpdate, task.getModelId()); - } - if (!toDelete.isEmpty()) { - log.info("删除平台涉警事件数据:{}", toDelete.size()); - clueService.deleteCluesAndDeleteTag(toDelete, deleteIds, task.getModelId()); + .build())); } - taskRepository.updateTask(task.getId(), toInsert.size(), toDelete.size() + toUpdate.size()); + data = eachToDelete(data, oldMap); + toDb(data, "平台涉警事件", "B28平台涉警事件", task); } @Override @@ -624,10 +529,8 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { Map personOldMap = domain.getOldMap(task.getModelId(), true); Map personOldMap2 = domain.getOldMap(task2.getModelId(), true); - List toInsert = new ArrayList<>(); - List toUpdate = new ArrayList<>(); - List toInsert2 = new ArrayList<>(); - List toUpdate2 = new ArrayList<>(); + DBData data = new DBData(); + DBData data2 = new DBData(); for (RiskPersonal person : domain.getPersons()) { // 被家暴 RiskModelTaskClue clue1 = collectionClue(shIdCodeMap, shMobileMap, person, task, "被家暴"); @@ -637,10 +540,10 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { personOldMap.remove(person.getIdCode()); if (!old1.getData().equals(clue1.getData())) { clue1.setId(old1.getId()); - toUpdate.add(clue1); + data.getToUpdate().add(clue1); } } else { - toInsert.add(clue1); + data.getToInsert().add(clue1); } } // 家暴 @@ -648,56 +551,20 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { if (clue2 == null) continue; RiskModelTaskClue old2 = personOldMap2.get(person.getIdCode()); if (old2 == null) { - toInsert2.add(clue2); + data2.getToInsert().add(clue2); continue; } personOldMap2.remove(person.getIdCode()); if (!old2.getData().equals(clue2.getData())) { clue2.setId(old2.getId()); - toUpdate2.add(clue2); + data2.getToUpdate().add(clue2); } } - List toDelete = new ArrayList<>(); - List toDelete2 = new ArrayList<>(); - List deleteIdCards = new ArrayList<>(); - List deleteIdCards2 = new ArrayList<>(); - for (Map.Entry entry : personOldMap.entrySet()) { - RiskModelTaskClue delete = new RiskModelTaskClue(); - delete.setId(entry.getValue().getId()); - delete.setDel(1); - toDelete.add(delete); - deleteIdCards.add(entry.getKey()); - } - for (Map.Entry entry : personOldMap2.entrySet()) { - RiskModelTaskClue delete = new RiskModelTaskClue(); - delete.setId(entry.getValue().getId()); - delete.setDel(1); - toDelete2.add(delete); - deleteIdCards2.add(entry.getKey()); - } + data = eachToDelete(data, personOldMap); + data2 = eachToDelete(data2, personOldMap2); - log.info("被家暴:{} | {} | {}", toInsert.size(), toUpdate.size(), toDelete.size()); - if (!toInsert.isEmpty()) { - clueService.saveClues(toInsert, "B53被他人家暴"); - } - if (!toUpdate.isEmpty()) { - clueService.updateClues(toUpdate, task.getModelId()); - } - if (!toDelete.isEmpty()) { - clueService.deleteCluesAndDeleteTag(toDelete, deleteIdCards, task.getModelId()); - } - log.info("家暴:{} | {} | {}", toInsert2.size(), toUpdate2.size(), toDelete2.size()); - if (!toInsert.isEmpty()) { - clueService.saveClues(toInsert2, "B52对他人家暴"); - } - if (!toUpdate2.isEmpty()) { - clueService.updateClues(toUpdate2, task2.getModelId()); - } - if (!toDelete2.isEmpty()) { - clueService.deleteCluesAndDeleteTag(toDelete2, deleteIdCards2, task2.getModelId()); - } - taskRepository.updateTask(task.getId(), toInsert.size(), toUpdate.size() + toDelete.size()); - taskRepository.updateTask(task2.getId(), toInsert.size(), toUpdate2.size() + toDelete2.size()); + toDb(data, "被家暴", "B53被他人家暴", task); + toDb(data2, "家暴", "B52对他人家暴", task2); } @Override @@ -718,92 +585,44 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { log.info("父亲条数:{} | 母亲条数:{}", fatherIdCodeMap.size(), motherIdCodeMap.size()); - List tmp1 = eachClue2Save(domain, task, fatherIdCodeMap, "父亲"); + DBData fatherDBData = new DBData(); + DBData motherDBData = new DBData(); - List tmp2 = eachClue2Save(domain, task2, motherIdCodeMap, "母亲"); + Map fatherOldMap = domain.getOldMap(task.getModelId(), true); + Map motherOldMap = domain.getOldMap(task2.getModelId(), true); - List toInsert = new ArrayList<>(); - List toUpdate = new ArrayList<>(); - List toDelete = new ArrayList<>(); - List deleteIdCards = new ArrayList<>(); - - Map oldMap = domain.getOldMap(task.getModelId(), true); - for (RiskModelTaskClue riskModelTaskClue : tmp1) { - RiskModelTaskClue old = oldMap.get(riskModelTaskClue.getIdCode()); - if (old == null) { - toInsert.add(riskModelTaskClue); - continue; - } - oldMap.remove(riskModelTaskClue.getIdCode()); - if (!old.getData().equals(riskModelTaskClue.getData())) { - riskModelTaskClue.setId(old.getId()); - toUpdate.add(riskModelTaskClue); + for (RiskPersonal person : domain.getPersons()) { + RiskModelTaskClue fatherClue = collectionClue(fatherIdCodeMap, new WeakHashMap<>(0), person, task, "与父亲关系不合"); + RiskModelTaskClue motherClue = collectionClue(motherIdCodeMap, new WeakHashMap<>(0), person, task2, "与母亲关系不合"); + if (fatherClue != null) { + RiskModelTaskClue fatherOld = fatherOldMap.get(person.getIdCode()); + if(fatherOld == null) { + fatherDBData.getToInsert().add(fatherClue); + } else { + fatherOldMap.remove(person.getIdCode()); + if (!fatherOld.getData().equals(fatherClue.getData())) { + fatherClue.setId(fatherOld.getId()); + fatherDBData.getToUpdate().add(fatherClue); + } + } } - } - - for (Map.Entry entry : oldMap.entrySet()) { - RiskModelTaskClue delete = new RiskModelTaskClue(); - delete.setId(entry.getValue().getId()); - delete.setDel(1); - toDelete.add(delete); - deleteIdCards.add(entry.getKey()); - } - - if (!toInsert.isEmpty()) { - log.info("父亲矛盾增加 {}", toInsert.size()); - clueService.saveClues(toInsert, "B48与父亲关系"); - } - if (!toUpdate.isEmpty()) { - log.info("父亲矛盾修改 {}", toUpdate.size()); - clueService.updateClues(toUpdate, task.getModelId()); - } - if (!toDelete.isEmpty()) { - log.info("父亲矛盾删除 {}", toDelete.size()); - clueService.deleteCluesAndDeleteTag(toDelete, deleteIdCards, task.getModelId()); - } - - - List toInsert2 = new ArrayList<>(); - List toUpdate2 = new ArrayList<>(); - List toDelete2 = new ArrayList<>(); - List deleteIdCards2 = new ArrayList<>(); - - Map oldMap2 = domain.getOldMap(task2.getModelId(), true); - for (RiskModelTaskClue riskModelTaskClue : tmp2) { - RiskModelTaskClue old = oldMap2.get(riskModelTaskClue.getIdCode()); - if (old == null) { - toInsert2.add(riskModelTaskClue); + if(motherClue == null) continue; + RiskModelTaskClue motherOld = motherOldMap.get(person.getIdCode()); + if(motherOld == null) { + motherDBData.getToInsert().add(motherClue); continue; } - oldMap2.remove(riskModelTaskClue.getIdCode()); - if (!old.getData().equals(riskModelTaskClue.getData())) { - riskModelTaskClue.setId(old.getId()); - toUpdate2.add(riskModelTaskClue); + motherOldMap.remove(person.getIdCode()); + if (!motherOld.getData().equals(motherClue.getData())) { + motherClue.setId(motherOld.getId()); + motherDBData.getToUpdate().add(motherClue); } } - for (Map.Entry entry : oldMap2.entrySet()) { - RiskModelTaskClue delete = new RiskModelTaskClue(); - delete.setId(entry.getValue().getId()); - delete.setDel(1); - toDelete2.add(delete); - deleteIdCards2.add(entry.getKey()); - } - - if (!toInsert2.isEmpty()) { - log.info("母亲矛盾增加 {}", toInsert2.size()); - clueService.saveClues(toInsert2, "B49与母亲关系"); - } - if (!toUpdate2.isEmpty()) { - log.info("母亲矛盾修改 {}", toUpdate2.size()); - clueService.updateClues(toUpdate2, task2.getModelId()); - } - if (!toDelete2.isEmpty()) { - log.info("母亲矛盾删除 {}", toDelete2.size()); - clueService.deleteCluesAndDeleteTag(toDelete2, deleteIdCards2, task2.getModelId()); - } - taskRepository.updateTask(task.getId(), toInsert.size(), toUpdate.size() + toDelete.size()); - taskRepository.updateTask(task2.getId(), toInsert2.size(), toUpdate2.size() + toDelete2.size()); + fatherDBData = eachToDelete(fatherDBData, fatherOldMap); + toDb(fatherDBData, "父亲矛盾", "B48与父亲关系", task); + motherDBData = eachToDelete(motherDBData, motherOldMap); + toDb(motherDBData, "母亲矛盾", "B49与母亲关系", task2); } @Override @@ -866,42 +685,23 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { } Map oldMap = domain.getOldMap(task.getModelId(), true); - List toInsert = new ArrayList<>(); - List toUpdate = new ArrayList<>(); - List toDelete = new ArrayList<>(); - List deleteIdCards = new ArrayList<>(); + DBData data = new DBData(); for (RiskPersonal person : domain.getPersons()) { RiskModelTaskClue clue = collectionClue(idCodesMap, mobilesMap, person, task, "个人恋爱创伤"); if (clue == null) continue; RiskModelTaskClue old = oldMap.get(person.getIdCode()); if (old == null) { - toInsert.add(clue); + data.getToInsert().add(clue); continue; } oldMap.remove(person.getIdCode()); if (!old.getData().equals(clue.getData())) { clue.setId(old.getId()); - toUpdate.add(clue); + data.getToUpdate().add(clue); } } - for (Map.Entry entry : oldMap.entrySet()) { - RiskModelTaskClue delete = new RiskModelTaskClue(); - delete.setId(entry.getValue().getId()); - delete.setDel(1); - toDelete.add(delete); - deleteIdCards.add(entry.getValue().getIdCode()); - } - log.info("恋爱创伤:{} | {} | {}", toInsert.size(), toUpdate.size(), toDelete.size()); - if (!toInsert.isEmpty()) { - clueService.saveClues(toInsert, "B68个人恋爱创伤"); - } - if (!toUpdate.isEmpty()) { - clueService.updateClues(toUpdate, task.getModelId()); - } - if (!toDelete.isEmpty()) { - clueService.deleteCluesAndDeleteTag(toDelete, deleteIdCards, task.getModelId()); - } - taskRepository.updateTask(task.getId(), toInsert.size(), toUpdate.size() + toDelete.size()); + data = eachToDelete(data, oldMap); + toDb(data, "恋爱创伤", "B68个人恋爱创伤", task); } @Override @@ -965,42 +765,23 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { } Map oldMap = domain.getOldMap(task.getModelId(), true); - List toInsert = new ArrayList<>(); - List toUpdate = new ArrayList<>(); - List toDelete = new ArrayList<>(); - List deleteIdCards = new ArrayList<>(); + DBData data = new DBData(); for (RiskPersonal person : domain.getPersons()) { RiskModelTaskClue clue = collectionClue(idCodesMap, mobilesMap, person, task, "与配偶关系不和"); if (clue == null) continue; RiskModelTaskClue old = oldMap.get(person.getIdCode()); if (old == null) { - toInsert.add(clue); + data.getToInsert().add(clue); continue; } oldMap.remove(person.getIdCode()); if (!old.getData().equals(clue.getData())) { clue.setId(old.getId()); - toUpdate.add(clue); + data.getToUpdate().add(clue); } } - for (Map.Entry entry : oldMap.entrySet()) { - RiskModelTaskClue delete = new RiskModelTaskClue(); - delete.setId(entry.getValue().getId()); - delete.setDel(1); - toDelete.add(delete); - deleteIdCards.add(entry.getValue().getIdCode()); - } - log.info("与配偶关系不和:{} | {} | {}", toInsert.size(), toUpdate.size(), toDelete.size()); - if (!toInsert.isEmpty()) { - clueService.saveClues(toInsert, "B55与配偶关系"); - } - if (!toUpdate.isEmpty()) { - clueService.updateClues(toUpdate, task.getModelId()); - } - if (!toDelete.isEmpty()) { - clueService.deleteCluesAndDeleteTag(toDelete, deleteIdCards, task.getModelId()); - } - taskRepository.updateTask(task.getId(), toInsert.size(), toUpdate.size() + toDelete.size()); + data = eachToDelete(data, oldMap); + toDb(data, "与配偶关系不和", "B55与配偶关系", task); } @Override @@ -1063,43 +844,23 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { } Map oldMap = domain.getOldMap(task.getModelId(), true); - List toInsert = new ArrayList<>(); - List toUpdate = new ArrayList<>(); - List toDelete = new ArrayList<>(); - List deleteIdCards = new ArrayList<>(); - + DBData data = new DBData(); for (RiskPersonal person : domain.getPersons()) { RiskModelTaskClue clue = collectionClue(idCodesMap, mobilesMap, person, task, "与邻居或同事纠纷"); if (clue == null) continue; RiskModelTaskClue old = oldMap.get(person.getIdCode()); if (old == null) { - toInsert.add(clue); + data.getToInsert().add(clue); continue; } oldMap.remove(person.getIdCode()); if (!old.getData().equals(clue.getData())) { clue.setId(old.getId()); - toUpdate.add(clue); + data.getToUpdate().add(clue); } } - for (Map.Entry entry : oldMap.entrySet()) { - RiskModelTaskClue delete = new RiskModelTaskClue(); - delete.setId(entry.getValue().getId()); - delete.setDel(1); - toDelete.add(delete); - deleteIdCards.add(entry.getValue().getIdCode()); - } - log.info("邻里和同事:{} | {} | {}", toInsert.size(), toUpdate.size(), toDelete.size()); - if (!toInsert.isEmpty()) { - clueService.saveClues(toInsert, "B55同事与邻居关系"); - } - if (!toUpdate.isEmpty()) { - clueService.updateClues(toUpdate, task.getModelId()); - } - if (!toDelete.isEmpty()) { - clueService.deleteCluesAndDeleteTag(toDelete, deleteIdCards, task.getModelId()); - } - taskRepository.updateTask(task.getId(), toInsert.size(), toUpdate.size() + toDelete.size()); + data = eachToDelete(data, oldMap); + toDb(data, "邻里和同事", "B55同事与邻居关系", task); } @Override @@ -1170,11 +931,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { } Map oldMap = domain.getOldMap(task.getModelId(), true); - List toInsert = new ArrayList<>(); - List toUpdate = new ArrayList<>(); - List toDelete = new ArrayList<>(); - List deleteIdCards = new ArrayList<>(); - + DBData data = new DBData(); for (RiskPersonal person : domain.getPersons()) { List jjdList = Optional.ofNullable(idCodesMap.get(person.getIdCode())).orElse(new ArrayList<>()); jjdList = jjdList.stream().filter(StreamUtil.distinctByKey(GBaseJJD::getJjdbh)).sorted().toList(); @@ -1186,14 +943,14 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { for (GBaseJJD jjd : jjdList) { sb.append(jjd.getJjdbh()).append(","); LocalDateTime tmp = DateTimeUtil.date2LocalDateTime(jjd.getBjsj()); - if (time == null || (tmp!= null && time.isBefore(tmp))) { + if (time == null || (tmp != null && time.isBefore(tmp))) { time = tmp; } } String desc = sb.substring(0, sb.length() - 1); RiskModelTaskClue old = oldMap.get(person.getIdCode()); if (old == null) { - toInsert.add(DataUtil.createClueData(task, ClueData.builder() + data.getToInsert().add(DataUtil.createClueData(task, ClueData.builder() .name(person.getName()) .idCode(person.getIdCode()) .tags(List.of("被欺凌")) @@ -1205,7 +962,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { continue; } oldMap.remove(person.getIdCode()); - if(old.getData().equals(desc)) continue; + if (old.getData().equals(desc)) continue; RiskModelTaskClue update = DataUtil.createClueData(task, ClueData.builder() .name(person.getName()) .idCode(person.getIdCode()) @@ -1216,27 +973,11 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { .eventTime(time) .build()); update.setId(old.getId()); - toUpdate.add(update); + data.getToUpdate().add(update); } - for (Map.Entry entry : oldMap.entrySet()) { - RiskModelTaskClue delete = new RiskModelTaskClue(); - delete.setId(entry.getValue().getId()); - delete.setDel(1); - toDelete.add(delete); - deleteIdCards.add(entry.getValue().getIdCode()); - } - log.info("欺凌:{} | {} | {}", toInsert.size(), toUpdate.size(), toDelete.size()); - if (!toInsert.isEmpty()) { - clueService.saveClues(toInsert, "B73遭遇暴力欺凌"); - } - if (!toUpdate.isEmpty()) { - clueService.updateClues(toUpdate, task.getModelId()); - } - if (!toDelete.isEmpty()) { - clueService.deleteCluesAndDeleteTag(toDelete, deleteIdCards, task.getModelId()); - } - taskRepository.updateTask(task.getId(), toInsert.size(), toUpdate.size()+toDelete.size()); + data = eachToDelete(data, oldMap); + toDb(data, "欺凌", "B73遭遇暴力欺凌", task); } @Override @@ -1249,10 +990,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { Map> map = list.stream().collect(Collectors.groupingBy(Contradict::getGmsfhm)); Map oldMap = domain.getOldMap(task.getModelId(), true); - List toInsert = new ArrayList<>(); - List toUpdate = new ArrayList<>(); - - + DBData data = new DBData(); for (RiskPersonal person : domain.getPersons()) { List contradicts = Optional.ofNullable(map.get(person.getIdCode())).orElse(new ArrayList<>()).stream().sorted(Comparator.comparing(Contradict::getType)).toList(); if (contradicts.isEmpty()) continue; @@ -1280,10 +1018,10 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { RiskModelTaskClue update = new RiskModelTaskClue(); update.setId(old.getId()); update.setData(desc); - toUpdate.add(update); + data.getToUpdate().add(update); continue; } - toInsert.add(DataUtil.createClueData(task, ClueData.builder() + data.getToInsert().add(DataUtil.createClueData(task, ClueData.builder() .name(person.getName()) .idCode(person.getIdCode()) .tags(List.of("其他矛盾纠纷")) @@ -1293,32 +1031,8 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { .score(5) .build())); } - - if (!toInsert.isEmpty()) { - log.info("新增其他纠纷:{} ", toInsert.size()); - clueService.saveClues(toInsert, "B57其他矛盾纠纷"); - } - if (!toUpdate.isEmpty()) { - log.info("修改其他纠纷:{} ", toUpdate.size()); - clueService.updateClues(toUpdate, task.getModelId()); - } - - List toDelete = new ArrayList<>(); - List deleteIdCodes = new ArrayList<>(); - for (Map.Entry entry : oldMap.entrySet()) { - RiskModelTaskClue delete = new RiskModelTaskClue(); - delete.setId(entry.getValue().getId()); - delete.setDel(1); - toDelete.add(delete); - deleteIdCodes.add(entry.getValue().getIdCode()); - } - - if (!toDelete.isEmpty()) { - log.info("删除其他纠纷:{} ", toDelete.size()); - clueService.deleteCluesAndDeleteTag(toDelete, deleteIdCodes, task.getModelId()); - } - - taskRepository.updateTask(task.getId(), toInsert.size(), toUpdate.size() + toDelete.size()); + data = eachToDelete(data, oldMap); + toDb(data, "其他纠纷", "B57其他矛盾纠纷", task); } /** @@ -1328,9 +1042,8 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { * @param tag 标签 * @param result 接警单数据 * @param domain domain - * @return 要新增的结果 */ - List collectJJD(RiskTask task, String tag, List result, TaskParamDomain domain) { + void collectJJD(RiskTask task, String tag, List result, TaskParamDomain domain, String bigTag) { Map> idCodesMap = new WeakHashMap<>(); Map> mobilesMap = new WeakHashMap<>(); @@ -1374,15 +1087,24 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { } } } - 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 toInsert = new ArrayList<>(); + DBData data = new DBData(); for (RiskPersonal person : domain.getPersons()) { - toInsert.addAll(collectionClue(idCodesMap, mobilesMap, person, personOldMap, task, tag)); + RiskModelTaskClue clue = collectionClue(idCodesMap, mobilesMap, person, task, tag); + if (clue == null) continue; + RiskModelTaskClue old = oldMap.get(person.getIdCode()); + if (old == null) { + data.getToInsert().add(clue); + continue; + } + oldMap.remove(person.getIdCode()); + if (old.getData().equals(clue.getData())) continue; + clue.setId(old.getId()); + data.getToUpdate().add(clue); } - return toInsert; + data = eachToDelete(data, oldMap); + toDb(data, tag, bigTag, task); } Map> findTargetJJD(List jjdList) { @@ -1448,103 +1170,39 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { return fatherIdCodeMap; } - List eachClue2Save(TaskParamDomain domain, RiskTask task, Map> idCodeMap, String tag) { - List toInsert = new ArrayList<>(); - for (RiskPersonal person : domain.getPersons()) { - List jjdList = Optional.ofNullable(idCodeMap.get(person.getIdCode())).orElse(new ArrayList<>()); - jjdList = jjdList.stream().filter(StreamUtil.distinctByKey(GBaseJJD::getJjdbh)).sorted().toList(); - if (jjdList.isEmpty()) { - continue; - } - LocalDateTime time = null; - StringBuilder sb = new StringBuilder("该人员与" + tag + "存在" + jjdList.size() + "起矛盾,接警单编号:"); - 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; - } - toInsert.add(DataUtil.createClueData(task, ClueData.builder() - .name(person.getName()) - .idCode(person.getIdCode()) - .tags(List.of("与" + tag + "存在矛盾")) - .eventTime(time) - .score(Math.min(5, jjdList.size())) - .sourceData(sb.substring(0, sb.length() - 1)) - .personId(person.getId()) - .build())); + DBData eachToDelete(DBData data, Map oldMap) { + for (Map.Entry entry : oldMap.entrySet()) { + RiskModelTaskClue delete = new RiskModelTaskClue(); + delete.setId(entry.getValue().getId()); + delete.setDel(1); + data.getToDelete().add(delete); + data.getDeleteIdCards().add(entry.getValue().getIdCode()); } - return toInsert; + return data; } - 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; - } + void toDb(DBData data, String mark, String bigTag, RiskTask task) { + if (!data.getToInsert().isEmpty()) { + log.info("{}增加 {}", mark, data.getToInsert().size()); + clueService.saveClues(data.getToInsert(), bigTag); } - return idCode; - } - - /** - * 手机要搜索的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.ofNullable(idCode.get(personal.getIdCode())).orElse(new ArrayList<>()); - jjdList.addAll(Optional.ofNullable(mobile.get(personal.getMobileNumber())).orElse(new ArrayList<>())); - if (jjdList.isEmpty()) { - return new ArrayList<>(); + if (!data.getToUpdate().isEmpty()) { + log.info("{}修改 {}", mark, data.getToUpdate().size()); + clueService.updateClues(data.getToUpdate(), task.getModelId()); } - jjdList = jjdList.stream().filter(StreamUtil.distinctByKey(GBaseJJD::getJjdbh)).toList(); - List olds = personOldMap.get(personal.getIdCode()); - if (olds != null) { - return new ArrayList<>(); + if (!data.getToDelete().isEmpty()) { + log.info("{}删除 {}", mark, data.getToDelete().size()); + clueService.deleteCluesAndDeleteTag(data.getToDelete(), data.getDeleteIdCards(), task.getModelId()); } - List toInsert = new ArrayList<>(); - StringBuilder sb = new StringBuilder("该人员存在" + jjdList.size() + "起" + tag + "警情,接警单编号:"); - LocalDateTime time = null; - for (GBaseJJD gBaseJJD : jjdList) { - sb.append(gBaseJJD.getJjdbh()).append(","); - try { - LocalDateTime tmp = gBaseJJD.getBjsj().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); - if (time == null) { - time = tmp; - continue; - } - if (time.isBefore(tmp)) { - time = tmp; - } - } catch (Exception ignored) { - } + taskRepository.updateTask(task.getId(), data.getToInsert().size(), data.getToUpdate().size() + data.getToDelete().size()); + } - } - toInsert.add(DataUtil.createClueData(task, ClueData.builder() - .name(personal.getName()) - .idCode(personal.getIdCode()) - .tags(List.of(tag)) - .personId(personal.getId()) - .eventTime(time) - .sourceData(sb.substring(0, sb.length() - 1)) - .score(Math.min(jjdList.size(), 5)) - .build())); - return toInsert; + String findSmallOne(List list) { + LocalDate today = LocalDate.now(); + return list.stream() + .min(Comparator.comparingInt(id -> Optional.ofNullable(IdCodeUtil.idCard2Age(id, today)) + .orElse(Integer.MAX_VALUE))) + .orElse(null); } /** @@ -1567,7 +1225,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { for (GBaseJJD gBaseJJD : jjdList) { sb.append(gBaseJJD.getJjdbh()).append(","); LocalDateTime tmp = DateTimeUtil.date2LocalDateTime(gBaseJJD.getBjsj()); - if (time == null || (tmp!= null && time.isBefore(tmp))) { + if (time == null || (tmp != null && time.isBefore(tmp))) { time = tmp; } } @@ -1584,20 +1242,12 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { /** * 多身份证对比名称 - * * @param infos 信息 * @param name 名称 * @return 正确信息 */ GBaseSYRKXX compare(List infos, String name) { - GBaseSYRKXX info = null; - for (GBaseSYRKXX gBaseSYRKXX : infos) { - if (gBaseSYRKXX.getXm().equals(name)) { - info = gBaseSYRKXX; - break; - } - } - return info; + return infos.stream().filter(item -> item.getXm().equals(name)).findFirst().orElse(null); } RiskPersonal createPerson(GBaseJJD item) { @@ -1610,14 +1260,9 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { person.setIdCode(item.getBjrzjhm()); person.setControlDepartType(DepartType.OTHER.getType()); // 如果有报警时间,暂时填报警时间 处理标签回正 - try { - LocalDateTime time = item.getBjsj().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); - person.setCreateTime(time); - person.setControlTime(time); - } catch (Exception e) { - person.setCreateTime(LocalDateTime.now()); - log.info("报警时间处理异常"); - } + person.setCreateTime(DateTimeUtil.date2LocalDateTime(item.getBjsj())); + person.setControlTime(person.getCreateTime()); + if (person.getCreateTime() == null) person.setCreateTime(LocalDateTime.now()); // 这里暂时将小标签放到预览属性 处理标签回正 person.setTags(item.getJqxzmc()); return person; @@ -1628,16 +1273,11 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { personal.setIdCode(info.getGmsfhm()); personal.setMobileNumber(info.getLxdh()); personal.setGender(IdCodeUtil.idCard2Gender(personal.getIdCode())); - personal.setAge(Optional.ofNullable(IdCodeUtil.idCard2Age(personal.getIdCode(), LocalDate.now())).orElse(-1)); + personal.setAge(Optional.ofNullable(IdCodeUtil.idCard2Age(personal.getIdCode(), today)).orElse(-1)); if (personal.getAge() == null) { - try { - LocalDate localDate = info.getCsrq().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); - int age = localDate.until(today).getYears(); - personal.setAge(age); - } catch (Exception e) { - log.error("发现一例没有出生日期"); - personal.setAge(-1); - } + LocalDate localDate = DateTimeUtil.date2LocalDate(info.getCsrq()); + int age = localDate.until(today).getYears(); + personal.setAge(age); } if (personal.getGender() == null) { personal.setGender(info.getXbdm()); @@ -1678,4 +1318,4 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { } return tmp; } -} +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervisiondata/task/TaskService.java b/src/main/java/com/biutag/supervisiondata/task/TaskService.java index ef1d05d..ac5e1be 100644 --- a/src/main/java/com/biutag/supervisiondata/task/TaskService.java +++ b/src/main/java/com/biutag/supervisiondata/task/TaskService.java @@ -120,6 +120,7 @@ public class TaskService { noControlService.syncNoControlData(initDomain(List.of(45))); pointService.syncControlNoPower(initDomain(List.of(48))); pointService.syncOilBuy(initDomain(List.of(52))); + gBaseJJDService.pullPoliceInstance(initDomain(List.of(55,56,57,58))); jsbryService.syncPys(initDomain(List.of(59))); gBaseSHRWFRService.combatCrime(initDomain(List.of(63))); gBaseJJDService.warningInstance(initDomain(List.of(64))); diff --git a/src/main/java/com/biutag/supervisiondata/util/DateTimeUtil.java b/src/main/java/com/biutag/supervisiondata/util/DateTimeUtil.java index 2f8a237..84d0fff 100644 --- a/src/main/java/com/biutag/supervisiondata/util/DateTimeUtil.java +++ b/src/main/java/com/biutag/supervisiondata/util/DateTimeUtil.java @@ -2,6 +2,7 @@ package com.biutag.supervisiondata.util; import lombok.experimental.UtilityClass; +import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.Date; @@ -21,4 +22,12 @@ public class DateTimeUtil { } return null; } + + public LocalDate date2LocalDate(Date date) { + try { + return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + } catch (Exception ignored) { + } + return null; + } }