Browse Source

模型数据任务更新

master
kami 1 year ago
parent
commit
eab1ef6ace
  1. 2
      src/main/java/com/biutag/supervisiondata/event/ApplicationEvent.java
  2. 8
      src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseAJJBXXMapper.java
  3. 22
      src/main/java/com/biutag/supervisiondata/pojo/domain/BadHabit.java
  4. 7
      src/main/java/com/biutag/supervisiondata/service/HabitService.java
  5. 7
      src/main/java/com/biutag/supervisiondata/service/RiskModelTaskClueService.java
  6. 237
      src/main/java/com/biutag/supervisiondata/service/impl/HabitServiceImpl.java
  7. 19
      src/main/java/com/biutag/supervisiondata/service/impl/MarriageServiceImpl.java
  8. 78
      src/main/java/com/biutag/supervisiondata/service/impl/NoControlServiceImpl.java
  9. 117
      src/main/java/com/biutag/supervisiondata/service/impl/PointServiceImpl.java
  10. 22
      src/main/java/com/biutag/supervisiondata/service/impl/RiskModelTaskClueServiceImpl.java
  11. 17
      src/main/java/com/biutag/supervisiondata/task/TaskService.java

2
src/main/java/com/biutag/supervisiondata/event/ApplicationEvent.java

@ -119,7 +119,7 @@ public class ApplicationEvent {
// riskTaskService.eduAndAreaModelTask(initDomain(List.of(34,41)));
// riskTaskService.infoModelTask(initDomain(List.of(32,33)));
// marriageService.marriageModelTask(initDomain(List.of(39,51)));
// habitService.habitModelTask(LocalDateTime.of(2023, 12, 6, 0, 0, 0), initDomain(List.of(36,60,61,62)));
// habitService.syncBadHabit(LocalDateTime.of(2019, 12, 6, 0, 0, 0), initDomain(List.of(36,60,61,62)));
// pointService.syncCarUser(initDomain(List.of(53)));
// pointService.syncScore(initDomain(List.of(43)));
// pointService.syncViolence(initDomain(List.of(44)));

8
src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseAJJBXXMapper.java

@ -1,6 +1,7 @@
package com.biutag.supervisiondata.mapper.dwd;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.biutag.supervisiondata.pojo.domain.BadHabit;
import com.biutag.supervisiondata.pojo.entity.dwd.GBaseAJJBXX;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
@ -16,4 +17,11 @@ public interface GBaseAJJBXXMapper extends BaseMapper<GBaseAJJBXX> {
@Select(" select ajbh, barq, ajlbmc from dwd_asj_zfba_ajjbxx where barq > #{time}")
List<GBaseAJJBXX> selectHabit(@Param("time")String time);
@Select(" select a.ajbh, a.barq, a.ajlbmc, c.id_code from dwd_asj_zfba_ajjbxx as a " +
" inner join dwd_ry_zfba_wfryxx as b on a.ajbh = b.ajbh " +
" inner join csga_wdpcdb.wdpc_person as c on c.id_code = b.zjhm " +
" where a.barq > #{time} and a.ajlbmc is not null ")
List<BadHabit> selectBadHabit(@Param("time")String time);
}

22
src/main/java/com/biutag/supervisiondata/pojo/domain/BadHabit.java

@ -0,0 +1,22 @@
package com.biutag.supervisiondata.pojo.domain;
import lombok.Data;
import java.util.Date;
/**
* @author kami on 2024-12-23 14:58
* @version 1.0
* @since 1.8
*/
@Data
public class BadHabit {
String idCode;
String ajbh;
String ajlbmc;
Date barq;
}

7
src/main/java/com/biutag/supervisiondata/service/HabitService.java

@ -12,5 +12,10 @@ import java.time.LocalDateTime;
*/
public interface HabitService {
void habitModelTask(LocalDateTime targetTime, TaskParamDomain domain);
/**
* 拉取不良嗜好
* @param targetTime 目标开始时间
* @param domain 数据
*/
void syncBadHabit(LocalDateTime targetTime, TaskParamDomain domain);
}

7
src/main/java/com/biutag/supervisiondata/service/RiskModelTaskClueService.java

@ -20,4 +20,11 @@ public interface RiskModelTaskClueService {
* @param modelId 要删除的模型id
*/
void deleteCluesAndDeleteTag(List<RiskModelTaskClue> list, List<String> idCodes, Integer modelId);
/**
* 修改记录
* @param list 要修改的数据
* @param modelId 模型id
*/
void updateClues(List<RiskModelTaskClue> list, Integer modelId);
}

237
src/main/java/com/biutag/supervisiondata/service/impl/HabitServiceImpl.java

@ -1,13 +1,9 @@
package com.biutag.supervisiondata.service.impl;
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.pojo.ClueData;
import com.biutag.supervisiondata.pojo.constants.Default;
import com.biutag.supervisiondata.pojo.domain.BadHabit;
import com.biutag.supervisiondata.pojo.domain.TaskParamDomain;
import com.biutag.supervisiondata.pojo.entity.dwd.GBaseAJJBXX;
import com.biutag.supervisiondata.pojo.entity.dwd.GBaseWFRXX;
import com.biutag.supervisiondata.pojo.entity.mine.RiskModelTaskClue;
import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonal;
import com.biutag.supervisiondata.pojo.entity.mine.RiskTask;
@ -15,18 +11,15 @@ import com.biutag.supervisiondata.repository.*;
import com.biutag.supervisiondata.service.HabitService;
import com.biutag.supervisiondata.service.RiskModelTaskClueService;
import com.biutag.supervisiondata.util.DataUtil;
import com.biutag.supervisiondata.util.DateTimeUtil;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
/**
* @author kami on 2024-11-13 11:11:56
@ -40,203 +33,107 @@ public class HabitServiceImpl implements HabitService {
private final GBaseAJJBXXRepository gBaseAJJBXXRepository;
private final GBaseWFRXXRepository gBaseWFRXXRepository;
private final RiskTaskRepository riskTaskRepository;
private final RiskModelTaskClueService riskModelTaskClueService;
@Override
public void habitModelTask(LocalDateTime targetTime, TaskParamDomain domain) {
List<GBaseAJJBXX> ajjbxxList = gBaseAJJBXXRepository.getBaseMapper().selectHabit(targetTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
LocalDateTime limit = LocalDateTime.now().minusYears(1);
log.info("总案件数:{}", ajjbxxList.size());
// 酒
List<GBaseAJJBXX> targetAjList = new ArrayList<>();
List<String> ajNos = new ArrayList<>();
// 赌博
List<GBaseAJJBXX> targetAjList2 = new ArrayList<>();
List<String> ajNos2 = new ArrayList<>();
public void syncBadHabit(LocalDateTime targetTime, TaskParamDomain domain) {
List<BadHabit> habitList = gBaseAJJBXXRepository.getBaseMapper().selectBadHabit(targetTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
// 其他行为
List<GBaseAJJBXX> targetAjList3 = new ArrayList<>();
List<String> ajNos3 = new ArrayList<>();
Map<String, List<String>> alcoholics = new WeakHashMap<>();
Map<String, List<String>> gambler = new WeakHashMap<>();
Map<String, List<String>> AIDS = new WeakHashMap<>();
Map<String, List<String>> alcoholics2 = new WeakHashMap<>();
for (GBaseAJJBXX gBaseAJJBXX : ajjbxxList) {
if (gBaseAJJBXX.getAjlbmc() == null) {
continue;
}
if (gBaseAJJBXX.getAjlbmc().contains("酒")){
targetAjList.add(gBaseAJJBXX);
ajNos.add(gBaseAJJBXX.getAjbh());
}
if (gBaseAJJBXX.getAjlbmc().contains("赌博")) {
targetAjList2.add(gBaseAJJBXX);
ajNos2.add(gBaseAJJBXX.getAjbh());
}
if (gBaseAJJBXX.getAjlbmc().contains("嫖娼") || gBaseAJJBXX.getAjlbmc().contains("招嫖")
|| gBaseAJJBXX.getAjlbmc().contains("嫖宿")) {
if (gBaseAJJBXX.getAjlbmc().contains("幼女")) {
LocalDateTime limit = LocalDateTime.now().minusYears(1);
for (BadHabit badHabit : habitList) {
if (badHabit.getAjlbmc().contains("酒")) {
alcoholics.computeIfAbsent(badHabit.getIdCode(), k -> new ArrayList<>()).add(badHabit.getAjbh());
LocalDateTime tmp = DateTimeUtil.date2LocalDateTime(badHabit.getBarq());
if (tmp != null && tmp.isAfter(limit))
alcoholics2.computeIfAbsent(badHabit.getIdCode(), k -> new ArrayList<>()).add(badHabit.getAjbh());
}
if (badHabit.getAjlbmc().contains("赌博")) {
gambler.computeIfAbsent(badHabit.getIdCode(), k -> new ArrayList<>()).add(badHabit.getAjbh());
}
if (badHabit.getAjlbmc().contains("嫖娼") || badHabit.getAjlbmc().contains("招嫖")
|| badHabit.getAjlbmc().contains("嫖宿")) {
if (badHabit.getAjlbmc().contains("幼女")) {
continue;
}
targetAjList3.add(gBaseAJJBXX);
ajNos3.add(gBaseAJJBXX.getAjbh());
AIDS.computeIfAbsent(badHabit.getIdCode(), k -> new ArrayList<>()).add(badHabit.getAjbh());
}
}
RiskTask task = riskTaskRepository.create(ajNos.size(), 36);
RiskTask task2 = riskTaskRepository.create(ajNos2.size(), 60);
RiskTask task3 = riskTaskRepository.create(ajNos3.size(), 61);
log.info("共计案件:{} | {} | {}", ajNos.size(), ajNos2.size(), ajNos3.size());
List<RiskModelTaskClue> toInsert1 = new ArrayList<>();
CompletableFuture.allOf(
CompletableFutureUtil.runSyncObject(() -> toInsert1.addAll(findBadHabit(ajNos, targetAjList, task, domain, "酗酒行为", "B35酗酒"))),
CompletableFutureUtil.runSyncObject(() -> findBadHabit(ajNos2, targetAjList2, task2, domain, "赌博行为", "B37赌博")),
CompletableFutureUtil.runSyncObject(() -> findBadHabit(ajNos3, targetAjList3, task3, domain, "其它成瘾行为", "B40其它成瘾行为"))
CompletableFutureUtil.runSyncObject(() -> createBadHabit(alcoholics, domain, 36, "酗酒行为", "B35酗酒")),
CompletableFutureUtil.runSyncObject(() -> createBadHabit(gambler, domain, 60, "赌博行为", "B37赌博")),
CompletableFutureUtil.runSyncObject(() -> createBadHabit(AIDS, domain, 61, "其它成瘾行为", "B40其它成瘾行为")),
CompletableFutureUtil.runSyncObject(() -> createBadHabit(alcoholics2, domain, 62, "一年内酗酒行为", "B78酗酒"))
).join();
log.info("开始进行数据库操作");
if(toInsert1.isEmpty()) {
return;
}
// 近一年酗酒
RiskTask task4 = riskTaskRepository.create(toInsert1.size(), 62);
Map<String, RiskModelTaskClue> old = domain.getOldMap(task4.getModelId(), true);
List<RiskModelTaskClue> toInsertYears = new ArrayList<>();
for (RiskModelTaskClue clue : toInsert1) {
if(old.get(clue.getIdCode()) == null) {
clue.setModelId(task4.getModelId());
clue.setTaskId(task4.getId());
toInsertYears.add(clue);
}
}
void createBadHabit(Map<String, List<String>> badHabits, TaskParamDomain domain, Integer modelId, String tag, String bigTag) {
RiskTask task = riskTaskRepository.create(badHabits.size(), modelId);
Map<String, RiskModelTaskClue> olds = domain.getOldMap(modelId, true);
if(!toInsertYears.isEmpty()) {
riskModelTaskClueService.saveClues(toInsertYears, "B78酗酒");
}
List<RiskModelTaskClue> toUpdate = new ArrayList<>();
List<String> idCodes = new ArrayList<>();
// 酗酒 看看有没有过期
for (Map.Entry<String, RiskModelTaskClue> entry : old.entrySet()) {
if(entry.getValue().getEventTime() == null) {
continue;
}
if(entry.getValue().getEventTime().isBefore(limit)) {
RiskModelTaskClue update = new RiskModelTaskClue();
update.setId(entry.getValue().getId());
update.setDel(1);
toUpdate.add(update);
idCodes.add(entry.getValue().getIdCode());
}
}
if(!toUpdate.isEmpty()) {
riskModelTaskClueService.deleteCluesAndDeleteTag(toUpdate, idCodes, task4.getModelId());
}
riskTaskRepository.updateTask(task4.getId(), toInsertYears.size(), toUpdate.size());
}
List<RiskModelTaskClue> findBadHabit(List<String> ajNos, List<GBaseAJJBXX> targetAjList, RiskTask task, TaskParamDomain domain, String tag, String bigTag) {
List<List<String>> ajNo = IntStream.range(0, (ajNos.size() + 9999) / 10000)
.mapToObj(i -> ajNos.subList(i * 10000, Math.min((i + 1) * 10000, ajNos.size())))
.toList();
List<GBaseWFRXX> wfrList = new ArrayList<>();
ajNo.forEach(aj -> wfrList.addAll(gBaseWFRXXRepository.list(new LambdaQueryWrapper<GBaseWFRXX>()
.select(GBaseWFRXX::getAjbh, GBaseWFRXX::getZjhm)
.in(GBaseWFRXX::getAjbh, aj))));
// 违法信息
Map<String, List<GBaseWFRXX>> wfrMap = wfrList.stream().filter(it -> it.getZjhm() != null).collect(Collectors.groupingBy(GBaseWFRXX::getZjhm));
// 案件信息
Map<String, GBaseAJJBXX> ajMap = targetAjList.stream().collect(Collectors.toMap(GBaseAJJBXX::getAjbh, Function.identity(), (oldValue, newValue) -> newValue));
List<RiskModelTaskClue> oldList = Optional.ofNullable(domain.getMap().get(task.getModelId())).orElse(new ArrayList<>());
// 人员的旧线索
Map<String, List<RiskModelTaskClue>> clueMap = oldList.stream().collect(Collectors.groupingBy(RiskModelTaskClue::getIdCode));
List<RiskModelTaskClue> clues;
LocalDateTime limit = LocalDateTime.now().minusYears(1);
// 创建新数据
List<RiskModelTaskClue> toInsert = new ArrayList<>();
List<RiskModelTaskClue> toInsert2 = new ArrayList<>();
log.info("开始遍历人员:{}", wfrMap.size());
for (RiskPersonal person : domain.getPersons()) {
List<GBaseWFRXX> wfTmp = Optional.ofNullable(wfrMap.get(person.getIdCode())).orElse(new ArrayList<>());
wfTmp = wfTmp.stream().filter(StreamUtil.distinctByKey(GBaseWFRXX::getAjbh)).toList();
if(wfTmp.isEmpty()){
continue;
}
// 该人员旧的线索
clues = clueMap.get(person.getIdCode());
if(clues != null) {
continue;
}
List<String> tmp = badHabits.get(person.getIdCode());
if (tmp == null) continue;
tmp = tmp.stream().distinct().sorted().toList();
String desc = "结合案件信息和违法人信息相关数据,发现该人员有" + tmp.size() + "起" + tag + "相关案件,相关案件编号为:" + String.join(",", tmp);
StringBuilder sb = new StringBuilder("结合案件信息和违法人信息相关数据,发现该人员有"+wfTmp.size()+"起"+tag+"相关案件,相关案件编号为:");
StringBuilder ajs = new StringBuilder();
LocalDateTime eventTime = null;
int count = 0;
int size = 0;
for (GBaseWFRXX gBaseWFRXX : wfTmp) {
GBaseAJJBXX aj = ajMap.get(gBaseWFRXX.getAjbh());
if (aj == null) {
RiskModelTaskClue old = olds.get(person.getIdCode());
if (old != null && !old.getData().equals(desc)) {
RiskModelTaskClue update = new RiskModelTaskClue();
update.setId(old.getId());
update.setData(desc);
update.setEventTime(LocalDateTime.now());
update.setScore(Math.min(5, tmp.size()));
update.setModelId(modelId);
toUpdate.add(update);
olds.remove(person.getIdCode());
continue;
}
sb.append(gBaseWFRXX.getAjbh()).append(",");
size++;
try {
LocalDateTime tmp = aj.getBarq().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
if(tmp.isAfter(limit)) {
count++;
ajs.append(aj.getAjbh()).append(",");
}
if(eventTime == null) {
eventTime = tmp;
if(old != null) {
olds.remove(person.getIdCode());
continue;
}
if(eventTime.isBefore(tmp)) {
eventTime = tmp;
}
} catch (Exception ignored) {
}
}
ClueData data = ClueData.builder()
toInsert.add(DataUtil.createClueData(task, ClueData.builder()
.id("habit")
.name(person.getName())
.idCode(person.getIdCode())
.tags(List.of(tag))
.personId(person.getId())
.sourceData(sb.substring(0, sb.length()-1))
.score(Math.min(size, 5))
.eventTime(Optional.ofNullable(eventTime).orElse(LocalDateTime.now()))
.build();
toInsert.add(DataUtil.createClueData(task, data));
if(count > 0) {
toInsert2.add(DataUtil.createClueData(new RiskTask(), ClueData.builder()
.id("habit2")
.name(person.getName())
.idCode(person.getIdCode())
.tags(List.of(Default.YEAR_DRINK))
.score(5)
.personId(person.getId())
.sourceData("发现该人员近一年内有酗酒行为,具体案件为:"+ajs.substring(0, ajs.length()-1))
.sourceData(desc)
.score(Math.min(tmp.size(), 5))
.eventTime(LocalDateTime.now())
.build()));
}
List<RiskModelTaskClue> toDelete = new ArrayList<>();
List<String> deleteIdCodes = new ArrayList<>();
for (Map.Entry<String, RiskModelTaskClue> entry : olds.entrySet()) {
RiskModelTaskClue delete = new RiskModelTaskClue();
delete.setId(entry.getValue().getId());
delete.setDel(1);
toDelete.add(delete);
deleteIdCodes.add(entry.getValue().getIdCode());
}
if (!toInsert.isEmpty()) {
log.info("新增{}数据{}条", tag, toInsert.size());
riskModelTaskClueService.saveClues(toInsert, bigTag);
}
riskTaskRepository.updateTask(task.getId(), toInsert.size(), 0);
return toInsert2;
if (!toUpdate.isEmpty()) {
log.info("修改{}数据{}条", tag, toUpdate.size());
riskModelTaskClueService.updateClues(toInsert, modelId);
}
if (!toDelete.isEmpty()) {
log.info("删除{}数据{}条", tag, toDelete.size());
riskModelTaskClueService.deleteCluesAndDeleteTag(toDelete, deleteIdCodes, modelId);
}
riskTaskRepository.updateTask(task.getId(), toInsert.size(), toDelete.size() + toUpdate.size());
}
}

19
src/main/java/com/biutag/supervisiondata/service/impl/MarriageServiceImpl.java

@ -78,9 +78,10 @@ public class MarriageServiceImpl implements MarriageService {
clueData.setEventTime(LocalDateTime.now());
}
toInsert1.add(DataUtil.createClueData(task2, clueData));
if(clueData.getEventTime().isBefore(yearsDate) || old2.get(person.getIdCode()) != null) {
continue;
}
if(clueData.getEventTime().isBefore(yearsDate)) continue;
RiskModelTaskClue oldClue = old2.get(person.getIdCode());
// 如果老数据存在且在新数据之前
if(oldClue != null && !clueData.getEventTime().isAfter(oldClue.getEventTime())) continue;
ClueData clueData2 = ClueData.builder()
.id("")
.score(5)
@ -128,16 +129,18 @@ public class MarriageServiceImpl implements MarriageService {
log.info("修改个离婚:{}", toUpdate2.size());
riskModelTaskClueService.deleteCluesAndDeleteTag(toUpdate2, idCodes2, task2.getModelId());
}
riskTaskRepository.updateTask(task2.getId(), toInsert1.size(), 0);
riskTaskRepository.updateTask(task2.getId(), toInsert1.size(), toUpdate2.size());
if(!toInsert2.isEmpty()) {
log.info("新增个人婚姻创伤:{}", toInsert2.size());
riskModelTaskClueService.saveClues(toInsert2, "个人婚姻创伤");
}
// 创伤先删在增
if(!toUpdate.isEmpty()) {
log.info("修改个人婚姻创伤:{}", toUpdate.size());
riskModelTaskClueService.deleteCluesAndDeleteTag(toUpdate, idCodes, task.getModelId());
}
if(!toInsert2.isEmpty()) {
log.info("新增个人婚姻创伤:{}", toInsert2.size());
riskModelTaskClueService.saveClues(toInsert2, "个人婚姻创伤");
}
riskTaskRepository.updateTask(task.getId(), toInsert2.size(), toUpdate.size());
}
}

78
src/main/java/com/biutag/supervisiondata/service/impl/NoControlServiceImpl.java

@ -2,25 +2,21 @@ package com.biutag.supervisiondata.service.impl;
import com.biutag.supervisiondata.common.interfaces.CompletableFutureUtil;
import com.biutag.supervisiondata.pojo.ClueData;
import com.biutag.supervisiondata.pojo.constants.Default;
import com.biutag.supervisiondata.pojo.domain.*;
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.repository.GBaseZDRYRepository;
import com.biutag.supervisiondata.repository.RiskPersonalRepository;
import com.biutag.supervisiondata.repository.RiskTaskRepository;
import com.biutag.supervisiondata.service.NoControlService;
import com.biutag.supervisiondata.service.RiskModelTaskClueService;
import com.biutag.supervisiondata.util.DataUtil;
import com.biutag.supervisiondata.util.BhUtil;
import com.biutag.supervisiondata.util.DateTimeUtil;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
@ -39,16 +35,10 @@ public class NoControlServiceImpl implements NoControlService {
private final RiskTaskRepository riskTaskRepository;
private final RiskPersonalRepository personalRepository;
private final RiskModelTaskClueService clueService;
@Override
public void syncNoControlData(TaskParamDomain domain) {
// 婚姻不用管管控
// clue 应该要看结婚状态
RiskTask task = riskTaskRepository.create(domain.getPersons().size(), 45);
List<ClueData> clueData = new ArrayList<>();
Map<String, RiskPersonal> idCodes = new HashMap<>();
Map<String, RiskPersonal> mobiles = new HashMap<>();
@ -64,32 +54,68 @@ public class NoControlServiceImpl implements NoControlService {
CompletableFutureUtil.runSyncObject(() -> clueData.addAll(crazyLevelThreeControl(idCodes, mobiles)))
).join();
List<RiskModelTaskClue> clues = new ArrayList<>();
RiskTask task = riskTaskRepository.create(clueData.size(), 45);
List<RiskModelTaskClue> toInsert = new ArrayList<>();
List<RiskModelTaskClue> toUpdate = new ArrayList<>();
List<RiskModelTaskClue> toDelete = new ArrayList<>();
List<String> deleteIdCodes = new ArrayList<>();
Map<String, List<ClueData>> clueDataMap = clueData.stream().collect(Collectors.groupingBy(ClueData::getIdCode));
Map<String, RiskModelTaskClue> oldMap = domain.getOldMap(task.getModelId(), true);
for (Map.Entry<String, List<ClueData>> entry : clueDataMap.entrySet()) {
RiskPersonal personal = idCodes.get(entry.getKey());
List<String> tags = new ArrayList<>();
for (ClueData data : entry.getValue()) {
tags.addAll(data.getTags());
List<String> tags = entry.getValue().stream().flatMap(data -> data.getTags().stream())
.collect(Collectors.toList());
String desc = "该人员存在:"+ tags.stream().distinct().sorted().collect(Collectors.joining(","));
RiskModelTaskClue old = oldMap.get(entry.getKey());
if(old != null && !old.getData().equals(desc)) {
RiskModelTaskClue update = new RiskModelTaskClue();
update.setId(old.getId());
update.setData(desc);
update.setEventTime(LocalDateTime.now());
toUpdate.add(update);
oldMap.remove(entry.getKey());
continue;
}
String tag = tags.stream().distinct().collect(Collectors.joining(","));
clues.add(DataUtil.createClueData(task, ClueData.builder()
if(old != null) {
oldMap.remove(entry.getKey());
continue;
}
toInsert.add(DataUtil.createClueData(task, ClueData.builder()
.id("")
.idCode(personal.getIdCode())
.name(personal.getName())
.personId(personal.getId())
.tags(tags)
.score(5)
.sourceData("该人员存在:"+tag)
.eventTime(LocalDateTime.now())
.sourceData(desc)
.build()));
}
if (!clues.isEmpty()) {
clueService.saveClues(clues, "B92风险人员排查不到位");
for (Map.Entry<String, RiskModelTaskClue> entry : oldMap.entrySet()) {
RiskModelTaskClue delete = new RiskModelTaskClue();
delete.setId(entry.getValue().getId());
delete.setDel(1);
toDelete.add(delete);
deleteIdCodes.add(entry.getValue().getIdCode());
}
if (!toInsert.isEmpty()) {
log.info("新增风险人员排查不到位数据{}条", toInsert.size());
clueService.saveClues(toInsert, "B92风险人员排查不到位");
}
if (!toUpdate.isEmpty()) {
log.info("修改风险人员排查不到位数据{}条", toUpdate.size());
clueService.updateClues(toUpdate, task.getModelId());
}
if (!toDelete.isEmpty()) {
log.info("删除风险人员排查不到位数据{}条", toDelete.size());
clueService.deleteCluesAndDeleteTag(toDelete, deleteIdCodes, task.getModelId());
}
riskTaskRepository.updateTask(task.getId(), clues.size(), 0);
riskTaskRepository.updateTask(task.getId(), toInsert.size(), toDelete.size()+toUpdate.size());
}
List<ClueData> crazyControl(Map<String, RiskPersonal> idCodes, Map<String, RiskPersonal> mobiles) {
@ -114,8 +140,6 @@ public class NoControlServiceImpl implements NoControlService {
.personId(person.getId())
.tags(List.of("精神病人排查不到位"))
.score(5)
.sourceData("该人员属于精神病人,涉及到有关警情," + Optional.ofNullable(extreme.getJjdbh()).map(it -> "接警单编号:" + it).orElse("") + "属于管控不到位" + Optional.ofNullable(extreme.getCjqk()).map(it -> ",具体情况:" + it).orElse(""))
.eventTime(DateTimeUtil.date2LocalDateTime(extreme.getBjsj()))
.build();
clueData.add(data);
}
@ -141,8 +165,6 @@ public class NoControlServiceImpl implements NoControlService {
.personId(person.getId())
.tags(List.of("刑事、吸毒人员排查不到位"))
.score(5)
.sourceData("该人员属于故意犯罪并作出刑事判决人员(排除仍在羁押状态的)、公安机关查处吸毒人员(排除仍在羁押状态的),涉及到案件," + Optional.ofNullable(violence.getAjbh()).map(it -> "案件编号:" + it).orElse("") + "属于管控不到位" + Optional.ofNullable(violence.getAjmc()).map(it -> ",案件名称:" + it).orElse("") + Optional.ofNullable(violence.getWfss()).map(it -> ",违法事实:" + it).orElse(""))
.eventTime(DateTimeUtil.date2LocalDateTime(violence.getBarq()))
.build();
clueData.add(data);
}
@ -168,8 +190,6 @@ public class NoControlServiceImpl implements NoControlService {
.personId(person.getId())
.tags(List.of("刑满释放人排查不到位"))
.score(5)
.sourceData("该人员属于看守所故意犯罪刑满释放不满5年人员,发现在重点人员中 未纳入或未按要求落实双列管," + Optional.ofNullable(noControl.getCrime()).map(it -> "涉及犯罪事实:" + it).orElse("") + "" + Optional.ofNullable(noControl.getBriefCase()).map(it -> ",,具体事件表现为:" + it).orElse(""))
.eventTime(DateTimeUtil.date2LocalDateTime(noControl.getOutDate()))
.build();
clueData.add(data);
}
@ -198,8 +218,6 @@ public class NoControlServiceImpl implements NoControlService {
.personId(person.getId())
.tags(List.of("精神疾病三级以上人员排查不到位"))
.score(5)
.sourceData("卫健委精神疾病三级以上人员,发现在重点人员中 未纳入或未按要求落实双列管" + Optional.ofNullable(crazyLevelThree.getTsqksm()).map(it -> ",备注:" + it).orElse(""))
.eventTime(LocalDateTime.now())
.build());
}
return clueData;

117
src/main/java/com/biutag/supervisiondata/service/impl/PointServiceImpl.java

@ -62,10 +62,6 @@ public class PointServiceImpl implements PointService {
private final GBaseCSCZRKRepository cSCZRKRepository;
private final GBaseWFRWFXXRepository wFRWFXXRepository;
private final GBaseGAXZCFJDSRepository gAXZCFJDSRepository;
private final WdpcHZCRYXXRepository hZCRYXXRepository;
private final WdpcXdryRepository xdryRepository;
@ -103,20 +99,30 @@ public class PointServiceImpl implements PointService {
List<RiskPersonal> persons = getPersons();
RiskTask task = taskRepository.create(persons.size(), 43);
List<RiskModelTaskClue> clues = Optional.ofNullable(domain.getMap().get(task.getModelId())).orElse(new ArrayList<>());
Map<String, List<RiskModelTaskClue>> oldClueMap = clues.stream().collect(Collectors.groupingBy(RiskModelTaskClue::getIdCode));
Map<String, RiskModelTaskClue> oldClueMap = domain.getOldMap(task.getModelId(), true);
Map<String, List<RiskPersonal>> map = persons.stream().collect(Collectors.groupingBy(RiskPersonal::getIdCode));
List<RiskModelTaskClue> toInsert = new ArrayList<>();
List<RiskModelTaskClue> toUpdate = new ArrayList<>();
List<RiskModelTaskClue> toDelete = new ArrayList<>();
List<String> deleteIdCodes = new ArrayList<>();
for (Map.Entry<String, List<RiskPersonal>> entry : map.entrySet()) {
List<RiskModelTaskClue> olds = oldClueMap.get(entry.getKey());
// 是否类型只存在一条
if (olds != null) {
List<RiskPersonal> personals = entry.getValue().stream().filter(StreamUtil.distinctByKey(RiskPersonal::getTags)).toList();
if (personals.isEmpty()) continue;
String desc = "发现该人员为重点人员,存在" + personals.size() + "个标签";
RiskModelTaskClue old = oldClueMap.get(entry.getKey());
if (old != null && old.getData().equals(desc)) {
oldClueMap.remove(entry.getKey());
continue;
}
List<RiskPersonal> personals = entry.getValue().stream().filter(StreamUtil.distinctByKey(RiskPersonal::getTags)).toList();
if (personals.isEmpty()) {
if (old != null) {
oldClueMap.remove(entry.getKey());
RiskModelTaskClue update = new RiskModelTaskClue();
update.setId(old.getId());
update.setData(desc);
update.setEventTime(LocalDateTime.now());
toUpdate.add(update);
continue;
}
toInsert.add(DataUtil.createClueData(task, ClueData.builder()
@ -124,16 +130,31 @@ public class PointServiceImpl implements PointService {
.score(5)
.personId(personals.getFirst().getId())
.tags(List.of("重点人员"))
.sourceData("发现该人员为重点人员,存在" + personals.size() + "个标签")
.sourceData(desc)
.name(personals.getFirst().getName())
.idCode(personals.getFirst().getIdCode())
.eventTime(personals.getFirst().getControlTime())
.build()));
}
for (Map.Entry<String, RiskModelTaskClue> entry : oldClueMap.entrySet()) {
RiskModelTaskClue delete = new RiskModelTaskClue();
delete.setId(entry.getValue().getId());
delete.setDel(1);
toDelete.add(delete);
deleteIdCodes.add(entry.getValue().getIdCode());
}
if (!toInsert.isEmpty()) {
log.info("新增是否重点人员人数{}条", toInsert.size());
modelTaskClueService.saveClues(toInsert, "B11是否是重点人员");
}
taskRepository.updateTask(task.getId(), toInsert.size(), 0);
if (!toUpdate.isEmpty()) {
log.info("修改是否重点人员人数{}条", toUpdate.size());
modelTaskClueService.updateClues(toUpdate, task.getModelId());
}
if (!toDelete.isEmpty()) {
log.info("修改是否重点人员人数{}条", toDelete.size());
modelTaskClueService.deleteCluesAndDeleteTag(toDelete, deleteIdCodes, task.getModelId());
}
taskRepository.updateTask(task.getId(), toInsert.size(), toUpdate.size() + toUpdate.size());
}
private final WdpcGrjdZblxRepository zblxRepository;
@ -234,52 +255,67 @@ public class PointServiceImpl implements PointService {
List<Violence> list = zdryRepository.getBaseMapper().syncViolencePerson();
Map<String, List<Violence>> violenceMap = list.stream().collect(Collectors.groupingBy(Violence::getZjhm));
List<RiskModelTaskClue> olds = Optional.ofNullable(domain.getMap().get(task.getId())).orElse(new ArrayList<>());
Map<String, List<RiskModelTaskClue>> maps = olds.stream().collect(Collectors.groupingBy(RiskModelTaskClue::getIdCode));
Map<String, RiskModelTaskClue> oldMap = domain.getOldMap(task.getModelId(), true);
List<RiskModelTaskClue> toInsert = new ArrayList<>();
List<RiskModelTaskClue> toUpdate = new ArrayList<>();
List<RiskModelTaskClue> toDelete = new ArrayList<>();
List<String> deleteIdCodes = new ArrayList<>();
for (RiskPersonal person : domain.getPersons()) {
List<Violence> tmp = violenceMap.get(person.getIdCode());
if (tmp == null) continue;
List<RiskModelTaskClue> old = maps.get(person.getIdCode());
if (old != null) continue;
String desc = "通过核查案件信息,发现该人员有暴力伤害行为,案件编号为:" + String.join(",", tmp.stream().map(Violence::getAjbh).distinct().sorted().toList());
tmp = tmp.stream().filter(StreamUtil.distinctByKey(Violence::getAjbh)).toList();
StringBuilder sb = new StringBuilder("通过核查案件信息,发现该人员有暴力伤害行为,案件编号为:");
List<String> tags = new ArrayList<>();
LocalDateTime date = null;
for (Violence violence : tmp) {
sb.append(violence.getAjbh()).append(",");
if(!tags.contains(violence.getAjlbmc())) {
tags.add(violence.getAjlbmc());
}
try {
LocalDateTime ld = violence.getBarq().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
if(date == null) {
date = ld;
List<String> tags = tmp.stream().map(Violence::getAjlbmc).distinct().toList();
RiskModelTaskClue old = oldMap.get(person.getIdCode());
if (old != null && old.getData().equals(desc)) {
oldMap.remove(person.getIdCode());
continue;
}
if(date.isAfter(ld)) {
date = ld;
}
} catch (Exception ignored) {
}
if (old != null) {
oldMap.remove(person.getIdCode());
RiskModelTaskClue update = new RiskModelTaskClue();
update.setId(old.getId());
update.setData(desc);
update.setEventTime(LocalDateTime.now());
update.setScore(Math.min(tmp.size(), 5));
toUpdate.add(update);
continue;
}
ClueData data = ClueData.builder()
.name(person.getName())
.id("")
.personId(person.getId())
.idCode(person.getIdCode())
.sourceData(sb.substring(0, sb.length()-1))
.sourceData(desc)
.tags(tags)
.score(Math.min(tmp.size(), 5))
.eventTime(date)
.build();
toInsert.add(DataUtil.createClueData(task, data));
}
for (Map.Entry<String, RiskModelTaskClue> entry : oldMap.entrySet()) {
RiskModelTaskClue delete = new RiskModelTaskClue();
delete.setId(entry.getValue().getId());
delete.setDel(1);
toDelete.add(delete);
deleteIdCodes.add(entry.getValue().getIdCode());
}
if (!toInsert.isEmpty()) {
log.info("新增暴力伤害行为数据{}条", toInsert.size());
modelTaskClueService.saveClues(toInsert, "B89暴力伤害行为");
}
taskRepository.updateTask(task.getId(), toInsert.size(), 0);
if (!toUpdate.isEmpty()) {
log.info("修改暴力伤害行为数据{}条", toUpdate.size());
modelTaskClueService.updateClues(toUpdate, task.getModelId());
}
if (!toDelete.isEmpty()) {
log.info("删除暴力伤害行为数据{}条", toDelete.size());
modelTaskClueService.deleteCluesAndDeleteTag(toDelete, deleteIdCodes, task.getModelId());
}
taskRepository.updateTask(task.getId(), toInsert.size(), toDelete.size()+toUpdate.size());
}
@Override
@ -311,7 +347,8 @@ public class PointServiceImpl implements PointService {
.build();
try {
data.setEventTime(extreme.getBjsj().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
} catch (Exception ignored) {}
} catch (Exception ignored) {
}
toInsert.add(DataUtil.createClueData(task, data));
}
@ -2032,7 +2069,7 @@ public class PointServiceImpl implements PointService {
log.info("车主数量:{}", carUsers.size());
RiskTask task = taskRepository.create(carUsers.size(), 53);
Map<String, RiskModelTaskClue> clueMap = domain.getOldMap(task.getModelId(), false);
Map<String, RiskModelTaskClue> clueMap = domain.getOldMap(task.getModelId(), true);
HashSet<String> exist = new HashSet<>();
for (String carUser : carUsers) {
exist.add(carUser);

22
src/main/java/com/biutag/supervisiondata/service/impl/RiskModelTaskClueServiceImpl.java

@ -115,12 +115,32 @@ public class RiskModelTaskClueServiceImpl implements RiskModelTaskClueService {
@Override
public void deleteCluesAndDeleteTag(List<RiskModelTaskClue> list, List<String> idCodes, Integer modelId) {
list.forEach(item -> item.setUpdateTime(LocalDateTime.now()));
clueRepository.updateBatchById(list);
if (!idCodes.isEmpty()) {
tagRepository.getBaseMapper().updateToDelete(idCodes, modelId);
}
}
@Override
public void updateClues(List<RiskModelTaskClue> list, Integer modelId) {
List<ScoreRule> rules = riskScoreRuleMapper.selectRuleByModelId(List.of(modelId));
// 赋分规则
Map<Integer, ScoreRule> ruleMap = rules.stream().collect(Collectors.toMap(ScoreRule::getModelId, Function.identity(), (val, old) -> val));
ScoreRule rule = ruleMap.get(modelId);
for (RiskModelTaskClue clue : list) {
if (rule == null) continue;
BigDecimal score = new BigDecimal(clue.getScore().toString());
BigDecimal weight = new BigDecimal(rule.getWeight().toString());
score = score.multiply(new BigDecimal("20"))
.multiply(weight)
.divide(new BigDecimal("100"), 2, RoundingMode.UP);
clue.setScoreCalc(Optional.ofNullable(score.doubleValue()).orElse(0.00));
clue.setUpdateTime(LocalDateTime.now());
}
clueRepository.updateBatchById(list);
}
final String sql = "INSERT INTO risk_model_task_clue(model_id, name, id_code, task_id, source_id, risk_reason, source, data, score, score_calc, score_result, event_time, create_time, update_time, case_ids) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
public void batchInsert(List<RiskModelTaskClue> alliances, String bigTag, Map<Integer, ScoreRule> ruleMap) {
@ -163,7 +183,7 @@ public class RiskModelTaskClueServiceImpl implements RiskModelTaskClueService {
prepareStatement.executeBatch();
connection.commit();
} catch (Exception e) {
e.printStackTrace();
log.error("", e);
throw new BusinessException(StatusCode.BUSINESS, "数据保存失败");
}
}

17
src/main/java/com/biutag/supervisiondata/task/TaskService.java

@ -86,14 +86,31 @@ public class TaskService {
@Resource
private RiskTaskService riskTaskService;
@Resource
private MarriageService marriageService;
@Resource
private HabitService habitService;
@Resource
private NoControlService noControlService;
/**
* 2点更新模型
*/
@Scheduled(cron = "0 0 02 * * ?")
public void modelRefresh() {
LocalDateTime fiveYearsAgo = LocalDateTime.now().minusYears(5);
CompletableFutureUtil.runSync(() -> {
riskTaskService.eduAndAreaModelTask(initDomain(List.of(34,41)));
riskTaskService.infoModelTask(initDomain(List.of(32,33)));
marriageService.marriageModelTask(initDomain(List.of(39,51)));
// 五年内酒、赌博、嫖娼案件,一年内酒案件
habitService.syncBadHabit(fiveYearsAgo, initDomain(List.of(36,60,61,62)));
pointService.syncCarUser(initDomain(List.of(53)));
pointService.syncScore(initDomain(List.of(43)));
pointService.syncViolence(initDomain(List.of(44)));
noControlService.syncNoControlData(initDomain(List.of(45)));
});
}

Loading…
Cancel
Save