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 bd6c56e3..21fb21f1 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 @@ -33,6 +33,7 @@ public class EBomToPBomForFormal extends EBomToPbomBase { this.facCodes = inFacCodes; this.convertMode=convertModelEnum; 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 82aa6a92..30919bc2 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 @@ -35,7 +35,7 @@ public class EBomToPBomForFormal31 extends EBomToPbomBase { this.facCodes = inFacCodes; this.convertMode=convertModelEnum; generateDrawingNo(allBomDetail, parentRowId, ""); - + initEBomVersionFormal(); } 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 175f1425..685eb783 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 @@ -47,7 +47,7 @@ public abstract class EBomToPbomBase { protected List result = new ArrayList<>(); - protected BomNewEbomVirtualPackageCompositionService virtualPackageCompositionService=SpringUtil.getBean(BomNewEbomVirtualPackageCompositionService.class); + protected BomNewEbomVirtualPackageCompositionService virtualPackageCompositionService = SpringUtil.getBean(BomNewEbomVirtualPackageCompositionService.class); @Getter @@ -60,7 +60,6 @@ public abstract class EBomToPbomBase { protected List virtualPackageCompositionResult = new ArrayList<>(); - @Getter protected List upgradeChangeResult = new ArrayList<>(); @@ -161,13 +160,13 @@ public abstract class EBomToPbomBase { .eq(BomNewPbomParentEntity::getFacCode, facCode).last(" order by current_version desc limit 1").one(); - if(Objects.isNull(oldParent)){ - return buildParentEntity(parentVo,facCode,oldParent,parentVo.getCurrentVersion()); + if (Objects.isNull(oldParent)) { + return buildParentEntity(parentVo, facCode, oldParent, parentVo.getCurrentVersion()); } //pbom 处于工作表 - else if (Objects.nonNull(oldParent) && oldParent.getStatus() < EBomStatusEnum.PUBLISHED.getValue()) { - if (oldParent.getCreatedBy().equals( parentVo.getCreatedBy())) { + else if (Objects.nonNull(oldParent) && oldParent.getStatus() < EBomStatusEnum.PUBLISHED.getValue()) { + if (oldParent.getCreatedBy().equals(parentVo.getCreatedBy())) { if (ConvertToPBomModelEnum.OVERRIDE.equalsValue(convertMode.getValue())) { SpringUtil.getBean(BomNewPbomChildService.class).getBaseMapper().deleteByMap(ImmutableMap.of("parent_row_id", oldParent.getRowId())); oldParent.setSourceRowId(parentVo.getRowId()); @@ -183,14 +182,14 @@ public abstract class EBomToPbomBase { return null; } else { //pbom-处于正式表 - String bomVersion= VersionUtil.compare(parentVo.getCurrentVersion(),oldParent.getCurrentVersion())>0?parentVo.getCurrentVersion():VersionUtil.getNextVersion(oldParent.getCurrentVersion()); - return buildParentEntity(parentVo, facCode, oldParent,bomVersion); + String bomVersion = VersionUtil.compare(parentVo.getCurrentVersion(), oldParent.getCurrentVersion()) > 0 ? parentVo.getCurrentVersion() : VersionUtil.getNextVersion(oldParent.getCurrentVersion()); + return buildParentEntity(parentVo, facCode, oldParent, bomVersion); } } - private BomNewPbomParentEntity buildParentEntity(BomNewEbomParentVO parentVo, String facCode,BomNewPbomParentEntity oldParent,String bomVersion){ + private BomNewPbomParentEntity buildParentEntity(BomNewEbomParentVO parentVo, String facCode, BomNewPbomParentEntity oldParent, String bomVersion) { BomNewPbomParentEntity pBomParent = new BomNewPbomParentEntity(); BeanUtil.copyProperties(parentVo, pBomParent, "sourceRowId"); pBomParent.setSourceRowId(parentVo.getBomRowId()); @@ -283,7 +282,8 @@ public abstract class EBomToPbomBase { } /** - * 构建虚拟包组成 + * 构建虚拟包组成 + * * @param lastVirtualPackage * @param vo */ @@ -303,12 +303,12 @@ public abstract class EBomToPbomBase { packageCompositionEntity.setDeviseName(lastVirtualPackage.getDeviseName()); packageCompositionEntity.setDeptName(lastVirtualPackage.getDeptName()); packageCompositionEntity.setFromLiftingLayerState(0); - if(!lastVirtualPackage.getBomRowId().equals(vo.getParentRowId())) { + if (!lastVirtualPackage.getBomRowId().equals(vo.getParentRowId())) { packageCompositionEntity.setFromLiftingLayerState(1); } packageCompositionEntity.setCurrentVersion(lastVirtualPackage.getCurrentVersion()); List vParentM = allBomDetail.stream().filter(u -> lastVirtualPackage.getBomRowId().equals(u.getParentRowId())).collect(Collectors.toList()); - if(CollUtil.isNotEmpty(vParentM)) { + if (CollUtil.isNotEmpty(vParentM)) { packageCompositionEntity.setVirtualMaterialParentMaterialNo(vParentM.get(0).getMaterialNo()); } this.virtualPackageCompositionResult.add(packageCompositionEntity); @@ -317,7 +317,7 @@ public abstract class EBomToPbomBase { /** * 变更影响 */ - protected void changeImpact(){ + protected void changeImpact() { // Set vmaterialNo = allBomDetail.stream().filter(u -> VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.equalsValue(u.getVirtualPartType()) || VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.equalsValue(u.getVirtualPartType())).map(u -> u.getMaterialNo()).collect(Collectors.toSet()); List firstParent = allBomDetail.stream().filter(u -> u.getParentRowId().equals(parent.getRowId())).collect(Collectors.toList()); for (BomNewEbomParentVO vo : firstParent) { @@ -327,81 +327,79 @@ public abstract class EBomToPbomBase { } - private void changeImpactDo(BomNewEbomParentVO parentVO){ + private void changeImpactDo(BomNewEbomParentVO parentVO) { List subVos = allBomDetail.stream().filter(u -> u.getLevelNumber().compareTo(parentVO.getLevelNumber()) >= 0 && u.getLevelNumber().compareTo(NumberUtil.add(parentVO.getLevelNumber(), BigDecimal.valueOf(0.01))) < 0) .sorted(Comparator.comparing(BomNewEbomParentVO::getLevelNumber)).collect(Collectors.toList()); List subVosParent = subVos.stream().filter(u -> u.getBomRowId() > 0).collect(Collectors.toList()); for (BomNewEbomParentVO vo : subVosParent) { - if( compareVirtualPackage(vo)) { - break; - } + if (compareVirtualPackage(vo)) { + break; + } } } private Boolean compareVirtualPackage(BomNewEbomParentVO vo) { - Boolean result=false; - if(EBomStatusEnum.PUBLISHED.equalsValue(vo.getStatus())){ + Boolean result = false; + if (EBomStatusEnum.PUBLISHED.equalsValue(vo.getStatus())) { return result; } List impactVm = virtualPackageCompositionService.lambdaQuery() .eq(BomNewEbomVirtualPackageCompositionEntity::getParentMaterialNo, vo.getMaterialNo()) - .eq(BomNewEbomVirtualPackageCompositionEntity::getFromLiftingLayerState,1).list(); - if(CollUtil.isNotEmpty(impactVm)){ - List childList = allBomDetail.stream().filter(u -> u.getParentRowId().equals(vo.getBomRowId())).collect(Collectors.toList()); + .eq(BomNewEbomVirtualPackageCompositionEntity::getFromLiftingLayerState, 1).list(); + if (CollUtil.isNotEmpty(impactVm)) { + List childList = allBomDetail.stream().filter(u -> u.getParentRowId().equals(vo.getBomRowId())).collect(Collectors.toList()); - Map > impactVmMp=impactVm.stream().collect(Collectors.groupingBy(BomNewEbomVirtualPackageCompositionEntity::getVirtualPackageMaterialNo)); + Map> impactVmMp = impactVm.stream().collect(Collectors.groupingBy(BomNewEbomVirtualPackageCompositionEntity::getVirtualPackageMaterialNo)); //对比F项 - for (String vMaterialNo: impactVmMp.keySet()){ + for (String vMaterialNo : impactVmMp.keySet()) { List vMaterialList = impactVmMp.get(vMaterialNo); //当改BOM 存在该虚拟包则直接跳过 List existsV = allBomDetail.stream().filter(u -> u.getMaterialNo().equals(vMaterialNo)).collect(Collectors.toList()); - if(CollUtil.isNotEmpty(existsV)){ + if (CollUtil.isNotEmpty(existsV)) { continue; } //虚拟包原F项 Set fSet = vMaterialList.stream().filter(u -> VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getProductTypeKey().equals(u.getProjectType())).map(u -> StrUtil.join("", u.getChildMaterialNo(), u.getNum())).collect(Collectors.toSet()); Set newFSet = childList.stream().filter(u -> VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getProductTypeKey().equals(u.getProjectType())).map(u -> StrUtil.join("", u.getMaterialNo(), u.getNum())).collect(Collectors.toSet()); - if(!fSet.equals(newFSet)) - { - buildChangeImpactEntity(vMaterialList.get(0),vo); - result=true; + if (!fSet.equals(newFSet)) { + buildChangeImpactEntity(vMaterialList.get(0), vo); + result = true; continue; } // 虚拟包Z项 //虚拟包原F项 Set zSet = vMaterialList.stream().filter(u -> VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getProductTypeKey().equals(u.getProjectType())).map(u -> StrUtil.join("", u.getChildMaterialNo(), u.getNum())).collect(Collectors.toSet()); Set newZSet = childList.stream().filter(u -> VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getProductTypeKey().equals(u.getProjectType())).map(u -> StrUtil.join("", u.getMaterialNo(), u.getNum())).collect(Collectors.toSet()); - if(!zSet.equals(newZSet)) - { - buildChangeImpactEntity(vMaterialList.get(0),vo); - result=true; + if (!zSet.equals(newZSet)) { + buildChangeImpactEntity(vMaterialList.get(0), vo); + result = true; continue; } //数量发生变化(非F,Z项 数量发生变化) List noZOrFList = vMaterialList.stream().filter(u -> VirtualPackageTypeEnum.UN_VIRTUAL_PACKAGE.getProductTypeKey().equals(u.getProjectType())).collect(Collectors.toList()); - for (BomNewEbomVirtualPackageCompositionEntity vZOrF: noZOrFList){ + for (BomNewEbomVirtualPackageCompositionEntity vZOrF : noZOrFList) { List collect = childList.stream().filter(u -> u.getMaterialNo().equals(vZOrF.getChildMaterialNo())).collect(Collectors.toList()); - if(CollUtil.isEmpty(collect)){ - buildChangeImpactEntity(vMaterialList.get(0),vo); - result=true; + if (CollUtil.isEmpty(collect)) { + buildChangeImpactEntity(vMaterialList.get(0), vo); + result = true; break; } //数量发生了变化 - else if(CollUtil.isNotEmpty(collect) && collect.get(0).getNum().equals(vZOrF.getNum())){ - buildChangeImpactEntity(vMaterialList.get(0),vo); - result=true; + else if (CollUtil.isNotEmpty(collect) && collect.get(0).getNum().equals(vZOrF.getNum())) { + buildChangeImpactEntity(vMaterialList.get(0), vo); + result = true; break; } } } } - return result; + return result; } - private void buildChangeImpactEntity(BomNewEbomVirtualPackageCompositionEntity v , BomNewEbomParentVO vo){ + private void buildChangeImpactEntity(BomNewEbomVirtualPackageCompositionEntity v, BomNewEbomParentVO vo) { - BomNewEbomUpgradeChangeEntity changeEntity =new BomNewEbomUpgradeChangeEntity(); + BomNewEbomUpgradeChangeEntity changeEntity = new BomNewEbomUpgradeChangeEntity(); changeEntity.setRowId(IdWorker.getId()); changeEntity.setMaterialNo(v.getVirtualPackageMaterialNo()); changeEntity.setVersionOld(vo.getCurrentVersion()); @@ -470,7 +468,7 @@ public abstract class EBomToPbomBase { firstLevelBom.setLevelNumber(levelToNum(preAssemblyPackageLevelNo)); firstLevelBom.setLevelNo(preAssemblyPackageLevelNo); - }else { + } else { String levelKey = StrUtil.isNotBlank(parentDrawingNoRe) ? StrUtil.join("-", parentDrawingNoRe, gNo.toString()) : gNo.toString(); firstLevelBom.setLevelNumber(levelToNum(levelKey)); @@ -558,6 +556,7 @@ public abstract class EBomToPbomBase { public void initEBomVersion() { List parentBoms = allBomDetail.stream().filter(u -> u.getBomRowId() > 0).collect(Collectors.toList()); for (BomNewEbomParentVO parentBom : parentBoms) { + List newParentChild = allBomDetail.stream().filter(u -> u.getParentRowId().equals(parentBom.getBomRowId())).collect(Collectors.toList()); if (!EBomStatusEnum.PUBLISHED.equalsValue(parentBom.getStatus())) { //获取正式版 BomNewEbomParentEntity oldEBom = SpringUtil.getBean(BomNewEbomParentService.class).lambdaQuery().eq(BomNewEbomParentEntity::getMaterialNo, parentBom.getMaterialNo()) @@ -566,7 +565,7 @@ public abstract class EBomToPbomBase { if (Objects.nonNull(oldEBom)) { List oldParentChild = SpringUtil.getBean(BomNewEbomChildService.class).lambdaQuery().eq(BomNewEbomChildEntity::getParentRowId, oldEBom.getRowId()).list(); - List newParentChild = allBomDetail.stream().filter(u -> u.getParentRowId().equals(parentBom.getBomRowId())).collect(Collectors.toList()); + //一样则无需转换 if (isSameEBomV2(oldParentChild, newParentChild)) { parentBom.setNoConvertToPBomIs(1); @@ -579,20 +578,41 @@ public abstract class EBomToPbomBase { parentBom.setCurrentVersion(VersionUtil.getNextVersion(oldEBom.getCurrentVersion())); parentBom.setHasChangeState(2); } - - //如子级都为F 项父级也不转 - Set projectSet = newParentChild.stream().map(u -> u.getProjectType().toUpperCase()).collect(Collectors.toSet()); - if(CollUtil.isNotEmpty(projectSet)){ - if(!VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getProductTypeKey().equals(parentBom.getVirtualPartType()) && !VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getProductTypeKey().equals(parentBom.getVirtualPartType()) && - (ImmutableSet.of("F").equals(projectSet) || ImmutableSet.of("F","Z").equals(projectSet)|| ImmutableSet.of("Z").equals(projectSet))){ - parentBom.setNoConvertToPBomIs(1); - } - } - } - + } + //如子级都为F 项父级也不转 + Set projectSet = newParentChild.stream().map(u -> u.getProjectType().toUpperCase()).collect(Collectors.toSet()); + if (CollUtil.isNotEmpty(projectSet)) { + if (!VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getProductTypeKey().equals(parentBom.getVirtualPartType()) && !VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getProductTypeKey().equals(parentBom.getVirtualPartType()) && + (ImmutableSet.of("F").equals(projectSet) || ImmutableSet.of("F", "Z").equals(projectSet) || ImmutableSet.of("Z").equals(projectSet))) { + parentBom.setNoConvertToPBomIs(1); + } } } } + + + /** + * 正式eBOM转换前生产 pBOM + * 子项都为F 项则父项不转 + */ + public void initEBomVersionFormal() { + List parentBoms = allBomDetail.stream().filter(u -> u.getBomRowId() > 0).collect(Collectors.toList()); + for (BomNewEbomParentVO parentBom : parentBoms) { + + List newParentChild = allBomDetail.stream().filter(u -> u.getParentRowId().equals(parentBom.getBomRowId())).collect(Collectors.toList()); + //如子级都为F 项父级也不转 + Set projectSet = newParentChild.stream().map(u -> u.getProjectType().toUpperCase()).collect(Collectors.toSet()); + if (CollUtil.isNotEmpty(projectSet)) { + if (!VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getProductTypeKey().equals(parentBom.getVirtualPartType()) && !VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getProductTypeKey().equals(parentBom.getVirtualPartType()) && + (ImmutableSet.of("F").equals(projectSet) || ImmutableSet.of("F", "Z").equals(projectSet) || ImmutableSet.of("Z").equals(projectSet))) { + parentBom.setNoConvertToPBomIs(1); + } + } + + + } + + } }