diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/EbomTempApi.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/EbomTempApi.java index 4b0e983e..44f6c9cb 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/EbomTempApi.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/EbomTempApi.java @@ -22,7 +22,7 @@ import java.io.IOException; * ebom-临时过渡接口 * */ -@Api(tags = "EBom临时接口") +@Api(tags = "EBom临时过渡版接口") @RestController @RequestMapping("bom/new/ebom/temp") public class EbomTempApi extends BaseApi { diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/constant/EBomConstant.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/constant/EBomConstant.java index 3a28f62f..a4ec832f 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/constant/EBomConstant.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/constant/EBomConstant.java @@ -1,8 +1,11 @@ package com.nflg.product.bomnew.constant; +import com.google.common.collect.ImmutableList; import lombok.AllArgsConstructor; import lombok.Getter; +import java.util.List; + /** * @author 大米 * @date 2023/11/11 20:09 @@ -28,6 +31,9 @@ public class EBomConstant { public static final String XIAN_TAO_FACTORY_Name_1020="仙桃"; + //虚拟包-1010 和1020 图号名称 如:1020 名称后面 + public static final List VIRTUAL_PACKAGE_DRAWING_NO_1010_AND_1020= ImmutableList.of("",EBomConstant.XIAN_TAO_FACTORY_Name_1020); + @AllArgsConstructor @Getter 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 687cbfde..cb09e500 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 @@ -792,18 +792,12 @@ public class BomNewEbomParentService extends ServiceImpl child, VirtualPackageTypeEnum... virtualPackageTypeEnums) { + List params=new ArrayList<>(); + + //需新建的物料编码 + Set vDrawingNoNewSet=new HashSet<>(); + for (BomNewEbomChildEntity ch : child) { + for (VirtualPackageTypeEnum vpy : virtualPackageTypeEnums) { + for(String fac : EBomConstant.VIRTUAL_PACKAGE_DRAWING_NO_1010_AND_1020) { + String vDrawingNo = String.join("", "(", parentDrawingNo, ")", "(", ch.getMaterialName()+fac, ")", "(", vpy.getConMaterialName(), ")"); + vDrawingNoNewSet.add(vDrawingNo); + } + } + } + List oldMaterialList = SpringUtil.getBean(MaterialMainService.class).lambdaQuery().in(MaterialMainEntity::getDrawingNo, vDrawingNoNewSet) + .list(); + Map oldMaterialMap = oldMaterialList.stream().collect(Collectors.toMap(MaterialMainEntity::getDrawingNo, Function.identity(), (k1, k2) -> k1)); + + for (BomNewEbomChildEntity ch : child) { + for (VirtualPackageTypeEnum vpy : virtualPackageTypeEnums) { + for (String fac : EBomConstant.VIRTUAL_PACKAGE_DRAWING_NO_1010_AND_1020) { + String vDrawingNo = String.join("", "(", parentDrawingNo, ")", "(", ch.getMaterialName()+fac, ")", "(", vpy.getConMaterialName(), ")"); + params.add(buildAddMaterialParamDo(StrUtil.join("", ch.getRowId().toString(), vpy.getConMaterialName()+fac), vDrawingNo, vDrawingNo, vpy, oldMaterialMap)); + } + } + } + List addM = params.stream().filter(u -> StrUtil.isBlank(u.getMaterialNo())).collect(Collectors.toList()); + if(CollUtil.isNotEmpty(addM)) { + Map vMNosResult = SpringUtil.getBean(MaterialService.class).batchAddMaterial(addM); + vMNos.putAll(vMNosResult); + } + + } + /** * 申请虚拟包 * @param child @@ -121,6 +158,84 @@ public abstract class VirtualPackageBase { return ent; } + private AddVirtrualMaterialDTO buildAddMaterialParamDo(String key, String drawingNo, String materialName, VirtualPackageTypeEnum virtualPackageType,Map oldMaterialMap){ + + MaterialMainEntity oldMaterial = oldMaterialMap.get(drawingNo); + AddVirtrualMaterialDTO ent=new AddVirtrualMaterialDTO(); + if(Objects.nonNull(oldMaterial)){ + ent.setKey(key); + ent.setDrawingNo(drawingNo); + ent.setMaterialNo(oldMaterial.getMaterialNo()); + ent.setMaterialName(oldMaterial.getMaterialName()); + ent.setMaterialDesc(oldMaterial.getMaterialDesc()); + ent.setMaterialCategoryCode(oldMaterial.getMaterialCategoryCode()); + vMNos.put(ent.getKey(),ent); + } + else { + ent.setKey(key); + ent.setDrawingNo(drawingNo); + ent.setMaterialName(materialName); + ent.setMaterialDesc(materialName); + ent.setMaterialCategoryCode(virtualPackageType.getMaterialCategoryCode()); + } + return ent; + } + + /** + * 过渡临时版-创建BOM + * @param rowId + * @param virtualPackageTypeEnum + * @param orderNum + * @param p + * @return + */ + protected BomNewEbomParentEntity buildTransitionParentVirtualPackage(Long rowId, VirtualPackageTypeEnum virtualPackageTypeEnum, String orderNum, BomNewEbomParentEntity p,String fac) { + + AddVirtrualMaterialDTO addM = vMNos.get(StrUtil.join("",rowId,virtualPackageTypeEnum.getConMaterialName(),fac)); + BomNewEbomParentEntity oldParent= SpringUtil.getBean(BomNewEbomParentService.class).lambdaQuery() + .eq(BomNewEbomParentEntity::getMaterialNo, addM.getMaterialNo()) + .eq(BomNewEbomParentEntity::getLastVersionIs,1) + //.ne(BomNewEbomParentEntity::getStatus, EBomStatusEnum.PUBLISHED.getValue()) + .one(); + + if(Objects.nonNull(oldParent) && !EBomStatusEnum.PUBLISHED.equalsValue(oldParent.getStatus()) ){ + return oldParent; + } + + if(Objects.nonNull(oldParent)){ + oldParent.setLastVersionIs(0); + this.parentResult.add(oldParent); + } + // String materialNo = SpringUtil.getBean(MaterialService.class).addMaterial(drawingNo, vMaterialName,materialDesc, virtualPackageType.getMaterialCategoryCode()); + BomNewEbomParentEntity parent =new BomNewEbomParentEntity(); + parent.setRowId(IdWorker.getId()); + parent.setOrderNumber(StrUtil.isNotBlank(orderNum) ? StrUtil.padPre(orderNum,3,"0"):"001"); + parent.setDrawingNo(addM.getDrawingNo() ); + parent.setMaterialNo(addM.getMaterialNo()); + parent.setMaterialName(addM.getMaterialName()); + parent.setMaterialDesc(addM.getMaterialDesc()); + parent.setCurrentVersion(VersionUtil.getNextVersion(Objects.nonNull(oldParent)?oldParent.getCurrentVersion():"")); + parent.setVirtualPackageIs(1); +// parent.setProjectType("L"); +// parent.setProjectTypeInputType(ProjectTypeInputTypeEnum.AUTO_MATCH.getValue()); + parent.setShouldBomExist(1); + parent.setBomExist(1); + parent.setMaterialUnit("PC"); + parent.setSourceRowId(0L); + parent.setLastVersionIs(1); + parent.setNum(new BigDecimal(1)); + parent.setDeviseUserCode(SessionUtil.getUserCode()); + parent.setDeviseName(SessionUtil.getRealName()); + parent.setCreatedBy(SessionUtil.getUserCode()); + parent.setDeptName(SessionUtil.getDepartName()); + parent.setSource(EBomSourceEnum.FROM_MDM.getValue()); + //parent.setModifyTime(LocalDateTime.now()); + parent.setStatus(p.getStatus()); + parent.setEditStatus(p.getEditStatus()); + this.parentResult.add(parent); + return parent; + } + protected BomNewEbomParentEntity buildParentVirtualPackage(Long rowId, VirtualPackageTypeEnum virtualPackageTypeEnum, String orderNum, BomNewEbomParentEntity p) { AddVirtrualMaterialDTO addM = vMNos.get(StrUtil.join("",rowId,virtualPackageTypeEnum.getConMaterialName())); diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/VirtualPackageFor31Temp.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/VirtualPackageFor31Temp.java index 08199ee2..b8f25da9 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/VirtualPackageFor31Temp.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/VirtualPackageFor31Temp.java @@ -3,6 +3,7 @@ package com.nflg.product.bomnew.service.domain.EBom; import cn.hutool.core.collection.CollUtil; import cn.hutool.extra.spring.SpringUtil; import com.nflg.product.base.core.exception.NflgBusinessException; +import com.nflg.product.bomnew.constant.EBomConstant; import com.nflg.product.bomnew.constant.VirtualPackageTypeEnum; import com.nflg.product.bomnew.pojo.entity.BomNewEbomChildEntity; import com.nflg.product.bomnew.pojo.entity.BomNewEbomParentEntity; @@ -35,52 +36,51 @@ public class VirtualPackageFor31Temp extends VirtualPackageBase { @Override public void generateVirtualPackage() { - // List child = getChild(); - //SpringUtil.getBean(MaterialMainService.class).intiMaterialInfo(child); BomNewEbomParentEntity parent = getParentByRowId(bomRowId); - try { //生成虚拟包 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(), children, VirtualPackageTypeEnum.DELIVERY_PACKAGE, VirtualPackageTypeEnum.MAKING_PACKAGE + transitionGenerateVMNoFor31(parent.getDrawingNo(), children, VirtualPackageTypeEnum.DELIVERY_PACKAGE, VirtualPackageTypeEnum.MAKING_PACKAGE ,VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE, VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE); } else { - generateVMNoFor31(parent.getDrawingNo(), children, VirtualPackageTypeEnum.DELIVERY_PACKAGE, VirtualPackageTypeEnum.MAKING_PACKAGE + transitionGenerateVMNoFor31(parent.getDrawingNo(), children, VirtualPackageTypeEnum.DELIVERY_PACKAGE, VirtualPackageTypeEnum.MAKING_PACKAGE , VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE); } } for (BomNewEbomChildEntity item : children) { - BomNewEbomParentEntity makingPackage=null; - if((VirtualPackageTypeEnum.DELIVERY_PACKAGE.getValue()&parent.getVirtrualPackageEnum())!=VirtualPackageTypeEnum.DELIVERY_PACKAGE.getValue()) { - //构建发货包 - BomNewEbomParentEntity deliveryPackage = buildParentVirtualPackage(item.getRowId(), VirtualPackageTypeEnum.DELIVERY_PACKAGE, item.getOrderNumber(), parent); - //构建构建发货包下制作包 - makingPackage = buildParentVirtualPackage(item.getRowId(), VirtualPackageTypeEnum.MAKING_PACKAGE, "002", parent); - //构建构建发货包下直发 - BomNewEbomParentEntity directDeliveryPackage = buildParentVirtualPackage(item.getRowId(), VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE, "001", parent); + for(String fac: EBomConstant.VIRTUAL_PACKAGE_DRAWING_NO_1010_AND_1020) { + BomNewEbomParentEntity makingPackage = null; + if ((VirtualPackageTypeEnum.DELIVERY_PACKAGE.getValue() & parent.getVirtrualPackageEnum()) != VirtualPackageTypeEnum.DELIVERY_PACKAGE.getValue()) { + //构建发货包 + BomNewEbomParentEntity deliveryPackage = buildTransitionParentVirtualPackage(item.getRowId(), VirtualPackageTypeEnum.DELIVERY_PACKAGE, item.getOrderNumber(), parent,fac); + //构建构建发货包下制作包 + makingPackage = buildTransitionParentVirtualPackage(item.getRowId(), VirtualPackageTypeEnum.MAKING_PACKAGE, "002", parent,fac); + //构建构建发货包下直发 + BomNewEbomParentEntity directDeliveryPackage = buildTransitionParentVirtualPackage(item.getRowId(), VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE, "001", parent,fac); - //构建-产品下发货包-子级 - buildChild(deliveryPackage, bomRowId, item.getOrderNumber(), VirtualPackageTypeEnum.DELIVERY_PACKAGE,parent.getMaterialNo()); + //构建-产品下发货包-子级 + buildChild(deliveryPackage, bomRowId, item.getOrderNumber(), VirtualPackageTypeEnum.DELIVERY_PACKAGE, parent.getMaterialNo()); - //构建发货包-子级 - buildChild(makingPackage, deliveryPackage.getRowId(), "002", VirtualPackageTypeEnum.MAKING_PACKAGE,parent.getMaterialNo()); - buildChild(directDeliveryPackage, deliveryPackage.getRowId(), "001", VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE,parent.getMaterialNo()); + //构建发货包-子级 + buildChild(makingPackage, deliveryPackage.getRowId(), "002", VirtualPackageTypeEnum.MAKING_PACKAGE, parent.getMaterialNo()); + buildChild(directDeliveryPackage, deliveryPackage.getRowId(), "001", VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE, parent.getMaterialNo()); - BomNewEbomChildEntity itemUp = new BomNewEbomChildEntity(); - itemUp.setRowId(item.getRowId()); - itemUp.setParentRowId(makingPackage.getRowId()); - this.childResult.add(itemUp); - } - // 包含发货前装配包 - if (virtualPackageValue.contains(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue()) && (VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue() & parent.getVirtrualPackageEnum()) != VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue()) { - BomNewEbomParentEntity preAssemblyPackage = buildParentVirtualPackage(item.getRowId(), VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE, item.getOrderNumber(), parent); - //构建构建发货前装配包 - if(Objects.isNull(makingPackage)){ - makingPackage=getParentZhiZuo(item.getDrawingNo()); + BomNewEbomChildEntity itemUp = new BomNewEbomChildEntity(); + itemUp.setRowId(item.getRowId()); + itemUp.setParentRowId(makingPackage.getRowId()); + this.childResult.add(itemUp); + } + // 包含发货前装配包 + if (virtualPackageValue.contains(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue()) && (VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue() & parent.getVirtrualPackageEnum()) != VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue()) { + BomNewEbomParentEntity preAssemblyPackage = buildTransitionParentVirtualPackage(item.getRowId(), VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE, item.getOrderNumber(), parent,fac); + //构建构建发货前装配包 + if (Objects.isNull(makingPackage)) { + makingPackage = getParentZhiZuo(item.getDrawingNo()); + } + buildChild(preAssemblyPackage, makingPackage.getRowId(), "001", VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE, parent.getMaterialNo()); } - buildChild(preAssemblyPackage, makingPackage.getRowId(), "001", VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE,parent.getMaterialNo()); } } parent.setVirtrualPackageEnum(getVPackageNum(parent));