From f0dc8f620c1bb68094acffaa758f11cc1980399e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=81=E7=90=A6=E6=B6=9B?= Date: Thu, 22 Aug 2024 15:26:48 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=9D=A1=E6=AC=BE=E9=9B=B6?= =?UTF-8?q?=E9=83=A8=E4=BB=B6=E5=A4=9A=E9=80=89=E8=81=94=E6=9F=A5=E7=88=B6?= =?UTF-8?q?=E5=AD=90=E9=9B=86=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../handler/impl/InConditionImpl.java | 85 +++++++++++++++++-- 1 file changed, 80 insertions(+), 5 deletions(-) diff --git a/laws-modules/src/main/java/com/jero/modules/laws/documenttool/handler/impl/InConditionImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/handler/impl/InConditionImpl.java index fa0b9003..92e3552f 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/documenttool/handler/impl/InConditionImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/handler/impl/InConditionImpl.java @@ -1,18 +1,21 @@ package com.jero.modules.laws.documenttool.handler.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.jero.modules.laws.common.constant.FieldCommon; import com.jero.modules.laws.documenttool.common.DocumentSplitCommon; import com.jero.modules.laws.documenttool.factory.ConditionMapFactory; import com.jero.modules.laws.documenttool.handler.AbstractConditionBase; import com.jero.modules.laws.standard.entity.PartName; import com.jero.modules.laws.standard.service.ILawsPartNameService; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import javax.annotation.Resource; import java.util.Arrays; +import java.util.HashSet; import java.util.List; -import java.util.Objects; +import java.util.Set; import java.util.stream.Collectors; /** @@ -34,10 +37,7 @@ public class InConditionImpl extends AbstractConditionBase { List list = Arrays.asList(value.split(",")); // 涉及系统/部件 特殊处理 if (FieldCommon.PART_NAME.equals(fieldName)){ - List partNameList = lawsPartNameService.listByIds(list); - if (!Objects.isNull(partNameList)){ - list = partNameList.stream().map(PartName::getCode).collect(Collectors.toList()); - } + list = getStrings(list); } for (String s : list) { in.append(DocumentSplitCommon.INSTR_BEGIN).append(fieldName).append(",").append("'").append(s).append("'").append(")"); @@ -55,6 +55,81 @@ public class InConditionImpl extends AbstractConditionBase { return in.toString(); } + private List getStrings(List list) { + LambdaQueryWrapper queryPartName = new LambdaQueryWrapper<>(); + queryPartName.select(PartName::getId,PartName::getCode,PartName::getParentCode); + List listPartName = lawsPartNameService.list(queryPartName); + if(CollectionUtils.isEmpty(listPartName)) { + return list; + } + List finalList = list; + List partNameList = listPartName.stream().filter(o-> finalList.contains(o.getId())).collect(Collectors.toList()); + if(CollectionUtils.isEmpty(partNameList)){ + return list; + } + Set setAll = new HashSet<>(new HashSet<>(partNameList)); + Set setCode = partNameList.stream().map(PartName::getCode).collect(Collectors.toSet()); + Set setParentCode = partNameList.stream().map(PartName::getParentCode).collect(Collectors.toSet()); + if(!CollectionUtils.isEmpty(listPartName)){ + if(!CollectionUtils.isEmpty(setParentCode)){ + // 查询父级 + Set setP = getParent(setParentCode, listPartName); + if(!CollectionUtils.isEmpty(setP)){ + setAll.addAll(setP); + } + } + if(!CollectionUtils.isEmpty(setCode)){ + // 查询子级 + Set setP = getSub(setCode, listPartName); + if(!CollectionUtils.isEmpty(setP)){ + setAll.addAll(setP); + } + } + } + if(!CollectionUtils.isEmpty(setAll)){ + list = setAll.stream().map(PartName::getCode).collect(Collectors.toList()); + } + return list; + } + + private Set getParent(Set setCode, List listPartName) { + Set set = new HashSet<>(); + if(!CollectionUtils.isEmpty(setCode)){ + Set listPartNameParent = listPartName.stream().filter(o-> + setCode.contains(o.getCode())).collect(Collectors.toSet()); + if(!CollectionUtils.isEmpty(listPartNameParent)){ + set.addAll(listPartNameParent); + Set listParent = listPartNameParent.stream().map(PartName::getParentCode).collect(Collectors.toSet()); + if(!CollectionUtils.isEmpty(listParent)){ + Set set2 = getParent(listParent, listPartName); + if(!CollectionUtils.isEmpty(set2)){ + set.addAll(set2); + } + } + } + } + return set; + } + + private Set getSub(Set setCode, List listPartName) { + Set set = new HashSet<>(); + if(!CollectionUtils.isEmpty(setCode)){ + Set listPartNameSub = listPartName.stream().filter(o-> + setCode.contains(o.getParentCode())).collect(Collectors.toSet()); + if(!CollectionUtils.isEmpty(listPartNameSub)){ + set.addAll(listPartNameSub); + Set listSub = listPartNameSub.stream().map(PartName::getCode).collect(Collectors.toSet()); + if(!CollectionUtils.isEmpty(listSub)){ + Set set2 = getParent(listSub, listPartName); + if(!CollectionUtils.isEmpty(set2)){ + set.addAll(set2); + } + } + } + } + return set; + } + /** * 初始化注册到工厂 */