diff --git a/src/main/java/com/biutag/supervisiondata/mapper/wdpc2/WdpcGrjdHyqkbMapper.java b/src/main/java/com/biutag/supervisiondata/mapper/wdpc2/WdpcGrjdHyqkbMapper.java index c2371c0..118493a 100644 --- a/src/main/java/com/biutag/supervisiondata/mapper/wdpc2/WdpcGrjdHyqkbMapper.java +++ b/src/main/java/com/biutag/supervisiondata/mapper/wdpc2/WdpcGrjdHyqkbMapper.java @@ -14,6 +14,6 @@ import java.util.List; */ public interface WdpcGrjdHyqkbMapper extends BaseMapper { - @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 selectDistinctInfo(); } diff --git a/src/main/java/com/biutag/supervisiondata/service/impl/MarriageServiceImpl.java b/src/main/java/com/biutag/supervisiondata/service/impl/MarriageServiceImpl.java index d8470e7..8909e0c 100644 --- a/src/main/java/com/biutag/supervisiondata/service/impl/MarriageServiceImpl.java +++ b/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 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 hyList = new ArrayList<>(); + Map dataMap = data.stream().collect(Collectors.toMap(WdpcGrjdHyqkb::getIdCode, Function.identity(), (val, old) -> val)); log.info("开始查询结婚数据:{}", domain.getIdCards().size()); - List> manIdCards = new ArrayList<>(); - List> 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() - .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() - .select(GBaseHY::getYwlxdmmc, GBaseHY::getYwlxdmdm, GBaseHY::getYxbzdm, GBaseHY::getNfsfhm, GBaseHY::getNvfsfhm,GBaseHY::getDjrq) - .eq(GBaseHY::getYxbzdm, "1") - .in(GBaseHY::getNvfsfhm, item))))) - ).join(); - 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> manMap = new HashMap<>(); - Map> 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); - } + Map old1 = domain.getOldMap(39, true); + Map old2 = domain.getOldMap(51, true); - log.info("男性数据:{}", manMap.size()); - log.info("女性数据:{}", femanMap.size()); - // 旧线索 - List oldClues = Optional.ofNullable(domain.getMap().get(task.getModelId())).orElse(new ArrayList<>()); - Map oldClueMap = oldClues.stream().collect(Collectors.toMap(RiskModelTaskClue::getIdCode, Function.identity(), (oldValue, newValue) -> newValue)); - // 旧线索 - List oldClues2 = Optional.ofNullable(domain.getMap().get(task2.getModelId())).orElse(new ArrayList<>()); - Map oldClueMap2 = oldClues2.stream().collect(Collectors.toMap(RiskModelTaskClue::getIdCode, Function.identity(), (oldValue, newValue) -> newValue)); - // 遍历了 - List toInsertData = new ArrayList<>(); - List toUpdateData = new ArrayList<>(); - List toInsertData2 = new ArrayList<>(); - List toUpdateData2 = new ArrayList<>(); + List toInsert1 = new ArrayList<>(); + List toInsert2 = new ArrayList<>(); - LocalDateTime targetTime = LocalDateTime.now().minusDays(365); - log.info("指定时间:{}", targetTime); for (RiskPersonal person : domain.getPersons()) { - List tmpList = manMap.get(person.getIdCode()); - if(tmpList == null) { - tmpList = femanMap.get(person.getIdCode()); + if(old1.get(person.getIdCode()) != null) { + continue; } - if(tmpList == null) { + WdpcGrjdHyqkb result = dataMap.get(person.getIdCode()); + if(result == null) { continue; } - // 找到最新的婚姻登记 - GBaseHY last = null; - for (GBaseHY gBaseHY : tmpList) { - if(gBaseHY.getDjrq() == null) { - log.error("没有登记日期"); - continue; - } - if(last == null) { - last = gBaseHY; - continue; - } - if(gBaseHY.getDjrq().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().isAfter(last.getDjrq().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime())) { - last = gBaseHY; - } + ClueData clueData = ClueData.builder() + .personId(person.getId()) + .tag("离婚") + .id(person.getIdCode()) + .idCode(person.getIdCode()) + .name(person.getName()) + .sourceData("根据该人员最新的婚姻登记信息,发现该人员登记为离婚,增加风险分5分") + .build(); + try { + clueData.setEventTime(LocalDate.parse(result.getRegisterTime(), DateTimeFormatter.ofPattern("yyyyMMdd")).atTime(0,0,0)); + } catch (Exception e) { + clueData.setEventTime(LocalDateTime.now()); } - // 看看是不是离婚 - if(last == null || last.getYwlxdmdm() == null) { + toInsert1.add(createClue(task.getModelId(), 5, task.getId(), clueData)); + if(clueData.getEventTime().isBefore(yearsDate) || old2.get(person.getIdCode()) != 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) { - continue; - } - ClueData data = ClueData.builder() - .personId(person.getId()) - .tag("近12月内离婚") - .id(last.getXlzjdjzh()) - .idCode(person.getIdCode()) - .name(person.getName()) - .sourceData("根据该人员最新的婚姻登记信息,发现该人员登记为离婚,存在感情失意的可能,增加风险分3分") - .build(); - data.setEventTime(last.getDjrq().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); - toInsertData.add(data); - } else { - // 365天之前的离婚,进基础因素 - RiskModelTaskClue clue = oldClueMap2.get(person.getIdCode()); - if(clue != null) { - continue; - } - ClueData data = ClueData.builder() - .personId(person.getId()) - .tag("离婚") - .id(last.getXlzjdjzh()) - .idCode(person.getIdCode()) - .name(person.getName()) - .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; - } - RiskModelTaskClue update = new RiskModelTaskClue(); - update.setId(clue.getId()); - update.setDel(1); - toUpdateData2.add(update); - } - + ClueData clueData2 = ClueData.builder() + .personId(person.getId()) + .tag("个人婚姻创伤") + .id(person.getIdCode()) + .idCode(person.getIdCode()) + .name(person.getName()) + .sourceData("该人员最近一年有离婚登记信息,增加风险分5分") + .build(); + try { + clueData2.setEventTime(LocalDate.parse(result.getRegisterTime(), DateTimeFormatter.ofPattern("yyyyMMdd")).atTime(0,0,0)); + } catch (Exception e) { + clueData.setEventTime(LocalDateTime.now()); } + toInsert2.add(createClue(task2.getModelId(), 5, task2.getId(), clueData2)); } - List toInsert = new ArrayList<>(); - List 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)); + + List toUpdate = new ArrayList<>(); + List idCodes = new ArrayList<>(); + for (Map.Entry 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()); + } } - if(!toInsert.isEmpty()) { - riskModelTaskClueService.saveClues(toInsert, Default.NO_LOVE_IG); + if(!toInsert1.isEmpty()) { + log.info("新增离婚数据:{}", toInsert1.size()); + riskModelTaskClueService.saveClues(toInsert1, "婚姻状态"); } + riskTaskRepository.updateTask(task.getId(), toInsert1.size(), 0); + if(!toInsert2.isEmpty()) { - riskModelTaskClueService.saveClues(toInsert2, Default.MARRAY_IG); - } - if(!toUpdateData.isEmpty()) { - log.info("修改线索 | {}", toUpdateData.size()); - clueRepository.updateBatchById(toUpdateData); + log.info("新增个人婚姻创伤:{}", toInsert2.size()); + riskModelTaskClueService.saveClues(toInsert2, "个人婚姻创伤"); } - - if(!toUpdateData2.isEmpty()) { - log.info("修改线索2 | {}", toUpdateData2.size()); - clueRepository.updateBatchById(toUpdateData2); + if(!toUpdate.isEmpty()) { + log.info("修改个人婚姻创伤:{}", toUpdate.size()); + riskModelTaskClueService.deleteCluesAndDeleteTag(toUpdate, idCodes, "个人婚姻创伤"); } - - 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); - - } - - 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) {