Browse Source

定时任务

master
kami 1 year ago
parent
commit
3772665400
  1. 5
      src/main/java/com/biutag/supervisiondata/service/PersonalService.java
  2. 491
      src/main/java/com/biutag/supervisiondata/service/impl/GBaseJJDServiceImpl.java
  3. 131
      src/main/java/com/biutag/supervisiondata/service/impl/PersonalServiceImpl.java

5
src/main/java/com/biutag/supervisiondata/service/PersonalService.java

@ -11,11 +11,6 @@ import java.util.List;
*/
public interface PersonalService {
/**
* 拉取涉及警情相关人员信息
*/
void pullJJDPersonalInfo(LocalDateTime start);
/**
* 拉取重点人员信息
*/

491
src/main/java/com/biutag/supervisiondata/service/impl/GBaseJJDServiceImpl.java

@ -27,7 +27,6 @@ import org.springframework.stereotype.Service;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.CompletableFuture;
@ -77,8 +76,8 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
String idCards = PatternUtil.takeIdCard(item.getCjqk());
if (!idCards.isEmpty()) {
person.setIdCode(idCards);
String[] strs = idCards.split(",");
for (String s : strs) {
String[] array = idCards.split(",");
for (String s : array) {
idCodes1.add(s);
jjdMap.computeIfAbsent(item.getBjrzjhm(), k -> new ArrayList<>()).add(item);
}
@ -120,11 +119,11 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
List<RiskPersonal> toInsert = new ArrayList<>();
for (RiskPersonal personal : personals) {
if (personal.getIdCode() != null) {
String[] strs = personal.getIdCode().split(",");
String[] array = personal.getIdCode().split(",");
// 多张身份证存入异常信息
personal.setIdCode(null);
xxxInfo = new ArrayList<>();
for (String s : strs) {
for (String s : array) {
GBaseSYRKXX xx = idCodeMap.get(s);
if (xx != null) {
xxxInfo.add(xx);
@ -205,11 +204,9 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
personal.setControlDepartName(depart.getInternalShortName());
personal.setControlDepartType(DepartType.OTHER.getType());
// 如果有报警时间,暂时填报警时间 处理标签回正
try {
LocalDateTime time = tmp.getBjsj().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
personal.setCreateTime(time);
personal.setControlTime(time);
} catch (Exception e) {
personal.setCreateTime(DateTimeUtil.date2LocalDateTime(tmp.getBjsj()));
personal.setControlTime(personal.getCreateTime());
if(personal.getCreateTime() == null) {
personal.setCreateTime(LocalDateTime.now());
}
}
@ -263,34 +260,13 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
Map<String, List<GBaseJJD>> mobileMap = new WeakHashMap<>();
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();
// 如果有多个号码,防止警察证件被录入
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();
// 如果有多个号码,防止警察证件被录入
for (String s : tmp) {
mobileMap.computeIfAbsent(s, k -> new ArrayList<>()).add(gBaseJJD);
}
}
List<String> idCards = processIdCards(gBaseJJD);
idCards.forEach(idCard -> idCodeMap.computeIfAbsent(idCard, k -> new ArrayList<>()).add(gBaseJJD));
List<String> mobiles = processMobile(gBaseJJD);
mobiles.forEach(mobile -> mobileMap.computeIfAbsent(mobile, 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));
Map<String, RiskModelTaskClue> oldMap = domain.getOldMap(task.getModelId(), true);
List<GBaseJJD> jjdList;
List<RiskModelTaskClue> toInsert = new ArrayList<>();
for (RiskPersonal person : domain.getPersons()) {
@ -299,40 +275,21 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
if (jjdList.isEmpty()) {
continue;
}
jjdList = jjdList.stream().filter(StreamUtil.distinctByKey(GBaseJJD::getJjdbh)).toList();
List<RiskModelTaskClue> olds = personOldMap.get(person.getIdCode());
if (olds != null) {
// 是否类型只有一个
continue;
}
LocalDateTime eventTime = null;
jjdList = jjdList.stream().filter(StreamUtil.distinctByKey(GBaseJJD::getJjdbh)).sorted().toList();
RiskModelTaskClue old = oldMap.get(person.getIdCode());
if (old != null) continue;
StringBuilder sb = new StringBuilder("该人员存在" + jjdList.size() + "起平台涉警事件警情,相关警情接警单编号为:");
for (GBaseJJD gBaseJJD : jjdList) {
sb.append(gBaseJJD.getJjdbh()).append(",");
try {
LocalDateTime tmp = gBaseJJD.getBjsj().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
if (eventTime == null) {
eventTime = tmp;
continue;
}
if (eventTime.isBefore(tmp)) {
eventTime = tmp;
}
} catch (Exception ignored) {
}
}
ClueData data = ClueData.builder()
LocalDateTime eventTime = findRecentTime(jjdList, sb);
toInsert.add(DataUtil.createClueData(task, ClueData.builder()
.name(person.getName())
.id("ptsjsj")
.id("")
.idCode(person.getIdCode())
.tags(List.of("平台涉警事件"))
.sourceData(sb.substring(0, sb.length() - 1))
.eventTime(Optional.ofNullable(eventTime).orElse(LocalDateTime.now()))
.eventTime(eventTime)
.personId(person.getId())
.score(Math.min(5, jjdList.size()))
.build();
toInsert.add(DataUtil.createClueData(task, data));
.build()));
}
log.info("保存袭警数据:{}", toInsert.size());
if (!toInsert.isEmpty()) {
@ -371,32 +328,12 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
if (riskPerson != null) {
personJqList.computeIfAbsent(riskPerson.getIdCode(), k -> new ArrayList<>()).add(jjd);
}
List<String> idCards = processIdCards(jjd);
idCards.stream().filter(s -> idCodelMap.get(s) != null).forEach(s -> personJqList.computeIfAbsent(s, k -> new ArrayList<>()).add(jjd));
// 一个都不放过
String idCard = PatternUtil.takeIdCard(jjd.getCjqk());
if (idCard.isEmpty()) {
idCard = PatternUtil.takeIdCard(jjd.getBjnr());
}
if (!idCard.isEmpty()) {
String[] str = idCard.split(",");
for (String s : str) {
riskPerson = idCodelMap.get(s);
if (riskPerson == null) continue;
personJqList.computeIfAbsent(riskPerson.getIdCode(), k -> new ArrayList<>()).add(jjd);
}
}
String mobile = PatternUtil.takeMobile(jjd.getCjqk());
if (mobile.isEmpty()) {
mobile = PatternUtil.takeMobile(jjd.getBjnr());
}
if (mobile.isEmpty()) continue;
String[] str = mobile.split(",");
for (String s : str) {
riskPerson = mobileMap.get(s);
if (riskPerson == null) continue;
personJqList.computeIfAbsent(riskPerson.getIdCode(), k -> new ArrayList<>()).add(jjd);
}
List<String> mobiles = processIdCards(jjd);
mobiles.stream().map(mobileMap::get).filter(Objects::nonNull).map(RiskPersonal::getIdCode)
.forEach(s -> personJqList.computeIfAbsent(s, k -> new ArrayList<>()).add(jjd));
}
}
log.info("开始统计每个人的警情");
@ -406,20 +343,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
List<GBaseJJD> list;
for (Map.Entry<String, List<GBaseJJD>> entry : personJqList.entrySet()) {
list = entry.getValue().stream().distinct().sorted().toList();
LocalDateTime maxTime = null;
for (GBaseJJD gBaseJJD : list) {
LocalDateTime tmp = DateTimeUtil.date2LocalDateTime(gBaseJJD.getBjsj());
if (maxTime == null) {
maxTime = tmp;
continue;
}
if (tmp.isAfter(maxTime)) {
maxTime = tmp;
}
}
if (maxTime == null) {
maxTime = LocalDateTime.now();
}
LocalDateTime maxTime = Optional.ofNullable(findRecentTime(list, null)).orElse(LocalDateTime.now());
RiskPersonal person = idCodelMap.get(entry.getKey());
StringBuilder sb = new StringBuilder("该人员近一年来有" + list.size() + "起平台涉警事件,接警单编号为:");
@ -460,7 +384,6 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
@Override
public void syncHomeViolence(TaskParamDomain domain) {
LocalDateTime limit = LocalDateTime.now().minusYears(1);
List<GBaseJJD> result = gBaseJJDRepository.getBaseMapper().selectHomeViolence(limit.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
// 被家暴
RiskTask task = taskRepository.create(result.size(), 65);
@ -479,12 +402,8 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
Map<String, List<GBaseJJD>> 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<String> tmp = Arrays.stream(idCard.split(",")).toList();
List<String> tmp = processIdCards(gBaseJJD);
if (!tmp.isEmpty()) {
switch (tmp.size()) {
case 1 -> shIdCodeMap.computeIfAbsent(tmp.getFirst(), k -> new ArrayList<>()).add(gBaseJJD);
case 2 -> {
@ -498,12 +417,8 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
}
continue;
}
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();
tmp = processMobile(gBaseJJD);
if (!tmp.isEmpty()) {
switch (tmp.size()) {
case 1 -> shMobileMap.computeIfAbsent(tmp.getFirst(), k -> new ArrayList<>()).add(gBaseJJD);
case 2 -> {
@ -596,7 +511,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
RiskModelTaskClue motherClue = collectionClue(motherIdCodeMap, new WeakHashMap<>(0), person, task2, "与母亲关系不合");
if (fatherClue != null) {
RiskModelTaskClue fatherOld = fatherOldMap.get(person.getIdCode());
if(fatherOld == null) {
if (fatherOld == null) {
fatherDBData.getToInsert().add(fatherClue);
} else {
fatherOldMap.remove(person.getIdCode());
@ -606,9 +521,9 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
}
}
}
if(motherClue == null) continue;
if (motherClue == null) continue;
RiskModelTaskClue motherOld = motherOldMap.get(person.getIdCode());
if(motherOld == null) {
if (motherOld == null) {
motherDBData.getToInsert().add(motherClue);
continue;
}
@ -636,52 +551,14 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
Map<String, List<GBaseJJD>> 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<String> 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()) {
List<String> tmp = processIdCards(gBaseJJD);
if (!tmp.isEmpty()) {
collectSingleMap(tmp, 3, idCodesMap, gBaseJJD);
continue;
}
List<String> 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);
}
}
}
tmp = processMobile(gBaseJJD);
if (tmp.isEmpty()) continue;
collectSingleMap(tmp, tmp.size(), mobilesMap, gBaseJJD);
}
Map<String, RiskModelTaskClue> oldMap = domain.getOldMap(task.getModelId(), true);
@ -716,52 +593,14 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
Map<String, List<GBaseJJD>> 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<String> 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()) {
List<String> tmp = processIdCards(gBaseJJD);
if (!tmp.isEmpty()) {
collectSingleMap(tmp, tmp.size(), idCodesMap, gBaseJJD);
continue;
}
List<String> 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);
}
}
}
tmp = processMobile(gBaseJJD);
if (tmp.isEmpty()) continue;
collectSingleMap(tmp, tmp.size(), mobilesMap, gBaseJJD);
}
Map<String, RiskModelTaskClue> oldMap = domain.getOldMap(task.getModelId(), true);
@ -795,52 +634,14 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
Map<String, List<GBaseJJD>> 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<String> 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()) {
List<String> tmp = processIdCards(gBaseJJD);
if (!tmp.isEmpty()) {
collectSingleMap(tmp, tmp.size(), idCodesMap, gBaseJJD);
continue;
}
List<String> 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);
}
}
}
tmp = processMobile(gBaseJJD);
if (tmp.isEmpty()) continue;
collectSingleMap(tmp, tmp.size(), mobilesMap, gBaseJJD);
}
Map<String, RiskModelTaskClue> oldMap = domain.getOldMap(task.getModelId(), true);
@ -876,12 +677,8 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
List<GBaseJJD> others = 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();
List<String> tmp = processIdCards(gBaseJJD);
if (!tmp.isEmpty()) {
// 年龄22岁以下才算
for (String s : tmp) {
Integer age = IdCodeUtil.idCard2Age(s, today);
@ -891,14 +688,9 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
}
continue;
}
String mobile = PatternUtil.takeMobile(gBaseJJD.getCjqk());
if (mobile.isEmpty()) {
mobile = PatternUtil.takeMobile(gBaseJJD.getBjnr());
}
if (mobile.isEmpty()) {
continue;
}
mobiles.addAll(Arrays.stream(mobile.split(",")).toList());
tmp = processMobile(gBaseJJD);
if (tmp.isEmpty()) continue;
mobiles.addAll(tmp);
others.add(gBaseJJD);
}
@ -908,11 +700,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
Map<String, List<GBaseSYRKXX>> mobileRkMap = xxList.stream().collect(Collectors.groupingBy(GBaseSYRKXX::getLxdh));
// 第二轮通过手机号找身份证
for (GBaseJJD other : others) {
String mobile = PatternUtil.takeMobile(other.getCjqk());
if (mobile.isEmpty()) {
mobile = PatternUtil.takeMobile(other.getBjnr());
}
List<String> tmp = Arrays.stream(mobile.split(",")).toList();
List<String> tmp = processMobile(other);
List<String> idCard = new ArrayList<>();
for (String s : tmp) {
List<GBaseSYRKXX> arr = Optional.ofNullable(mobileRkMap.get(s)).orElse(new ArrayList<>());
@ -921,12 +709,8 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
return age != null && age <= 22;
}).toList());
}
if (idCard.isEmpty()) {
continue;
}
for (String s : idCard) {
idCodesMap.computeIfAbsent(s, k -> new ArrayList<>()).add(other);
}
if (idCard.isEmpty()) continue;
idCard.forEach(s -> idCodesMap.computeIfAbsent(s, k -> new ArrayList<>()).add(other));
}
}
Map<String, RiskModelTaskClue> oldMap = domain.getOldMap(task.getModelId(), true);
@ -939,14 +723,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
continue;
}
StringBuilder sb = new StringBuilder("该人员存在" + jjdList.size() + "起被欺凌警情,接警单编号:");
LocalDateTime time = null;
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;
}
}
LocalDateTime time = findRecentTime(jjdList, sb);
String desc = sb.substring(0, sb.length() - 1);
RiskModelTaskClue old = oldMap.get(person.getIdCode());
if (old == null) {
@ -1048,42 +825,24 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
Map<String, List<GBaseJJD>> 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<String> tmp = Arrays.stream(idCard.split(",")).toList();
switch (tmp.size()) {
case 0 -> mobileContinue = true;
case 1 -> idCodesMap.computeIfAbsent(tmp.getFirst(), k -> new ArrayList<>()).add(gBaseJJD);
default -> {
for (int i = 1; i < tmp.size(); i++) {
idCodesMap.computeIfAbsent(tmp.get(i), k -> new ArrayList<>()).add(gBaseJJD);
}
List<String> tmp = processIdCards(gBaseJJD);
if (!tmp.isEmpty()) {
if (tmp.size() == 1) {
idCodesMap.computeIfAbsent(tmp.getFirst(), k -> new ArrayList<>()).add(gBaseJJD);
} else {
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<String> tmp = Arrays.stream(mobile.split(",")).toList();
switch (tmp.size()) {
case 0 -> {
}
case 1 -> mobilesMap.computeIfAbsent(tmp.getFirst(), k -> new ArrayList<>()).add(gBaseJJD);
default -> {
for (int i = 1; i < tmp.size(); i++) {
mobilesMap.computeIfAbsent(tmp.get(i), k -> new ArrayList<>()).add(gBaseJJD);
}
tmp = processMobile(gBaseJJD);
if (tmp.isEmpty()) continue;
if (tmp.size() == 1) {
mobilesMap.computeIfAbsent(tmp.getFirst(), k -> new ArrayList<>()).add(gBaseJJD);
} else {
for (int i = 1; i < tmp.size(); i++) {
mobilesMap.computeIfAbsent(tmp.get(i), k -> new ArrayList<>()).add(gBaseJJD);
}
}
}
@ -1114,49 +873,31 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
List<String> mobiles = new ArrayList<>();
// 第一轮排除掉有身份证的
for (GBaseJJD gBaseJJD : jjdList) {
boolean continueMobile = false;
String idCard = PatternUtil.takeIdCard(gBaseJJD.getCjqk());
if (idCard.isEmpty()) {
idCard = PatternUtil.takeIdCard(gBaseJJD.getBjnr());
}
if (!idCard.isEmpty()) {
List<String> tmp = processIdCards(gBaseJJD);
if (!tmp.isEmpty()) {
// 找到身份证年龄小的
List<String> tmp = Arrays.stream(idCard.split(",")).toList();
switch (tmp.size()) {
case 0 -> continueMobile = true;
case 1 -> fatherIdCodeMap.computeIfAbsent(tmp.getFirst(), k -> new ArrayList<>()).add(gBaseJJD);
default -> fatherIdCodeMap.computeIfAbsent(findSmallOne(tmp), k -> new ArrayList<>()).add(gBaseJJD);
}
if (!continueMobile) {
continue;
if (tmp.size() == 1) {
fatherIdCodeMap.computeIfAbsent(tmp.getFirst(), k -> new ArrayList<>()).add(gBaseJJD);
} else {
fatherIdCodeMap.computeIfAbsent(findSmallOne(tmp), k -> new ArrayList<>()).add(gBaseJJD);
}
}
String mobile = PatternUtil.takeMobile(gBaseJJD.getCjqk());
if (!mobile.isEmpty()) {
mobiles.addAll(Arrays.stream(mobile.split(",")).toList());
others.add(gBaseJJD);
continue;
}
mobile = PatternUtil.takeMobile(gBaseJJD.getBjnr());
if (!mobile.isEmpty()) {
mobiles.addAll(Arrays.stream(mobile.split(",")).toList());
tmp = processMobile(gBaseJJD);
if (tmp.isEmpty()) {
mobiles.addAll(tmp);
others.add(gBaseJJD);
}
}
if (mobiles.isEmpty()) {
return fatherIdCodeMap;
}
List<GBaseSYRKXX> xxList = gBaseSYRKXXRepository.list(new LambdaQueryWrapper<GBaseSYRKXX>()
.select(GBaseSYRKXX::getGmsfhm, GBaseSYRKXX::getLxdh).in(GBaseSYRKXX::getLxdh, mobiles));
Map<String, List<GBaseSYRKXX>> mobileRkMap = xxList.stream().collect(Collectors.groupingBy(GBaseSYRKXX::getLxdh));
// 第二轮通过手机号找身份证
for (GBaseJJD other : others) {
String mobile = PatternUtil.takeMobile(other.getCjqk());
if (mobile.isEmpty()) {
mobile = PatternUtil.takeMobile(other.getBjnr());
}
List<String> tmp = Arrays.stream(mobile.split(",")).toList();
List<String> tmp = processMobile(other);
List<String> idCard = new ArrayList<>();
for (String s : tmp) {
List<GBaseSYRKXX> arr = Optional.ofNullable(mobileRkMap.get(s)).orElse(new ArrayList<>());
@ -1205,6 +946,28 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
.orElse(null);
}
List<String> processIdCards(GBaseJJD jjd) {
String idCard = PatternUtil.takeIdCard(jjd.getCjqk());
if (idCard.isEmpty()) {
idCard = PatternUtil.takeIdCard(jjd.getBjnr());
}
if (idCard.isEmpty()) {
return new ArrayList<>(0);
}
return Arrays.stream(idCard.split(",")).toList();
}
List<String> processMobile(GBaseJJD jjd) {
String mobiles = PatternUtil.takeMobile(jjd.getCjqk());
if (mobiles.isEmpty()) {
mobiles = PatternUtil.takeMobile(jjd.getBjnr());
}
if (mobiles.isEmpty()) {
return new ArrayList<>(0);
}
return Arrays.stream(mobiles.split(",")).toList();
}
/**
* 手机要搜索的clue数据
*
@ -1221,20 +984,12 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
if (jjdList.isEmpty()) return null;
jjdList = jjdList.stream().filter(StreamUtil.distinctByKey(GBaseJJD::getJjdbh)).sorted().toList();
StringBuilder sb = new StringBuilder("该人员存在" + jjdList.size() + "起" + tag + "警情,接警单编号:");
LocalDateTime time = null;
for (GBaseJJD gBaseJJD : jjdList) {
sb.append(gBaseJJD.getJjdbh()).append(",");
LocalDateTime tmp = DateTimeUtil.date2LocalDateTime(gBaseJJD.getBjsj());
if (time == null || (tmp != null && time.isBefore(tmp))) {
time = tmp;
}
}
return DataUtil.createClueData(task, ClueData.builder()
.name(personal.getName())
.idCode(personal.getIdCode())
.tags(List.of(tag))
.personId(personal.getId())
.eventTime(time)
.eventTime(findRecentTime(jjdList, sb))
.sourceData(sb.substring(0, sb.length() - 1))
.score(Math.min(jjdList.size(), 5))
.build());
@ -1242,6 +997,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
/**
* 多身份证对比名称
*
* @param infos 信息
* @param name 名称
* @return 正确信息
@ -1275,9 +1031,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
personal.setGender(IdCodeUtil.idCard2Gender(personal.getIdCode()));
personal.setAge(Optional.ofNullable(IdCodeUtil.idCard2Age(personal.getIdCode(), today)).orElse(-1));
if (personal.getAge() == null) {
LocalDate localDate = DateTimeUtil.date2LocalDate(info.getCsrq());
int age = localDate.until(today).getYears();
personal.setAge(age);
personal.setAge(Optional.ofNullable(DateTimeUtil.date2LocalDate(info.getCsrq())).map(date -> date.until(today).getYears()).orElse(null));
}
if (personal.getGender() == null) {
personal.setGender(info.getXbdm());
@ -1318,4 +1072,31 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
}
return tmp;
}
void collectSingleMap(List<String> strList, int defaultEnd, Map<String, List<GBaseJJD>> idCodesMap, GBaseJJD gBaseJJD) {
switch (strList.size()) {
case 1 -> idCodesMap.computeIfAbsent(strList.getFirst(), k -> new ArrayList<>()).add(gBaseJJD);
case 2 -> {
idCodesMap.computeIfAbsent(strList.get(0), k -> new ArrayList<>()).add(gBaseJJD);
idCodesMap.computeIfAbsent(strList.get(1), k -> new ArrayList<>()).add(gBaseJJD);
}
default -> {
for (int i = 1; i < defaultEnd; i++) {
idCodesMap.computeIfAbsent(strList.get(i), k -> new ArrayList<>()).add(gBaseJJD);
}
}
}
}
LocalDateTime findRecentTime(List<GBaseJJD> jjdList, StringBuilder sb) {
LocalDateTime time = null;
for (GBaseJJD gBaseJJD : jjdList) {
if(sb != null) sb.append(gBaseJJD.getJjdbh()).append(",");
LocalDateTime tmp = DateTimeUtil.date2LocalDateTime(gBaseJJD.getBjsj());
if (time == null || (tmp != null && time.isBefore(tmp))) {
time = tmp;
}
}
return time;
}
}

131
src/main/java/com/biutag/supervisiondata/service/impl/PersonalServiceImpl.java

@ -7,7 +7,6 @@ import com.biutag.supervisiondata.pojo.constants.Media;
import com.biutag.supervisiondata.pojo.database.Contradiction;
import com.biutag.supervisiondata.pojo.domain.PersonImageInfo;
import com.biutag.supervisiondata.pojo.entity.ads.GBaseSYRKXX;
import com.biutag.supervisiondata.pojo.entity.dwd.GBaseJJD;
import com.biutag.supervisiondata.pojo.entity.dwd.GBaseZDRY;
import com.biutag.supervisiondata.pojo.entity.mine.*;
import com.biutag.supervisiondata.pojo.entity.wdpc.WdpcPerson;
@ -23,7 +22,6 @@ import com.biutag.supervisiondata.service.RiskPersonalService;
import com.biutag.supervisiondata.util.DepartUtil;
import com.biutag.supervisiondata.util.IdCodeUtil;
import com.biutag.supervisiondata.util.ImageUtil;
import com.biutag.supervisiondata.util.PatternUtil;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@ -48,127 +46,10 @@ import java.util.stream.IntStream;
@AllArgsConstructor
public class PersonalServiceImpl implements PersonalService {
private final GBaseJJDRepository gBaseJJDRepository;
private final GBaseSYRKXXRepository gBaseSYRKXXRepository;
private final RiskPersonalService riskPersonalService;
@Override
public void pullJJDPersonalInfo(LocalDateTime start) {
// LocalDateTime start = Optional.ofNullable(personalRepository.getBaseMapper().selectMaxCreateTime())
// .orElse(LocalDateTime.of(2024, 1, 1, 0, 0, 0));
// 结束时间设置为人员的创建时间,保证下次提取是新的接警数据
LocalDateTime end = LocalDateTime.now();
// 获取接警数据
List<GBaseJJD> result = gBaseJJDRepository.getBaseMapper().selectDataToRisk(start.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")),
end.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
log.info("总条数 | {}条", result.size());
// 过滤数据
List<String> idCodes1 = new ArrayList<>();
List<String> mobiles1 = new ArrayList<>();
Map<String, List<GBaseJJD>> jjdMap = new HashMap<>();
Map<String, List<GBaseJJD>> jjdMMap = new HashMap<>();
List<GBaseJJD> jjdList = new ArrayList<>();
for (GBaseJJD item : result) {
if (item.getBjrzjhm() != null) {
jjdMap.computeIfAbsent(item.getBjrzjhm(), k -> new ArrayList<>()).add(item);
idCodes1.add(item.getBjrzjhm());
jjdList.add(item);
continue;
}
String idCards = PatternUtil.takeIdCard(item.getCjqk());
if (idCards.isEmpty() && item.getBjrlxdh() == null) {
continue;
}
jjdList.add(item);
if (!idCards.isEmpty()) {
idCodes1.addAll(Arrays.asList(idCards.split(",")));
} else {
jjdMMap.computeIfAbsent(item.getBjrlxdh(), k -> new ArrayList<>()).add(item);
mobiles1.add(item.getBjrlxdh());
}
}
// 去重
List<String> idCodes2 = idCodes1.stream().distinct().collect(Collectors.toList());
List<String> mobiles2 = mobiles1.stream().distinct().collect(Collectors.toList());
// 切割
List<List<String>> idCodes = IntStream.range(0, (idCodes2.size() + 9999) / 10000)
.mapToObj(i -> idCodes2.subList(i * 10000, Math.min((i + 1) * 10000, idCodes2.size())))
.collect(Collectors.toList());
List<List<String>> mobiles = IntStream.range(0, (mobiles2.size() + 9999) / 10000)
.mapToObj(i -> mobiles2.subList(i * 10000, Math.min((i + 1) * 10000, mobiles2.size())))
.collect(Collectors.toList());
// 身份证查到的人
List<GBaseSYRKXX> sFms = new ArrayList<>();
// 手机号查到的人
List<GBaseSYRKXX> lXfs = new ArrayList<>();
// 同步查询
CompletableFuture.allOf(
CompletableFutureUtil.runSyncObject(() -> sFms.addAll(getByIdCode(idCodes))),
CompletableFutureUtil.runSyncObject(() -> lXfs.addAll(getByMobiles(mobiles)))
).join();
Map<String, GBaseSYRKXX> idCodeMap = sFms.stream().collect(Collectors.toMap(GBaseSYRKXX::getGmsfhm, Function.identity(), (oldValue, newValue) -> newValue));
Map<String, List<GBaseSYRKXX>> mobileMap = lXfs.stream().collect(Collectors.groupingBy(GBaseSYRKXX::getLxdh));
List<RiskPersonal> personals = new ArrayList<>();
// 已出现的份证
HashSet<String> cache = new HashSet<>();
LocalDate now = LocalDate.now();
for (GBaseJJD item : jjdList) {
GBaseSYRKXX syrkxx;
// 接警单证件号不为空并没入过库
if (item.getBjrzjhm() != null && !cache.contains(item.getBjrzjhm())) {
syrkxx = idCodeMap.get(item.getBjrzjhm());
cache.add(item.getBjrzjhm());
if (syrkxx != null) {
RiskPersonal personal = createPerson(syrkxx, item.getBjsj(), now, end, Default.BIG_TAG_JJD);
if (personal != null) {
personals.add(personal);
}
}
continue;
}
String idCards = PatternUtil.takeIdCard(item.getCjqk());
if (!idCards.isEmpty()) {
String[] arr = idCards.split(",");
for (String s : arr) {
if (cache.contains(s)) {
continue;
}
GBaseSYRKXX xx = idCodeMap.get(s);
if (xx == null) {
continue;
}
cache.add(xx.getGmsfhm());
RiskPersonal personal = createPerson(xx, item.getBjsj(), now, end, Default.BIG_TAG_JJD);
if (personal == null) {
continue;
}
personals.add(personal);
}
continue;
}
List<GBaseSYRKXX> xxList = Optional.ofNullable(mobileMap.get(item.getBjdh())).orElse(new ArrayList<>());
syrkxx = compare(xxList, item.getBjrxm());
if (syrkxx != null) {
cache.add(syrkxx.getGmsfhm());
RiskPersonal personal = createPerson(syrkxx, item.getBjsj(), now, end, Default.BIG_TAG_JJD);
if (personal == null) {
continue;
}
personals.add(personal);
}
}
riskPersonalService.saveDistinct(personals);
}
private final GBaseZDRYRepository zdryRepository;
@Override
@ -568,18 +449,6 @@ public class PersonalServiceImpl implements PersonalService {
return tmp;
}
GBaseSYRKXX compare(List<GBaseSYRKXX> infos, String name) {
GBaseSYRKXX info = null;
for (GBaseSYRKXX gBaseSYRKXX : infos) {
if (gBaseSYRKXX.getXm().equals(name)) {
info = gBaseSYRKXX;
break;
}
}
return info;
}
RiskPersonal createPerson(GBaseSYRKXX item, Date date, LocalDate now, LocalDateTime time, String tag) {
RiskPersonal person = new RiskPersonal();
person.setName(item.getXm());

Loading…
Cancel
Save