Browse Source

离婚表

master
kami 1 year ago
parent
commit
8a97bb58bf
  1. 2
      src/main/java/com/biutag/supervisiondata/mapper/wdpc2/WdpcGrjdHyqkbMapper.java
  2. 237
      src/main/java/com/biutag/supervisiondata/service/impl/MarriageServiceImpl.java

2
src/main/java/com/biutag/supervisiondata/mapper/wdpc2/WdpcGrjdHyqkbMapper.java

@ -14,6 +14,6 @@ import java.util.List;
*/
public interface WdpcGrjdHyqkbMapper extends BaseMapper<WdpcGrjdHyqkb> {
@Select(" select id_code from wdpc_grjd_hyqkb")
@Select(" select id_code, max(register_time) as register_time from wdpc_grjd_hyqkb group by id_code ")
List<WdpcGrjdHyqkb> selectDistinctInfo();
}

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

@ -11,6 +11,7 @@ import com.biutag.supervisiondata.pojo.entity.dwd.GBaseHY;
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.pojo.entity.wdpc2.WdpcGrjdHyqkb;
import com.biutag.supervisiondata.repository.*;
import com.biutag.supervisiondata.service.MarriageService;
import com.biutag.supervisiondata.service.RiskModelTaskClueService;
@ -19,8 +20,10 @@ import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
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;
import java.util.function.Function;
@ -48,219 +51,91 @@ public class MarriageServiceImpl implements MarriageService {
@Override
public void marriageModelTask(TaskParamDomain domain) {
// 婚姻不用管管控
// clue 应该要看结婚状态
RiskTask task = createTask(domain.getPersons().size(), 39);
RiskTask task2 = createTask(domain.getPersons().size(), 51);
List<WdpcGrjdHyqkb> data = hyqkbRepository.getBaseMapper().selectDistinctInfo();
LocalDateTime yearsDate = LocalDateTime.now().minusYears(1);
RiskTask task = riskTaskRepository.create(data.size(), 39);
RiskTask task2 = riskTaskRepository.create(data.size(), 51);
riskTaskRepository.saveBatch(List.of(task,task2));
List<GBaseHY> hyList = new ArrayList<>();
Map<String, WdpcGrjdHyqkb> dataMap = data.stream().collect(Collectors.toMap(WdpcGrjdHyqkb::getIdCode, Function.identity(), (val, old) -> val));
log.info("开始查询结婚数据:{}", domain.getIdCards().size());
List<List<String>> manIdCards = new ArrayList<>();
List<List<String>> femanIdCards = new ArrayList<>();
for (RiskPersonal person : domain.getPersons()) {
if(manIdCards.isEmpty()) {
manIdCards.add(new ArrayList<>());
femanIdCards.add(new ArrayList<>());
}
if("2".equals(person.getGender())) {
femanIdCards.getLast().add(person.getIdCode());
if(femanIdCards.getLast().size() >= 10000) {
femanIdCards.add(new ArrayList<>());
}
} else {
manIdCards.getLast().add(person.getIdCode());
if(manIdCards.getLast().size() >= 10000) {
manIdCards.add(new ArrayList<>());
}
}
}
CompletableFuture.allOf(
CompletableFutureUtil.runSyncObject(() -> manIdCards.forEach(item -> hyList.addAll(hyRepository.list(new LambdaQueryWrapper<GBaseHY>()
.select(GBaseHY::getYwlxdmmc, GBaseHY::getYwlxdmdm,GBaseHY::getYxbzdm, GBaseHY::getNfsfhm, GBaseHY::getNvfsfhm, GBaseHY::getDjrq)
.eq(GBaseHY::getYxbzdm, "1")
.in(GBaseHY::getNfsfhm, item))))),
CompletableFutureUtil.runSyncObject(() -> femanIdCards.forEach(item -> hyList.addAll(hyRepository.list(new LambdaQueryWrapper<GBaseHY>()
.select(GBaseHY::getYwlxdmmc, GBaseHY::getYwlxdmdm, GBaseHY::getYxbzdm, GBaseHY::getNfsfhm, GBaseHY::getNvfsfhm,GBaseHY::getDjrq)
.eq(GBaseHY::getYxbzdm, "1")
.in(GBaseHY::getNvfsfhm, item)))))
).join();
Map<String, RiskModelTaskClue> old1 = domain.getOldMap(39, true);
Map<String, RiskModelTaskClue> old2 = domain.getOldMap(51, true);
LocalDateTime time = null;
for (GBaseHY gBaseHY : hyList) {
if(gBaseHY.getDjrq() == null) {
continue;
}
LocalDateTime tmp = gBaseHY.getDjrq().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
if(tmp.isAfter(LocalDateTime.now())) {
continue;
}
if(time == null) {
time = tmp;
continue;
}
if(tmp.isAfter(time)) {
time = tmp;
}
}
log.info("最大时间{}", time);
// 每个人应该是最新的婚姻登记为标准
Map<String, List<GBaseHY>> manMap = new HashMap<>();
Map<String, List<GBaseHY>> femanMap = new HashMap<>();
for (GBaseHY gBaseHY : hyList) {
manMap.computeIfAbsent(gBaseHY.getNfsfhm(), k -> new ArrayList<>()).add(gBaseHY);
femanMap.computeIfAbsent(gBaseHY.getNvfsfhm(), k -> new ArrayList<>()).add(gBaseHY);
}
log.info("男性数据:{}", manMap.size());
log.info("女性数据:{}", femanMap.size());
// 旧线索
List<RiskModelTaskClue> oldClues = Optional.ofNullable(domain.getMap().get(task.getModelId())).orElse(new ArrayList<>());
Map<String, RiskModelTaskClue> oldClueMap = oldClues.stream().collect(Collectors.toMap(RiskModelTaskClue::getIdCode, Function.identity(), (oldValue, newValue) -> newValue));
// 旧线索
List<RiskModelTaskClue> oldClues2 = Optional.ofNullable(domain.getMap().get(task2.getModelId())).orElse(new ArrayList<>());
Map<String, RiskModelTaskClue> oldClueMap2 = oldClues2.stream().collect(Collectors.toMap(RiskModelTaskClue::getIdCode, Function.identity(), (oldValue, newValue) -> newValue));
// 遍历了
List<ClueData> toInsertData = new ArrayList<>();
List<RiskModelTaskClue> toUpdateData = new ArrayList<>();
List<ClueData> toInsertData2 = new ArrayList<>();
List<RiskModelTaskClue> toUpdateData2 = new ArrayList<>();
List<RiskModelTaskClue> toInsert1 = new ArrayList<>();
List<RiskModelTaskClue> toInsert2 = new ArrayList<>();
LocalDateTime targetTime = LocalDateTime.now().minusDays(365);
log.info("指定时间:{}", targetTime);
for (RiskPersonal person : domain.getPersons()) {
List<GBaseHY> tmpList = manMap.get(person.getIdCode());
if(tmpList == null) {
tmpList = femanMap.get(person.getIdCode());
}
if(tmpList == null) {
continue;
}
// 找到最新的婚姻登记
GBaseHY last = null;
for (GBaseHY gBaseHY : tmpList) {
if(gBaseHY.getDjrq() == null) {
log.error("没有登记日期");
continue;
}
if(last == null) {
last = gBaseHY;
if(old1.get(person.getIdCode()) != null) {
continue;
}
if(gBaseHY.getDjrq().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().isAfter(last.getDjrq().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime())) {
last = gBaseHY;
}
}
// 看看是不是离婚
if(last == null || last.getYwlxdmdm() == null) {
continue;
}
if(last.getYwlxdmdm().toUpperCase().contains("IB") || last.getYwlxdmdm().toUpperCase().contains("ICB")) {
// 离婚 如果旧数据不存在就要新增
if(last.getDjrq().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().isAfter(targetTime)) {
// 近365天的离婚
RiskModelTaskClue clue = oldClueMap.get(person.getIdCode());
if(clue != null) {
WdpcGrjdHyqkb result = dataMap.get(person.getIdCode());
if(result == null) {
continue;
}
ClueData data = ClueData.builder()
ClueData clueData = ClueData.builder()
.personId(person.getId())
.tag("近12月内离婚")
.id(last.getXlzjdjzh())
.tag("离婚")
.id(person.getIdCode())
.idCode(person.getIdCode())
.name(person.getName())
.sourceData("根据该人员最新的婚姻登记信息,发现该人员登记为离婚,存在感情失意的可能,增加风险分3分")
.sourceData("根据该人员最新的婚姻登记信息,发现该人员登记为离婚,增加风险分5分")
.build();
data.setEventTime(last.getDjrq().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
toInsertData.add(data);
} else {
// 365天之前的离婚,进基础因素
RiskModelTaskClue clue = oldClueMap2.get(person.getIdCode());
if(clue != null) {
try {
clueData.setEventTime(LocalDate.parse(result.getRegisterTime(), DateTimeFormatter.ofPattern("yyyyMMdd")).atTime(0,0,0));
} catch (Exception e) {
clueData.setEventTime(LocalDateTime.now());
}
toInsert1.add(createClue(task.getModelId(), 5, task.getId(), clueData));
if(clueData.getEventTime().isBefore(yearsDate) || old2.get(person.getIdCode()) != null) {
continue;
}
ClueData data = ClueData.builder()
ClueData clueData2 = ClueData.builder()
.personId(person.getId())
.tag("离婚")
.id(last.getXlzjdjzh())
.tag("个人婚姻创伤")
.id(person.getIdCode())
.idCode(person.getIdCode())
.name(person.getName())
.sourceData("根据该人员最新的婚姻登记信息,发现该人员登记为离婚,增加风险分5分")
.sourceData("该人员最近一年有离婚登记信息,增加风险分5分")
.build();
data.setEventTime(last.getDjrq().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
toInsertData2.add(data);
}
} else if(last.getYwlxdmdm().toUpperCase().contains("IA") || last.getYwlxdmdm().toUpperCase().contains("ICA")) {
// 结婚 如果旧数据存在就要修改为0
// 近365天的离婚
if(last.getDjrq().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().isAfter(targetTime)) {
RiskModelTaskClue clue = oldClueMap.get(person.getIdCode());
if(clue == null) {
continue;
}
RiskModelTaskClue update = new RiskModelTaskClue();
update.setId(clue.getId());
update.setDel(1);
toUpdateData.add(update);
} else {
RiskModelTaskClue clue = oldClueMap2.get(person.getIdCode());
if(clue == null) {
continue;
try {
clueData2.setEventTime(LocalDate.parse(result.getRegisterTime(), DateTimeFormatter.ofPattern("yyyyMMdd")).atTime(0,0,0));
} catch (Exception e) {
clueData.setEventTime(LocalDateTime.now());
}
RiskModelTaskClue update = new RiskModelTaskClue();
update.setId(clue.getId());
update.setDel(1);
toUpdateData2.add(update);
toInsert2.add(createClue(task2.getModelId(), 5, task2.getId(), clueData2));
}
List<RiskModelTaskClue> toUpdate = new ArrayList<>();
List<String> idCodes = new ArrayList<>();
for (Map.Entry<String, RiskModelTaskClue> entry : old2.entrySet()) {
if(entry.getValue().getEventTime().isBefore(yearsDate)) {
RiskModelTaskClue clue = new RiskModelTaskClue();
clue.setId(entry.getValue().getId());
clue.setDel(1);
toUpdate.add(clue);
idCodes.add(entry.getValue().getIdCode());
}
}
List<RiskModelTaskClue> toInsert = new ArrayList<>();
List<RiskModelTaskClue> toInsert2 = new ArrayList<>();
log.info("插入数据条数: {} | {}", toInsertData.size(), toInsertData2.size());
for (ClueData toInsertDatum : toInsertData) {
toInsert.add(createClue(task.getModelId(), 3, task.getId(), toInsertDatum));
}
for (ClueData toInsertDatum : toInsertData2) {
toInsert2.add(createClue(task2.getModelId(), 5, task2.getId(), toInsertDatum));
}
if(!toInsert.isEmpty()) {
riskModelTaskClueService.saveClues(toInsert, Default.NO_LOVE_IG);
}
if(!toInsert2.isEmpty()) {
riskModelTaskClueService.saveClues(toInsert2, Default.MARRAY_IG);
}
if(!toUpdateData.isEmpty()) {
log.info("修改线索 | {}", toUpdateData.size());
clueRepository.updateBatchById(toUpdateData);
if(!toInsert1.isEmpty()) {
log.info("新增离婚数据:{}", toInsert1.size());
riskModelTaskClueService.saveClues(toInsert1, "婚姻状态");
}
riskTaskRepository.updateTask(task.getId(), toInsert1.size(), 0);
if(!toUpdateData2.isEmpty()) {
log.info("修改线索2 | {}", toUpdateData2.size());
clueRepository.updateBatchById(toUpdateData2);
if(!toInsert2.isEmpty()) {
log.info("新增个人婚姻创伤:{}", toInsert2.size());
riskModelTaskClueService.saveClues(toInsert2, "个人婚姻创伤");
}
RiskTask updateTask = new RiskTask();
updateTask.setId(task.getId());
updateTask.setInsertSize(toInsert.size());
updateTask.setUpdateSize(toUpdateData.size());
updateTask.setState(1);
updateTask.setEndTime(LocalDateTime.now());
riskTaskRepository.updateById(updateTask);
if(!toUpdate.isEmpty()) {
log.info("修改个人婚姻创伤:{}", toUpdate.size());
riskModelTaskClueService.deleteCluesAndDeleteTag(toUpdate, idCodes, "个人婚姻创伤");
}
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;
riskTaskRepository.updateTask(task.getId(), toInsert1.size(), toUpdate.size());
}
RiskModelTaskClue createClue(Integer modelId, Integer score, Integer taskId, ClueData data) {

Loading…
Cancel
Save