Browse Source

平台涉警

master
kami 1 year ago
parent
commit
6fc7cf7eb0
  1. 22
      src/main/java/com/biutag/supervisiondata/common/utils/StreamUtil.java
  2. 3
      src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseJJDMapper.java
  3. 11
      src/main/java/com/biutag/supervisiondata/service/GBaseJJDService.java
  4. 142
      src/main/java/com/biutag/supervisiondata/service/impl/GBaseJJDServiceImpl.java
  5. 4
      src/main/java/com/biutag/supervisiondata/service/impl/GBaseSHRWFRServiceImpl.java

22
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 <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
Map<Object,Boolean> seen = new ConcurrentHashMap<>();
return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}
}

3
src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseJJDMapper.java

@ -63,4 +63,7 @@ public interface GBaseJJDMapper extends BaseMapper<GBaseJJD> {
@Select(" select jjdbh, gxdwdm, gxdwmc,bjrxm, bjdh, bjnr, cjqk, bjsj from dwd_asj_zhtx_jjd " + @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} ") " where (bjnr like '%报复%' or cjqk like '%报复%') and bjsj between #{start} and #{end} ")
List<GBaseJJD> selectRevenge(@Param("start")String start, @Param("end")String end); List<GBaseJJD> 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<GBaseJJD> selectAttackPolist(@Param("start")String start);
} }

11
src/main/java/com/biutag/supervisiondata/service/GBaseJJDService.java

@ -1,5 +1,7 @@
package com.biutag.supervisiondata.service; package com.biutag.supervisiondata.service;
import com.biutag.supervisiondata.pojo.domain.TaskParamDomain;
import java.time.LocalDateTime; import java.time.LocalDateTime;
/** /**
@ -14,13 +16,14 @@ public interface GBaseJJDService {
* @param end 接警结束范围 * @param end 接警结束范围
*/ */
void pullAndSave(LocalDateTime start, LocalDateTime end); void pullAndSave(LocalDateTime start, LocalDateTime end);
/**
* 同步警情 厌世报复自杀遭遇不公
*/
void pullDataAndSaveRedis(LocalDateTime start, LocalDateTime end); void pullDataAndSaveRedis(LocalDateTime start, LocalDateTime end);
void pullPoliceInstance(LocalDateTime start, LocalDateTime end); void pullPoliceInstance(LocalDateTime start, LocalDateTime end);
/** /**
* 同步警情 厌世报复自杀遭遇不公 * 攻击警察
*/ */
void syncPoliceInstance(); void syncPoliceAttack(TaskParamDomain domain);
} }

142
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.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.biutag.supervisiondata.common.interfaces.CompletableFutureUtil; 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.config.cache.RedisDao;
import com.biutag.supervisiondata.pojo.ClueData;
import com.biutag.supervisiondata.pojo.constants.Default; import com.biutag.supervisiondata.pojo.constants.Default;
import com.biutag.supervisiondata.pojo.constants.RedisKey; import com.biutag.supervisiondata.pojo.constants.RedisKey;
import com.biutag.supervisiondata.pojo.database.PointOrg; 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.ads.GBaseSYRKXX;
import com.biutag.supervisiondata.pojo.entity.dwd.GBaseJJD; 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.RiskPersonal;
import com.biutag.supervisiondata.pojo.entity.mine.RiskTask;
import com.biutag.supervisiondata.pojo.entity.mine.SupExternalDepart; import com.biutag.supervisiondata.pojo.entity.mine.SupExternalDepart;
import com.biutag.supervisiondata.pojo.enums.DepartType; import com.biutag.supervisiondata.pojo.enums.DepartType;
import com.biutag.supervisiondata.repository.GBaseJJDRepository; import com.biutag.supervisiondata.repository.*;
import com.biutag.supervisiondata.repository.GBaseSYRKXXRepository;
import com.biutag.supervisiondata.repository.GBaseZDRYRepository;
import com.biutag.supervisiondata.repository.SupExternalDepartRepository;
import com.biutag.supervisiondata.service.GBaseJJDService; import com.biutag.supervisiondata.service.GBaseJJDService;
import com.biutag.supervisiondata.service.RiskModelTaskClueService;
import com.biutag.supervisiondata.service.RiskPersonalService; import com.biutag.supervisiondata.service.RiskPersonalService;
import com.biutag.supervisiondata.util.BhUtil;
import com.biutag.supervisiondata.util.IdCodeUtil; import com.biutag.supervisiondata.util.IdCodeUtil;
import com.biutag.supervisiondata.util.OrgUtil; import com.biutag.supervisiondata.util.OrgUtil;
import com.biutag.supervisiondata.util.PatternUtil; import com.biutag.supervisiondata.util.PatternUtil;
@ -146,7 +150,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
xxxInfo = new ArrayList<>(); xxxInfo = new ArrayList<>();
for (String s : strs) { for (String s : strs) {
GBaseSYRKXX xx = idCodeMap.get(s); GBaseSYRKXX xx = idCodeMap.get(s);
if(xx != null) { if (xx != null) {
xxxInfo.add(xx); xxxInfo.add(xx);
} }
} }
@ -205,7 +209,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
if (jjds == null) { if (jjds == null) {
jjds = jjdMMap.get(Optional.ofNullable(personal.getMobileNumber()).orElse("")); jjds = jjdMMap.get(Optional.ofNullable(personal.getMobileNumber()).orElse(""));
} }
if (jjds == null|| jjds.isEmpty()) { if (jjds == null || jjds.isEmpty()) {
continue; continue;
} }
GBaseJJD tmp = jjds.getFirst(); GBaseJJD tmp = jjds.getFirst();
@ -226,7 +230,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
continue; continue;
} }
SupExternalDepart depart = hope.get(tmp.getGxdwdm()); SupExternalDepart depart = hope.get(tmp.getGxdwdm());
if(depart == null) { if (depart == null) {
PointOrg org = orgCodeMap.get(tmp.getGxdwdm()); PointOrg org = orgCodeMap.get(tmp.getGxdwdm());
org = OrgUtil.findOrg(org, orgIdMap); 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(item -> jqExternalDepart.get(item)).orElse(null);
@ -264,7 +268,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
for (GBaseJJD gBaseJJD : result) { for (GBaseJJD gBaseJJD : result) {
String bjnr = Optional.ofNullable(gBaseJJD.getBjnr()).orElse(""); String bjnr = Optional.ofNullable(gBaseJJD.getBjnr()).orElse("");
String cjqk = Optional.ofNullable(gBaseJJD.getCjqk()).orElse(""); String cjqk = Optional.ofNullable(gBaseJJD.getCjqk()).orElse("");
if(bjnr.length() <= 2 && cjqk.length() <= 2 ) { if (bjnr.length() <= 2 && cjqk.length() <= 2) {
continue; continue;
} }
JSONObject ob = new JSONObject(); JSONObject ob = new JSONObject();
@ -282,10 +286,10 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
List<String> idCodes = new ArrayList<>(); List<String> idCodes = new ArrayList<>();
List<String> mobiles = new ArrayList<>(); List<String> mobiles = new ArrayList<>();
idCodes.addAll(Arrays.stream(str1.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()); 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(str3.split(",")).filter(item -> item.length() > 2).toList());
mobiles.addAll(Arrays.stream(str4.split(",")).filter(item -> item.length()>2).toList()); mobiles.addAll(Arrays.stream(str4.split(",")).filter(item -> item.length() > 2).toList());
mobiles.add(ob.getString("mobile")); mobiles.add(ob.getString("mobile"));
idCodes = idCodes.stream().distinct().toList(); idCodes = idCodes.stream().distinct().toList();
mobiles = mobiles.stream().distinct().toList(); mobiles = mobiles.stream().distinct().toList();
@ -311,9 +315,105 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
).join(); ).join();
} }
private final RiskTaskRepository taskRepository;
private final RiskModelTaskClueService clueService;
@Override @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<GBaseJJD> result = gBaseJJDRepository.getBaseMapper().selectAttackPolist(startTime);
RiskTask task = taskRepository.create(result.size(), 64);
// 证件相关警情
Map<String, List<GBaseJJD>> idCodeMap = new WeakHashMap<>();
// 手机号相关警情
Map<String, List<GBaseJJD>> mobileMap = new WeakHashMap<>();
List<String> idCodes = new ArrayList<>();
List<String> 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<String> 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<String> 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<RiskModelTaskClue> oldList = Optional.ofNullable(domain.getMap().get(task.getModelId())).orElse(new ArrayList<>());
// 按人分
Map<String, List<RiskModelTaskClue>> personOldMap = oldList.stream().collect(Collectors.groupingBy(RiskModelTaskClue::getIdCode));
List<GBaseJJD> jjdList;
List<RiskModelTaskClue> 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<RiskModelTaskClue> olds = Optional.ofNullable(personOldMap.get(person.getIdCode())).orElse(new ArrayList<>());
Map<String, RiskModelTaskClue> 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<GBaseJJD> jjdList, String keyName) { void toRedisCache(List<GBaseJJD> jjdList, String keyName) {
@ -419,4 +519,20 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
} }
return tmp; 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;
}
} }

4
src/main/java/com/biutag/supervisiondata/service/impl/GBaseSHRWFRServiceImpl.java

@ -347,7 +347,9 @@ public class GBaseSHRWFRServiceImpl implements GBaseSHRWFRService {
.build(); .build();
try { try {
data.setEventTime(xx.getLrsj().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); 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)); toInsert.add(createClue(task.getModelId(), 5, task.getId(), data));
} }
} }

Loading…
Cancel
Save