From 6fc7cf7eb0cb66ef4fa9b807d81252264b95f422 Mon Sep 17 00:00:00 2001 From: kami <605128600@qq.com> Date: Sat, 7 Dec 2024 14:31:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E6=B6=89=E8=AD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/utils/StreamUtil.java | 22 +++ .../mapper/dwd/GBaseJJDMapper.java | 3 + .../service/GBaseJJDService.java | 11 +- .../service/impl/GBaseJJDServiceImpl.java | 142 ++++++++++++++++-- .../service/impl/GBaseSHRWFRServiceImpl.java | 4 +- 5 files changed, 164 insertions(+), 18 deletions(-) create mode 100644 src/main/java/com/biutag/supervisiondata/common/utils/StreamUtil.java diff --git a/src/main/java/com/biutag/supervisiondata/common/utils/StreamUtil.java b/src/main/java/com/biutag/supervisiondata/common/utils/StreamUtil.java new file mode 100644 index 0000000..8552241 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/common/utils/StreamUtil.java @@ -0,0 +1,22 @@ +package com.biutag.supervisiondata.common.utils; + +import lombok.experimental.UtilityClass; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; + +/** + * @author kami + * @version 1.0 + * @since 2022/8/24 10:55 + */ +@UtilityClass +public class StreamUtil { + + public static Predicate distinctByKey(Function keyExtractor) { + Map seen = new ConcurrentHashMap<>(); + return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; + } +} 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 86fe6a9..b1d7e63 100644 --- a/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseJJDMapper.java +++ b/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseJJDMapper.java @@ -63,4 +63,7 @@ public interface GBaseJJDMapper extends BaseMapper { @Select(" select jjdbh, gxdwdm, gxdwmc,bjrxm, bjdh, bjnr, cjqk, bjsj from dwd_asj_zhtx_jjd " + " 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}") + List selectAttackPolist(@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 7cd3406..fe900aa 100644 --- a/src/main/java/com/biutag/supervisiondata/service/GBaseJJDService.java +++ b/src/main/java/com/biutag/supervisiondata/service/GBaseJJDService.java @@ -1,5 +1,7 @@ package com.biutag.supervisiondata.service; +import com.biutag.supervisiondata.pojo.domain.TaskParamDomain; + import java.time.LocalDateTime; /** @@ -14,13 +16,14 @@ public interface GBaseJJDService { * @param end 接警结束范围 */ void pullAndSave(LocalDateTime start, LocalDateTime end); - + /** + * 同步警情 厌世、报复、自杀、遭遇不公 + */ void pullDataAndSaveRedis(LocalDateTime start, LocalDateTime end); void pullPoliceInstance(LocalDateTime start, LocalDateTime end); - /** - * 同步警情 厌世、报复、自杀、遭遇不公 + * 攻击警察 */ - void syncPoliceInstance(); + void syncPoliceAttack(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 74e252c..d755a14 100644 --- a/src/main/java/com/biutag/supervisiondata/service/impl/GBaseJJDServiceImpl.java +++ b/src/main/java/com/biutag/supervisiondata/service/impl/GBaseJJDServiceImpl.java @@ -4,21 +4,25 @@ 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.constants.RedisKey; import com.biutag.supervisiondata.pojo.database.PointOrg; +import com.biutag.supervisiondata.pojo.domain.TaskParamDomain; import com.biutag.supervisiondata.pojo.entity.ads.GBaseSYRKXX; import com.biutag.supervisiondata.pojo.entity.dwd.GBaseJJD; +import com.biutag.supervisiondata.pojo.entity.mine.RiskModelTaskClue; import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonal; +import com.biutag.supervisiondata.pojo.entity.mine.RiskTask; import com.biutag.supervisiondata.pojo.entity.mine.SupExternalDepart; import com.biutag.supervisiondata.pojo.enums.DepartType; -import com.biutag.supervisiondata.repository.GBaseJJDRepository; -import com.biutag.supervisiondata.repository.GBaseSYRKXXRepository; -import com.biutag.supervisiondata.repository.GBaseZDRYRepository; -import com.biutag.supervisiondata.repository.SupExternalDepartRepository; +import com.biutag.supervisiondata.repository.*; import com.biutag.supervisiondata.service.GBaseJJDService; +import com.biutag.supervisiondata.service.RiskModelTaskClueService; import com.biutag.supervisiondata.service.RiskPersonalService; +import com.biutag.supervisiondata.util.BhUtil; import com.biutag.supervisiondata.util.IdCodeUtil; import com.biutag.supervisiondata.util.OrgUtil; import com.biutag.supervisiondata.util.PatternUtil; @@ -146,7 +150,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { xxxInfo = new ArrayList<>(); for (String s : strs) { GBaseSYRKXX xx = idCodeMap.get(s); - if(xx != null) { + if (xx != null) { xxxInfo.add(xx); } } @@ -205,7 +209,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { if (jjds == null) { jjds = jjdMMap.get(Optional.ofNullable(personal.getMobileNumber()).orElse("")); } - if (jjds == null|| jjds.isEmpty()) { + if (jjds == null || jjds.isEmpty()) { continue; } GBaseJJD tmp = jjds.getFirst(); @@ -226,7 +230,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { continue; } SupExternalDepart depart = hope.get(tmp.getGxdwdm()); - if(depart == null) { + 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); @@ -264,7 +268,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { 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 ) { + if (bjnr.length() <= 2 && cjqk.length() <= 2) { continue; } JSONObject ob = new JSONObject(); @@ -282,10 +286,10 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { 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()); + 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(); @@ -311,9 +315,105 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { ).join(); } + private final RiskTaskRepository taskRepository; + + private final RiskModelTaskClueService clueService; + @Override - public void syncPoliceInstance() { + public void syncPoliceAttack(TaskParamDomain domain) { + String startTime = LocalDateTime.of(2019, 12, 6, 0, 0, 0).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + List result = gBaseJJDRepository.getBaseMapper().selectAttackPolist(startTime); + + RiskTask task = taskRepository.create(result.size(), 64); + // 证件相关警情 + Map> idCodeMap = new WeakHashMap<>(); + // 手机号相关警情 + Map> mobileMap = new WeakHashMap<>(); + + List idCodes = new ArrayList<>(); + List mobiles = 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(); + // 如果有多个号码,防止警察证件被录入 + if (tmp.size() > 1) { + tmp.remove(0); + } + idCodes.addAll(tmp); + 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(); + // 如果有多个号码,防止警察证件被录入 + if (tmp.size() > 1) { + tmp.remove(0); + } + mobiles.addAll(tmp); + for (String s : tmp) { + mobileMap.computeIfAbsent(s, 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 jjdList; + List toInsert = new ArrayList<>(); + for (RiskPersonal person : domain.getPersons()) { + jjdList = Optional.of(idCodeMap.get(person.getIdCode())).orElse(new ArrayList<>()); + jjdList.addAll(Optional.of(mobileMap.get(person.getMobileNumber())).orElse(new ArrayList<>())); + if (jjdList.isEmpty()) { + continue; + } + jjdList = jjdList.stream().filter(StreamUtil.distinctByKey(GBaseJJD::getJjdbh)).toList(); + List olds = Optional.ofNullable(personOldMap.get(person.getIdCode())).orElse(new ArrayList<>()); + Map oldMap = olds.stream().collect(Collectors.toMap(RiskModelTaskClue::getCaseIds, Function.identity(), (val, old) -> val)); + for (GBaseJJD gBaseJJD : jjdList) { + if (oldMap.get(BhUtil.jjdBh(gBaseJJD.getJjdbh())) != null) { + continue; + } + ClueData data = ClueData.builder() + .name(person.getName()) + .id(BhUtil.jjdBh(gBaseJJD.getJjdbh())) + .idCode(person.getIdCode()) + .tag("有平台涉警事件") + .personId(person.getId()) + .build(); + StringBuilder sb = new StringBuilder("该人员存在平台涉警事件警情,接警单编号:" + 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)); + } + } + if (!toInsert.isEmpty()) { + clueService.saveClues(toInsert, Default.WF_IG); + } + taskRepository.updateTask(task.getId(), toInsert.size(), 0); } void toRedisCache(List jjdList, String keyName) { @@ -419,4 +519,20 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { } return tmp; } + + RiskModelTaskClue createClue(Integer modelId, Integer score, Integer taskId, ClueData data) { + RiskModelTaskClue clue = new RiskModelTaskClue(); + clue.setModelId(modelId); + clue.setScore(score); + clue.setName(data.getName()); + clue.setIdCode(data.getIdCode()); + clue.setTaskId(taskId); + clue.setData(data.getSourceData()); + clue.setEventTime(data.getEventTime()); + clue.setCreateTime(LocalDateTime.now()); + clue.setUpdateTime(LocalDateTime.now()); + clue.setCaseIds(data.getId()); + clue.setRiskReason(data.getTag()); + return clue; + } } 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 6c69fd0..142b666 100644 --- a/src/main/java/com/biutag/supervisiondata/service/impl/GBaseSHRWFRServiceImpl.java +++ b/src/main/java/com/biutag/supervisiondata/service/impl/GBaseSHRWFRServiceImpl.java @@ -347,7 +347,9 @@ public class GBaseSHRWFRServiceImpl implements GBaseSHRWFRService { .build(); try { data.setEventTime(xx.getLrsj().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); - } catch (Exception ignored) {} + } catch (Exception ignored) { + data.setEventTime(LocalDateTime.now()); + } toInsert.add(createClue(task.getModelId(), 5, task.getId(), data)); } }