Browse Source

优化118、119、120号模型运行速度

master
sjh 1 year ago
parent
commit
b7bd8c4d5d
  1. 6
      src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseCSCZRKMapper.java
  2. 8
      src/main/java/com/biutag/supervisiondata/mapper/wdpc2/WdpcHZCRYXXMapper.java
  3. 6
      src/main/java/com/biutag/supervisiondata/pojo/entity/dwd/GBaseCSCZRK.java
  4. 108
      src/main/java/com/biutag/supervisiondata/service/impl/PointServiceImpl.java

6
src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseCSCZRKMapper.java

@ -58,6 +58,12 @@ public interface GBaseCSCZRKMapper extends BaseMapper<GBaseCSCZRK> {
+ ")") + ")")
List<GBaseCSCZRK> selectFamilyPeople(); List<GBaseCSCZRK> selectFamilyPeople();
@Select("select distinct a.gmsfhm, a.fqgmsfzhm father_id from dwd_ry_kxgxzyk_csczrk a INNER JOIN csga_wdpcdb.wdpc_person b ON a.gmsfhm = b.id_code where a.fqgmsfzhm is not null;")
List<GBaseCSCZRK> selectFather();
@Select("select distinct a.gmsfhm, a.mqgmsfzhm mother_id from dwd_ry_kxgxzyk_csczrk a INNER JOIN csga_wdpcdb.wdpc_person b ON a.gmsfhm = b.id_code where a.mqgmsfzhm is not null;")
List<GBaseCSCZRK> selectMother();
// 父亲是否健在 // 父亲是否健在
@Select("<script>" @Select("<script>"
+ "select distinct gmsfhm from dwd_ry_kxgxzyk_csczrk where fqgmsfzhm in " + "select distinct gmsfhm from dwd_ry_kxgxzyk_csczrk where fqgmsfzhm in "

8
src/main/java/com/biutag/supervisiondata/mapper/wdpc2/WdpcHZCRYXXMapper.java

@ -19,4 +19,12 @@ public interface WdpcHZCRYXXMapper extends BaseMapper<WdpcHZCRYXX> {
*/ */
@Select(" select distinct id_code from wdpc_grjd_hzcryxx") @Select(" select distinct id_code from wdpc_grjd_hzcryxx")
List<String> selectDistinctIdCodes(); List<String> selectDistinctIdCodes();
@Select("<script>"
+ "select distinct id_code from wdpc_grjd_hzcryxx where id_code in "
+ "<foreach item='item' index='index' collection='list' open='(' separator=',' close=')'>"
+ "#{item}"
+ "</foreach>"
+ "</script>")
List<String> selectHZCPeople(List<String> idNos);
} }

6
src/main/java/com/biutag/supervisiondata/pojo/entity/dwd/GBaseCSCZRK.java

@ -91,4 +91,10 @@ public class GBaseCSCZRK implements Serializable {
@TableField(exist = false, value = "family_id") @TableField(exist = false, value = "family_id")
String familyId; String familyId;
@TableField(exist = false, value = "father_id")
String fatherId;
@TableField(exist = false, value = "mother_id")
String motherId;
} }

108
src/main/java/com/biutag/supervisiondata/service/impl/PointServiceImpl.java

@ -473,28 +473,38 @@ public class PointServiceImpl implements PointService {
Map<String, RiskModelTaskClue> oldMap = domain.getOldMap(task.getModelId(), true); Map<String, RiskModelTaskClue> oldMap = domain.getOldMap(task.getModelId(), true);
Map<String, Integer> idCode = new HashMap<>(); Map<String, Integer> idCode = new HashMap<>();
List<GBaseCSCZRK> list = new ArrayList<>(); List<String> list = new ArrayList<>();
log.info("模型119开始查询"); log.info("模型119开始查询");
List<WdpcHZCRYXX> wdpcHZCRYXXS = hZCRYXXRepository.list(new LambdaQueryWrapper<WdpcHZCRYXX>().select(WdpcHZCRYXX::getIdCode)); List<GBaseCSCZRK> father = cSCZRKRepository.getBaseMapper().selectFather();
log.info("模型119查询father结果数:{}", father.size());
Map<String, List<String>> fatherMap = father.stream().collect(Collectors.groupingBy(GBaseCSCZRK::getGmsfhm,
Collectors.mapping(GBaseCSCZRK::getFatherId, Collectors.toList())));
List<String> fatherList = father.stream().map(GBaseCSCZRK::getFatherId).toList();
// 切割 每次查10000条 // 切割 每次查10000条
List<List<WdpcHZCRYXX>> wdpcHZCRYXXSParts = IntStream.range(0, (wdpcHZCRYXXS.size() + 9999) / 10000) List<List<String>> fatherListParts = IntStream.range(0, (fatherList.size() + 9999) / 10000)
.mapToObj(i -> wdpcHZCRYXXS.subList(i * 10000, Math.min((i + 1) * 10000, wdpcHZCRYXXS.size()))) .mapToObj(i -> fatherList.subList(i * 10000, Math.min((i + 1) * 10000, fatherList.size())))
.toList(); .toList();
for (List<String> fatherListPart : fatherListParts) {
for (List<WdpcHZCRYXX> wdpcHZCRYXXSPart : wdpcHZCRYXXSParts) { list.addAll(hZCRYXXRepository.getBaseMapper().selectHZCPeople(fatherListPart));
List<String> ids = wdpcHZCRYXXSPart.stream().map(WdpcHZCRYXX::getIdCode).toList();
list.addAll(cSCZRKRepository.getBaseMapper().selectFatherDiePeople(ids));
} }
log.info("模型119查询结果数:{}", list.size()); log.info("模型119查询结果数:{}", list.size());
Map<String, RiskPersonal> personalMap = domain.getPersons().stream().collect(Collectors.toMap(RiskPersonal::getIdCode, Function.identity(), (old, newVal) -> newVal)); Map<String, RiskPersonal> personalMap = domain.getPersons().stream().collect(Collectors.toMap(RiskPersonal::getIdCode, Function.identity(), (old, newVal) -> newVal));
List<RiskModelTaskClue> toInsert = new ArrayList<>(); List<RiskModelTaskClue> toInsert = new ArrayList<>();
for (GBaseCSCZRK domicileType : list) { for (Map.Entry<String, List<String>> entry : fatherMap.entrySet()) {
RiskPersonal personal = personalMap.get(domicileType.getGmsfhm()); boolean contains = false;
for (String fatherId : entry.getValue()) {
if (list.contains(fatherId)) {
contains = true;
break;
}
}
if (!contains) continue;
RiskPersonal personal = personalMap.get(entry.getKey());
if (personal == null) continue; if (personal == null) continue;
if (idCode.get(domicileType.getGmsfhm()) != null) continue; if (idCode.get(entry.getKey()) != null) continue;
if (oldMap.get(domicileType.getGmsfhm()) != null) continue; if (oldMap.get(entry.getKey()) != null) continue;
idCode.put(domicileType.getGmsfhm(), 1); idCode.put(entry.getKey(), 1);
ClueData data = ClueData.builder() ClueData data = ClueData.builder()
.name(personal.getName()) .name(personal.getName())
.id(personal.getId().toString()) .id(personal.getId().toString())
@ -525,28 +535,38 @@ public class PointServiceImpl implements PointService {
Map<String, RiskModelTaskClue> oldMap = domain.getOldMap(task.getModelId(), true); Map<String, RiskModelTaskClue> oldMap = domain.getOldMap(task.getModelId(), true);
Map<String, Integer> idCode = new HashMap<>(); Map<String, Integer> idCode = new HashMap<>();
List<GBaseCSCZRK> list = new ArrayList<>(); List<String> list = new ArrayList<>();
log.info("模型120开始查询"); log.info("模型120开始查询");
List<WdpcHZCRYXX> wdpcHZCRYXXS = hZCRYXXRepository.list(new LambdaQueryWrapper<WdpcHZCRYXX>().select(WdpcHZCRYXX::getIdCode)); List<GBaseCSCZRK> mother = cSCZRKRepository.getBaseMapper().selectMother();
log.info("模型120查询mother结果数:{}", mother.size());
Map<String, List<String>> motherMap = mother.stream().collect(Collectors.groupingBy(GBaseCSCZRK::getGmsfhm,
Collectors.mapping(GBaseCSCZRK::getMotherId, Collectors.toList())));
List<String> motherList = mother.stream().map(GBaseCSCZRK::getMotherId).toList();
// 切割 每次查10000条 // 切割 每次查10000条
List<List<WdpcHZCRYXX>> wdpcHZCRYXXSParts = IntStream.range(0, (wdpcHZCRYXXS.size() + 9999) / 10000) List<List<String>> motherListParts = IntStream.range(0, (motherList.size() + 9999) / 10000)
.mapToObj(i -> wdpcHZCRYXXS.subList(i * 10000, Math.min((i + 1) * 10000, wdpcHZCRYXXS.size()))) .mapToObj(i -> motherList.subList(i * 10000, Math.min((i + 1) * 10000, motherList.size())))
.toList(); .toList();
for (List<String> motherListPart : motherListParts) {
for (List<WdpcHZCRYXX> wdpcHZCRYXXSPart : wdpcHZCRYXXSParts) { list.addAll(hZCRYXXRepository.getBaseMapper().selectHZCPeople(motherListPart));
List<String> ids = wdpcHZCRYXXSPart.stream().map(WdpcHZCRYXX::getIdCode).toList();
list.addAll(cSCZRKRepository.getBaseMapper().selectMotherDiePeople(ids));
} }
log.info("模型120查询结果数:{}", list.size()); log.info("模型120查询结果数:{}", list.size());
Map<String, RiskPersonal> personalMap = domain.getPersons().stream().collect(Collectors.toMap(RiskPersonal::getIdCode, Function.identity(), (old, newVal) -> newVal)); Map<String, RiskPersonal> personalMap = domain.getPersons().stream().collect(Collectors.toMap(RiskPersonal::getIdCode, Function.identity(), (old, newVal) -> newVal));
List<RiskModelTaskClue> toInsert = new ArrayList<>(); List<RiskModelTaskClue> toInsert = new ArrayList<>();
for (GBaseCSCZRK domicileType : list) { for (Map.Entry<String, List<String>> entry : motherMap.entrySet()) {
RiskPersonal personal = personalMap.get(domicileType.getGmsfhm()); boolean contains = false;
for (String motherId : entry.getValue()) {
if (list.contains(motherId)) {
contains = true;
break;
}
}
if (!contains) continue;
RiskPersonal personal = personalMap.get(entry.getKey());
if (personal == null) continue; if (personal == null) continue;
if (idCode.get(domicileType.getGmsfhm()) != null) continue; if (idCode.get(entry.getKey()) != null) continue;
if (oldMap.get(domicileType.getGmsfhm()) != null) continue; if (oldMap.get(entry.getKey()) != null) continue;
idCode.put(domicileType.getGmsfhm(), 1); idCode.put(entry.getKey(), 1);
ClueData data = ClueData.builder() ClueData data = ClueData.builder()
.name(personal.getName()) .name(personal.getName())
.id(personal.getId().toString()) .id(personal.getId().toString())
@ -1347,28 +1367,38 @@ public class PointServiceImpl implements PointService {
Map<String, RiskModelTaskClue> oldMap = domain.getOldMap(task.getModelId(), true); Map<String, RiskModelTaskClue> oldMap = domain.getOldMap(task.getModelId(), true);
Map<String, Integer> idCode = new HashMap<>(); Map<String, Integer> idCode = new HashMap<>();
List<GBaseCSCZRK> list = new ArrayList<>(); List<String> list = new ArrayList<>();
log.info("模型118开始查询"); log.info("模型118开始查询");
List<WdpcHZCRYXX> wdpcHZCRYXXS = hZCRYXXRepository.list(new LambdaQueryWrapper<WdpcHZCRYXX>().select(WdpcHZCRYXX::getIdCode)); List<GBaseCSCZRK> familyPeople = cSCZRKRepository.getBaseMapper().selectFamilyPeople();
log.info("模型118查询familyPeople结果数:{}", familyPeople.size());
Map<String, List<String>> familyMap = familyPeople.stream().collect(Collectors.groupingBy(GBaseCSCZRK::getGmsfhm,
Collectors.mapping(GBaseCSCZRK::getFamilyId, Collectors.toList())));
List<String> familyList = familyPeople.stream().map(GBaseCSCZRK::getFamilyId).toList();
// 切割 每次查10000条 // 切割 每次查10000条
List<List<WdpcHZCRYXX>> wdpcHZCRYXXSParts = IntStream.range(0, (wdpcHZCRYXXS.size() + 9999) / 10000) List<List<String>> familyListParts = IntStream.range(0, (familyList.size() + 9999) / 10000)
.mapToObj(i -> wdpcHZCRYXXS.subList(i * 10000, Math.min((i + 1) * 10000, wdpcHZCRYXXS.size()))) .mapToObj(i -> familyList.subList(i * 10000, Math.min((i + 1) * 10000, familyList.size())))
.toList(); .toList();
for (List<String> familyListPart : familyListParts) {
for (List<WdpcHZCRYXX> wdpcHZCRYXXSPart : wdpcHZCRYXXSParts) { list.addAll(hZCRYXXRepository.getBaseMapper().selectHZCPeople(familyListPart));
List<String> ids = wdpcHZCRYXXSPart.stream().map(WdpcHZCRYXX::getIdCode).toList();
list.addAll(cSCZRKRepository.getBaseMapper().selectFamilyDiePeople(ids));
} }
log.info("模型118查询结果数:{}", list.size()); log.info("模型118查询结果数:{}", list.size());
Map<String, RiskPersonal> personalMap = domain.getPersons().stream().collect(Collectors.toMap(RiskPersonal::getIdCode, Function.identity(), (old, newVal) -> newVal)); Map<String, RiskPersonal> personalMap = domain.getPersons().stream().collect(Collectors.toMap(RiskPersonal::getIdCode, Function.identity(), (old, newVal) -> newVal));
List<RiskModelTaskClue> toInsert = new ArrayList<>(); List<RiskModelTaskClue> toInsert = new ArrayList<>();
for (GBaseCSCZRK domicileType : list) { for (Map.Entry<String, List<String>> entry : familyMap.entrySet()) {
RiskPersonal personal = personalMap.get(domicileType.getGmsfhm()); boolean contains = false;
for (String familyId : entry.getValue()) {
if (list.contains(familyId)) {
contains = true;
break;
}
}
if (!contains) continue;
RiskPersonal personal = personalMap.get(entry.getKey());
if (personal == null) continue; if (personal == null) continue;
if (idCode.get(domicileType.getGmsfhm()) != null) continue; if (idCode.get(entry.getKey()) != null) continue;
if (oldMap.get(domicileType.getGmsfhm()) != null) continue; if (oldMap.get(entry.getKey()) != null) continue;
idCode.put(domicileType.getGmsfhm(), 1); idCode.put(entry.getKey(), 1);
ClueData data = ClueData.builder() ClueData data = ClueData.builder()
.name(personal.getName()) .name(personal.getName())
.id(personal.getId().toString()) .id(personal.getId().toString())

Loading…
Cancel
Save