Browse Source

人员库入gbase

master
kami 1 year ago
parent
commit
88e007d7c0
  1. 5
      src/main/java/com/biutag/supervisiondata/event/ApplicationEvent.java
  2. 5
      src/main/java/com/biutag/supervisiondata/service/RiskTaskService.java
  3. 295
      src/main/java/com/biutag/supervisiondata/service/impl/RiskTaskServiceImpl.java

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

@ -110,8 +110,8 @@ public class ApplicationEvent {
// personalService.pullPetitionAgain();
// pointService.personPullAndSave(start, end);
// gBaseJJDService.pullAndSave(start, end);
// riskPersonalService.fixed();
// personalService.syncPerson();
riskPersonalService.fixed();
personalService.syncPerson();
//
// petitionService.petitionModelTask(initDomain(List.of(40)));
// riskTaskService.eduModelTask(initDomain(List.of(34)));
@ -164,7 +164,6 @@ public class ApplicationEvent {
// pointService.syncIsSpecialPeople(initDomain(List.of(129)));
// pointService.syncSpecialPeopleType(initDomain(List.of(130)));
// *********暂时不要**********
// riskTaskService.caseModelTask(initDomain(List.of(35)));
// riskTaskService.heightFight(initDomain(List.of(42)));
// pointService.syncKillSelf(initDomain(List.of(46)));
// policeService.contradictModelTask(initDomain(List.of(38)));

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

@ -20,11 +20,6 @@ public interface RiskTaskService {
*/
void eduModelTask(TaskParamDomain domain);
/**
* 违法人员和执法办案警情
* @param domain 参数
*/
void caseModelTask(TaskParamDomain domain);
/**
* 行为因素
* @param domain 参数

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

@ -74,10 +74,8 @@ public class RiskTaskServiceImpl implements RiskTaskService {
@Override
public void infoModelTask(TaskParamDomain domain) {
RiskTask genderTask = createTask(domain.getPersons().size(), 32);
RiskTask ageTask = createTask(domain.getPersons().size(), 33);
riskTaskRepository.save(ageTask);
riskTaskRepository.save(genderTask);
RiskTask genderTask = riskTaskRepository.create(domain.getPersons().size(), 32);
RiskTask ageTask = riskTaskRepository.create(domain.getPersons().size(), 33);
CompletableFuture.allOf(
CompletableFutureUtil.runSyncObject(() -> ageModel(domain, ageTask)),
@ -87,8 +85,7 @@ public class RiskTaskServiceImpl implements RiskTaskService {
@Override
public void eduModelTask(TaskParamDomain domain) {
RiskTask eduTask = createTask(domain.getPersons().size(), 34);
riskTaskRepository.save(eduTask);
RiskTask eduTask = riskTaskRepository.create(domain.getPersons().size(), 34);
List<GBaseSYRKXX> xxList = new ArrayList<>();
int count = 0;
@ -139,7 +136,7 @@ public class RiskTaskServiceImpl implements RiskTaskService {
.name(person.getName())
.idCode(person.getIdCode())
.tag(edu)
.sourceData("该人员的学历为"+xx.getXlmc()+",属于"+edu+",增加风险分"+score+"分")
.sourceData("该人员的学历为"+xx.getXlmc()+",属于"+edu)
.eventTime(LocalDateTime.now())
.personId(person.getId())
.build(), "edu"+person.getId().toString()));
@ -148,208 +145,24 @@ public class RiskTaskServiceImpl implements RiskTaskService {
RiskModelTaskClue tmp = new RiskModelTaskClue();
tmp.setId(old.getId());
tmp.setRiskReason(edu);
tmp.setData("该人员的学历为"+xx.getXlmc()+",属于"+edu+",增加风险分"+score+"分");
tmp.setData("该人员的学历为"+xx.getXlmc()+",属于"+edu);
tmp.setScore(Edu.contains(edu));
toUpdate.add(tmp);
}
RiskTask eduUpdate = new RiskTask();
eduUpdate.setId(eduTask.getId());
int size = 0;
if (!toInsert.isEmpty()) {
size = toInsert.size();
riskModelTaskClueService.saveClues(toInsert, Default.EDU_IG);
log.info("批量新增学历完成");
}
eduUpdate.setInsertSize(size);
if (!toUpdate.isEmpty()) {
clueRepository.updateBatchById(toUpdate, 10000);
size = toUpdate.size();
log.info("批量修改学历完成");
}
eduUpdate.setState(1);
eduUpdate.setUpdateSize(size);
eduUpdate.setEndTime(LocalDateTime.now());
riskTaskRepository.updateById(eduUpdate);
}
@Override
public void caseModelTask(TaskParamDomain domain) {
RiskTask caseTask = createTask(domain.getPersons().size(), 35);
riskTaskRepository.save(caseTask);
// 1 - 违法信息
List<GBaseWFRXX> wfxxList = new ArrayList<>();
for (List<String> idCard : domain.getIdCards()) {
wfxxList.addAll(wfrxxRepository.list(new LambdaQueryWrapper<GBaseWFRXX>()
.select(GBaseWFRXX::getAjbh, GBaseWFRXX::getZjhm, GBaseWFRXX::getSxzm)
.in(GBaseWFRXX::getZjhm, idCard)));
}
log.info("违法数量: {}", wfxxList.size());
// 1 - 信息转map 2 - 案件编号list
Map<String, List<GBaseWFRXX>> xxMap = new HashMap<>();
List<String> ajIdList = new ArrayList<>();
for (GBaseWFRXX gBaseWFRXX : wfxxList) {
if (gBaseWFRXX.getSxzm() == null) {
continue;
}
String charge = chargeContain(gBaseWFRXX.getSxzm());
if (charge == null) {
continue;
}
ajIdList.add(gBaseWFRXX.getAjbh());
List<GBaseWFRXX> tmp = Optional.ofNullable(xxMap.get(gBaseWFRXX.getZjhm())).orElse(new ArrayList<>());
tmp.add(gBaseWFRXX);
xxMap.put(gBaseWFRXX.getZjhm(), tmp);
}
// 切割 每次查10000条
List<List<String>> ajs = IntStream.range(0, (ajIdList.size() + 9999) / 10000)
.mapToObj(i -> ajIdList.subList(i * 10000, Math.min((i + 1) * 10000, ajIdList.size())))
.toList();
List<GBaseAJJBXX> xxList = new ArrayList<>();
// 查案件基本信息
for (List<String> aj : ajs) {
xxList.addAll(ajjbxxRepository.list(new LambdaQueryWrapper<GBaseAJJBXX>()
.select(GBaseAJJBXX::getAjbh, GBaseAJJBXX::getBadwidmc, GBaseAJJBXX::getBadwiddm, GBaseAJJBXX::getBarq)
.in(GBaseAJJBXX::getAjbh, aj)));
}
// 案件转map方便提取
Map<String, GBaseAJJBXX> ajxxMap = xxList.stream().collect(Collectors.toMap(GBaseAJJBXX::getAjbh, Function.identity(), (oldValue, newValue) -> newValue));
// 管控部门记录
List<RiskPersonalControlRecord> controlRecords = new ArrayList<>();
for (List<String> idCard : domain.getIdCards()) {
controlRecords.addAll(controlRecordRepository.list(new LambdaQueryWrapper<RiskPersonalControlRecord>()
.in(RiskPersonalControlRecord::getIdCode, idCard)));
}
// 转map
Map<String, List<RiskPersonalControlRecord>> controlMap = Optional.of(controlRecords).filter(it -> !it.isEmpty())
.map(it -> it.stream().collect(Collectors.groupingBy(RiskPersonalControlRecord::getIdCode)))
.orElse(new HashMap<>());
Map<String, RiskModelTaskClue> oldMap = domain.getOldMap(35, true);
// ************** 要动的表 **************
List<RiskPersonalControlRecord> toInsertControl = new ArrayList<>();
List<RiskPersonal> toUpdatePerson = new ArrayList<>();
List<RiskModelTaskClue> toInsertClue = new ArrayList<>();
List<RiskModelTaskClue> toUpdateClue = new ArrayList<>();
// ************** **************
Map<String, RiskPersonalControlRecord> bHMap;
for (RiskPersonal person : domain.getPersons()) {
List<GBaseWFRXX> tmp = xxMap.get(person.getIdCode());
// 案件编号
StringBuilder caseNo = new StringBuilder();
// 原因
StringBuilder reason = new StringBuilder();
List<RiskPersonalControlRecord> controls = controlMap.get(person.getIdCode());
if (controls == null || controls.isEmpty()) {
bHMap = new HashMap<>();
controls = new ArrayList<>();
} else {
bHMap = controls.stream().collect(Collectors.toMap(RiskPersonalControlRecord::getCaseId, Function.identity(), (oldValue, newValue) -> newValue));
}
List<RiskPersonalControlRecord> tmpRecords = new ArrayList<>();
// 如果没有违法
if (tmp == null || tmp.isEmpty()) {
continue;
}
for (GBaseWFRXX gBaseWFRXX : tmp) {
if (gBaseWFRXX.getSxzm() == null) {
continue;
}
caseNo.append(gBaseWFRXX.getAjbh()).append(",");
reason.append(chargeContain(gBaseWFRXX.getSxzm())).append(",");
RiskPersonalControlRecord record = bHMap.get(BhUtil.ajBh(gBaseWFRXX.getAjbh()));
if (record == null) {
//如果没有管控记录 新建
GBaseAJJBXX ajxx = ajxxMap.get(gBaseWFRXX.getAjbh());
if (ajxx == null) {
continue;
}
RiskPersonalControlRecord controlRecord = createControlRecord(person, ajxx, gBaseWFRXX);
toInsertControl.add(controlRecord);
tmpRecords.add(controlRecord);
}
}
controls.addAll(tmpRecords);
RiskPersonalControlRecord last = null;
for (RiskPersonalControlRecord riskPersonalControlRecord : controls) {
if (riskPersonalControlRecord == null) {
continue;
}
if (last == null) {
last = riskPersonalControlRecord;
continue;
}
if (riskPersonalControlRecord.getControlTime().isAfter(last.getControlTime())) {
last = riskPersonalControlRecord;
}
}
// 记录中的案件编号
RiskModelTaskClue old = oldMap.get(person.getIdCode());
String caseIds = Optional.ofNullable(old).map(RiskModelTaskClue::getCaseIds).orElse("");
String[] oldCase = caseIds.split(",");
if (oldCase.length == caseNo.toString().split(",").length - 1) {
// 涉及案件和老的长度一致,说明没有新增事件
continue;
}
if (old != null) {
// 将旧的作废
RiskModelTaskClue updateClue = new RiskModelTaskClue();
updateClue.setId(old.getId());
updateClue.setDel(1);
toUpdateClue.add(updateClue);
continue;
}
RiskModelTaskClue clue = new RiskModelTaskClue();
clue.setModelId(caseTask.getModelId());
clue.setScore(5);
clue.setName(person.getName());
clue.setIdCode(person.getIdCode());
clue.setTaskId(caseTask.getId());
StringBuilder data = new StringBuilder();
if (!reason.isEmpty()) {
clue.setRiskReason(reason.substring(0, reason.length() - 1));
data.append("发现该人员涉嫌以下罪名:"+clue.getRiskReason());
}
if (!caseNo.isEmpty()) {
clue.setCaseIds(caseNo.substring(0, caseNo.length() - 1));
data.append(",相关案件编号为:").append(clue.getCaseIds());
}
if(!data.isEmpty()) {
data.append(",属于涉严重暴力犯罪前科人员,增加风险分5分");
}
if (last != null && last.getControlTime() != null) {
clue.setEventTime(last.getControlTime());
}
clue.setData(data.toString());
clue.setCreateTime(LocalDateTime.now());
clue.setUpdateTime(LocalDateTime.now());
toInsertClue.add(clue);
}
RiskTask caseUpdate = new RiskTask();
caseUpdate.setId(caseTask.getId());
if (!toInsertClue.isEmpty()) {
riskModelTaskClueService.saveClues(toInsertClue, Default.WFR_IG);
}
if (!toUpdateClue.isEmpty()) {
clueRepository.updateBatchById(toUpdateClue);
}
if (!toUpdatePerson.isEmpty()) {
riskPersonalRepository.updateBatchById(toUpdatePerson);
}
controlRecordService.batchInsert(toInsertControl);
caseUpdate.setState(1);
caseUpdate.setInsertSize(toInsertClue.size());
caseUpdate.setUpdateSize(toUpdateClue.size());
caseUpdate.setEndTime(LocalDateTime.now());
riskTaskRepository.updateById(caseUpdate);
riskTaskRepository.updateTask(eduTask.getId(), toInsert.size(), toUpdate.size());
}
@Override
public void behavior(TaskParamDomain domain) {
RiskTask task = createTask(domain.getPersons().size(), 20);
riskTaskRepository.save(task);
RiskTask task = riskTaskRepository.create(domain.getPersons().size(), 20);
LocalDateTime end = LocalDateTime.now();
LocalDateTime start = end.minusMonths(3);
@ -425,7 +238,6 @@ public class RiskTaskServiceImpl implements RiskTaskService {
clueData.add(data);
}
List<RiskModelTaskClue> toInsert = new ArrayList<>();
Map<String, List<RiskPersonalControlRecord>> toInsertMap = new HashMap<>();
List<RiskModelTaskClue> oldList = Optional.ofNullable(domain.getMap().get(20)).orElse(new ArrayList<>());
Map<String, List<RiskModelTaskClue>> oldMap = oldList.stream().collect(Collectors.groupingBy(RiskModelTaskClue::getIdCode));
@ -433,9 +245,6 @@ public class RiskTaskServiceImpl implements RiskTaskService {
List<RiskModelTaskClue> tmpList = oldMap.get(clueDatum.getIdCode());
if (tmpList == null || tmpList.isEmpty()) {
toInsert.add(createClue(task.getId(), 10, task.getId(), clueDatum, BhUtil.jjdBh(clueDatum.getId())));
List<RiskPersonalControlRecord> tmp = Optional.ofNullable(toInsertMap.get(clueDatum.getIdCode())).orElse(new ArrayList<>());
tmp.add(createControlRecord(clueDatum));
toInsertMap.put(clueDatum.getIdCode(), tmp);
continue;
}
boolean exist = false;
@ -447,9 +256,6 @@ public class RiskTaskServiceImpl implements RiskTaskService {
}
if (!exist) {
toInsert.add(createClue(task.getId(), 10, task.getId(), clueDatum, BhUtil.jjdBh(clueDatum.getId())));
List<RiskPersonalControlRecord> tmp = Optional.ofNullable(toInsertMap.get(clueDatum.getIdCode())).orElse(new ArrayList<>());
tmp.add(createControlRecord(clueDatum));
toInsertMap.put(clueDatum.getIdCode(), tmp);
}
}
StringBuilder sb = new StringBuilder();
@ -461,8 +267,7 @@ public class RiskTaskServiceImpl implements RiskTaskService {
@Override
public void riskAreaModelTask(TaskParamDomain domain) {
RiskTask task = createTask(domain.getPersons().size(), 41);
riskTaskRepository.save(task);
RiskTask task = riskTaskRepository.create(domain.getPersons().size(), 41);
List<List<String>> idCards = new ArrayList<>();
// 旧的clue
List<RiskModelTaskClue> oldClueList = Optional.ofNullable(domain.getMap().get(task.getModelId())).orElse(new ArrayList<>());
@ -480,10 +285,7 @@ public class RiskTaskServiceImpl implements RiskTaskService {
personMap.put(person.getIdCode(), person);
}
if(idCards.isEmpty()) {
RiskTask endTask = endTask(task.getId());
endTask.setInsertSize(0);
endTask.setUpdateSize(0);
endTask.setErrMsg("没有新增数据");
riskTaskRepository.updateTask(task.getId(), 0,0);
return;
}
@ -500,10 +302,7 @@ public class RiskTaskServiceImpl implements RiskTaskService {
}
if(xxList.isEmpty()) {
RiskTask endTask = endTask(task.getId());
endTask.setInsertSize(0);
endTask.setUpdateSize(0);
endTask.setErrMsg("没有新增数据");
riskTaskRepository.updateTask(task.getId(), 0,0);
return;
}
@ -525,10 +324,7 @@ public class RiskTaskServiceImpl implements RiskTaskService {
log.info("开始操作新增项:{}", toInsert.size());
riskModelTaskClueService.saveClues(toInsert, Default.FIGHT_IG);
}
RiskTask endTask = endTask(task.getId());
endTask.setInsertSize(toInsert.size());
endTask.setUpdateSize(0);
riskTaskRepository.updateById(endTask);
riskTaskRepository.updateTask(task.getId(), toInsert.size(), 0);
}
private final SupExternalDepartRepository externalDepartRepository;
@ -555,8 +351,7 @@ public class RiskTaskServiceImpl implements RiskTaskService {
orgCodeMap.put(org.getDm(), org);
}
RiskTask task = createTask(xxList.size(), 42);
riskTaskRepository.save(task);
RiskTask task = riskTaskRepository.create(xxList.size(), 42);
List<String> idCodes = xxList.stream().map(GBaseSYRKXX::getGmsfhm).distinct().toList();
log.info("查询用户数 : {}", idCodes.size());
@ -757,72 +552,6 @@ public class RiskTaskServiceImpl implements RiskTaskService {
return clue;
}
RiskTask createTask(Integer size, Integer modelId) {
RiskTask task = new RiskTask();
task.setModelId(modelId);
task.setStartTime(LocalDateTime.now());
task.setState(0);
task.setScanSize(size);
return task;
}
RiskTask endTask(Integer id) {
RiskTask task = new RiskTask();
task.setId(id);
task.setEndTime(LocalDateTime.now());
task.setState(1);
return task;
}
RiskPersonalControlRecord createControlRecord(ClueData data) {
RiskPersonalControlRecord controlRecord = new RiskPersonalControlRecord();
controlRecord.setName(data.getName());
controlRecord.setIdCode(data.getIdCode());
controlRecord.setCreateTime(LocalDateTime.now());
controlRecord.setControlTime(data.getEventTime());
controlRecord.setControlDepartId(data.getDepartId());
controlRecord.setControlDepartName(data.getDepartName());
controlRecord.setControlTag(data.getTag());
controlRecord.setCaseId(BhUtil.ajBh(data.getId()));
return controlRecord;
}
RiskPersonalControlRecord createControlRecord(RiskPersonal person, GBaseAJJBXX ajxx, GBaseWFRXX gBaseWFRXX) {
RiskPersonalControlRecord controlRecord = new RiskPersonalControlRecord();
controlRecord.setName(person.getName());
controlRecord.setIdCode(person.getIdCode());
controlRecord.setCreateTime(LocalDateTime.now());
try {
controlRecord.setControlTime(ajxx.getBarq().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
} catch (Exception e) {
log.info("报案日期转化异常");
}
controlRecord.setControlDepartId(ajxx.getBadwiddm());
controlRecord.setControlDepartName(ajxx.getBadwidmc());
controlRecord.setControlTag(gBaseWFRXX.getSxzm());
controlRecord.setCaseId("aj___" + gBaseWFRXX.getAjbh());
return controlRecord;
}
/**
* 判断罪名
*
* @param charge 罪名
* @return 罪名
*/
String chargeContain(String charge) {
String res = Charge.contains(charge);
if (res != null) {
return res;
}
if (charge.contains("故意伤害") && (charge.contains("重伤") ||
charge.contains("死亡"))) {
return "涉故意伤害致人重伤或死亡";
}
return null;
}
RiskPersonal createPerson(GBaseSYRKXX xx, String tag, Map<String, PointOrg> orgCodeMap, Map<String, PointOrg> orgIdMap,Map<String, SupExternalDepart> jqExternalDepart) {
RiskPersonal person = new RiskPersonal();
person.setName(xx.getXm());

Loading…
Cancel
Save