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 3b89df67..d3d9609b 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 @@ -785,7 +785,7 @@ public class BomNewEbomParentService extends ServiceImpl 0).throwMessage("已生成过虚拟包,不能2次生成"); + // VUtils.isTure(root.getVirtrualPackageEnum() > 0).throwMessage("已生成过虚拟包,不能2次生成"); VUtils.isTure(!Objects.equals(root.getExceptionStatus(), EBomExceptionStatusEnum.OK.getValue()) && !Objects.equals(root.getExceptionStatus(), EBomExceptionStatusEnum.EXCEPT_NO_8.getValue())) .throwMessage("异常状态下不允许生成虚拟包"); @@ -806,6 +806,8 @@ public class BomNewEbomParentService extends ServiceImpl childResult=new ArrayList<>(); - @ApiModelProperty("物料bom行ID") protected Long bomRowId; - @ApiModelProperty("虚拟包 1-发货包 2-制作包 4-直发包 8-发货前装配包") + //需要生成虚拟包的子节点 + protected List children; + + /* + * 虚拟包类型 1-发货包 2-制作包 4-直发包 8-发货前装配包 + */ protected List virtualPackageValue; //虚拟包编码 @@ -53,9 +56,9 @@ public abstract class VirtualPackageBase { * @param virtualPackageTypeEnums * @return */ - protected void generateVMNoFor31(String parentDrawingNo, List child,VirtualPackageTypeEnum ... virtualPackageTypeEnums){ + protected void generateVMNoFor31(String parentDrawingNo, List child, VirtualPackageTypeEnum... virtualPackageTypeEnums) { List params=new ArrayList<>(); - for ( BomNewEbomParentVO ch: child ) { + for (BomNewEbomChildEntity ch : child) { for (VirtualPackageTypeEnum vpy : virtualPackageTypeEnums) { String vDrawingNo = String.join("","(",parentDrawingNo,")","(",ch.getMaterialName(),")","(",vpy.getConMaterialName(),")" ); params.add(buildAddMaterialParamDo(StrUtil.join("",ch.getRowId().toString(), vpy.getConMaterialName()), vDrawingNo, vDrawingNo, vpy)); @@ -224,6 +227,10 @@ public abstract class VirtualPackageBase { */ public abstract void generateVirtualPackage() throws IOException; + public abstract boolean canGenerateVirtualPackage(); + public List getChildrenForGenerateVirtualPackage(Long bomRowId) { + + } } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/VirtualPackageFor21.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/VirtualPackageFor21.java index bf75271f..04daf326 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/VirtualPackageFor21.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/VirtualPackageFor21.java @@ -1,15 +1,18 @@ package com.nflg.product.bomnew.service.domain.EBom; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; +import cn.hutool.extra.spring.SpringUtil; import com.google.common.collect.ImmutableList; import com.nflg.product.bomnew.constant.VirtualPackageTypeEnum; import com.nflg.product.bomnew.pojo.entity.BomNewEbomChildEntity; import com.nflg.product.bomnew.pojo.entity.BomNewEbomParentEntity; import com.nflg.product.bomnew.pojo.vo.BomNewEbomParentVO; +import com.nflg.product.bomnew.service.BomNewEbomChildService; +import com.nflg.product.bomnew.service.BomNewEbomParentService; import java.util.List; import java.util.Objects; -import java.util.stream.Collectors; /** * 31物料生成虚拟包 @@ -26,63 +29,77 @@ public class VirtualPackageFor21 extends VirtualPackageBase { this.virtualPackageValue = virtualPackageValue; } - - /** - * 31物料生成虚拟包 + * 21物料生成虚拟包 */ @Override public void generateVirtualPackage() { - - BomNewEbomParentEntity parent = getParentByRowId(bomRowId); - BomNewEbomParentVO vo= Convert.convert(BomNewEbomParentVO.class,parent ); - if(virtualPackageValue.contains(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue()) && (parent.getVirtrualPackageEnum()&VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue())!= VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue()){ - generateVMNoF21(parent.getDrawingNo(), ImmutableList.of(vo),VirtualPackageTypeEnum.MAKING_PACKAGE, VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE,VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE); - } - else { - generateVMNoF21(parent.getDrawingNo(),ImmutableList.of(vo),VirtualPackageTypeEnum.MAKING_PACKAGE, VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE); - } + BomNewEbomChildEntity mpChild = SpringUtil.getBean(BomNewEbomChildService.class).lambdaQuery() + .eq(BomNewEbomChildEntity::getParentRowId, bomRowId) + .eq(BomNewEbomChildEntity::getVirtualPartType, VirtualPackageTypeEnum.MAKING_PACKAGE.getValue()) + .one(); + BomNewEbomParentEntity makingPackage = null; + if (Objects.isNull(mpChild)) { + BomNewEbomParentVO vo = Convert.convert(BomNewEbomParentVO.class, parent); - BomNewEbomParentEntity makingPackage=null; - if((parent.getVirtrualPackageEnum()& VirtualPackageTypeEnum.MAKING_PACKAGE.getValue())!=VirtualPackageTypeEnum.MAKING_PACKAGE.getValue()) { - //构建构建发货包下制作包 - makingPackage = buildParentVirtualPackage(parent.getRowId(), VirtualPackageTypeEnum.MAKING_PACKAGE, "001", parent); - //构建构建发货包下直发 - BomNewEbomParentEntity directDeliveryPackage = buildParentVirtualPackage(parent.getRowId(), VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE, "002", parent); - //构建产品-子级为制作包合直发包 - buildChild(makingPackage, bomRowId, "001", VirtualPackageTypeEnum.MAKING_PACKAGE,parent.getMaterialNo()); - buildChild(directDeliveryPackage, bomRowId, "002", VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE,parent.getMaterialNo()); - - } - if(virtualPackageValue.contains(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue()) && (parent.getVirtrualPackageEnum()& VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue())!=VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue()) { - //构建构建发货前装配包 - if(Objects.isNull(makingPackage)){ - makingPackage=getParentZhiZuo(parent.getDrawingNo()); + if (virtualPackageValue.contains(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue()) && (parent.getVirtrualPackageEnum() & VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue()) != VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue()) { + generateVMNoF21(parent.getDrawingNo(), ImmutableList.of(vo), VirtualPackageTypeEnum.MAKING_PACKAGE, VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE, VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE); + } else { + generateVMNoF21(parent.getDrawingNo(), ImmutableList.of(vo), VirtualPackageTypeEnum.MAKING_PACKAGE, VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE); } - BomNewEbomParentEntity preAssemblyPackage = buildParentVirtualPackage(parent.getRowId(), VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE, parent.getOrderNumber(), parent); - buildChild(preAssemblyPackage, makingPackage.getRowId(), "001", VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE,parent.getMaterialNo()); + if ((parent.getVirtrualPackageEnum() & VirtualPackageTypeEnum.MAKING_PACKAGE.getValue()) != VirtualPackageTypeEnum.MAKING_PACKAGE.getValue()) { + //构建构建发货包下制作包 + makingPackage = buildParentVirtualPackage(parent.getRowId(), VirtualPackageTypeEnum.MAKING_PACKAGE, "001", parent); + //构建构建发货包下直发 + BomNewEbomParentEntity directDeliveryPackage = buildParentVirtualPackage(parent.getRowId(), VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE, "002", parent); + //构建产品-子级为制作包合直发包 + buildChild(makingPackage, bomRowId, "001", VirtualPackageTypeEnum.MAKING_PACKAGE, parent.getMaterialNo()); + buildChild(directDeliveryPackage, bomRowId, "002", VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE, parent.getMaterialNo()); + } + } else { + makingPackage = SpringUtil.getBean(BomNewEbomParentService.class).lambdaQuery() + .eq(BomNewEbomParentEntity::getMaterialNo, mpChild.getMaterialNo()) + .orderByDesc(BomNewEbomParentEntity::getRowId) + .last(" limit 1") + .one(); } - List child = getChild(); + if (virtualPackageValue.contains(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue()) && (parent.getVirtrualPackageEnum() & VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue()) != VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue()) { + //构建构建发货前装配包 + BomNewEbomParentEntity preAssemblyPackage = buildParentVirtualPackage(parent.getRowId(), VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE, parent.getOrderNumber(), parent); + buildChild(preAssemblyPackage, makingPackage.getRowId(), "001", VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE, parent.getMaterialNo()); + } + //List child = getChild(); //将产品子级放制作包下 if(Objects.nonNull(makingPackage)) { - for (BomNewEbomParentVO item : child) { - - BomNewEbomChildEntity itemUp = new BomNewEbomChildEntity(); - itemUp.setRowId(item.getRowId()); - itemUp.setParentRowId(makingPackage.getRowId()); - this.childResult.add(itemUp); - + for (BomNewEbomChildEntity item : children) { + // BomNewEbomChildEntity itemUp = new BomNewEbomChildEntity(); + // itemUp.setRowId(item.getRowId()); + // itemUp.setParentRowId(makingPackage.getRowId()); + item.setParentRowId(makingPackage.getRowId()); + this.childResult.add(item); } } - parent.setVirtrualPackageEnum(virtualPackageValue.stream().collect(Collectors.summingInt(u->u))); + parent.setVirtrualPackageEnum(virtualPackageValue.stream().mapToInt(u -> u).sum()); parentResult.add(parent); - - } - + @Override + public boolean canGenerateVirtualPackage() { + children = SpringUtil.getBean(BomNewEbomChildService.class) + .lambdaQuery() + .eq(BomNewEbomChildEntity::getParentRowId, bomRowId) + .eq(BomNewEbomChildEntity::getVirtualPartType, VirtualPackageTypeEnum.UN_VIRTUAL_PACKAGE.getValue()) + .list(); + if (CollUtil.isNotEmpty(children)) return true; + if (virtualPackageValue.contains(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue())) { + BomNewEbomParentEntity parent = getParentByRowId(bomRowId); + return (parent.getVirtrualPackageEnum() & VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue()) + != VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue(); + } + return false; + } } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/VirtualPackageFor31.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/VirtualPackageFor31.java index 93db098e..3b02a0c0 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/VirtualPackageFor31.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/VirtualPackageFor31.java @@ -6,8 +6,7 @@ import com.nflg.product.base.core.exception.NflgBusinessException; import com.nflg.product.bomnew.constant.VirtualPackageTypeEnum; import com.nflg.product.bomnew.pojo.entity.BomNewEbomChildEntity; import com.nflg.product.bomnew.pojo.entity.BomNewEbomParentEntity; -import com.nflg.product.bomnew.pojo.vo.BomNewEbomParentVO; -import com.nflg.product.bomnew.service.MaterialMainService; +import com.nflg.product.bomnew.service.BomNewEbomChildService; import nflg.product.common.constant.STATE; import java.util.List; @@ -24,7 +23,7 @@ public class VirtualPackageFor31 extends VirtualPackageBase { * @param bomRowId 物料BOM-行ID * @param virtualPackageValue 要生成的虚拟包 */ - public VirtualPackageFor31(Long bomRowId ,List virtualPackageValue){ + public VirtualPackageFor31(Long bomRowId, List virtualPackageValue) { this.bomRowId=bomRowId; this.virtualPackageValue=virtualPackageValue; } @@ -35,25 +34,23 @@ public class VirtualPackageFor31 extends VirtualPackageBase { @Override public void generateVirtualPackage() { - List child = getChild(); - SpringUtil.getBean(MaterialMainService.class).intiMaterialInfo(child); + // List child = getChild(); + //SpringUtil.getBean(MaterialMainService.class).intiMaterialInfo(child); BomNewEbomParentEntity parent = getParentByRowId(bomRowId); try { //生成虚拟包 - if(CollUtil.isNotEmpty(child)) { + if (CollUtil.isNotEmpty(children)) { if (virtualPackageValue.contains(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue()) && (VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue() & parent.getVirtrualPackageEnum()) != VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue()){ - generateVMNoFor31(parent.getDrawingNo(), child , VirtualPackageTypeEnum.DELIVERY_PACKAGE,VirtualPackageTypeEnum.MAKING_PACKAGE + generateVMNoFor31(parent.getDrawingNo(), children, VirtualPackageTypeEnum.DELIVERY_PACKAGE, VirtualPackageTypeEnum.MAKING_PACKAGE ,VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE, VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE); } else { - generateVMNoFor31(parent.getDrawingNo(),child, VirtualPackageTypeEnum.DELIVERY_PACKAGE, VirtualPackageTypeEnum.MAKING_PACKAGE + generateVMNoFor31(parent.getDrawingNo(), children, VirtualPackageTypeEnum.DELIVERY_PACKAGE, VirtualPackageTypeEnum.MAKING_PACKAGE , VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE); } - - } - for (BomNewEbomParentVO item : child) { + for (BomNewEbomChildEntity item : children) { BomNewEbomParentEntity makingPackage=null; if((VirtualPackageTypeEnum.DELIVERY_PACKAGE.getValue()&parent.getVirtrualPackageEnum())!=VirtualPackageTypeEnum.DELIVERY_PACKAGE.getValue()) { //构建发货包 @@ -91,9 +88,16 @@ public class VirtualPackageFor31 extends VirtualPackageBase { }catch (Exception ex) { throw new NflgBusinessException(STATE.BusinessError, ex.getMessage()); } + } - - + @Override + public boolean canGenerateVirtualPackage() { + children = SpringUtil.getBean(BomNewEbomChildService.class) + .lambdaQuery() + .eq(BomNewEbomChildEntity::getParentRowId, bomRowId) + .eq(BomNewEbomChildEntity::getVirtualPartType, VirtualPackageTypeEnum.UN_VIRTUAL_PACKAGE.getValue()) + .list(); + return CollUtil.isNotEmpty(children); } private Integer getVPackageNum(BomNewEbomParentEntity parent){ @@ -103,7 +107,4 @@ public class VirtualPackageFor31 extends VirtualPackageBase { } return vNum; } - - - }