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 eee99980..4031f50f 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 @@ -881,16 +881,6 @@ public class BomNewEbomParentService extends ServiceImpl", errors)); } }); - //检查该版本是否已转换过该工厂的Pbom -// for (BomNewEbomParentEntity parent : parents){ -// List list = pBomParentService.lambdaQuery().eq(BomNewPbomParentEntity::getMaterialNo, parent.getMaterialNo()).eq(BomNewPbomParentEntity::getCurrentVersion, parent.getCurrentVersion()) -// .select(BomNewPbomParentEntity::getFacCode).list(); -// if(CollUtil.isNotEmpty(list)){ -// Set dbExistsFac = list.stream().map(u -> u.getFacCode()).collect(Collectors.toSet()); -// Set checkResultFac = Sets.intersection(dbExistsFac, new HashSet<>(paramDto.getFacCodes())); -// VUtils.isTure(CollUtil.isNotEmpty(checkResultFac)).throwMessage("物料:"+parent.getMaterialNo()+"已经转换过"+ StrUtil.join(",", checkResultFac)+"工厂"); -// } -// } for (Long bomRowId : paramDto.getBomRowIds()) { BomNewEbomParentVO parent = Convert.convert(BomNewEbomParentVO.class, this.getById(bomRowId)); @@ -1158,6 +1148,8 @@ public class BomNewEbomParentService extends ServiceImpl> facBomDataMp=new HashMap<>(); + private Map> facBomDataMp = new HashMap<>(); public EBomToPBomFor31(BomNewEbomParentVO inParent, List inAllBomDetail, List inFacCodes, Long parentRowId, ConvertToPBomModelEnum convertModelEnum) { this.parent = inParent; this.allBomDetail = inAllBomDetail; this.facCodes = inFacCodes; - this.convertMode=convertModelEnum; - generateDrawingNo(allBomDetail, parentRowId, ""); + this.convertMode = convertModelEnum; +// generateDrawingNo(allBomDetail, parentRowId, ""); //初始化Ebom版本 initEBomVersion(); } - private void splitData(){ - this.facCodes=new ArrayList<>(); + private void splitData() { + this.facCodes = new ArrayList<>(); //1020数据 - List data1020=new ArrayList<>(); - List deliveryPackage1020 = result.stream().filter(u -> u.getParentRowId().equals(parent.getRowId()) && u.getMaterialName().contains("仙桃") ).collect(Collectors.toList()); - if(CollUtil.isNotEmpty(deliveryPackage1020)){ + List data1020 = new ArrayList<>(); + List deliveryPackage1020 = result.stream().filter(u -> u.getParentRowId().equals(parent.getRowId()) && u.getMaterialName().contains("仙桃")).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(deliveryPackage1020)) { facCodes.add(EBomConstant.XIAN_TAO_FACTORY_CODE_1020); data1020.add(parent); - for (BomNewEbomParentVO data: deliveryPackage1020){ - List subVos = result.stream().filter(u -> u.getLevelNumber().compareTo(data.getLevelNumber()) >= 0 && u.getLevelNumber().compareTo(NumberUtil.add(data.getLevelNumber(), BigDecimal.valueOf(0.01))) < 0).collect(Collectors.toList()); + for (BomNewEbomParentVO data : deliveryPackage1020) { +// List subVos = result.stream().filter(u -> u.getLevelNumber().compareTo(data.getLevelNumber()) >= 0 && u.getLevelNumber().compareTo(NumberUtil.add(data.getLevelNumber(), BigDecimal.valueOf(0.01))) < 0).collect(Collectors.toList()); + List subVos = getResultAllSubIncludeSelf(data); data1020.addAll(subVos); } - facBomDataMp.put(EBomConstant.XIAN_TAO_FACTORY_CODE_1020,data1020); + facBomDataMp.put(EBomConstant.XIAN_TAO_FACTORY_CODE_1020, data1020); } //1010 数据 - List data1010=new ArrayList<>(); - List deliveryPackage1010 = result.stream().filter(u -> u.getParentRowId().equals(parent.getRowId()) && !u.getMaterialName().contains("仙桃")).collect(Collectors.toList()); - if(CollUtil.isNotEmpty(deliveryPackage1010)){ + List data1010 = new ArrayList<>(); + List deliveryPackage1010 = result.stream().filter(u -> u.getParentRowId().equals(parent.getRowId())).collect(Collectors.toList()); //&& !u.getMaterialName().contains("仙桃") + if (CollUtil.isNotEmpty(deliveryPackage1010)) { facCodes.add(EBomConstant.MAIN_FACTORY_CODE_1010); data1010.add(parent); - for (BomNewEbomParentVO data: deliveryPackage1010){ - List subVos = result.stream().filter(u -> u.getLevelNumber().compareTo(data.getLevelNumber()) >= 0 && u.getLevelNumber().compareTo(NumberUtil.add(data.getLevelNumber(), BigDecimal.valueOf(0.01))) < 0).collect(Collectors.toList()); + for (BomNewEbomParentVO data : deliveryPackage1010) { + List subVos = new ArrayList<>(); + if (data.getMaterialName().contains("仙桃")) { //只获取下降虚拟包 + subVos.add(data); + subVos = result.stream().filter(u -> u.getParentRowId().equals(data.getBomRowId())).collect(Collectors.toList()); + } else { +// subVos = result.stream().filter(u -> u.getLevelNumber().compareTo(data.getLevelNumber()) >= 0 && u.getLevelNumber().compareTo(NumberUtil.add(data.getLevelNumber(), BigDecimal.valueOf(0.01))) < 0).collect(Collectors.toList()); + subVos=getResultAllSubIncludeSelf(data); + } data1010.addAll(subVos); } - facBomDataMp.put(EBomConstant.MAIN_FACTORY_CODE_1010,data1010); + facBomDataMp.put(EBomConstant.MAIN_FACTORY_CODE_1010, data1010); } } + + /** * 31項体层 */ @@ -85,8 +96,6 @@ public class EBomToPBomFor31 extends EBomToPbomBase { changeImpact(); //bom 提层 liftingLayer(); - result.forEach(u->u.setLevelNo("")); - generateDrawingNo(result, parent.getRowId(), "1"); splitData(); List hasConvert = new ArrayList<>(); @@ -101,7 +110,7 @@ public class EBomToPBomFor31 extends EBomToPbomBase { } hasConvert.add(hasConvertKey); //无需转换bom - if(BooleanEnum.TRUE.equals(vo.getNoConvertToPBomIs()) ){ + if (BooleanEnum.TRUE.equals(vo.getNoConvertToPBomIs())) { continue; } //构建变更明细 @@ -109,13 +118,13 @@ public class EBomToPBomFor31 extends EBomToPbomBase { // buildUpgradeChangeDetail(vo, VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE); //子级 - List child = facBomDataMp.get(facCode).stream().filter(u -> u.getParentRowId().equals(vo.getBomRowId()) && !childDelMaterialNos.contains(u.getMaterialNo())).collect(Collectors.toList()); + List child = facBomDataMp.get(facCode).stream().filter(u -> u.getParentRowId().equals(vo.getBomRowId()) && !childDelMaterialNos.contains(u.getMaterialNo())).distinct().collect(Collectors.toList()); List mergeChild = mergeChild(child); - if( compareContentIsSame(vo, mergeChild, facCode)){ + if (compareContentIsSame(vo, mergeChild, facCode)) { continue; } - BomNewPbomParentEntity parentEnt = buildPBomParent(vo, facCode,parentList); - if(Objects.isNull(parentEnt)){ + BomNewPbomParentEntity parentEnt = buildPBomParent(vo, facCode, parentList); + if (Objects.isNull(parentEnt)) { continue; } //子级 @@ -123,7 +132,7 @@ public class EBomToPBomFor31 extends EBomToPbomBase { //合并子级 for (BomNewEbomParentVO eb : mergeChild) { BomNewPbomChildEntity childEnt = new BomNewPbomChildEntity(); - BeanUtil.copyProperties(eb, childEnt,"sourceRowId"); + BeanUtil.copyProperties(eb, childEnt, "sourceRowId"); childEnt.setRowId(IdWorker.getId()); childEnt.setParentRowId(parentEnt.getRowId()); childEnt.setFacCode(facCode); diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomToPBomForFormal.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomToPBomForFormal.java index a12dfdaf..799027b9 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomToPBomForFormal.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomToPBomForFormal.java @@ -32,7 +32,7 @@ public class EBomToPBomForFormal extends EBomToPbomBase { this.allBomDetail = inAllBomDetail; this.facCodes = inFacCodes; this.convertMode=convertModelEnum; - generateDrawingNo(allBomDetail, parentRowId, ""); +// generateDrawingNo(allBomDetail, parentRowId, ""); initEBomVersionFormal(); } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomToPBomForFormal31.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomToPBomForFormal31.java index dda3f717..0b3790d8 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomToPBomForFormal31.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomToPBomForFormal31.java @@ -34,7 +34,7 @@ public class EBomToPBomForFormal31 extends EBomToPbomBase { this.allBomDetail = inAllBomDetail; this.facCodes = inFacCodes; this.convertMode=convertModelEnum; - generateDrawingNo(allBomDetail, parentRowId, ""); +// generateDrawingNo(allBomDetail, parentRowId, ""); initEBomVersionFormal(); } @@ -48,7 +48,8 @@ public class EBomToPBomForFormal31 extends EBomToPbomBase { facCodes.add(EBomConstant.XIAN_TAO_FACTORY_CODE_1020); data1020.add(parent); for (BomNewEbomParentVO data: deliveryPackage1020){ - List subVos = result.stream().filter(u -> u.getLevelNumber().compareTo(data.getLevelNumber()) >= 0 && u.getLevelNumber().compareTo(NumberUtil.add(data.getLevelNumber(), BigDecimal.valueOf(0.01))) < 0).collect(Collectors.toList()); +// List subVos = result.stream().filter(u -> u.getLevelNumber().compareTo(data.getLevelNumber()) >= 0 && u.getLevelNumber().compareTo(NumberUtil.add(data.getLevelNumber(), BigDecimal.valueOf(0.01))) < 0).collect(Collectors.toList()); + List subVos=getResultAllSubIncludeSelf(data); data1020.addAll(subVos); } facBomDataMp.put(EBomConstant.XIAN_TAO_FACTORY_CODE_1020,data1020); @@ -62,7 +63,16 @@ public class EBomToPBomForFormal31 extends EBomToPbomBase { facCodes.add(EBomConstant.MAIN_FACTORY_CODE_1010); data1010.add(parent); for (BomNewEbomParentVO data: deliveryPackage1010){ - List subVos = result.stream().filter(u -> u.getLevelNumber().compareTo(data.getLevelNumber()) >= 0 && u.getLevelNumber().compareTo(NumberUtil.add(data.getLevelNumber(), BigDecimal.valueOf(0.01))) < 0).collect(Collectors.toList()); + List subVos = new ArrayList<>();// result.stream().filter(u -> u.getLevelNumber().compareTo(data.getLevelNumber()) >= 0 && u.getLevelNumber().compareTo(NumberUtil.add(data.getLevelNumber(), BigDecimal.valueOf(0.01))) < 0).collect(Collectors.toList()); + if(data.getMaterialName().contains("仙桃")){ +// subVos = result.stream().filter(u -> u.getMaterialName().contains("仙桃") && u.getLevelNumber().compareTo(data.getLevelNumber()) >= 0 && u.getLevelNumber().compareTo(NumberUtil.add(data.getLevelNumber(), BigDecimal.valueOf(0.01))) < 0).collect(Collectors.toList()); + subVos.add(data); + subVos=result.stream().filter(u->u.getParentRowId().equals(data.getBomRowId())).collect(Collectors.toList()); + } + else { +// subVos = result.stream().filter(u -> u.getLevelNumber().compareTo(data.getLevelNumber()) >= 0 && u.getLevelNumber().compareTo(NumberUtil.add(data.getLevelNumber(), BigDecimal.valueOf(0.01))) < 0).collect(Collectors.toList()); + subVos=getResultAllSubIncludeSelf(data); + } data1010.addAll(subVos); } facBomDataMp.put(EBomConstant.MAIN_FACTORY_CODE_1010,data1010); @@ -80,8 +90,8 @@ public class EBomToPBomForFormal31 extends EBomToPbomBase { check(); //bom 提层 liftingLayer(); - result.forEach(u->u.setLevelNo("")); - generateDrawingNo(result, parent.getRowId(), "1"); +// result.forEach(u->u.setLevelNo("")); +// generateDrawingNo(result, parent.getRowId(), "1"); splitData(); List hasConvert = new ArrayList<>(); 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 f967e4c4..17538ceb 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 @@ -69,7 +69,7 @@ public abstract class EBomToPbomBase { protected Set hasBuildVNo = Sets.newHashSet(); //当子级为F项或Z项时-无需转的父级物料 - protected Set childDelMaterialNos=new HashSet<>(); + protected Set childDelMaterialNos = new HashSet<>(); public abstract void convert(); @@ -217,7 +217,7 @@ public abstract class EBomToPbomBase { } public void markNoConvert(BomNewEbomParentVO parentVo, List parentList) { - List subVos = parentList.stream().filter(u -> u.getLevelNumber().compareTo(parentVo.getLevelNumber()) >= 0 && u.getLevelNumber().compareTo(NumberUtil.add(parentVo.getLevelNumber(), BigDecimal.valueOf(0.01))) < 0).collect(Collectors.toList()); + List subVos = getAllSubInListIncludeSelf(parentVo, parentList); for (BomNewEbomParentVO vo : subVos) { vo.setNoConvertToPBomIs(1); } @@ -232,7 +232,7 @@ public abstract class EBomToPbomBase { protected void liftingLayer() { for (BomNewEbomParentVO vo : allBomDetail) { if (StrUtil.isNotBlank(vo.getProjectType()) && vo.getProjectType().equals(VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getProductTypeKey())) { - BomNewEbomParentVO lastVirtualPackage = getLastVirtualPackage(vo, VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE); + BomNewEbomParentVO lastVirtualPackage = getLastVirtualPackageNew(vo, VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE); if (Objects.nonNull(lastVirtualPackage)) { liftingLayerSummary(lastVirtualPackage, vo); vo.setSourceRowId(String.valueOf(vo.getParentRowId())); @@ -243,7 +243,7 @@ public abstract class EBomToPbomBase { continue; } if (StrUtil.isNotBlank(vo.getProjectType()) && vo.getProjectType().equals(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getProductTypeKey())) { - BomNewEbomParentVO lastVirtualPackage = getLastVirtualPackage(vo, VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE); + BomNewEbomParentVO lastVirtualPackage = getLastVirtualPackageNew(vo, VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE); if (Objects.nonNull(lastVirtualPackage)) { liftingLayerSummary(lastVirtualPackage, vo); vo.setSourceRowId(String.valueOf(vo.getParentRowId())); @@ -265,23 +265,41 @@ public abstract class EBomToPbomBase { */ private void liftingLayerSummary(BomNewEbomParentVO lastVirtualPackage, BomNewEbomParentVO vo) { BigDecimal sum = vo.getNum(); - String parentLevelNo = BomLevelUtil.getParentLevelNo(vo.getLevelNo()); +// String parentLevelNo = BomLevelUtil.getParentLevelNo(vo.getLevelNo()); + List parentList = getAllParent(vo); - while (parentLevelNo.length() >= lastVirtualPackage.getLevelNo().length()) { - String pNo = parentLevelNo; - List parentList = allBomDetail.stream().filter(u -> u.getLevelNo().equals(pNo)).collect(Collectors.toList()); - if (CollUtil.isNotEmpty(parentList)) { + if (CollUtil.isNotEmpty(parentList)) { + for (BomNewEbomParentVO ent : parentList) { sum = NumberUtil.mul(sum, parentList.get(0).getNum()); //构建虚拟包组成 buildVirtualPackageComposition(lastVirtualPackage, vo); } - parentLevelNo = BomLevelUtil.getParentLevelNo(parentLevelNo); - } vo.setNum(sum); + } + + + + protected List getAllParent(BomNewEbomParentVO vo) { + List result = new ArrayList<>(); + BomNewEbomParentVO parentEnt = getParent(vo); + Boolean flag = true; + while (Objects.nonNull(parentEnt) && parentEnt.getParentRowId() > 0 && flag) { + //制作 + if (VirtualPackageTypeEnum.MAKING_PACKAGE.getVirtualPartType().equals(parentEnt.getVirtualPartType())) { + flag = false; + + } else { + result.add(parentEnt); + } + + parentEnt = getParent(parentEnt); + + } + return result; } /** @@ -432,6 +450,7 @@ public abstract class EBomToPbomBase { } + @Deprecated private BomNewEbomParentVO getLastVirtualPackage(BomNewEbomParentVO vo, VirtualPackageTypeEnum virtualPackageTypeEnum) { List zhiFaList = allBomDetail.stream().filter(u -> vo.getLevelNumber().compareTo(u.getLevelNumber()) > 0 && virtualPackageTypeEnum.getVirtualPartType().equals(u.getVirtualPartType())).collect(Collectors.toList()); if (CollUtil.isNotEmpty(zhiFaList)) { @@ -441,6 +460,30 @@ public abstract class EBomToPbomBase { } + private BomNewEbomParentVO getLastVirtualPackageNew(BomNewEbomParentVO vo, VirtualPackageTypeEnum virtualPackageTypeEnum) { + BomNewEbomParentVO parentEnt = getParent(vo); + Boolean flag = true; + while (Objects.nonNull(parentEnt) && parentEnt.getParentRowId() > 0 && flag) { + //制作 + if (VirtualPackageTypeEnum.MAKING_PACKAGE.getVirtualPartType().equals(parentEnt.getVirtualPartType())) { + Long parentEntParentRowId = parentEnt.getParentRowId(); + flag = false; + return allBomDetail.stream().filter(u -> u.getParentRowId().equals(parentEntParentRowId) && virtualPackageTypeEnum.getVirtualPartType().equals(u.getVirtualPartType())).collect(Collectors.toList()).get(0); + + } + parentEnt = getParent(parentEnt); + } + return parentEnt; + } + + private BomNewEbomParentVO getParent(BomNewEbomParentVO vo) { + List parents = allBomDetail.stream().filter(u -> u.getBomRowId().equals(vo.getParentRowId())).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(parents)) { + return parents.get(0); + } + return null; + } + private BomNewEbomParentVO getVirtualPackageByName(VirtualPackageTypeEnum virtualPackageTypeEnum) { List list = allBomDetail.stream().filter(u -> u.getLevelNumber().compareTo(u.getLevelNumber()) > 0 && virtualPackageTypeEnum.getVirtualPartType().equals(u.getVirtualPartType())).collect(Collectors.toList()); @@ -463,10 +506,15 @@ public abstract class EBomToPbomBase { List firstLevelBoms = saveBomDetailParamDTO.stream().filter(u -> u.getParentRowId().equals(bomRowID)).collect(Collectors.toList()); String parentDrawingNoRe = StrUtil.isNotBlank(parentDrawingNo) ? parentDrawingNo : ""; Integer gNo = 1; - +// List hasMarkRowId=new ArrayList<>(); String preAssemblyPackageLevelNo = StrUtil.isNotBlank(parentDrawingNoRe) ? StrUtil.join("-", parentDrawingNoRe, "1") : "1"; for (BomNewEbomParentVO firstLevelBom : firstLevelBoms) { - +// if( hasMarkRowId.contains(firstLevelBom.getRowId())){ +// BomNewEbomParentVO ent=new BomNewEbomParentVO(); +// BeanUtil.copyProperties(firstLevelBom,ent); +// allBomDetail.add(ent); +// firstLevelBom=ent; +// } if (VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getVirtualPartType().equals(firstLevelBom.getVirtualPartType()) || VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getVirtualPartType().equals(firstLevelBom.getVirtualPartType())) { firstLevelBom.setLevelNumber(levelToNum(preAssemblyPackageLevelNo)); firstLevelBom.setLevelNo(preAssemblyPackageLevelNo); @@ -620,4 +668,63 @@ public abstract class EBomToPbomBase { } } + + /** + * 获取节点下的子节点(包含节点本身) + * + * @param parentVO + * @return + */ + protected List getResultAllSubIncludeSelf(BomNewEbomParentVO parentVO) { + List reusltSub = new ArrayList<>(); + reusltSub.add(parentVO); + getAllSubData(ImmutableList.of(parentVO.getBomRowId()), reusltSub); + + + return reusltSub; + } + + protected List getAllSubInListIncludeSelf(BomNewEbomParentVO parentVO, List list) { + List reusltSub = new ArrayList<>(); + reusltSub.add(parentVO); + getAllSubData(ImmutableList.of(parentVO.getBomRowId()), reusltSub, list); + + + return reusltSub; + } + + + private void getAllSubData(List parentRowIds, List subResult, List list) { + + List subMaterials = list.stream().filter(u -> parentRowIds.contains(u.getParentRowId())).collect(Collectors.toList()); + while (CollUtil.isNotEmpty(subMaterials)) { + subResult.addAll(subMaterials); + List subMarterialBomRowIds = subMaterials.stream().filter(u -> u.getBomRowId() > 0).map(u -> u.getBomRowId()).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(subMarterialBomRowIds)) { + getAllSubData(subMarterialBomRowIds, subResult, list); + } else { + break; + } + } + } + + + /** + * 发货包下子级 + * + * @param + */ + private void getAllSubData(List parentRowIds, List subResult) { + + List subMaterials = result.stream().filter(u -> parentRowIds.contains(u.getParentRowId())).collect(Collectors.toList()); + while (CollUtil.isNotEmpty(subMaterials)) { + subResult.addAll(subMaterials); + List subMarterialBomRowIds = subMaterials.stream().filter(u -> u.getBomRowId() > 0).map(u -> u.getBomRowId()).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(subMarterialBomRowIds)) { + getAllSubData(subMarterialBomRowIds, subResult); + } else { + break; + } + } + } }