diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomDetailTask.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomDetailTask.java index cc921574..a6e197d3 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomDetailTask.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomDetailTask.java @@ -13,9 +13,7 @@ import com.nflg.product.bomnew.util.ListCommonUtil; import lombok.Getter; import lombok.Setter; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.concurrent.RecursiveTask; import java.util.stream.Collectors; @@ -53,8 +51,16 @@ public class EBomDetailTask extends RecursiveTask> { if (CollUtil.isNotEmpty(materialNos)) { - List childBomlist = SpringUtil.getBean(BomNewEbomParentService.class).lambdaQuery().in(BomNewEbomParentEntity::getMaterialNo, materialNos).eq(BomNewEbomParentEntity::getLastVersionIs, 1).list(); - Map stringBomNewOriginalParentEntityMap = ListCommonUtil.listToMap(childBomlist, BomNewEbomParentEntity::getMaterialNo); + List childBomlist = SpringUtil.getBean(BomNewEbomParentService.class).lambdaQuery().in(BomNewEbomParentEntity::getMaterialNo, materialNos).list(); +// Map stringBomNewOriginalParentEntityMap = ListCommonUtil.listToMap(childBomlist, BomNewEbomParentEntity::getMaterialNo); + Map stringBomNewOriginalParentEntityMap =childBomlist.stream() + .collect(Collectors.groupingBy( + BomNewEbomParentEntity::getMaterialNo, + Collectors.collectingAndThen( + Collectors.maxBy(Comparator.comparing(BomNewEbomParentEntity::getCurrentVersion)), + Optional::get + ) + )); for (BomNewEbomParentVO detailVO : bomDetail) { if (stringBomNewOriginalParentEntityMap.containsKey(detailVO.getMaterialNo())) { BomNewEbomParentEntity ebomParentEntity = stringBomNewOriginalParentEntityMap.get(detailVO.getMaterialNo()); diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomToPBomFor31.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomToPBomFor31.java index 9b98255d..65dd42d7 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomToPBomFor31.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomToPBomFor31.java @@ -70,7 +70,7 @@ public class EBomToPBomFor31 extends EBomToPbomBase { List subVos = new ArrayList<>(); if (data.getMaterialName().contains("仙桃")) { //只获取下降虚拟包 subVos.add(data); - subVos = result.stream().filter(u -> u.getParentRowId().equals(data.getBomRowId())).collect(Collectors.toList()); + subVos.addAll(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); 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 0b3790d8..f35586db 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 @@ -58,7 +58,7 @@ public class EBomToPBomForFormal31 extends EBomToPbomBase { //1010 数据 List data1010=new ArrayList<>(); - List deliveryPackage1010 = result.stream().filter(u -> u.getParentRowId().equals(parent.getRowId()) && !u.getMaterialName().contains("仙桃")).collect(Collectors.toList()); + List deliveryPackage1010 = result.stream().filter(u -> u.getParentRowId().equals(parent.getRowId())).collect(Collectors.toList()); if(CollUtil.isNotEmpty(deliveryPackage1010)){ facCodes.add(EBomConstant.MAIN_FACTORY_CODE_1010); data1010.add(parent); @@ -67,7 +67,7 @@ public class EBomToPBomForFormal31 extends EBomToPbomBase { 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()); + subVos.addAll(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()); @@ -97,7 +97,6 @@ public class EBomToPBomForFormal31 extends EBomToPbomBase { for (String facCode : facCodes) { List parentList = ListCommonUtil.toDistinct(facBomDataMp.get(facCode).stream().filter(u -> u.getBomRowId() > 0) - .sorted(Comparator.comparing(BomNewEbomParentVO::getLevelNumber)) .collect(Collectors.toList()), BomNewEbomParentVO::getBomRowId); for (BomNewEbomParentVO vo : parentList) { String hasConvertKey = StrUtil.join("-", facCode, vo.getBomRowId()); 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 d2ee4af6..1bdc70c8 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 @@ -204,6 +204,7 @@ public abstract class EBomToPbomBase { pBomParent.setTechnologyUserName(SessionUtil.getRealName()); pBomParent.setDeptRowId(SessionUtil.getDepartRowId()); pBomParent.setCreatedTime(LocalDateTime.now()); + pBomParent.setCreatedBy(SessionUtil.getUserCode()); //版本=EBom版本 pBomParent.setCurrentVersion(bomVersion); pBomParent.setEditStatus(PBomEditStatusEnum.HANDLER_CREATED.getValue()); @@ -230,31 +231,62 @@ public abstract class EBomToPbomBase { * @param */ protected void liftingLayer() { - 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); + 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, VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE); + if (Objects.nonNull(lastVirtualPackage)) { + BomNewEbomParentVO newEnt = liftingLayerSummary(lastVirtualPackage, child); + newEnt.setSourceRowId(String.valueOf(child.getParentRowId())); + newEnt.setSourceParentMaterialNo(vo.getMaterialNo()); + newEnt.setParentRowId(lastVirtualPackage.getBomRowId()); + result.add(newEnt); + } + continue; } - 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); + 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)) { + BomNewEbomParentVO newEnt = liftingLayerSummary(lastVirtualPackage, child); + newEnt.setSourceRowId(String.valueOf(child.getParentRowId())); + newEnt.setSourceParentMaterialNo(vo.getMaterialNo()); + newEnt.setParentRowId(lastVirtualPackage.getBomRowId()); + result.add(newEnt); + } + continue; } - continue; + result.add(child); } - result.add(vo); } + + +// 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); +// } } /** @@ -263,20 +295,28 @@ public abstract class EBomToPbomBase { * @param lastVirtualPackage 虚拟包 * @param vo 提层项 */ - private void liftingLayerSummary(BomNewEbomParentVO lastVirtualPackage, BomNewEbomParentVO vo) { + private BomNewEbomParentVO liftingLayerSummary(BomNewEbomParentVO lastVirtualPackage, BomNewEbomParentVO vo) { BigDecimal sum = vo.getNum(); // String parentLevelNo = BomLevelUtil.getParentLevelNo(vo.getLevelNo()); List parentList = getAllParent(vo); + BomNewEbomParentVO newEnt=new BomNewEbomParentVO(); + BeanUtil.copyProperties(vo,newEnt); + //构建虚拟包组成 + buildVirtualPackageComposition(lastVirtualPackage, vo); if (CollUtil.isNotEmpty(parentList)) { + for (BomNewEbomParentVO ent : parentList) { - sum = NumberUtil.mul(sum, parentList.get(0).getNum()); + sum = NumberUtil.mul(sum, ent.getNum()); //构建虚拟包组成 - buildVirtualPackageComposition(lastVirtualPackage, vo); + buildVirtualPackageComposition(lastVirtualPackage, ent); } } - vo.setNum(sum); + newEnt.setBomRowId(0L); + newEnt.setChildBomRowId(0L); + newEnt.setNum(sum); + return newEnt; } @@ -717,12 +757,17 @@ 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); + 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(); }