Browse Source

增加管辖单位类型字段

master
kami 1 year ago
parent
commit
73fb70bfbf
  1. 20
      src/main/java/com/biutag/supervisiondata/event/ApplicationEvent.java
  2. 13
      src/main/java/com/biutag/supervisiondata/mapper/ads/GBaseSYRKXXMapper.java
  3. 4
      src/main/java/com/biutag/supervisiondata/pojo/constants/Default.java
  4. 21
      src/main/java/com/biutag/supervisiondata/pojo/database/Contradiction.java
  5. 22
      src/main/java/com/biutag/supervisiondata/pojo/enums/DepartType.java
  6. 17
      src/main/java/com/biutag/supervisiondata/service/PersonalService.java
  7. 8
      src/main/java/com/biutag/supervisiondata/service/RiskPersonalService.java
  8. 6
      src/main/java/com/biutag/supervisiondata/service/impl/GBaseJJDServiceImpl.java
  9. 4
      src/main/java/com/biutag/supervisiondata/service/impl/GBaseSHRWFRServiceImpl.java
  10. 8
      src/main/java/com/biutag/supervisiondata/service/impl/NoControlServiceImpl.java
  11. 299
      src/main/java/com/biutag/supervisiondata/service/impl/PersonalServiceImpl.java
  12. 11
      src/main/java/com/biutag/supervisiondata/service/impl/PetitionServiceImpl.java
  13. 8
      src/main/java/com/biutag/supervisiondata/service/impl/PointServiceImpl.java
  14. 137
      src/main/java/com/biutag/supervisiondata/service/impl/RiskPersonalServiceImpl.java
  15. 4
      src/main/java/com/biutag/supervisiondata/service/impl/RiskScoreRuleServiceImpl.java
  16. 6
      src/main/java/com/biutag/supervisiondata/service/impl/RiskTaskServiceImpl.java
  17. 16
      src/main/java/com/biutag/supervisiondata/util/IdCodeUtil.java
  18. 7
      src/main/java/com/biutag/supervisiondata/util/TxtUtil.java

20
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<RiskPersonal> persons = riskPersonalRepository.list();
List<RiskModelTaskClue> clues = riskModelTaskClueRepository.list(new LambdaQueryWrapper<RiskModelTaskClue>()
.eq(RiskModelTaskClue::getDel, 0));
Map<Integer, List<RiskModelTaskClue>> map = clues.stream().collect(Collectors.groupingBy(RiskModelTaskClue::getModelId));
TaskParamDomain domain = new TaskParamDomain(persons, map);
// List<RiskPersonal> persons = riskPersonalRepository.list();
// List<RiskModelTaskClue> clues = riskModelTaskClueRepository.list(new LambdaQueryWrapper<RiskModelTaskClue>()
// .eq(RiskModelTaskClue::getDel, 0));
// Map<Integer, List<RiskModelTaskClue>> 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();
});
}

13
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<GBaseSYRKXX> {
" where a.djsj >= #{time}")
List<GBaseSYRKXX> 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<Contradiction> selectContradiction(@Param("time")String time);
/**
* 查人纠纷的次数
* @return 列表
@ -54,4 +64,7 @@ public interface GBaseSYRKXXMapper extends BaseMapper<GBaseSYRKXX> {
"</script>")
List<FightMan> selectListByIdCode(@Param("list")List<String> list);
@Select("select distinct sspcsmc, sspcsdm from ads_ssxx_syrkxx where sspcsdm is not null and sspcsmc is not null")
List<GBaseSYRKXX> selectOrg();
}

4
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 = "专项排查关注人员";

21
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;
}

22
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;
}

17
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();
}

8
src/main/java/com/biutag/supervisiondata/service/RiskPersonalService.java

@ -19,14 +19,10 @@ public interface RiskPersonalService {
*/
void formatAndSave(List<RiskPersonal> list, String bigTag);
void batchInsert3(List<RiskPersonalControlRecord> alliances);
/**
* 修改分
* @param personals 集合
* 新增去重用户
*/
void updateBatchScore(List<RiskPersonal> personals);
void saveDistinct(List<RiskPersonal> riskPersonals);
void fixed();
}

6
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<String> idCodes1 = new ArrayList<>();
List<String> mobiles1 = new ArrayList<>();
Map<String, List<GBaseJJD>> jjdMap = new HashMap<>();
Map<String, List<GBaseJJD>> 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();

4
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;

8
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;
}

299
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<String> idCodes1 = new ArrayList<>();
List<String> mobiles1 = new ArrayList<>();
Map<String, List<GBaseJJD>> jjdMap = new HashMap<>();
Map<String, List<GBaseJJD>> jjdMMap = new HashMap<>();
List<GBaseJJD> 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<String> idCodes2 = idCodes1.stream().distinct().collect(Collectors.toList());
List<String> mobiles2 = mobiles1.stream().distinct().collect(Collectors.toList());
// 切割
List<List<String>> 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<List<String>> 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<GBaseSYRKXX> sFms = new ArrayList<>();
// 手机号查到的人
List<GBaseSYRKXX> lXfs = new ArrayList<>();
// 同步查询
CompletableFuture.allOf(
CompletableFutureUtil.runSyncObject(() -> sFms.addAll(getByIdCode(idCodes))),
CompletableFutureUtil.runSyncObject(() -> lXfs.addAll(getByMobiles(mobiles)))
).join();
Map<String, GBaseSYRKXX> idCodeMap = sFms.stream().collect(Collectors.toMap(GBaseSYRKXX::getGmsfhm, Function.identity(), (oldValue, newValue) -> newValue));
Map<String, List<GBaseSYRKXX>> mobileMap = lXfs.stream().collect(Collectors.groupingBy(GBaseSYRKXX::getLxdh));
List<RiskPersonal> personals = new ArrayList<>();
// 已出现的份证
Map<String, Byte[]> 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<GBaseSYRKXX> 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<GBaseZDRY> list = zdryRepository.getBaseMapper().syncPointPeople();
LocalDate now = LocalDate.now();
Map<String, Byte[]> exist = new WeakHashMap<>();
List<RiskPersonal> 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<Contradiction> list = gBaseSYRKXXRepository.getBaseMapper().selectContradiction(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
List<String> idCode = list.stream().map(Contradiction::getGmsfhm).distinct().toList();
// 切割
List<List<String>> 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<String, Contradiction> map = list.stream().collect(Collectors.toMap(Contradiction::getGmsfhm, Function.identity(), (val, old)->val));
List<GBaseSYRKXX> xxList = getByIdCode(idCodes);
Map<String, Byte[]> exist = new WeakHashMap<>();
List<RiskPersonal> 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<GBaseSYRKXX> xxInfo = gBaseSYRKXXRepository.getBaseMapper().selectOrg();
List<SupExternalDepart> externalDeparts = new ArrayList<>();
Map<String, Integer> 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<GBaseSYRKXX> getByIdCode(List<List<String>> idCodes) {
List<GBaseSYRKXX> tmp = new ArrayList<>();
for (int i = 0, len = idCodes.size(); i < len; i++) {
tmp.addAll(gBaseSYRKXXRepository.list(new LambdaQueryWrapper<GBaseSYRKXX>()
.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<GBaseSYRKXX> getByMobiles(List<List<String>> mobiles) {
List<GBaseSYRKXX> tmp = new ArrayList<>();
for (int i = 0, len = mobiles.size(); i < len; i++) {
tmp.addAll(gBaseSYRKXXRepository.list(new LambdaQueryWrapper<GBaseSYRKXX>()
.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<GBaseSYRKXX> 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;
}
}

11
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;
}

8
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");

137
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<List<RiskPersonal>> 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<RiskPersonal> 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<RiskPersonal> 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<RiskPersonal> riskPersonals) {
// 旧的风险人员(只管身份证,能剔除多少算多少)
Map<String, RiskPersonal> oldMap = repository.list(new LambdaQueryWrapper<RiskPersonal>()
.select(RiskPersonal::getIdCode, RiskPersonal::getId, RiskPersonal::getTags, RiskPersonal::getControlDepartType)).stream().collect(Collectors.toMap(RiskPersonal::getIdCode, Function.identity(), (val, old) -> val));
List<RiskPersonal> toInsert = new ArrayList<>();
List<RiskPersonal> 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<RiskPersonalControlRecord> 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<RiskPersonal> 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<RiskPersonal> 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) {

4
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<String> idCodes) {
LambdaQueryWrapper<RiskPersonal> queryWrapper = new LambdaQueryWrapper<RiskPersonal>()
@ -116,6 +114,6 @@ public class RiskScoreRuleServiceImpl implements RiskScoreRuleService {
log.info("已完成打分: {},共计:{}", count,size);
}
}
riskPersonalService.updateBatchScore(toUpdates);
personalRepository.updateBatchById(toUpdates, 10000);
}
}

6
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;
}

16
src/main/java/com/biutag/supervisiondata/util/AgeUtil.java → 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;
}
}

7
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<String, List<Integer>> map = new HashMap<>();
map.computeIfAbsent("1", k -> new ArrayList<>()).add(1);
log.info(JSON.toJSONString(map));
}
}

Loading…
Cancel
Save