From 73fb70bfbf36aba7a9a5f17387ae0db39e191c51 Mon Sep 17 00:00:00 2001 From: kami <605128600@qq.com> Date: Mon, 25 Nov 2024 19:05:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=AE=A1=E8=BE=96=E5=8D=95?= =?UTF-8?q?=E4=BD=8D=E7=B1=BB=E5=9E=8B=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../event/ApplicationEvent.java | 20 +- .../mapper/ads/GBaseSYRKXXMapper.java | 13 + .../pojo/constants/Default.java | 4 +- .../pojo/database/Contradiction.java | 21 ++ .../pojo/enums/DepartType.java | 22 ++ .../service/PersonalService.java | 17 +- .../service/RiskPersonalService.java | 8 +- .../service/impl/GBaseJJDServiceImpl.java | 6 +- .../service/impl/GBaseSHRWFRServiceImpl.java | 4 +- .../service/impl/NoControlServiceImpl.java | 8 +- .../service/impl/PersonalServiceImpl.java | 299 +++++++++++++++++- .../service/impl/PetitionServiceImpl.java | 11 +- .../service/impl/PointServiceImpl.java | 8 +- .../service/impl/RiskPersonalServiceImpl.java | 137 +++----- .../impl/RiskScoreRuleServiceImpl.java | 4 +- .../service/impl/RiskTaskServiceImpl.java | 6 +- .../util/{AgeUtil.java => IdCodeUtil.java} | 16 +- .../biutag/supervisiondata/util/TxtUtil.java | 7 +- 18 files changed, 453 insertions(+), 158 deletions(-) create mode 100644 src/main/java/com/biutag/supervisiondata/pojo/database/Contradiction.java create mode 100644 src/main/java/com/biutag/supervisiondata/pojo/enums/DepartType.java rename src/main/java/com/biutag/supervisiondata/util/{AgeUtil.java => IdCodeUtil.java} (63%) diff --git a/src/main/java/com/biutag/supervisiondata/event/ApplicationEvent.java b/src/main/java/com/biutag/supervisiondata/event/ApplicationEvent.java index 7977492..291ca0b 100644 --- a/src/main/java/com/biutag/supervisiondata/event/ApplicationEvent.java +++ b/src/main/java/com/biutag/supervisiondata/event/ApplicationEvent.java @@ -90,13 +90,16 @@ public class ApplicationEvent { @Resource private RiskModelTaskClueRepository taskClueRepository; + @Resource + private PersonalService personalService; + @EventListener(ApplicationReadyEvent.class) public void serviceReady() { RedisDao.getInstance().init(redisTemplate); - LocalDateTime start = LocalDateTime.of(2024, 1, 1, 0, 0, 0); - LocalDateTime end = LocalDateTime.now(); +// LocalDateTime start = LocalDateTime.of(2024, 1, 1, 0, 0, 0); +// LocalDateTime end = LocalDateTime.now(); CompletableFutureUtil.runSync(() -> { // gBaseJJDService.pullAndSave(start, end); // gBaseSHRWFRService.pullAndSave(start, end); @@ -104,11 +107,11 @@ public class ApplicationEvent { // pointService.personPullAndSave(start, end); // riskPersonalService.fixed(); - List persons = riskPersonalRepository.list(); - List clues = riskModelTaskClueRepository.list(new LambdaQueryWrapper() - .eq(RiskModelTaskClue::getDel, 0)); - Map> map = clues.stream().collect(Collectors.groupingBy(RiskModelTaskClue::getModelId)); - TaskParamDomain domain = new TaskParamDomain(persons, map); +// List persons = riskPersonalRepository.list(); +// List clues = riskModelTaskClueRepository.list(new LambdaQueryWrapper() +// .eq(RiskModelTaskClue::getDel, 0)); +// Map> map = clues.stream().collect(Collectors.groupingBy(RiskModelTaskClue::getModelId)); +// TaskParamDomain domain = new TaskParamDomain(persons, map); // riskTaskService.eduModelTask(domain); // riskTaskService.infoModelTask(domain); // riskTaskService.caseModelTask(domain); @@ -126,7 +129,8 @@ public class ApplicationEvent { // pointService.syncDrug(domain); // pointService.syncControlNoPower(domain); // riskScoreRuleService.runScore(); - pointService.syncPointCall(domain); +// pointService.syncPointCall(domain); + personalService.syncOrg(); }); } diff --git a/src/main/java/com/biutag/supervisiondata/mapper/ads/GBaseSYRKXXMapper.java b/src/main/java/com/biutag/supervisiondata/mapper/ads/GBaseSYRKXXMapper.java index 95f48c1..30264c3 100644 --- a/src/main/java/com/biutag/supervisiondata/mapper/ads/GBaseSYRKXXMapper.java +++ b/src/main/java/com/biutag/supervisiondata/mapper/ads/GBaseSYRKXXMapper.java @@ -1,6 +1,7 @@ package com.biutag.supervisiondata.mapper.ads; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervisiondata.pojo.database.Contradiction; import com.biutag.supervisiondata.pojo.domain.FightMan; import com.biutag.supervisiondata.pojo.entity.ads.GBaseSYRKXX; import com.biutag.supervisiondata.pojo.entity.dwd.GBaseWFRXX; @@ -41,6 +42,15 @@ public interface GBaseSYRKXXMapper extends BaseMapper { " where a.djsj >= #{time}") List selectHeightFight(@Param("time")String time); + /** + * 矛盾纠纷人员(矛盾次数大于5次) + * @param time 开始时间 + * @return 信息 + */ + @Select(" select gmsfhm, max(djsj) as maxTime from csga_dwd.dwd_qt_jzpt_mdjfdsrxx " + + " where djsj >= #{time} group by gmsfhm having count(1) > 5 ") + List selectContradiction(@Param("time")String time); + /** * 查人纠纷的次数 * @return 列表 @@ -54,4 +64,7 @@ public interface GBaseSYRKXXMapper extends BaseMapper { "") List selectListByIdCode(@Param("list")List list); + @Select("select distinct sspcsmc, sspcsdm from ads_ssxx_syrkxx where sspcsdm is not null and sspcsmc is not null") + List selectOrg(); + } diff --git a/src/main/java/com/biutag/supervisiondata/pojo/constants/Default.java b/src/main/java/com/biutag/supervisiondata/pojo/constants/Default.java index 574ffc0..f980741 100644 --- a/src/main/java/com/biutag/supervisiondata/pojo/constants/Default.java +++ b/src/main/java/com/biutag/supervisiondata/pojo/constants/Default.java @@ -32,9 +32,9 @@ public class Default { public static final String FIGHT_BORN = "成长地区暴力警情高于平均水平"; - public static final String FIGHT_MUCH = "高风险矛盾纠纷"; + public static final String FIGHT_MUCH = "多次矛盾纠纷"; - public static final String POINT_POEPLE = "特定人员"; + public static final String POINT_POEPLE = "重点人员"; public static final String NO_CONTROL = "专项排查关注人员"; diff --git a/src/main/java/com/biutag/supervisiondata/pojo/database/Contradiction.java b/src/main/java/com/biutag/supervisiondata/pojo/database/Contradiction.java new file mode 100644 index 0000000..dd13aec --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/database/Contradiction.java @@ -0,0 +1,21 @@ +package com.biutag.supervisiondata.pojo.database; + +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.Date; + +/** + * @author kami on 2024-11-25 18:52:50 + * @version 0.0.1 + * @since 1.8 + */ +@Data +public class Contradiction implements Serializable { + + String gmsfhm; + + Date maxTime; +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/enums/DepartType.java b/src/main/java/com/biutag/supervisiondata/pojo/enums/DepartType.java new file mode 100644 index 0000000..a2e0c62 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/enums/DepartType.java @@ -0,0 +1,22 @@ +package com.biutag.supervisiondata.pojo.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; + +/** + * @author kami on 2024-11-25 16:54:01 + * @version 0.0.1 + * @since 1.8 + */ +@AllArgsConstructor +@Getter +@Slf4j +public enum DepartType { + + POINT( 3), + HUMAN( 2), + OTHER( 1); + + private final Integer type; +} diff --git a/src/main/java/com/biutag/supervisiondata/service/PersonalService.java b/src/main/java/com/biutag/supervisiondata/service/PersonalService.java index 53501c5..a11eddb 100644 --- a/src/main/java/com/biutag/supervisiondata/service/PersonalService.java +++ b/src/main/java/com/biutag/supervisiondata/service/PersonalService.java @@ -10,7 +10,20 @@ import java.time.LocalDateTime; public interface PersonalService { /** - * 拉取人员信息 + * 拉取涉及警情相关人员信息 */ - void pullPersonalInfo(); + void pullJJDPersonalInfo(LocalDateTime start); + + /** + * 拉取重点人员信息 + */ + void pullPointPersonalInfo(); + + /** + * 矛盾纠纷人员 + */ + void pullContradictionInfo(); + + + void syncOrg(); } diff --git a/src/main/java/com/biutag/supervisiondata/service/RiskPersonalService.java b/src/main/java/com/biutag/supervisiondata/service/RiskPersonalService.java index ff5fd3c..188d678 100644 --- a/src/main/java/com/biutag/supervisiondata/service/RiskPersonalService.java +++ b/src/main/java/com/biutag/supervisiondata/service/RiskPersonalService.java @@ -19,14 +19,10 @@ public interface RiskPersonalService { */ void formatAndSave(List list, String bigTag); - void batchInsert3(List alliances); - /** - * 修改分 - * @param personals 集合 + * 新增去重用户 */ - void updateBatchScore(List personals); - + void saveDistinct(List riskPersonals); void fixed(); } diff --git a/src/main/java/com/biutag/supervisiondata/service/impl/GBaseJJDServiceImpl.java b/src/main/java/com/biutag/supervisiondata/service/impl/GBaseJJDServiceImpl.java index 9581306..7bdc070 100644 --- a/src/main/java/com/biutag/supervisiondata/service/impl/GBaseJJDServiceImpl.java +++ b/src/main/java/com/biutag/supervisiondata/service/impl/GBaseJJDServiceImpl.java @@ -9,7 +9,7 @@ import com.biutag.supervisiondata.repository.GBaseJJDRepository; import com.biutag.supervisiondata.repository.GBaseSYRKXXRepository; import com.biutag.supervisiondata.service.GBaseJJDService; import com.biutag.supervisiondata.service.RiskPersonalService; -import com.biutag.supervisiondata.util.AgeUtil; +import com.biutag.supervisiondata.util.IdCodeUtil; import com.biutag.supervisiondata.util.PatternUtil; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -56,10 +56,12 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { int ok = 0; // 过滤数据 List idCodes1 = new ArrayList<>(); + List mobiles1 = new ArrayList<>(); Map> jjdMap = new HashMap<>(); Map> jjdMMap = new HashMap<>(); + for (GBaseJJD item : result) { RiskPersonal person = createPerson(item); if(person.getIdCode() != null) { @@ -173,7 +175,7 @@ public class GBaseJJDServiceImpl implements GBaseJJDService { personal.setIdCode(info.getGmsfhm()); personal.setMobileNumber(info.getLxdh()); personal.setGender(info.getXbdm()); - personal.setAge(Optional.ofNullable(AgeUtil.idCard2Age(personal.getIdCode(), LocalDate.now())).orElse(-1)); + personal.setAge(Optional.ofNullable(IdCodeUtil.idCard2Age(personal.getIdCode(), LocalDate.now())).orElse(-1)); if(personal.getAge() == null ){ try { LocalDate localDate = info.getCsrq().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); diff --git a/src/main/java/com/biutag/supervisiondata/service/impl/GBaseSHRWFRServiceImpl.java b/src/main/java/com/biutag/supervisiondata/service/impl/GBaseSHRWFRServiceImpl.java index 455f4c1..92ebaa7 100644 --- a/src/main/java/com/biutag/supervisiondata/service/impl/GBaseSHRWFRServiceImpl.java +++ b/src/main/java/com/biutag/supervisiondata/service/impl/GBaseSHRWFRServiceImpl.java @@ -14,7 +14,7 @@ import com.biutag.supervisiondata.repository.GBaseSYRKXXRepository; import com.biutag.supervisiondata.repository.GBaseWFRXXRepository; import com.biutag.supervisiondata.service.GBaseSHRWFRService; import com.biutag.supervisiondata.service.RiskPersonalService; -import com.biutag.supervisiondata.util.AgeUtil; +import com.biutag.supervisiondata.util.IdCodeUtil; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -272,7 +272,7 @@ public class GBaseSHRWFRServiceImpl implements GBaseSHRWFRService { } catch (Exception e) { log.info("报警时间处理异常"); } - personal.setAge(Optional.ofNullable(AgeUtil.idCard2Age(personal.getIdCode(), LocalDate.now())).orElse(-1)); + personal.setAge(Optional.ofNullable(IdCodeUtil.idCard2Age(personal.getIdCode(), LocalDate.now())).orElse(-1)); // 这里暂时将小标签放到预览属性 处理标签回正 personal.setTags(tag); return personal; diff --git a/src/main/java/com/biutag/supervisiondata/service/impl/NoControlServiceImpl.java b/src/main/java/com/biutag/supervisiondata/service/impl/NoControlServiceImpl.java index ee74460..a8d6d9d 100644 --- a/src/main/java/com/biutag/supervisiondata/service/impl/NoControlServiceImpl.java +++ b/src/main/java/com/biutag/supervisiondata/service/impl/NoControlServiceImpl.java @@ -4,8 +4,6 @@ import com.biutag.supervisiondata.common.interfaces.CompletableFutureUtil; import com.biutag.supervisiondata.pojo.ClueData; import com.biutag.supervisiondata.pojo.constants.Default; import com.biutag.supervisiondata.pojo.domain.*; -import com.biutag.supervisiondata.pojo.entity.ads.GBaseSYRKXX; -import com.biutag.supervisiondata.pojo.entity.dwd.GBaseAJJBXX; import com.biutag.supervisiondata.pojo.entity.mine.RiskModelTaskClue; import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonal; import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonalTag; @@ -15,9 +13,8 @@ import com.biutag.supervisiondata.repository.RiskPersonalRepository; import com.biutag.supervisiondata.repository.RiskTaskRepository; import com.biutag.supervisiondata.service.NoControlService; import com.biutag.supervisiondata.service.RiskModelTaskClueService; -import com.biutag.supervisiondata.service.RiskPersonalService; import com.biutag.supervisiondata.service.RiskPersonalTagService; -import com.biutag.supervisiondata.util.AgeUtil; +import com.biutag.supervisiondata.util.IdCodeUtil; import com.biutag.supervisiondata.util.BhUtil; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -28,7 +25,6 @@ import java.time.LocalDateTime; import java.time.ZoneId; import java.util.*; import java.util.concurrent.CompletableFuture; -import java.util.stream.Collectors; /** * @author kami on 2024-11-18 14:06:17 @@ -295,7 +291,7 @@ public class NoControlServiceImpl implements NoControlService { } catch (Exception e) { log.info("性别异常"); } - personal.setAge(Optional.ofNullable(AgeUtil.idCard2Age(personal.getIdCode(), LocalDate.now())).orElse(-1)); + personal.setAge(Optional.ofNullable(IdCodeUtil.idCard2Age(personal.getIdCode(), LocalDate.now())).orElse(-1)); // 这里暂时将小标签放到预览属性 处理标签回正 return personal; } diff --git a/src/main/java/com/biutag/supervisiondata/service/impl/PersonalServiceImpl.java b/src/main/java/com/biutag/supervisiondata/service/impl/PersonalServiceImpl.java index f632f7a..bf1f889 100644 --- a/src/main/java/com/biutag/supervisiondata/service/impl/PersonalServiceImpl.java +++ b/src/main/java/com/biutag/supervisiondata/service/impl/PersonalServiceImpl.java @@ -1,20 +1,36 @@ package com.biutag.supervisiondata.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.biutag.supervisiondata.common.interfaces.CompletableFutureUtil; +import com.biutag.supervisiondata.pojo.constants.Default; +import com.biutag.supervisiondata.pojo.database.Contradiction; +import com.biutag.supervisiondata.pojo.entity.ads.GBaseSYRKXX; import com.biutag.supervisiondata.pojo.entity.dwd.GBaseJJD; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseTbDZdrylb; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseZDRY; import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonal; -import com.biutag.supervisiondata.repository.GBaseJJDRepository; -import com.biutag.supervisiondata.repository.RiskPersonalRepository; +import com.biutag.supervisiondata.pojo.entity.mine.SupDepart; +import com.biutag.supervisiondata.pojo.entity.mine.SupExternalDepart; +import com.biutag.supervisiondata.pojo.enums.DepartType; +import com.biutag.supervisiondata.repository.*; import com.biutag.supervisiondata.service.PersonalService; import com.biutag.supervisiondata.service.RiskPersonalService; +import com.biutag.supervisiondata.util.IdCodeUtil; +import com.biutag.supervisiondata.util.PatternUtil; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.cglib.core.Local; 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.ArrayList; -import java.util.List; +import java.util.*; +import java.util.concurrent.CompletableFuture; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.IntStream; /** * @author kami on 2024-11-25 11:01:11 @@ -26,16 +42,17 @@ import java.util.List; @AllArgsConstructor public class PersonalServiceImpl implements PersonalService { - private final RiskPersonalRepository personalRepository; - private final GBaseJJDRepository gBaseJJDRepository; + private final GBaseSYRKXXRepository gBaseSYRKXXRepository; + + private final RiskPersonalService riskPersonalService; + @Override - public void pullPersonalInfo() { - LocalDateTime start = personalRepository.getBaseMapper().selectMaxCreateTime(); - if(start == null) { - start = LocalDateTime.of(2024, 1,1,0,0,0); - } + public void pullJJDPersonalInfo(LocalDateTime start) { +// LocalDateTime start = Optional.ofNullable(personalRepository.getBaseMapper().selectMaxCreateTime()) +// .orElse(LocalDateTime.of(2024, 1, 1, 0, 0, 0)); + // 结束时间设置为人员的创建时间,保证下次提取是新的接警数据 LocalDateTime end = LocalDateTime.now(); // 获取接警数据 @@ -43,7 +60,267 @@ public class PersonalServiceImpl implements PersonalService { end.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); log.info("总条数 | {}条", result.size()); + // 过滤数据 + List idCodes1 = new ArrayList<>(); + List mobiles1 = new ArrayList<>(); + + Map> jjdMap = new HashMap<>(); + Map> jjdMMap = new HashMap<>(); + List jjdList = new ArrayList<>(); + for (GBaseJJD item : result) { + if (item.getBjrzjhm() != null) { + jjdMap.computeIfAbsent(item.getBjrzjhm(), k -> new ArrayList<>()).add(item); + idCodes1.add(item.getBjrzjhm()); + jjdList.add(item); + continue; + } + String idCards = PatternUtil.takeIdCard(item.getCjqk()); + if (idCards.isEmpty() && item.getBjrlxdh() == null) { + continue; + } + jjdList.add(item); + if (!idCards.isEmpty()) { + String[] strs = idCards.split(","); + for (String s : strs) { + idCodes1.add(s); + } + } else { + jjdMMap.computeIfAbsent(item.getBjrlxdh(), k -> new ArrayList<>()).add(item); + mobiles1.add(item.getBjrlxdh()); + } + } + // 去重 + List idCodes2 = idCodes1.stream().distinct().collect(Collectors.toList()); + List mobiles2 = mobiles1.stream().distinct().collect(Collectors.toList()); + + // 切割 + List> idCodes = IntStream.range(0, (idCodes2.size() + 9999) / 10000) + .mapToObj(i -> idCodes2.subList(i * 10000, Math.min((i + 1) * 10000, idCodes2.size()))) + .collect(Collectors.toList()); + List> mobiles = IntStream.range(0, (mobiles2.size() + 9999) / 10000) + .mapToObj(i -> mobiles2.subList(i * 10000, Math.min((i + 1) * 10000, mobiles2.size()))) + .collect(Collectors.toList()); + + // 身份证查到的人 + List sFms = new ArrayList<>(); + // 手机号查到的人 + List lXfs = new ArrayList<>(); + // 同步查询 + CompletableFuture.allOf( + CompletableFutureUtil.runSyncObject(() -> sFms.addAll(getByIdCode(idCodes))), + CompletableFutureUtil.runSyncObject(() -> lXfs.addAll(getByMobiles(mobiles))) + ).join(); + + Map idCodeMap = sFms.stream().collect(Collectors.toMap(GBaseSYRKXX::getGmsfhm, Function.identity(), (oldValue, newValue) -> newValue)); + Map> mobileMap = lXfs.stream().collect(Collectors.groupingBy(GBaseSYRKXX::getLxdh)); + + List personals = new ArrayList<>(); + // 已出现的份证 + Map cache = new WeakHashMap<>(); + LocalDate now = LocalDate.now(); + for (GBaseJJD item : jjdList) { + GBaseSYRKXX syrkxx = null; + // 接警单证件号不为空并没入过库 + if (item.getBjrzjhm() != null && cache.get(item.getBjrzjhm()) == null) { + syrkxx = idCodeMap.get(item.getBjrzjhm()); + cache.put(item.getBjrzjhm(), new Byte[0]); + if (syrkxx != null) { + personals.add(createPerson(syrkxx, item.getBjsj(), now, end)); + } + continue; + } + String idCards = PatternUtil.takeIdCard(item.getCjqk()); + if (!idCards.isEmpty()) { + String[] strs = idCards.split(","); + for (String s : strs) { + if (cache.get(s) == null) { + syrkxx = idCodeMap.get(s); + cache.put(s, new Byte[0]); + if (syrkxx != null) { + personals.add(createPerson(syrkxx, item.getBjsj(), now, end)); + } + } + } + continue; + } + List xxList = Optional.ofNullable(mobileMap.get(item.getBjdh())).orElse(new ArrayList<>()); + syrkxx = compare(xxList, item.getBjrxm()); + if (syrkxx != null) { + cache.put(syrkxx.getGmsfhm(), new Byte[0]); + personals.add(createPerson(syrkxx, item.getBjsj(), now, end)); + } + } + riskPersonalService.saveDistinct(personals); + } + + private final GBaseZDRYRepository zdryRepository; + + @Override + public void pullPointPersonalInfo() { + List list = zdryRepository.getBaseMapper().syncPointPeople(); + LocalDate now = LocalDate.now(); + Map exist = new WeakHashMap<>(); + + List personals = new ArrayList<>(); + for (GBaseZDRY ry : list) { + if(exist.get(ry.getSfzh()) != null) { + continue; + } + exist.put(ry.getSfzh(), new Byte[0]); + RiskPersonal personal = new RiskPersonal(); + personal.setTags(Default.POINT_POEPLE); + personal.setCreateTime(LocalDateTime.now()); + personal.setIdCode(ry.getSfzh()); + personal.setName(ry.getXm()); + + personal.setControlDepartName(ry.getGxdw()); + personal.setControlDepartId(ry.getGxdwjgdm()); + personal.setControlDepartType(DepartType.POINT.getType()); + try { + personal.setControlTime(LocalDateTime.parse(ry.getJlbgsj(), DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + } catch (Exception e) { + } + // 基本信息 + personal.setAge(IdCodeUtil.idCard2Age(personal.getIdCode(), now)); + personal.setGender(IdCodeUtil.idCard2Gender(personal.getIdCode())); + // 去除无 + if (ry.getZdrylxfs() != null) { + String[] str = ry.getZdrylxfs().split(","); + StringBuilder mobiles = new StringBuilder(); + for (String s : str) { + String number = s.chars() + .filter(Character::isDigit) + .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append) + .toString(); + if(number.length() < 8 || number.equals("00000000")) { + continue; + } + mobiles.append(s).append(","); + } + personal.setMobileNumber(mobiles.substring(0, mobiles.length()-1)); + } + personals.add(personal); + } + riskPersonalService.saveDistinct(personals); + } + + @Override + public void pullContradictionInfo() { + LocalDateTime now = LocalDateTime.now(); + List list = gBaseSYRKXXRepository.getBaseMapper().selectContradiction(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + List idCode = list.stream().map(Contradiction::getGmsfhm).distinct().toList(); + // 切割 + List> idCodes = IntStream.range(0, (idCode.size() + 9999) / 10000) + .mapToObj(i -> idCode.subList(i * 10000, Math.min((i + 1) * 10000, idCode.size()))) + .collect(Collectors.toList()); + Map map = list.stream().collect(Collectors.toMap(Contradiction::getGmsfhm, Function.identity(), (val, old)->val)); + List xxList = getByIdCode(idCodes); + + Map exist = new WeakHashMap<>(); List personals = new ArrayList<>(); + for (GBaseSYRKXX syrkxx : xxList) { + if(exist.get(syrkxx.getGmsfhm()) != null) { + continue; + } + exist.put(syrkxx.getGmsfhm(), new Byte[0]); + Contradiction contradiction = map.get(syrkxx.getGmsfhm()); + personals.add(createPerson(syrkxx, Optional.of(contradiction).map(Contradiction::getMaxTime) + .orElse(null) ,now.toLocalDate(), now)); + } + riskPersonalService.saveDistinct(personals); + } + + private final SupExternalDepartRepository supExternalDepartRepository; + + @Override + public void syncOrg() { + List xxInfo = gBaseSYRKXXRepository.getBaseMapper().selectOrg(); + List externalDeparts = new ArrayList<>(); + Map supExternalDepartMap = new WeakHashMap<>(); + for (GBaseSYRKXX syrkxx : xxInfo) { + SupExternalDepart externalDepart = new SupExternalDepart(); + externalDepart.setExternalId(syrkxx.getSspcsdm()); + externalDepart.setExternalName(syrkxx.getSspcsmc()); + externalDepart.setSource("实有人口信息"); + externalDeparts.add(externalDepart); + supExternalDepartMap.put(syrkxx.getSspcsdm(), 1); + } + if (!externalDeparts.isEmpty()) { + supExternalDepartRepository.saveBatch(externalDeparts); + } + } + + /** + * 通过身份证号查询实有人口 + * + * @param idCodes 身份证 + * @return 实有人口信息 + */ + List getByIdCode(List> idCodes) { + List tmp = new ArrayList<>(); + for (int i = 0, len = idCodes.size(); i < len; i++) { + tmp.addAll(gBaseSYRKXXRepository.list(new LambdaQueryWrapper() + .select(GBaseSYRKXX::getGmsfhm, GBaseSYRKXX::getXm, GBaseSYRKXX::getLxdh, GBaseSYRKXX::getSspcsdm, GBaseSYRKXX::getSspcsmc) + .in(GBaseSYRKXX::getGmsfhm, idCodes.get(i)))); + log.info("证件查询进度:{}", i); + } + return tmp; + } + + /** + * 通过手机号查询实有人口信息 + * + * @param mobiles 手机号 + * @return 查到的实有人口数据 + */ + List getByMobiles(List> mobiles) { + List tmp = new ArrayList<>(); + for (int i = 0, len = mobiles.size(); i < len; i++) { + tmp.addAll(gBaseSYRKXXRepository.list(new LambdaQueryWrapper() + .select(GBaseSYRKXX::getGmsfhm, GBaseSYRKXX::getXm, GBaseSYRKXX::getXlmc, GBaseSYRKXX::getLxdh, GBaseSYRKXX::getSspcsdm, GBaseSYRKXX::getSspcsmc) + .in(GBaseSYRKXX::getLxdh, mobiles.get(i)))); + log.info("手机号查询进度:{}", i); + } + return tmp; + } + + GBaseSYRKXX compare(List infos, String name) { + GBaseSYRKXX info = null; + for (GBaseSYRKXX gBaseSYRKXX : infos) { + if (gBaseSYRKXX.getXm().equals(name)) { + info = gBaseSYRKXX; + break; + } + } + return info; + } + + + RiskPersonal createPerson(GBaseSYRKXX item, Date bjsj, LocalDate now, LocalDateTime time) { + RiskPersonal person = new RiskPersonal(); + person.setName(item.getXm()); + person.setMobileNumber(item.getLxdh()); + person.setControlDepartId(item.getSspcsdm()); + person.setControlDepartName(item.getSspcsmc()); + person.setControlDepartType(DepartType.OTHER.getType()); + person.setIdCode(item.getGmsfhm().toUpperCase()); + person.setCreateTime(time); + person.setAge(IdCodeUtil.idCard2Age(person.getIdCode(), now)); + person.setGender(IdCodeUtil.idCard2Gender(person.getIdCode())); + person.setTags(Default.BIG_TAG_JJD); + try { + LocalDateTime controlTime = bjsj.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); + person.setControlTime(controlTime); + } catch (Exception e) { + log.info("报警时间处理异常"); + } + if (person.getAge() == null || person.getGender() == null) { + return null; + } + if (person.getAge() <= 6 || person.getAge() >= 80) { + return null; + } + return person; } } diff --git a/src/main/java/com/biutag/supervisiondata/service/impl/PetitionServiceImpl.java b/src/main/java/com/biutag/supervisiondata/service/impl/PetitionServiceImpl.java index 77352ac..c4dcac8 100644 --- a/src/main/java/com/biutag/supervisiondata/service/impl/PetitionServiceImpl.java +++ b/src/main/java/com/biutag/supervisiondata/service/impl/PetitionServiceImpl.java @@ -1,6 +1,5 @@ package com.biutag.supervisiondata.service.impl; -import com.alibaba.fastjson2.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.biutag.supervisiondata.common.interfaces.CompletableFutureUtil; import com.biutag.supervisiondata.pojo.ClueData; @@ -12,7 +11,7 @@ import com.biutag.supervisiondata.repository.*; import com.biutag.supervisiondata.service.PetitionService; import com.biutag.supervisiondata.service.RiskModelTaskClueService; import com.biutag.supervisiondata.service.RiskPersonalService; -import com.biutag.supervisiondata.util.AgeUtil; +import com.biutag.supervisiondata.util.IdCodeUtil; import com.biutag.supervisiondata.util.BhUtil; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -168,7 +167,7 @@ public class PetitionServiceImpl implements PetitionService { personal.setMobileNumber(xx.getLxdh()); } personal.setName(xx.getXm()); - personal.setAge(Optional.ofNullable(AgeUtil.idCard2Age(personal.getIdCode(), LocalDate.now())).orElse(-1)); + personal.setAge(Optional.ofNullable(IdCodeUtil.idCard2Age(personal.getIdCode(), LocalDate.now())).orElse(-1)); if(personal.getAge() <= 6) { continue; } @@ -188,7 +187,7 @@ public class PetitionServiceImpl implements PetitionService { personal.setMobileNumber(xx.getLxdh()); } personal.setName(xx.getXm()); - personal.setAge(Optional.ofNullable(AgeUtil.idCard2Age(personal.getIdCode(), LocalDate.now())).orElse(-1)); + personal.setAge(Optional.ofNullable(IdCodeUtil.idCard2Age(personal.getIdCode(), LocalDate.now())).orElse(-1)); if(personal.getAge() <= 6) { continue; } @@ -214,7 +213,7 @@ public class PetitionServiceImpl implements PetitionService { personal.setMobileNumber(info.getLxdh()); } personal.setName(info.getXm()); - personal.setAge(Optional.ofNullable(AgeUtil.idCard2Age(personal.getIdCode(), LocalDate.now())).orElse(-1)); + personal.setAge(Optional.ofNullable(IdCodeUtil.idCard2Age(personal.getIdCode(), LocalDate.now())).orElse(-1)); if(personal.getAge() <= 6) { continue; } @@ -551,7 +550,7 @@ public class PetitionServiceImpl implements PetitionService { return null; } try{ - int age = AgeUtil.idCard2Age(personal.getIdCode(), LocalDate.now()); + int age = IdCodeUtil.idCard2Age(personal.getIdCode(), LocalDate.now()); if(age <= 6) { return null; } diff --git a/src/main/java/com/biutag/supervisiondata/service/impl/PointServiceImpl.java b/src/main/java/com/biutag/supervisiondata/service/impl/PointServiceImpl.java index 9b8e078..a150a07 100644 --- a/src/main/java/com/biutag/supervisiondata/service/impl/PointServiceImpl.java +++ b/src/main/java/com/biutag/supervisiondata/service/impl/PointServiceImpl.java @@ -4,28 +4,24 @@ import com.alibaba.fastjson2.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.biutag.supervisiondata.config.cache.RedisDao; import com.biutag.supervisiondata.mapper.mine.SupDepartMapper; -import com.biutag.supervisiondata.mapper.mine.SupExternalDepartMapper; import com.biutag.supervisiondata.pojo.ClueData; import com.biutag.supervisiondata.pojo.constants.Default; import com.biutag.supervisiondata.pojo.domain.*; import com.biutag.supervisiondata.pojo.entity.dwd.GBaseJJD; import com.biutag.supervisiondata.pojo.entity.dwd.GBaseTbDZdrylb; import com.biutag.supervisiondata.pojo.entity.dwd.GBaseZDRY; -import com.biutag.supervisiondata.pojo.entity.dwd.GBaseZDXL; import com.biutag.supervisiondata.pojo.entity.mine.*; import com.biutag.supervisiondata.repository.*; import com.biutag.supervisiondata.service.PointService; import com.biutag.supervisiondata.service.RiskModelTaskClueService; import com.biutag.supervisiondata.service.RiskPersonalService; -import com.biutag.supervisiondata.util.AgeUtil; +import com.biutag.supervisiondata.util.IdCodeUtil; import com.biutag.supervisiondata.util.BhUtil; import com.biutag.supervisiondata.util.PatternUtil; -import com.biutag.supervisiondata.util.TxtUtil; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import java.awt.*; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneId; @@ -577,7 +573,7 @@ public class PointServiceImpl implements PointService { } // 基本信息 try { - personal.setAge(AgeUtil.idCard2Age(personal.getIdCode(), date)); + personal.setAge(IdCodeUtil.idCard2Age(personal.getIdCode(), date)); int gender = personal.getIdCode().length() == 18 ? Integer.valueOf(personal.getIdCode().substring(16, 17)) : Integer.valueOf(personal.getIdCode().substring(14, 15)); // 结果0男1女 余数偶女奇男 personal.setGender(gender % 2 == 0 ? "2" : "1"); diff --git a/src/main/java/com/biutag/supervisiondata/service/impl/RiskPersonalServiceImpl.java b/src/main/java/com/biutag/supervisiondata/service/impl/RiskPersonalServiceImpl.java index 814a2b7..0f4c327 100644 --- a/src/main/java/com/biutag/supervisiondata/service/impl/RiskPersonalServiceImpl.java +++ b/src/main/java/com/biutag/supervisiondata/service/impl/RiskPersonalServiceImpl.java @@ -9,7 +9,7 @@ import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonalTag; import com.biutag.supervisiondata.repository.RiskPersonalRepository; import com.biutag.supervisiondata.service.RiskPersonalService; import com.biutag.supervisiondata.service.RiskPersonalTagService; -import com.biutag.supervisiondata.util.AgeUtil; +import com.biutag.supervisiondata.util.IdCodeUtil; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Qualifier; @@ -100,16 +100,8 @@ public class RiskPersonalServiceImpl implements RiskPersonalService { } log.info("保存长度: {}", data.size()); if(!data.isEmpty()) { - List> persons = IntStream.range(0, (data.size() + 9999) / 10000) - .mapToObj(i -> data.subList(i * 10000, Math.min((i + 1) * 10000, data.size()))) - .collect(Collectors.toList()); - for (List person : persons) { - try { - batchInsert(person); - } catch (Exception e) { - log.error("", e); - } - } + log.info("开始操作待新增用户:{}", tags.size()); + repository.saveBatch(data, 10000); } if(!tags.isEmpty()) { @@ -123,70 +115,45 @@ public class RiskPersonalServiceImpl implements RiskPersonalService { } } - public Connection getConnection() throws SQLException { - return dataSource.getConnection(); - } - - final String sql = "INSERT INTO risk_personal(name, gender, age, id_code, mobile_number, control_depart_id, control_depart_name, control_time, create_time, tags, error_msg) VALUES(?,?,?,?,?,?,?,?,?,?,?)"; - - final String sql3 = "INSERT INTO risk_personal_control_record(name, id_code, control_depart_id, control_depart_name, control_time, control_tag, create_time) VALUES(?,?,?,?,?,?,?)"; - - - public void batchInsert(List alliances) { - try (Connection connection = getConnection(); - PreparedStatement prepareStatement = connection.prepareStatement(sql)) { - connection.setAutoCommit(false); - alliances.stream().forEachOrdered(it -> { - try { - prepareStatement.setObject(1, Optional.ofNullable(it.getName()).orElse("")); - prepareStatement.setObject(2, Optional.ofNullable(it.getGender()).orElse("-1")); - prepareStatement.setObject(3, Optional.ofNullable(it.getAge()).orElse(-1)); - prepareStatement.setObject(4, Optional.ofNullable(it.getIdCode()).orElse("")); - prepareStatement.setObject(5, Optional.ofNullable(it.getMobileNumber()).orElse("")); - prepareStatement.setObject(6, Optional.ofNullable(it.getControlDepartId()).orElse("")); - prepareStatement.setObject(7, Optional.ofNullable(it.getControlDepartName()).orElse("")); - prepareStatement.setObject(8, Optional.ofNullable(it.getControlTime()).map(item -> item.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))).orElse(null)); - prepareStatement.setObject(9, it.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); - prepareStatement.setObject(10, Optional.ofNullable(it.getTags()).orElse("")); - prepareStatement.setObject(11, Optional.ofNullable(it.getErrorMsg()).orElse("")); - prepareStatement.addBatch(); - } catch (SQLException e) { - log.error("", e); - } - }); - prepareStatement.executeBatch(); - connection.commit(); - } catch (Exception e) { - e.printStackTrace(); - throw new BusinessException(StatusCode.BUSINESS, "数据保存失败"); + @Override + public void saveDistinct(List riskPersonals) { + // 旧的风险人员(只管身份证,能剔除多少算多少) + Map oldMap = repository.list(new LambdaQueryWrapper() + .select(RiskPersonal::getIdCode, RiskPersonal::getId, RiskPersonal::getTags, RiskPersonal::getControlDepartType)).stream().collect(Collectors.toMap(RiskPersonal::getIdCode, Function.identity(), (val, old) -> val)); + List toInsert = new ArrayList<>(); + List toUpdate = new ArrayList<>(); + for (RiskPersonal riskPersonal : riskPersonals) { + riskPersonal.setIdCode(riskPersonal.getIdCode().toUpperCase()); + RiskPersonal old = oldMap.get(riskPersonal.getIdCode()); + if(old == null) { + toInsert.add(riskPersonal); + continue; + } + if(old.getTags().contains(riskPersonal.getTags())) { + continue; + } + RiskPersonal update = new RiskPersonal(); + update.setId(old.getId()); + update.setTags(old.getTags().concat(",").concat(riskPersonal.getTags())); + if(riskPersonal.getControlDepartType()> old.getControlDepartType()) { + update.setControlDepartId(riskPersonal.getControlDepartId()); + update.setControlDepartName(riskPersonal.getControlDepartName()); + update.setControlDepartType(riskPersonal.getControlDepartType()); + } + toUpdate.add(update); + } + if(!toInsert.isEmpty()) { + log.info("开始保存新增人员:{}", toInsert.size()); + repository.saveBatch(toInsert, 5000); + } + if(!toUpdate.isEmpty()) { + log.info("开始保存修改人员:{}", toUpdate.size()); + repository.updateBatchById(toUpdate, 5000); } } - @Override - public void batchInsert3(List alliances) { - try (Connection connection = getConnection(); - PreparedStatement prepareStatement = connection.prepareStatement(sql3)) { - connection.setAutoCommit(false); - alliances.stream().forEachOrdered(it -> { - try { - prepareStatement.setObject(1, Optional.ofNullable(it.getName()).orElse("")); - prepareStatement.setObject(2, Optional.ofNullable(it.getIdCode()).orElse("")); - prepareStatement.setObject(3, Optional.ofNullable(it.getControlDepartId()).orElse("")); - prepareStatement.setObject(4, Optional.ofNullable(it.getControlDepartName()).orElse("")); - prepareStatement.setObject(5, Optional.ofNullable(it.getControlTime()).map(item -> item.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))).orElse(null)); - prepareStatement.setObject(6, Optional.ofNullable(it.getControlTag()).orElse("")); - prepareStatement.setObject(7, it.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); - prepareStatement.addBatch(); - } catch (SQLException e) { - log.error("", e); - } - }); - prepareStatement.executeBatch(); - connection.commit(); - } catch (Exception e) { - e.printStackTrace(); - throw new BusinessException(StatusCode.BUSINESS, "数据保存失败"); - } + public Connection getConnection() throws SQLException { + return dataSource.getConnection(); } @Override @@ -203,30 +170,6 @@ public class RiskPersonalServiceImpl implements RiskPersonalService { } } - final String updateSQL = "UPDATE risk_personal SET risk_score = ? WHERE id = ?"; - - - void batchUpdateData(List personals) { - try (Connection connection = getConnection(); - PreparedStatement prepareStatement = connection.prepareStatement(updateSQL)) { - connection.setAutoCommit(false); - personals.stream().forEachOrdered(it -> { - try { - prepareStatement.setObject(1, Optional.ofNullable(it.getRickScore()).orElse(0.0)); - prepareStatement.setObject(2, it.getId()); - prepareStatement.addBatch(); - } catch (SQLException e) { - log.error("", e); - } - }); - prepareStatement.executeBatch(); - connection.commit(); - } catch (Exception e) { - e.printStackTrace(); - throw new BusinessException(StatusCode.BUSINESS, "数据修改失败"); - } - } - @Override public void fixed() { List personals = repository.list(); @@ -235,7 +178,7 @@ public class RiskPersonalServiceImpl implements RiskPersonalService { boolean up = false; if(personal.getAge() == -1) { try{ - int age = AgeUtil.idCard2Age(personal.getIdCode(), LocalDate.now()); + int age = IdCodeUtil.idCard2Age(personal.getIdCode(), LocalDate.now()); personal.setAge(age); up = true; } catch (Exception e) { diff --git a/src/main/java/com/biutag/supervisiondata/service/impl/RiskScoreRuleServiceImpl.java b/src/main/java/com/biutag/supervisiondata/service/impl/RiskScoreRuleServiceImpl.java index 4746c27..d54911d 100644 --- a/src/main/java/com/biutag/supervisiondata/service/impl/RiskScoreRuleServiceImpl.java +++ b/src/main/java/com/biutag/supervisiondata/service/impl/RiskScoreRuleServiceImpl.java @@ -42,8 +42,6 @@ public class RiskScoreRuleServiceImpl implements RiskScoreRuleService { private final RiskModelTaskClueRepository riskModelTaskClueRepository; - private final RiskPersonalService riskPersonalService; - @Override public void runScore(List idCodes) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() @@ -116,6 +114,6 @@ public class RiskScoreRuleServiceImpl implements RiskScoreRuleService { log.info("已完成打分: {},共计:{}", count,size); } } - riskPersonalService.updateBatchScore(toUpdates); + personalRepository.updateBatchById(toUpdates, 10000); } } diff --git a/src/main/java/com/biutag/supervisiondata/service/impl/RiskTaskServiceImpl.java b/src/main/java/com/biutag/supervisiondata/service/impl/RiskTaskServiceImpl.java index 7f4cc56..c35ccad 100644 --- a/src/main/java/com/biutag/supervisiondata/service/impl/RiskTaskServiceImpl.java +++ b/src/main/java/com/biutag/supervisiondata/service/impl/RiskTaskServiceImpl.java @@ -21,7 +21,7 @@ import com.biutag.supervisiondata.service.RiskModelTaskClueService; import com.biutag.supervisiondata.service.RiskPersonalControlRecordService; import com.biutag.supervisiondata.service.RiskPersonalService; import com.biutag.supervisiondata.service.RiskTaskService; -import com.biutag.supervisiondata.util.AgeUtil; +import com.biutag.supervisiondata.util.IdCodeUtil; import com.biutag.supervisiondata.util.BhUtil; import com.biutag.supervisiondata.util.PatternUtil; import com.biutag.supervisiondata.util.TxtUtil; @@ -686,7 +686,7 @@ public class RiskTaskServiceImpl implements RiskTaskService { continue; } RiskModelTaskClue old = oldMap.get(person.getIdCode()); - Integer age = AgeUtil.idCard2Age(person.getIdCode(), now); + Integer age = IdCodeUtil.idCard2Age(person.getIdCode(), now); if (age == null) { continue; } @@ -862,7 +862,7 @@ public class RiskTaskServiceImpl implements RiskTaskService { person.setControlDepartId(xx.getSspcsdm()); person.setControlDepartName(xx.getSspcsmc()); try{ - int age = AgeUtil.idCard2Age(person.getIdCode(), LocalDate.now()); + int age = IdCodeUtil.idCard2Age(person.getIdCode(), LocalDate.now()); if(age <= 6) { return null; } diff --git a/src/main/java/com/biutag/supervisiondata/util/AgeUtil.java b/src/main/java/com/biutag/supervisiondata/util/IdCodeUtil.java similarity index 63% rename from src/main/java/com/biutag/supervisiondata/util/AgeUtil.java rename to src/main/java/com/biutag/supervisiondata/util/IdCodeUtil.java index ce473e8..2b87b88 100644 --- a/src/main/java/com/biutag/supervisiondata/util/AgeUtil.java +++ b/src/main/java/com/biutag/supervisiondata/util/IdCodeUtil.java @@ -13,12 +13,13 @@ import java.time.format.DateTimeFormatter; */ @Slf4j @UtilityClass -public class AgeUtil { +public class IdCodeUtil { /** * 身份证提取年龄 + * * @param idNumber 证件号 - * @param now 当前日期 + * @param now 当前日期 * @return */ public static Integer idCard2Age(String idNumber, LocalDate now) { @@ -32,4 +33,15 @@ public class AgeUtil { } return null; } + + public static String idCard2Gender(String idNumber) { + try { + int gender = idNumber.length() == 18 ? Integer.valueOf(idNumber.substring(16, 17)) : Integer.valueOf(idNumber.substring(14, 15)); + // 结果0男1女 余数偶女奇男 + return gender % 2 == 0 ? "2" : "1"; + } catch (Exception e) { + log.info("身份证转性别异常"); + } + return null; + } } diff --git a/src/main/java/com/biutag/supervisiondata/util/TxtUtil.java b/src/main/java/com/biutag/supervisiondata/util/TxtUtil.java index c153059..f0f11eb 100644 --- a/src/main/java/com/biutag/supervisiondata/util/TxtUtil.java +++ b/src/main/java/com/biutag/supervisiondata/util/TxtUtil.java @@ -1,5 +1,6 @@ package com.biutag.supervisiondata.util; +import com.alibaba.fastjson2.JSON; import lombok.experimental.UtilityClass; import lombok.extern.slf4j.Slf4j; @@ -8,7 +9,7 @@ import java.io.FileWriter; import java.io.IOException; import java.time.LocalDateTime; import java.time.ZoneId; -import java.util.Date; +import java.util.*; /** * @author kami on 2024-07-15 15:47:40 @@ -28,6 +29,8 @@ public class TxtUtil { } public static void main(String[] args) { - log.info("{}", Date.from(LocalDateTime.of(2024,1,1,0,0,0).atZone(ZoneId.systemDefault()).toInstant())); + Map> map = new HashMap<>(); + map.computeIfAbsent("1", k -> new ArrayList<>()).add(1); + log.info(JSON.toJSONString(map)); } }