From 94cfdfb2913f5d5286d1eabcfb74243b9e38193d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A7=E7=B1=B3?= <470431449@qq.com> Date: Sat, 6 Jan 2024 13:42:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=91=E5=B8=83Mbom?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nflg/product/bomnew/api/user/PBomApi.java | 5 +- .../service/BomNewPbomParentService.java | 9 + .../service/domain/PBom/ConvertToMBom.java | 177 +++++++++--------- 3 files changed, 102 insertions(+), 89 deletions(-) diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/PBomApi.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/PBomApi.java index a479d7d8..bad3d185 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/PBomApi.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/PBomApi.java @@ -125,7 +125,7 @@ public class PBomApi extends BaseApi { @PostMapping("createTechnologyPackage") @ApiOperation("编辑-创建虚拟包") - public ResultVO createTechnologyPackage(TechnologyPackageParam packageParam) throws IOException { + public ResultVO createTechnologyPackage(@Valid @RequestBody TechnologyPackageParam packageParam) throws IOException { return ResultVO.success( bomNewPbomParentService.createTechnologyPackage(packageParam)); @@ -178,9 +178,6 @@ public class PBomApi extends BaseApi { VUtils.isTure(!PBomStatusEnum.PUBLISH.equalsValue(parent.getStatus())).throwMessage("只有已发布的BOM才能生成MBom"); // VUtils.isTure(!parent.getFacCode().equals(EBomConstant.MAIN_FACTORY_CODE_1010)).throwMessage("只有1010工厂BOM才能进行分工厂"); - - - return ResultVO.success(bomNewPbomParentService.convertToMBom(bomRowId)); } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewPbomParentService.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewPbomParentService.java index 1fc0213a..19599230 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewPbomParentService.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewPbomParentService.java @@ -446,4 +446,13 @@ public class BomNewPbomParentService extends ServiceImpl allChild_1010; + private List allChildTreeList_1020 = new ArrayList<>(); + + private List allChildTreeList_1010 = new ArrayList(); + @Getter List mBomParentResult = new ArrayList<>(); @@ -54,7 +59,9 @@ public class ConvertToMBom { public ConvertToMBom(BomNewPbomParentEntity inRootParent, List inAllChild) { this.parent = inRootParent; this.allChild_1010 = Convert.toList(ConvertToMBomDTO.class, inAllChild); - Collections.copy(allChild_1010, allChild_1020); + + allChild_1020 = (List) ((ArrayList) allChild_1010).clone(); + } /** @@ -77,7 +84,7 @@ public class ConvertToMBom { BomNewMbomParentEntity mBomParent = new BomNewMbomParentEntity(); BeanUtil.copyProperties(parent, mBomParent); BomNewMbomParentEntity oldParent = SpringUtil.getBean(BomNewMbomParentService.class).lambdaQuery().eq(BomNewMbomParentEntity::getMaterialNo, parent.getMaterialNo()) - .eq(BomNewMbomParentEntity::getLastVersionIs, 1).eq(BomNewMbomParentEntity::getFacCode,facCode).one(); + .eq(BomNewMbomParentEntity::getLastVersionIs, 1).eq(BomNewMbomParentEntity::getFacCode, facCode).one(); if (Objects.nonNull(oldParent)) { mBomParent.setCurrentVersion(VersionUtil.getNextVersion(oldParent.getCurrentVersion())); oldParent.setLastVersionIs(0); @@ -92,37 +99,35 @@ public class ConvertToMBom { mBomParent.setModifyTime(LocalDateTime.now()); this.mBomParentResult.add(mBomParent); - buildChild(EBomConstant.MAIN_FACTORY_CODE_1010.equals(facCode)? allChild_1010:allChild_1020,mBomParent.getRowId()); + buildChild(EBomConstant.MAIN_FACTORY_CODE_1010.equals(facCode) ? allChildTreeList_1010 : allChildTreeList_1020, mBomParent.getRowId()); } - /** * 构建子级 * * @param allChild */ private void buildChild(List allChild, Long bomRowId) { - List childBomTree = ConvertToMbomUtil.toTree(parent.getRowId(), allChild_1010, ConvertToMBomDTO::getRelParentRowId, ConvertToMBomDTO::getBomRowId); - - List parentChildren; - Long parentRowId = 0L; - for (ConvertToMBomDTO item : childBomTree) { + List childBomTree = ConvertToMbomUtil.toTree(parent.getRowId(), allChild, ConvertToMBomDTO::getRelParentRowId, ConvertToMBomDTO::getBomRowId); + ; for (ConvertToMBomDTO item : childBomTree) { //构建子级 if (item.getDelIs().equals(0)) { - parentRowId = buildChildDo(item, bomRowId, 0L); - } - parentChildren = item.getChildNodes(); - while (CollUtil.isNotEmpty(parentChildren)) { - for (ConvertToMBomDTO itemChild : parentChildren) { - if (item.getDelIs().equals(0)) { - parentRowId = buildChildDo(itemChild, bomRowId, parentRowId); - } - parentChildren = itemChild.getChildNodes(); - } + buildMBomChildDo(item, 0L,bomRowId); } + + } + + } + + private void buildMBomChildDo(ConvertToMBomDTO item , Long parentRowId ,Long bomRowId){ + if (item.getDelIs().equals(0)) { + parentRowId = buildChildDo(item, bomRowId, parentRowId); + } + for (ConvertToMBomDTO itemChild : item.getChildNodes()) { + buildMBomChildDo(itemChild, parentRowId,bomRowId); } } @@ -130,16 +135,17 @@ public class ConvertToMBom { /** * 处理制作下为空的虚拟包 * 当制作下子级为空时--删除该发货,制作,和直发 - * @param allChildTree + * + * @param */ - private void handEmptyMakePackage(List allChildTree){ + private void handEmptyMakePackage() { - List childBomTree = ConvertToMbomUtil.toTree(parent.getRowId(), allChild_1020, ConvertToMBomDTO::getRelParentRowId, ConvertToMBomDTO::getBomRowId); - for (ConvertToMBomDTO item : allChildTree) { - if(VirtualPackageTypeEnum.DELIVERY_PACKAGE.equalsValue(item.getVirtualPartType()) ){ + List childBomTree = ConvertToMbomUtil.toTree(parent.getRowId(), allChildTreeList_1020, ConvertToMBomDTO::getRelParentRowId, ConvertToMBomDTO::getBomRowId); + for (ConvertToMBomDTO item : childBomTree) { + if (VirtualPackageTypeEnum.DELIVERY_PACKAGE.equalsValue(item.getVirtualPartType())) { List makeChild = item.getChildNodes().stream().filter(u -> VirtualPackageTypeEnum.MAKING_PACKAGE.equalsValue(u.getVirtualPartType())).collect(Collectors.toList()); - if(CollUtil.isEmpty(makeChild) || CollUtil.isEmpty(makeChild.get(0).getChildNodes().stream().filter(u->u.getDelIs().equals(0)).collect(Collectors.toList()))){ + if (CollUtil.isEmpty(makeChild) || CollUtil.isEmpty(makeChild.get(0).getChildNodes().stream().filter(u -> u.getDelIs().equals(0)).collect(Collectors.toList()))) { item.setRelParentRowId(0L); } } @@ -162,100 +168,101 @@ public class ConvertToMBom { } + private void handler1010() { List childBomTree = ConvertToMbomUtil.toTree(parent.getRowId(), allChild_1010, ConvertToMBomDTO::getParentRowId, ConvertToMBomDTO::getBomRowId); - - List parentChildren; - for (ConvertToMBomDTO item : childBomTree) { //默认 - item.setRelParentRowId(item.getParentRowId()); - setDel(item, EBomConstant.MAIN_FACTORY_CODE_1010); - parentChildren = item.getChildNodes(); - - while (CollUtil.isNotEmpty(parentChildren)) { - for (ConvertToMBomDTO childItem : parentChildren) { - //默认 - childItem.setRelParentRowId(childItem.getParentRowId()); - setDel(childItem, EBomConstant.MAIN_FACTORY_CODE_1010); - - handlerMaterial(childItem, EBomConstant.MAIN_FACTORY_CODE_1010); - parentChildren = childItem.getChildNodes(); - } - } + recursionHandlerChild1010(item); } } - /** - * 处理1020 - */ + private void recursionHandlerChild1010(ConvertToMBomDTO item) { + + item.setRelParentRowId(item.getParentRowId()); + setDel(item, EBomConstant.MAIN_FACTORY_CODE_1010); + handlerMaterial(item, EBomConstant.MAIN_FACTORY_CODE_1010); + + this.allChildTreeList_1010.add(item); + for (ConvertToMBomDTO itemChild : item.getChildNodes()) { + recursionHandlerChild1010(itemChild); + } + + } + + private void handler1020() { List childBomTree = ConvertToMbomUtil.toTree(parent.getRowId(), allChild_1020, ConvertToMBomDTO::getParentRowId, ConvertToMBomDTO::getBomRowId); //虚拟包名称加仙桃 initFac1020Info(childBomTree); - List parentChildren; - - //31下直发包 - ConvertToMBomDTO directDeliveryPackage; - - ConvertToMBomDTO parentNode = Convert.convert(ConvertToMBomDTO.class, parent); for (ConvertToMBomDTO item : childBomTree) { - //默认 - item.setRelParentRowId(item.getParentRowId()); - setDel(item, EBomConstant.XIAN_TAO_FACTORY_CODE_1020); - parentChildren = item.getChildNodes(); - directDeliveryPackage = item.getChildNodes().stream().filter(u -> VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.equalsValue(u.getVirtualPartType())).collect(Collectors.toList()).get(0); - VUtils.isTure(Objects.isNull(directDeliveryPackage)).throwMessage("发货包下,没有直发包"); - while (CollUtil.isNotEmpty(parentChildren)) { - parentNode = item; - for (ConvertToMBomDTO childItem : parentChildren) { - //默认 - childItem.setRelParentRowId(childItem.getParentRowId()); - setDel(childItem, EBomConstant.XIAN_TAO_FACTORY_CODE_1020); - //非31下的直发包 - if (VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.equalsValue(parentNode.getVirtualPartType()) && parentNode.getRowId() != directDeliveryPackage.getRowId()) { - handlerDirectDeliveryPackage(childItem, EBomConstant.XIAN_TAO_FACTORY_CODE_1020, directDeliveryPackage); - } else { - handlerMaterial(childItem, EBomConstant.XIAN_TAO_FACTORY_CODE_1020); - } - parentChildren = childItem.getChildNodes(); - parentNode = childItem; - } - } + ConvertToMBomDTO directDeliveryPackage = item.getChildNodes().stream().filter(u -> VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.equalsValue(u.getVirtualPartType())).collect(Collectors.toList()).get(0); + VUtils.isTure(Objects.isNull(directDeliveryPackage)).throwMessage("发货包下,没有直发包"); + + recursionHandlerChild1020(item, directDeliveryPackage); } //处理制作包无下级的情况 - handEmptyMakePackage(childBomTree); + handEmptyMakePackage(); + } + private void recursionHandlerChild1020(ConvertToMBomDTO item, ConvertToMBomDTO directDeliveryPackage) { + + + item.setRelParentRowId(item.getParentRowId()); + setDel(item, EBomConstant.XIAN_TAO_FACTORY_CODE_1020); + //非31下的直发包 + if(!item.getParentRowId().equals(parent.getRowId())) { + ConvertToMBomDTO parentNode = getParent(item.getParentRowId(), EBomConstant.XIAN_TAO_FACTORY_CODE_1020); + if (VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.equalsValue(parentNode.getVirtualPartType()) && parentNode.getRowId() != directDeliveryPackage.getRowId()) { + handlerDirectDeliveryPackage(item, EBomConstant.XIAN_TAO_FACTORY_CODE_1020, directDeliveryPackage); + } else { + handlerMaterial(item, EBomConstant.XIAN_TAO_FACTORY_CODE_1020); + } + } + this.allChildTreeList_1020.add(item); + for (ConvertToMBomDTO itemChild : item.getChildNodes()) { + recursionHandlerChild1020(itemChild, directDeliveryPackage); + } + } + + + + /** * 处理直发包下的物料 * 所有直发包,归到31下的直发包 */ private void handlerDirectDeliveryPackage(ConvertToMBomDTO childItem, String facCode, ConvertToMBomDTO directDeliveryPackage) { - ConvertToMBomDTO relParent = getParent(childItem.getParentRowId(), facCode); - while (Objects.nonNull(relParent) && !VirtualPackageTypeEnum.MAKING_PACKAGE.equalsValue(relParent.getVirtualPartType())) { - childItem.setNum(NumberUtil.mul(childItem.getNum(), relParent.getNum())); - relParent = getParent(relParent.getParentRowId(), facCode); + if (!childItem.getParentRowId().equals(parent.getRowId())) { + ConvertToMBomDTO relParent = getParent(childItem.getParentRowId(), facCode); + while (Objects.nonNull(relParent) && !VirtualPackageTypeEnum.MAKING_PACKAGE.equalsValue(relParent.getVirtualPartType())) { + childItem.setNum(NumberUtil.mul(childItem.getNum(), relParent.getNum())); + relParent = getParent(relParent.getParentRowId(), facCode); + } + childItem.setRelParentRowId(directDeliveryPackage.getBomRowId()); } - childItem.setRelParentRowId(directDeliveryPackage.getBomRowId()); } /** - * 处理一般材料 + * 处理一般材料(提层) * * @param childItem * @param facCode */ private void handlerMaterial(ConvertToMBomDTO childItem, String facCode) { - ConvertToMBomDTO relParent = getParent(childItem.getParentRowId(), facCode); - while (Objects.nonNull(relParent) && relParent.getDelIs().equals(1)) { - childItem.setNum(NumberUtil.mul(childItem.getNum(), relParent.getNum())); - relParent = getParent(relParent.getParentRowId(), facCode); + if (!childItem.getParentRowId().equals(parent.getRowId())) { + ConvertToMBomDTO relParent = getParent(childItem.getParentRowId(), facCode); + while (Objects.nonNull(relParent) && relParent.getDelIs().equals(1)) { + childItem.setNum(NumberUtil.mul(childItem.getNum(), relParent.getNum())); + relParent = getParent(relParent.getParentRowId(), facCode); + } + childItem.setRelParentRowId(relParent.getBomRowId()); } - childItem.setRelParentRowId(relParent.getBomRowId()); + } private void setDel(ConvertToMBomDTO item, String facCode) {