Browse Source

家暴与被家暴

master
kami 1 year ago
parent
commit
94ae409de7
  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. 185
      src/main/java/com/biutag/supervisiondata/service/impl/GBaseJJDServiceImpl.java
  5. 9
      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} ") " 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}") /**
* 袭警
* @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); 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 WF_IG = "涉访涉诉、前科劣迹";
public static final String HOME_VIOLENCE = "家庭、人际、两性关系";
public static final String IS_PETITION = "信访、投诉-信访局信访"; public static final String IS_PETITION = "信访、投诉-信访局信访";
public static final String FATHER_EDUCATION = "父亲文化程度"; 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 syncPoliceAttack(TaskParamDomain domain);
/**
* 家暴
*/
void syncHomeViolence(TaskParamDomain domain);
} }

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

@ -110,7 +110,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
continue; continue;
} else { } else {
mobiles1.add(item.getBjrlxdh()); 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); personals.add(person);
} }
@ -165,8 +165,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
} }
if (personal.getMobileNumber() != null && info == null) { if (personal.getMobileNumber() != null && info == null) {
xxxInfo = mobileMap.get(personal.getMobileNumber()); xxxInfo = mobileMap.get(personal.getMobileNumber());
if (xxxInfo == null || xxxInfo.isEmpty()) { if (xxxInfo == null && xxxInfo.isEmpty()) {
} else {
info = compare(xxxInfo, personal.getName()); info = compare(xxxInfo, personal.getName());
} }
if (info == null && xxxInfo != null) { if (info == null && xxxInfo != null) {
@ -233,7 +232,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
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(jqExternalDepart::get).orElse(null);
} }
if (depart == null) { if (depart == null) {
personal.setControlDepartId(null); personal.setControlDepartId(null);
@ -390,7 +389,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
.name(person.getName()) .name(person.getName())
.id(BhUtil.jjdBh(gBaseJJD.getJjdbh())) .id(BhUtil.jjdBh(gBaseJJD.getJjdbh()))
.idCode(person.getIdCode()) .idCode(person.getIdCode())
.tag("平台涉警事件") .tag("平台涉警事件")
.personId(person.getId()) .personId(person.getId())
.build(); .build();
StringBuilder sb = new StringBuilder("该人员存在平台涉警事件警情,接警单编号:" + gBaseJJD.getJjdbh()); StringBuilder sb = new StringBuilder("该人员存在平台涉警事件警情,接警单编号:" + gBaseJJD.getJjdbh());
@ -410,12 +409,188 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
toInsert.add(createClue(task.getModelId(), 5, task.getId(), data)); toInsert.add(createClue(task.getModelId(), 5, task.getId(), data));
} }
} }
log.info("保存袭警数据:{}", toInsert.size());
if (!toInsert.isEmpty()) { if (!toInsert.isEmpty()) {
clueService.saveClues(toInsert, Default.WF_IG); clueService.saveClues(toInsert, Default.WF_IG);
} }
taskRepository.updateTask(task.getId(), toInsert.size(), 0); 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) { void toRedisCache(List<GBaseJJD> jjdList, String keyName) {
RedisDao.getInstance().removeListAll(keyName); RedisDao.getInstance().removeListAll(keyName);
RedisDao.getInstance().pipeLineExec((connection, key, value) -> jjdList.forEach(item -> { RedisDao.getInstance().pipeLineExec((connection, key, value) -> jjdList.forEach(item -> {

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

@ -286,15 +286,6 @@ public class RiskTaskServiceImpl implements RiskTaskService {
last = riskPersonalControlRecord; 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()); RiskModelTaskClue old = oldMap.get(person.getIdCode());
String caseIds = Optional.ofNullable(old).map(RiskModelTaskClue::getCaseIds).orElse(""); String caseIds = Optional.ofNullable(old).map(RiskModelTaskClue::getCaseIds).orElse("");

Loading…
Cancel
Save