diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomNewEbomParentVO.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomNewEbomParentVO.java index b83fb125..48176edb 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomNewEbomParentVO.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomNewEbomParentVO.java @@ -10,6 +10,7 @@ import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -353,8 +354,8 @@ public class BomNewEbomParentVO extends BaseMaterialVO implements Serializable { private List childNodes = Collections.emptyList(); - @ApiModelProperty("父级物料编码") - private List parentMaterialNos; + @ApiModelProperty("父级物料RowId") + private List parentRowIds=new ArrayList<>(); private static final long serialVersionUID = 1L; diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewEbomParentService.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewEbomParentService.java index 94d5819c..8c3fbab9 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewEbomParentService.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewEbomParentService.java @@ -534,7 +534,7 @@ public class BomNewEbomParentService extends ServiceImpl> submit = bomDetailPool.submit(detailTask); List result = submit.join(); - return result; + return result.stream().distinct().collect(Collectors.toList()); } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomToPbomBase.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomToPbomBase.java index 769e3124..a9eaf734 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomToPbomBase.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomToPbomBase.java @@ -233,117 +233,65 @@ public abstract class EBomToPbomBase { */ protected void liftingLayer() { result.add(parent); - List parentsEntList = allBomDetail.stream().filter(u -> u.getBomRowId() > 0).collect(Collectors.toList()); - for (BomNewEbomParentVO vo : parentsEntList) { - List parentEntChild = allBomDetail.stream().filter(u -> u.getParentRowId().equals(vo.getBomRowId())).collect(Collectors.toList()); - for (BomNewEbomParentVO child : parentEntChild) { - if (StrUtil.isNotBlank(child.getProjectType()) && child.getProjectType().equals(VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getProductTypeKey())) { - BomNewEbomParentVO lastVirtualPackage = getLastVirtualPackageNew(child,vo.getParentRowId(), VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE); - if (Objects.nonNull(lastVirtualPackage)) { - BomNewEbomParentVO newEnt = liftingLayerSummary(lastVirtualPackage, child); - newEnt.setRowId(IdWorker.getId()); - newEnt.setSourceRowId(String.valueOf(child.getParentRowId())); - newEnt.setSourceParentMaterialNo(vo.getMaterialNo()); - newEnt.setParentRowId(lastVirtualPackage.getBomRowId()); - result.add(newEnt); - } - continue; - } - if (StrUtil.isNotBlank(vo.getProjectType()) && vo.getProjectType().equals(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getProductTypeKey())) { - BomNewEbomParentVO lastVirtualPackage = getLastVirtualPackageNew(vo, vo.getParentRowId(), VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE); - if (Objects.nonNull(lastVirtualPackage)) { - BomNewEbomParentVO newEnt = liftingLayerSummary(lastVirtualPackage, child); - newEnt.setRowId(IdWorker.getId()); - newEnt.setSourceRowId(String.valueOf(child.getParentRowId())); - newEnt.setSourceParentMaterialNo(vo.getMaterialNo()); - newEnt.setParentRowId(lastVirtualPackage.getBomRowId()); - result.add(newEnt); - } - continue; - } - result.add(child); - } - } - - -// for (BomNewEbomParentVO vo : allBomDetail) { -// if (StrUtil.isNotBlank(vo.getProjectType()) && vo.getProjectType().equals(VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getProductTypeKey())) { -// BomNewEbomParentVO lastVirtualPackage = getLastVirtualPackageNew(vo, VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE); -// if (Objects.nonNull(lastVirtualPackage)) { -// liftingLayerSummary(lastVirtualPackage, vo); -// vo.setSourceRowId(String.valueOf(vo.getParentRowId())); -// vo.setSourceParentMaterialNo(getParentMaterialNo(vo.getBomRowId())); -// vo.setParentRowId(lastVirtualPackage.getBomRowId()); -// result.add(vo); -// } -// continue; -// } -// if (StrUtil.isNotBlank(vo.getProjectType()) && vo.getProjectType().equals(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getProductTypeKey())) { -// BomNewEbomParentVO lastVirtualPackage = getLastVirtualPackageNew(vo, VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE); -// if (Objects.nonNull(lastVirtualPackage)) { -// liftingLayerSummary(lastVirtualPackage, vo); -// vo.setSourceRowId(String.valueOf(vo.getParentRowId())); -// vo.setSourceParentMaterialNo(getParentMaterialNo(vo.getBomRowId())); -// vo.setParentRowId(lastVirtualPackage.getBomRowId()); -// result.add(vo); -// } -// continue; -// } -// result.add(vo); -// } + liftingLayerDo(parent, null, null, ImmutableList.of()); } - protected void liftingLayerNew() { - - result.add(parent); - List firstSubList = allBomDetail.stream().filter(u -> u.getParentRowId().equals(parent.getBomRowId())).collect(Collectors.toList()); - BomNewEbomParentVO zfVo=null; - BomNewEbomParentVO fhqVO=null; - - while (CollUtil.isNotEmpty(firstSubList)) { - for (BomNewEbomParentVO vo : firstSubList) { - List zfList = firstSubList.stream().filter(u -> u.getParentRowId().equals(vo.getBomRowId()) && VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.equalsValue(u.getVirtualPartType())).collect(Collectors.toList()); - if (CollUtil.isNotEmpty(zfList)) { - zfVo=zfList.get(0); - } - if(Objects.isNull(zfVo) && VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getProductTypeKey().equals(vo.getVirtualPartType()) ) { - - } + private List hasCupmVo=new ArrayList<>(); + /** + * @param parentVO 父项 + * @param directDeliveryVo 直发包 + * @param preAssemblyVo 发货前装配包 + */ + public void liftingLayerDo(BomNewEbomParentVO parentVO, BomNewEbomParentVO directDeliveryVo, BomNewEbomParentVO preAssemblyVo, List parentRowIds) { + List firstLevelBoms = allBomDetail.stream().filter(u -> u.getParentRowId().equals(parentVO.getBomRowId())).collect(Collectors.toList()); + for (BomNewEbomParentVO firstLevelBom : firstLevelBoms) { + if(hasCupmVo.contains(firstLevelBom.getRowId())){ + firstLevelBom.getParentRowIds().clear(); } - } - for (BomNewEbomParentVO vo : parentsEntList) { - List parentEntChild = allBomDetail.stream().filter(u -> u.getParentRowId().equals(vo.getBomRowId())).collect(Collectors.toList()); - for (BomNewEbomParentVO child : parentEntChild) { - if (StrUtil.isNotBlank(child.getProjectType()) && child.getProjectType().equals(VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getProductTypeKey())) { - BomNewEbomParentVO lastVirtualPackage = getLastVirtualPackageNew(child,vo.getParentRowId(), VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE); - if (Objects.nonNull(lastVirtualPackage)) { - BomNewEbomParentVO newEnt = liftingLayerSummary(lastVirtualPackage, child); - newEnt.setRowId(IdWorker.getId()); - newEnt.setSourceRowId(String.valueOf(child.getParentRowId())); - newEnt.setSourceParentMaterialNo(vo.getMaterialNo()); - newEnt.setParentRowId(lastVirtualPackage.getBomRowId()); - result.add(newEnt); - } - continue; + //直发包 + firstLevelBom.getParentRowIds().add(firstLevelBom.getParentRowId()); + firstLevelBom.getParentRowIds().addAll(parentRowIds); + List directDeliveryVoList = firstLevelBoms.stream().filter(u -> VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.equalsValue(u.getVirtualPartType())).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(directDeliveryVoList)) { + directDeliveryVo = directDeliveryVoList.get(0); + } + List preAssemblyVoList = firstLevelBoms.stream().filter(u -> VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.equalsValue(u.getVirtualPartType())).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(preAssemblyVoList)) { + preAssemblyVo = preAssemblyVoList.get(0); + } + //虚拟包 + if (firstLevelBom.getVirtualPartType() > 0) { + result.add(firstLevelBom); + } else if (VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getProductTypeKey().equals(firstLevelBom.getProjectType())) { + if (Objects.nonNull(directDeliveryVo)) { + BomNewEbomParentVO newEnt = liftingLayerSummary(directDeliveryVo, firstLevelBom); + newEnt.setRowId(IdWorker.getId()); + newEnt.setSourceRowId(String.valueOf(firstLevelBom.getParentRowId())); + newEnt.setSourceParentMaterialNo(parentVO.getMaterialNo()); + newEnt.setParentRowId(directDeliveryVo.getBomRowId()); + result.add(newEnt); } - if (StrUtil.isNotBlank(vo.getProjectType()) && vo.getProjectType().equals(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getProductTypeKey())) { - BomNewEbomParentVO lastVirtualPackage = getLastVirtualPackageNew(vo, vo.getParentRowId(), VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE); - if (Objects.nonNull(lastVirtualPackage)) { - BomNewEbomParentVO newEnt = liftingLayerSummary(lastVirtualPackage, child); - newEnt.setRowId(IdWorker.getId()); - newEnt.setSourceRowId(String.valueOf(child.getParentRowId())); - newEnt.setSourceParentMaterialNo(vo.getMaterialNo()); - newEnt.setParentRowId(lastVirtualPackage.getBomRowId()); - result.add(newEnt); - } - continue; + } else if (firstLevelBom.getProjectType().equals(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getProductTypeKey())) { + if (Objects.nonNull(preAssemblyVo)) { + BomNewEbomParentVO newEnt = liftingLayerSummary(preAssemblyVo, firstLevelBom); + newEnt.setRowId(IdWorker.getId()); + newEnt.setSourceRowId(String.valueOf(firstLevelBom.getParentRowId())); + newEnt.setSourceParentMaterialNo(parentVO.getMaterialNo()); + newEnt.setParentRowId(preAssemblyVo.getBomRowId()); + result.add(newEnt); } - result.add(child); + } else { + result.add(firstLevelBom); + } + hasCupmVo.add(firstLevelBom.getRowId()); + if (firstLevelBom.getBomRowId() > 0) { + liftingLayerDo(firstLevelBom, directDeliveryVo, preAssemblyVo, firstLevelBom.getParentRowIds()); } } } + /** * 提层汇总数量 * @@ -354,8 +302,8 @@ public abstract class EBomToPbomBase { BigDecimal sum = vo.getNum(); // String parentLevelNo = BomLevelUtil.getParentLevelNo(vo.getLevelNo()); List parentList = getAllParent(vo); - BomNewEbomParentVO newEnt=new BomNewEbomParentVO(); - BeanUtil.copyProperties(vo,newEnt); + BomNewEbomParentVO newEnt = new BomNewEbomParentVO(); + BeanUtil.copyProperties(vo, newEnt); //构建虚拟包组成 buildVirtualPackageComposition(lastVirtualPackage, vo); @@ -371,13 +319,11 @@ public abstract class EBomToPbomBase { newEnt.setBomRowId(0L); newEnt.setChildBomRowId(0L); newEnt.setNum(sum); - return newEnt; + return newEnt; } - - protected List getAllParent(BomNewEbomParentVO vo) { List result = new ArrayList<>(); BomNewEbomParentVO parentEnt = getParent(vo); @@ -444,7 +390,7 @@ public abstract class EBomToPbomBase { } private void changeImpactDo(BomNewEbomParentVO parentVO) { - List subVos = getAllSubInListIncludeSelf(parentVO,allBomDetail); + List subVos = getAllSubInListIncludeSelf(parentVO, allBomDetail); List subVosParent = subVos.stream().filter(u -> u.getBomRowId() > 0).collect(Collectors.toList()); for (BomNewEbomParentVO vo : subVosParent) { @@ -515,8 +461,8 @@ public abstract class EBomToPbomBase { private void buildChangeImpactEntity(BomNewEbomVirtualPackageCompositionEntity v, BomNewEbomParentVO vo) { - List checkExists = upgradeChangeResult.stream().filter(u ->u.getMaterialNo().equals(v.getVirtualPackageMaterialNo()) && u.getRelMaterialNo().equals(vo.getMaterialNo())).collect(Collectors.toList()); - if(CollUtil.isNotEmpty(checkExists)){ + List checkExists = upgradeChangeResult.stream().filter(u -> u.getMaterialNo().equals(v.getVirtualPackageMaterialNo()) && u.getRelMaterialNo().equals(vo.getMaterialNo())).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(checkExists)) { return; } BomNewEbomUpgradeChangeEntity changeEntity = new BomNewEbomUpgradeChangeEntity(); @@ -560,7 +506,7 @@ public abstract class EBomToPbomBase { } private BomNewEbomParentVO getLastVirtualPackageNew(BomNewEbomParentVO vo, Long parentRowId, VirtualPackageTypeEnum virtualPackageTypeEnum) { - BomNewEbomParentVO parentEnt = getParent(vo,parentRowId); + BomNewEbomParentVO parentEnt = getParent(vo, parentRowId); Boolean flag = true; while (Objects.nonNull(parentEnt) && parentEnt.getParentRowId() > 0 && flag) { //制作 @@ -575,7 +521,7 @@ public abstract class EBomToPbomBase { return null; } - private BomNewEbomParentVO getParent(BomNewEbomParentVO vo,Long parentRowId) { + private BomNewEbomParentVO getParent(BomNewEbomParentVO vo, Long parentRowId) { List parents = allBomDetail.stream().filter(u -> u.getParentRowId().equals(parentRowId) && u.getBomRowId().equals(vo.getParentRowId())).collect(Collectors.toList()); if (CollUtil.isNotEmpty(parents)) { return parents.get(0); @@ -584,7 +530,7 @@ public abstract class EBomToPbomBase { } private BomNewEbomParentVO getParent(BomNewEbomParentVO vo) { - List parents = allBomDetail.stream().filter(u -> u.getBomRowId().equals(vo.getParentRowId())).collect(Collectors.toList()); + List parents = allBomDetail.stream().filter(u -> vo.getParentRowIds().contains(u.getParentRowId()) && u.getBomRowId().equals(vo.getParentRowId())).collect(Collectors.toList()); if (CollUtil.isNotEmpty(parents)) { return parents.get(0); } @@ -788,7 +734,7 @@ public abstract class EBomToPbomBase { getAllSubData(ImmutableList.of(parentVO.getBomRowId()), reusltSub); - return reusltSub; + return reusltSub.stream().distinct().collect(Collectors.toList()); } protected List getAllSubInListIncludeSelf(BomNewEbomParentVO parentVO, List list) { @@ -797,7 +743,7 @@ public abstract class EBomToPbomBase { getAllSubData(ImmutableList.of(parentVO.getBomRowId()), reusltSub, list); - return reusltSub; + return reusltSub.stream().distinct().collect(Collectors.toList()); } @@ -810,7 +756,7 @@ public abstract class EBomToPbomBase { if (CollUtil.isNotEmpty(subMarterialBomRowIds)) { subMaterials = list.stream().filter(u -> subMarterialBomRowIds.contains(u.getParentRowId())).collect(Collectors.toList()); } else { - subMaterials=Collections.emptyList(); + subMaterials = Collections.emptyList(); } } } @@ -824,8 +770,7 @@ public abstract class EBomToPbomBase { private void getAllSubData(List parentRowIds, List subResult) { - - List subMaterials = result.stream().filter(u -> parentRowIds.contains(u.getParentRowId())).collect(Collectors.toList()); + List subMaterials = result.stream().filter(u -> parentRowIds.contains(u.getParentRowId())).collect(Collectors.toList()); //直发包,发货前装配包不递归。 while (CollUtil.isNotEmpty(subMaterials)) { subResult.addAll(subMaterials); @@ -833,9 +778,9 @@ public abstract class EBomToPbomBase { List subMarterialBomRowIds = subMaterials.stream().filter(u -> u.getBomRowId() > 0).map(u -> u.getBomRowId()).collect(Collectors.toList()); if (CollUtil.isNotEmpty(subMarterialBomRowIds)) { - subMaterials=result.stream().filter(u -> subMarterialBomRowIds.contains(u.getParentRowId())).collect(Collectors.toList()); + subMaterials = result.stream().filter(u -> subMarterialBomRowIds.contains(u.getParentRowId())).collect(Collectors.toList()); } else { - subMaterials=Collections.emptyList(); + subMaterials = Collections.emptyList(); } } }