diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/VirtualPackageBase.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/VirtualPackageBase.java index 2b9d05dc..d92ce572 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/VirtualPackageBase.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/VirtualPackageBase.java @@ -17,10 +17,12 @@ import com.nflg.product.bomnew.service.MaterialMainService; import com.nflg.product.bomnew.service.MaterialService; import com.nflg.product.bomnew.util.VersionUtil; import lombok.Getter; +import org.ttzero.excel.reader.Col; import java.io.IOException; import java.math.BigDecimal; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -30,10 +32,10 @@ public abstract class VirtualPackageBase { @Getter - protected List parentResult=new ArrayList<>(); + protected List parentResult = new ArrayList<>(); @Getter - protected List childResult=new ArrayList<>(); + protected List childResult = new ArrayList<>(); protected Long bomRowId; @@ -46,41 +48,57 @@ public abstract class VirtualPackageBase { protected List virtualPackageValue; //虚拟包编码 - protected Map vMNos=new HashMap<>(); - + protected Map vMNos = new HashMap<>(); /** * 申请虚拟包 + * * @param child * @param virtualPackageTypeEnums * @return */ protected void generateVMNoFor31(String parentDrawingNo, List child, VirtualPackageTypeEnum... virtualPackageTypeEnums) { - List params=new ArrayList<>(); + List params = new ArrayList<>(); + Set vDrawingNoSet = new HashSet<>(); 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)); + String vDrawingNo = String.join("", "(", parentDrawingNo, ")", "(", ch.getMaterialName(), ")", "(", vpy.getConMaterialName(), ")"); + vDrawingNoSet.add(vDrawingNo); } } - 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); + if (CollUtil.isNotEmpty(vDrawingNoSet)) { + + List oldMaterialList = SpringUtil.getBean(MaterialMainService.class).lambdaQuery().in(MaterialMainEntity::getDrawingNo, vDrawingNoSet).list(); + Map oldMaterialMap = oldMaterialList.stream().collect(Collectors.toMap(MaterialMainEntity::getDrawingNo, Function.identity(), (k1, k2) -> k1)); + + 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, 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 * @param virtualPackageTypeEnums * @return */ - protected void generateVMNoF21(String parentDrawingNo, List child,VirtualPackageTypeEnum ... virtualPackageTypeEnums){ - List params=new ArrayList<>(); - for ( BomNewEbomParentVO ch: child ) { + protected void generateVMNoF21(String parentDrawingNo, List child, VirtualPackageTypeEnum... virtualPackageTypeEnums) { + List params = new ArrayList<>(); + + Set vDrawingNoSet = new HashSet<>(); + for (BomNewEbomParentVO ch : child) { for (VirtualPackageTypeEnum vpy : virtualPackageTypeEnums) { String vDrawingNo; if (vpy == VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE) { @@ -88,65 +106,84 @@ public abstract class VirtualPackageBase { } else { vDrawingNo = String.join("", "(", parentDrawingNo, ch.getMaterialName(), ")", "(", vpy.getConMaterialName(), ")"); } - params.add(buildAddMaterialParamDo(StrUtil.join("",ch.getRowId().toString(), vpy.getConMaterialName()), vDrawingNo, vDrawingNo, vpy)); + vDrawingNoSet.add(vDrawingNo); } } - List addM = params.stream().filter(u -> StrUtil.isBlank(u.getMaterialNo())).collect(Collectors.toList()); - vMNos= SpringUtil.getBean(MaterialService.class).batchAddMaterial(addM); + if (CollUtil.isNotEmpty(vDrawingNoSet)) { + + List oldMaterialList = SpringUtil.getBean(MaterialMainService.class).lambdaQuery().in(MaterialMainEntity::getDrawingNo, vDrawingNoSet).list(); + Map oldMaterialMap = oldMaterialList.stream().collect(Collectors.toMap(MaterialMainEntity::getDrawingNo, Function.identity(), (k1, k2) -> k1)); + + + for (BomNewEbomParentVO ch : child) { + for (VirtualPackageTypeEnum vpy : virtualPackageTypeEnums) { + String vDrawingNo; + if (vpy == VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE) { + vDrawingNo = String.join("", parentDrawingNo, ".FHQ", "(", ch.getMaterialName(), ")", "(", vpy.getConMaterialName(), ")"); + } else { + vDrawingNo = String.join("", "(", parentDrawingNo, ch.getMaterialName(), ")", "(", vpy.getConMaterialName(), ")"); + } + params.add(buildAddMaterialParamDo(StrUtil.join("", ch.getRowId().toString(), vpy.getConMaterialName()), vDrawingNo, vDrawingNo, vpy, oldMaterialMap)); + } + } + List addM = params.stream().filter(u -> StrUtil.isBlank(u.getMaterialNo())).collect(Collectors.toList()); + vMNos = SpringUtil.getBean(MaterialService.class).batchAddMaterial(addM); + } } - //申请物料编码 - private AddVirtrualMaterialDTO buildAddMaterialParamDo(String key, String drawingNo, String materialName, VirtualPackageTypeEnum virtualPackageType){ - List oldMaterialList = SpringUtil.getBean(MaterialMainService.class).lambdaQuery().eq(MaterialMainEntity::getDrawingNo, drawingNo) - .list(); - AddVirtrualMaterialDTO ent=new AddVirtrualMaterialDTO(); - if(CollUtil.isNotEmpty(oldMaterialList)){ + //申请物料编码 + private AddVirtrualMaterialDTO buildAddMaterialParamDo(String key, String drawingNo, String materialName, VirtualPackageTypeEnum virtualPackageType, Map oldMaterialMap) { + +// List oldMaterialList = SpringUtil.getBean(MaterialMainService.class).lambdaQuery().eq(MaterialMainEntity::getDrawingNo, drawingNo) +// .list(); + MaterialMainEntity oldMaterial = oldMaterialMap.get(drawingNo); + AddVirtrualMaterialDTO ent = new AddVirtrualMaterialDTO(); + if (Objects.nonNull(oldMaterial)) { ent.setKey(key); ent.setDrawingNo(drawingNo); - ent.setMaterialNo(oldMaterialList.get(0).getMaterialNo()); - ent.setMaterialName(oldMaterialList.get(0).getMaterialName()); - ent.setMaterialDesc(oldMaterialList.get(0).getMaterialDesc()); - ent.setMaterialCategoryCode(oldMaterialList.get(0).getMaterialCategoryCode()); - vMNos.put(ent.getKey(),ent); - } - else { + 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; + return ent; } protected BomNewEbomParentEntity buildParentVirtualPackage(Long rowId, VirtualPackageTypeEnum virtualPackageTypeEnum, String orderNum, BomNewEbomParentEntity p) { - AddVirtrualMaterialDTO addM = vMNos.get(StrUtil.join("",rowId,virtualPackageTypeEnum.getConMaterialName())); - BomNewEbomParentEntity oldParent= SpringUtil.getBean(BomNewEbomParentService.class).lambdaQuery() + AddVirtrualMaterialDTO addM = vMNos.get(StrUtil.join("", rowId, virtualPackageTypeEnum.getConMaterialName())); + BomNewEbomParentEntity oldParent = SpringUtil.getBean(BomNewEbomParentService.class).lambdaQuery() .eq(BomNewEbomParentEntity::getMaterialNo, addM.getMaterialNo()) - .eq(BomNewEbomParentEntity::getLastVersionIs,1) + .eq(BomNewEbomParentEntity::getLastVersionIs, 1) //.ne(BomNewEbomParentEntity::getStatus, EBomStatusEnum.PUBLISHED.getValue()) .one(); - if(Objects.nonNull(oldParent) && !EBomStatusEnum.PUBLISHED.equalsValue(oldParent.getStatus()) ){ + if (Objects.nonNull(oldParent) && !EBomStatusEnum.PUBLISHED.equalsValue(oldParent.getStatus())) { return oldParent; } - if(Objects.nonNull(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(); + BomNewEbomParentEntity parent = new BomNewEbomParentEntity(); parent.setRowId(IdWorker.getId()); - parent.setOrderNumber(StrUtil.isNotBlank(orderNum) ? StrUtil.padPre(orderNum,3,"0"):"001"); - parent.setDrawingNo(addM.getDrawingNo() ); + 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.setCurrentVersion(VersionUtil.getNextVersion(Objects.nonNull(oldParent) ? oldParent.getCurrentVersion() : "")); parent.setVirtualPackageIs(1); // parent.setProjectType("L"); // parent.setProjectTypeInputType(ProjectTypeInputTypeEnum.AUTO_MATCH.getValue()); @@ -170,11 +207,12 @@ public abstract class VirtualPackageBase { /** * 构建子级 + * * @return */ - protected BomNewEbomChildEntity buildChild(BomNewEbomParentEntity parent, Long parentRowId, String orderNo,VirtualPackageTypeEnum virtualPackageTypeEnum,String rootMaterialNo){ - BomNewEbomChildEntity childEntity =new BomNewEbomChildEntity(); - BeanUtil.copyProperties(parent,childEntity); + protected BomNewEbomChildEntity buildChild(BomNewEbomParentEntity parent, Long parentRowId, String orderNo, VirtualPackageTypeEnum virtualPackageTypeEnum, String rootMaterialNo) { + BomNewEbomChildEntity childEntity = new BomNewEbomChildEntity(); + BeanUtil.copyProperties(parent, childEntity); childEntity.setRowId(IdWorker.getId()); childEntity.setParentRowId(parentRowId); childEntity.setIdentityNo(parent.getRowId().toString()); @@ -188,21 +226,22 @@ public abstract class VirtualPackageBase { childEntity.setProjectTypeInputType(ProjectTypeInputTypeEnum.AUTO_MATCH.getValue()); childEntity.setVirtualPartRootMaterialNo(rootMaterialNo); this.childResult.add(childEntity); - return childEntity; + return childEntity; } /** * 获取子级 + * * @return */ - protected List getChild(){ + protected List getChild() { return SpringUtil.getBean(BomNewEbomParentService.class).getChildForVirtualPackage(bomRowId); } - protected BomNewEbomParentEntity getParentZhiZuo(String inDrawingNo){ + protected BomNewEbomParentEntity getParentZhiZuo(String inDrawingNo) { - return SpringUtil.getBean(BomNewEbomParentService.class).lambdaQuery().eq(BomNewEbomParentEntity::getDrawingNo,StrUtil.join("","(", inDrawingNo,VirtualPackageTypeEnum.MAKING_PACKAGE.getConMaterialName(),")")) - .eq(BomNewEbomParentEntity::getLastVersionIs,1).one(); + return SpringUtil.getBean(BomNewEbomParentService.class).lambdaQuery().eq(BomNewEbomParentEntity::getDrawingNo, StrUtil.join("", "(", inDrawingNo, VirtualPackageTypeEnum.MAKING_PACKAGE.getConMaterialName(), ")")) + .eq(BomNewEbomParentEntity::getLastVersionIs, 1).one(); // List list = SpringUtil.getBean(BomNewEbomChildService.class).lambdaQuery().eq(BomNewEbomChildEntity::getParentRowId, inBomRowId).list(); // List zhiZuo = list.stream().filter(u -> u.getMaterialName().contains(VirtualPackageTypeEnum.MAKING_PACKAGE.getConMaterialName())).collect(Collectors.toList()); @@ -216,10 +255,11 @@ public abstract class VirtualPackageBase { /** * 获取父节点 + * * @return */ - protected BomNewEbomParentEntity getParentByRowId(Long rowId){ - return SpringUtil.getBean(BomNewEbomParentService.class).getById(rowId); + protected BomNewEbomParentEntity getParentByRowId(Long rowId) { + return SpringUtil.getBean(BomNewEbomParentService.class).getById(rowId); } /**