Browse Source

Merge remote-tracking branch 'origin/master'

master
sjh 1 year ago
parent
commit
e329e429c2
  1. 13
      src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseJJDMapper.java
  2. 2
      src/main/java/com/biutag/supervisiondata/pojo/constants/Default.java
  3. 4
      src/main/java/com/biutag/supervisiondata/service/GBaseJJDService.java
  4. 5
      src/main/java/com/biutag/supervisiondata/service/RiskTaskService.java
  5. 185
      src/main/java/com/biutag/supervisiondata/service/impl/GBaseJJDServiceImpl.java
  6. 53
      src/main/java/com/biutag/supervisiondata/service/impl/RiskTaskServiceImpl.java

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

@ -64,6 +64,17 @@ public interface GBaseJJDMapper extends BaseMapper<GBaseJJD> {
" where (bjnr like '%报复%' or cjqk like '%报复%') and bjsj between #{start} and #{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}")
/**
* 袭警
* @return 列表
*/
@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 SUBSTR(jqxzdm, 1, 2) != '99' and bjsj >= #{start}")
List<GBaseJJD> selectAttackPolist(@Param("start")String start);
/**
* 家暴
* @return 列表
*/
@Select(" select jjdbh, bjdh,bjrxm ,bjrzjhm, bjnr, cjqk, bjsj from dwd_asj_zhtx_jjd where (bjnr like '%家暴%' or cjqk like '%家暴%' or jqxzmc like '%家庭暴力%' or cjqk like '%家庭暴力%' or bjnr like '%家庭暴力%') and SUBSTR(jqxzdm, 1, 2) != '99' and bjsj >= #{start}")
List<GBaseJJD> selectHomeViolence(@Param("start")String start);
}

2
src/main/java/com/biutag/supervisiondata/pojo/constants/Default.java

@ -102,6 +102,8 @@ public class Default {
public static final String WF_IG = "涉访涉诉、前科劣迹";
public static final String HOME_VIOLENCE = "家庭、人际、两性关系";
public static final String IS_PETITION = "信访、投诉-信访局信访";
public static final String FATHER_EDUCATION = "父亲文化程度";

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

@ -26,4 +26,8 @@ public interface GBaseJJDService {
* 攻击警察
*/
void syncPoliceAttack(TaskParamDomain domain);
/**
* 家暴
*/
void syncHomeViolence(TaskParamDomain domain);
}

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

@ -1,11 +1,6 @@
package com.biutag.supervisiondata.service;
import com.biutag.supervisiondata.pojo.domain.TaskParamDomain;
import com.biutag.supervisiondata.pojo.entity.mine.RiskModelTaskClue;
import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonal;
import java.util.List;
import java.util.Map;
/**
* @author kami on 2024-11-11 14:14:32

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

@ -110,7 +110,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
continue;
} else {
mobiles1.add(item.getBjrlxdh());
jjdMap.computeIfAbsent(item.getBjrzjhm(), k -> new ArrayList<>()).add(item);
jjdMMap.computeIfAbsent(item.getBjrzjhm(), k -> new ArrayList<>()).add(item);
}
personals.add(person);
}
@ -165,8 +165,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
}
if (personal.getMobileNumber() != null && info == null) {
xxxInfo = mobileMap.get(personal.getMobileNumber());
if (xxxInfo == null || xxxInfo.isEmpty()) {
} else {
if (xxxInfo == null && xxxInfo.isEmpty()) {
info = compare(xxxInfo, personal.getName());
}
if (info == null && xxxInfo != null) {
@ -233,7 +232,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
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);
depart = Optional.ofNullable(org).map(PointOrg::getDm).map(jqExternalDepart::get).orElse(null);
}
if (depart == null) {
personal.setControlDepartId(null);
@ -390,7 +389,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
.name(person.getName())
.id(BhUtil.jjdBh(gBaseJJD.getJjdbh()))
.idCode(person.getIdCode())
.tag("平台涉警事件")
.tag("平台涉警事件")
.personId(person.getId())
.build();
StringBuilder sb = new StringBuilder("该人员存在平台涉警事件警情,接警单编号:" + gBaseJJD.getJjdbh());
@ -410,12 +409,188 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
toInsert.add(createClue(task.getModelId(), 5, task.getId(), data));
}
}
log.info("保存袭警数据:{}", toInsert.size());
if (!toInsert.isEmpty()) {
clueService.saveClues(toInsert, Default.WF_IG);
}
taskRepository.updateTask(task.getId(), toInsert.size(), 0);
}
@Override
public void syncHomeViolence(TaskParamDomain domain) {
String startTime = LocalDateTime.of(2023, 12, 6, 0, 0, 0).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
LocalDateTime limit = LocalDateTime.now().minusYears(1);
List<GBaseJJD> result = gBaseJJDRepository.getBaseMapper().selectHomeViolence(startTime);
// 被家暴
RiskTask task = taskRepository.create(result.size(), 65);
// 家暴
RiskTask task2 = taskRepository.create(result.size(), 66);
// ****被家暴*****
// 证件相关警情
Map<String, List<GBaseJJD>> shIdCodeMap = new WeakHashMap<>();
// 手机号相关警情
Map<String, List<GBaseJJD>> shMobileMap = new WeakHashMap<>();
// ****家暴*****
// 证件相关警情
Map<String, List<GBaseJJD>> wfIdCodeMap = new WeakHashMap<>();
// 手机号相关警情
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();
switch (tmp.size()) {
case 1 -> shIdCodeMap.computeIfAbsent(tmp.getFirst(), k -> new ArrayList<>()).add(gBaseJJD);
case 2 -> {
shIdCodeMap.computeIfAbsent(tmp.getFirst(), k -> new ArrayList<>()).add(gBaseJJD);
wfIdCodeMap.computeIfAbsent(tmp.get(1), k -> new ArrayList<>()).add(gBaseJJD);
}
default -> {
shIdCodeMap.computeIfAbsent(tmp.get(1), k -> new ArrayList<>()).add(gBaseJJD);
wfIdCodeMap.computeIfAbsent(tmp.get(2), k -> new ArrayList<>()).add(gBaseJJD);
}
}
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();
switch (tmp.size()) {
case 1 -> shMobileMap.computeIfAbsent(tmp.getFirst(), k -> new ArrayList<>()).add(gBaseJJD);
case 2 -> {
shMobileMap.computeIfAbsent(tmp.getFirst(), k -> new ArrayList<>()).add(gBaseJJD);
wfMobileMap.computeIfAbsent(tmp.get(1), k -> new ArrayList<>()).add(gBaseJJD);
}
default -> {
shMobileMap.computeIfAbsent(tmp.get(1), k -> new ArrayList<>()).add(gBaseJJD);
wfMobileMap.computeIfAbsent(tmp.get(2), k -> new ArrayList<>()).add(gBaseJJD);
}
}
continue;
}
if (gBaseJJD.getBjrzjhm() != null && !gBaseJJD.getBjrzjhm().isEmpty()) {
shIdCodeMap.computeIfAbsent(gBaseJJD.getBjrzjhm(), k -> new ArrayList<>()).add(gBaseJJD);
continue;
}
if (gBaseJJD.getBjdh() != null && !gBaseJJD.getBjdh().isEmpty()) {
shMobileMap.computeIfAbsent(gBaseJJD.getBjdh(), k -> new ArrayList<>()).add(gBaseJJD);
}
}
List<RiskModelTaskClue> oldList = Optional.ofNullable(domain.getMap().get(task.getModelId())).orElse(new ArrayList<>());
List<RiskModelTaskClue> oldList2 = Optional.ofNullable(domain.getMap().get(task2.getModelId())).orElse(new ArrayList<>());
// 按人分
Map<String, List<RiskModelTaskClue>> personOldMap = oldList.stream().collect(Collectors.groupingBy(RiskModelTaskClue::getIdCode));
Map<String, List<RiskModelTaskClue>> personOldMap2 = oldList2.stream().collect(Collectors.groupingBy(RiskModelTaskClue::getIdCode));
List<RiskModelTaskClue> toInsert = new ArrayList<>();
List<RiskModelTaskClue> toInsert2 = new ArrayList<>();
for (RiskPersonal person : domain.getPersons()) {
// 被家暴
toInsert.addAll(collectionClue(shIdCodeMap,shMobileMap, person, personOldMap, task, "被家暴"));
toInsert2.addAll(collectionClue(wfIdCodeMap,wfMobileMap, person, personOldMap2, task2, "家暴"));
}
List<RiskModelTaskClue> toUpdate = new ArrayList<>();
List<RiskModelTaskClue> toUpdate2 = new ArrayList<>();
List<String> deleteIdCards = new ArrayList<>();
List<String> deleteIdCards2 = new ArrayList<>();
for (RiskModelTaskClue clue : oldList) {
if(clue.getEventTime().isBefore(limit)) {
RiskModelTaskClue update = new RiskModelTaskClue();
update.setId(update.getId());
update.setDel(1);
toUpdate.add(update);
deleteIdCards.add(clue.getIdCode());
}
}
for (RiskModelTaskClue clue : oldList2) {
if(clue.getEventTime().isBefore(limit)) {
RiskModelTaskClue update = new RiskModelTaskClue();
update.setId(update.getId());
update.setDel(1);
toUpdate2.add(update);
deleteIdCards2.add(clue.getIdCode());
}
}
log.info("被家暴:{} | {}", toInsert.size(), toUpdate.size());
if (!toInsert.isEmpty()) {
clueService.saveClues(toInsert, Default.HOME_VIOLENCE);
}
if (!toUpdate.isEmpty()) {
clueService.deleteCluesAndDeleteTag(toUpdate, deleteIdCards, "被家暴");
}
log.info("家暴:{} | {}", toInsert2.size(), toUpdate2.size());
if (!toInsert.isEmpty()) {
clueService.saveClues(toInsert, Default.HOME_VIOLENCE);
}
if (!toUpdate2.isEmpty()) {
clueService.deleteCluesAndDeleteTag(toUpdate2, deleteIdCards, "家暴");
}
taskRepository.updateTask(task.getId(), toInsert.size(), toUpdate.size());
taskRepository.updateTask(task2.getId(), toInsert.size(), toUpdate2.size());
}
/**
* 手机要搜索的clue数据
* @param idCode 身份证Map
* @param mobile 手机号map
* @param personal 人员
* @param personOldMap 人员的旧clue
* @param task 任务
* @param tag 标签
* @return 要新增的clue
*/
List<RiskModelTaskClue> collectionClue(Map<String, List<GBaseJJD>> idCode, Map<String, List<GBaseJJD>> mobile,RiskPersonal personal,Map<String, List<RiskModelTaskClue>> personOldMap, RiskTask task, String tag) {
List<GBaseJJD> jjdList = Optional.of(idCode.get(personal.getIdCode())).orElse(new ArrayList<>());
jjdList.addAll(Optional.of(mobile.get(personal.getMobileNumber())).orElse(new ArrayList<>()));
if (jjdList.isEmpty()) {
return new ArrayList<>();
}
jjdList = jjdList.stream().filter(StreamUtil.distinctByKey(GBaseJJD::getJjdbh)).toList();
List<RiskModelTaskClue> olds = Optional.ofNullable(personOldMap.get(personal.getIdCode())).orElse(new ArrayList<>());
Map<String, RiskModelTaskClue> oldMap = olds.stream().collect(Collectors.toMap(RiskModelTaskClue::getCaseIds, Function.identity(), (val, old) -> val));
List<RiskModelTaskClue> toInsert = new ArrayList<>();
for (GBaseJJD gBaseJJD : jjdList) {
if (oldMap.get(BhUtil.jjdBh(gBaseJJD.getJjdbh())) != null) {
continue;
}
ClueData data = ClueData.builder()
.name(personal.getName())
.id(BhUtil.jjdBh(gBaseJJD.getJjdbh()))
.idCode(personal.getIdCode())
.tag(tag)
.personId(personal.getId())
.build();
StringBuilder sb = new StringBuilder("该人员存在"+tag+"警情,接警单编号:" + 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));
}
return toInsert;
}
void toRedisCache(List<GBaseJJD> jjdList, String keyName) {
RedisDao.getInstance().removeListAll(keyName);
RedisDao.getInstance().pipeLineExec((connection, key, value) -> jjdList.forEach(item -> {

53
src/main/java/com/biutag/supervisiondata/service/impl/RiskTaskServiceImpl.java

@ -5,7 +5,6 @@ import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.biutag.supervisiondata.common.interfaces.CompletableFutureUtil;
import com.biutag.supervisiondata.pojo.ClueData;
import com.biutag.supervisiondata.pojo.ClueInfo;
import com.biutag.supervisiondata.pojo.constants.Default;
import com.biutag.supervisiondata.pojo.database.PointOrg;
import com.biutag.supervisiondata.pojo.domain.FightMan;
@ -286,15 +285,6 @@ public class RiskTaskServiceImpl implements RiskTaskService {
last = riskPersonalControlRecord;
}
}
// if (last != null && last.getId() == null) {
// // 说明不是老数据 修改风险人员管控
// RiskPersonal p = new RiskPersonal();
// p.setId(person.getId());
// p.setControlDepartName(last.getControlDepartName());
// p.setControlDepartId(last.getControlDepartId());
// p.setControlTime(last.getControlTime());
// toUpdatePerson.add(p);
// }
// 记录中的案件编号
RiskModelTaskClue old = oldMap.get(person.getIdCode());
String caseIds = Optional.ofNullable(old).map(RiskModelTaskClue::getCaseIds).orElse("");
@ -647,12 +637,7 @@ public class RiskTaskServiceImpl implements RiskTaskService {
log.info("新增线索 | {}", toInsert.size());
riskModelTaskClueService.saveClues(toInsert, Default.FIGHT_MUCH_IG);
}
RiskTask endTask = endTask(task.getId());
endTask.setInsertSize(toInsert.size());
endTask.setUpdateSize(toUpdates.size());
endTask.setUpdateSize(0);
riskTaskRepository.updateById(endTask);
riskTaskRepository.updateTask(task.getId(), toInsert.size(), toUpdates.size());
}
/**
@ -683,13 +668,28 @@ public class RiskTaskServiceImpl implements RiskTaskService {
toHidden.add(hidden);
}
// 符合条件但是又没有旧数据 | 新增
if (age >= 16 && age <= 34) {
RiskModelTaskClue clue = createClue(task.getModelId(), 1, person, task.getId(), "年龄处于16岁至34岁之间", "该人员年龄为"+age+",属于16岁至34岁之间,增加风险分1分");
if (age >= 16 && age <= 24) {
RiskModelTaskClue clue = createClue(task.getModelId(), 1, person, task.getId(), "年龄处于16岁至24岁之间", "该人员年龄为"+age+",属于16岁至24岁之间,增加风险分1分");
taskClue.add(clue);
continue;
}
if (age >= 25 && age <= 34) {
RiskModelTaskClue clue = createClue(task.getModelId(), 3, person, task.getId(), "年龄处于25岁至34岁之间", "该人员年龄为"+age+",属于25岁至34岁之间,增加风险分3分");
taskClue.add(clue);
continue;
}
if (age >= 35 && age <= 55) {
RiskModelTaskClue clue = createClue(task.getModelId(), 2, person, task.getId(), "年龄处于35岁至55岁之间", "该人员年龄为"+age+",属于35岁至55岁之间,增加风险分2分");
RiskModelTaskClue clue = createClue(task.getModelId(), 5, person, task.getId(), "年龄处于35岁至55岁之间", "该人员年龄为"+age+",属于35岁至55岁之间,增加风险分5分");
taskClue.add(clue);
continue;
}
if (age >= 56 && age <= 65) {
RiskModelTaskClue clue = createClue(task.getModelId(), 3, person, task.getId(), "年龄处于56岁至66岁之间", "该人员年龄为"+age+",属于56岁至66岁之间,增加风险分3分");
taskClue.add(clue);
continue;
}
if (age >= 66 && age <= 75) {
RiskModelTaskClue clue = createClue(task.getModelId(), 1, person, task.getId(), "年龄处于66岁至75岁之间", "该人员年龄为"+age+",属于66岁至75岁之间,增加风险分1分");
taskClue.add(clue);
}
}
@ -697,13 +697,7 @@ public class RiskTaskServiceImpl implements RiskTaskService {
if(!toHidden.isEmpty()) {
clueRepository.updateBatchById(toHidden);
}
RiskTask ageUpdate = new RiskTask();
ageUpdate.setId(task.getId());
ageUpdate.setUpdateSize(toHidden.size());
ageUpdate.setInsertSize(taskClue.size());
ageUpdate.setState(1);
ageUpdate.setEndTime(LocalDateTime.now());
riskTaskRepository.updateById(ageUpdate);
riskTaskRepository.updateTask(task.getId(), taskClue.size(), toHidden.size());
}
/**
@ -727,13 +721,8 @@ public class RiskTaskServiceImpl implements RiskTaskService {
RiskModelTaskClue clue = createClue(32, 5, person, task.getId(), "男性", "该人员性别为男性,增加风险分5分");
taskClue.add(clue);
}
RiskTask genderUpdate = new RiskTask();
genderUpdate.setId(task.getId());
genderUpdate.setUpdateSize(0);
genderUpdate.setInsertSize(taskClue.size());
genderUpdate.setState(1);
genderUpdate.setEndTime(LocalDateTime.now());
riskModelTaskClueService.saveClues(taskClue, Default.GENDER_IG);
riskTaskRepository.updateTask(task.getId(), taskClue.size(), 0);
}
RiskModelTaskClue createClue(Integer modelId, Integer score, RiskPersonal person, Integer taskId, String reason, String data) {

Loading…
Cancel
Save