diff --git a/src/main/java/com/xujie/sys/modules/part/entity/ComponentPartData.java b/src/main/java/com/xujie/sys/modules/part/entity/ComponentPartData.java index 79f52409..a51a6fd5 100644 --- a/src/main/java/com/xujie/sys/modules/part/entity/ComponentPartData.java +++ b/src/main/java/com/xujie/sys/modules/part/entity/ComponentPartData.java @@ -53,4 +53,6 @@ public class ComponentPartData extends QueryPage { private List familyIDs; private String familyName; + + private String familyID; } diff --git a/src/main/java/com/xujie/sys/modules/part/mapper/PartFamilyInformationMapper.java b/src/main/java/com/xujie/sys/modules/part/mapper/PartFamilyInformationMapper.java index c4f8e385..5ba9d663 100644 --- a/src/main/java/com/xujie/sys/modules/part/mapper/PartFamilyInformationMapper.java +++ b/src/main/java/com/xujie/sys/modules/part/mapper/PartFamilyInformationMapper.java @@ -10,10 +10,11 @@ import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.Set; @Mapper public interface PartFamilyInformationMapper extends BaseMapper { IPage partFamilyInformationSearch(Page partFamilyInformationVoPage, @Param("query") PartFamilyInformationVo data); - List queryFamilyIDs(@Param("query") ComponentPartData data); + Set queryFamilyIDs(@Param("query") ComponentPartData data); } diff --git a/src/main/java/com/xujie/sys/modules/part/service/impl/BomManagementServiceImpl.java b/src/main/java/com/xujie/sys/modules/part/service/impl/BomManagementServiceImpl.java index fc48f975..5e9eaa0d 100644 --- a/src/main/java/com/xujie/sys/modules/part/service/impl/BomManagementServiceImpl.java +++ b/src/main/java/com/xujie/sys/modules/part/service/impl/BomManagementServiceImpl.java @@ -779,13 +779,46 @@ public class BomManagementServiceImpl extends ServiceImpl candidateFamilyNames = new LinkedHashSet<>(); + if (StringUtils.isNotBlank(originalFamilyName)) { + candidateFamilyNames.add(originalFamilyName); + } + String[] descs = partDesc.split("&"); if (descs.length > 1) { + // First segment becomes the cleaned partDesc; second treated as an alternate familyName data.setPartDesc(descs[0]); - data.setFamilyName(descs[1]); - List familyIDs = partFamilyInformationMapper.queryFamilyIDs(data); - data.setFamilyIDs(familyIDs); + String parsedFamilyName = descs[1]; + if (StringUtils.isNotBlank(parsedFamilyName)) { + candidateFamilyNames.add(parsedFamilyName); + } + } + + // Query all family IDs for collected family names + Set familyIDs = new LinkedHashSet<>(); + for (String familyName : candidateFamilyNames) { + data.setFamilyName(familyName); // use as query condition + familyIDs.addAll(partFamilyInformationMapper.queryFamilyIDs(data)); } + // Restore original familyName to avoid leaving mutated last iteration value + data.setFamilyName(originalFamilyName); + + // Set filtered familyIDs into data (respect explicit single familyID if provided and valid) + if (!familyIDs.isEmpty()) { + if (StringUtils.isNotBlank(data.getFamilyID()) && familyIDs.contains(data.getFamilyID())) { + data.setFamilyIDs(Collections.singletonList(data.getFamilyID())); + } else { + data.setFamilyIDs(new ArrayList<>(familyIDs)); + } + } else { + // If none found, ensure empty list instead of null for downstream safety + data.setFamilyIDs(Collections.emptyList()); + } + IPage list = this.bomManagementMapper.queryPartListAll(new Page(data.getPage(), data.getLimit()), data); return new PageUtils(list); }