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; + } + /** * 初始化注册到工厂 */