From cb8c71bca6d301da9404f32f2aa2b2b458c80e99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Thu, 16 May 2024 17:22:03 +0800 Subject: [PATCH] =?UTF-8?q?fix(ebom):=20=E4=BC=98=E5=8C=96=E4=BB=8Eexcel?= =?UTF-8?q?=E5=AF=BC=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...enerateVirtualPackageServiceFor31Impl.java | 88 +++++++++++++------ .../service/BomNewEbomParentService.java | 1 + .../bomnew/service/EBomImportService.java | 48 +++++++--- 3 files changed, 98 insertions(+), 39 deletions(-) diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewEbomGenerateVirtualPackageServiceFor31Impl.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewEbomGenerateVirtualPackageServiceFor31Impl.java index 72c6bcba..29ec7796 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewEbomGenerateVirtualPackageServiceFor31Impl.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewEbomGenerateVirtualPackageServiceFor31Impl.java @@ -105,16 +105,32 @@ public class BomNewEbomGenerateVirtualPackageServiceFor31Impl implements IBomNew private void selected1020Cancel1010(BomNewEbomParentEntity root, BomNewEbomChildEntity child, ChildListForGenerateVirtualPackageVO old) { if (old.isHasGenerated1010()) { - buildDelDeliveryVirtualPackage(root, child, false); + buildDelVirtualPackage(root, child, false); } if (!old.isHasGenerated1020()) { build1020VirtualPackage(root, true, child); + } else { + String dnMaking = buildDrawingNo(root.getDrawingNo(), child.getMaterialName(), VirtualPackageTypeEnum.MAKING_PACKAGE, true); + BomNewEbomParentEntity p = ebomParentService.lambdaQuery() + .eq(BomNewEbomParentEntity::getDrawingNo, dnMaking) + .one(); + if (Objects.isNull(p)) { + BomNewEbomChildEntity c = ebomChildService.lambdaQuery() + .eq(BomNewEbomChildEntity::getDrawingNo, dnMaking) + .one(); + p = buildVirtualPackage(ebomParentService.lambdaQuery() + .eq(BomNewEbomParentEntity::getDrawingNo, buildDrawingNo(root.getDrawingNo(), child.getMaterialName(), VirtualPackageTypeEnum.DELIVERY_PACKAGE, true)) + .one(), c); + } + child.setParentRowId(p.getRowId()); + child.setModifyTime(LocalDateTime.now()); + children.add(child); } } private void selected1010Cancel1020(BomNewEbomParentEntity root, BomNewEbomChildEntity child, ChildListForGenerateVirtualPackageVO old) { if (old.isHasGenerated1020()) { - buildDelDeliveryVirtualPackage(root, child, true); + buildDelVirtualPackage(root, child, true); } if (!old.isHasGenerated1010()) { build1010VirtualPackage(root, child); @@ -168,28 +184,33 @@ public class BomNewEbomGenerateVirtualPackageServiceFor31Impl implements IBomNew child.setModifyTime(LocalDateTime.now()); children.add(child); if (old.isHasGenerated1010()) { - buildDelDeliveryVirtualPackage(root, child, false); + buildDelVirtualPackage(root, child, false); } if (old.isHasGenerated1020()) { - buildDelDeliveryVirtualPackage(root, child, true); + buildDelVirtualPackage(root, child, true); } } + // private void buildDelAllVirtualPackage(BomNewEbomParentEntity root, BomNewEbomChildEntity child, boolean is1020Factory) { + // buildDelVirtualPackage(root, child, VirtualPackageTypeEnum.DELIVERY_PACKAGE, is1020Factory); + // buildDelVirtualPackage(root, child, VirtualPackageTypeEnum.MAKING_PACKAGE, is1020Factory); + // buildDelVirtualPackage(root, child, VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE, is1020Factory); + // } + /** * 删除发货包 * @param root 根节点 * @param child 物料 * @param is1020Factory 是否是仙桃工厂 */ - private void buildDelDeliveryVirtualPackage(BomNewEbomParentEntity root, BomNewEbomChildEntity child, boolean is1020Factory) { - //发货包 + private void buildDelVirtualPackage(BomNewEbomParentEntity root, BomNewEbomChildEntity child, boolean is1020Factory) { String drawingNo = buildDrawingNo(root.getDrawingNo(), child.getMaterialName(), VirtualPackageTypeEnum.DELIVERY_PACKAGE, is1020Factory); BomNewEbomChildEntity c = ebomChildService.lambdaQuery() .eq(BomNewEbomChildEntity::getParentRowId, root.getRowId()) .eq(BomNewEbomChildEntity::getDrawingNo, drawingNo) .one(); if (Objects.isNull(c)) { - LOGGER.error("{}应有发货包“{}”但未找到", root.getMaterialNo(), drawingNo); + LOGGER.error("{}应有{}“{}”但未找到", root.getMaterialNo(), VirtualPackageTypeEnum.DELIVERY_PACKAGE.getDescription(), drawingNo); } else { childRowIdsForDel.add(c.getRowId()); } @@ -224,26 +245,39 @@ public class BomNewEbomGenerateVirtualPackageServiceFor31Impl implements IBomNew private BomNewEbomChildEntity buildVirtualPackage(boolean is1020Factory, Long parentRowId, BomNewEbomParentEntity root , BomNewEbomChildEntity material, VirtualPackageTypeEnum type, String orderNo) { - BomNewEbomChildEntity child = new BomNewEbomChildEntity(); - child.setRowId(IdWorker.getId()); - child.setParentRowId(parentRowId); - child.setIdentityNo(parentRowId + "_" + child.getRowId()); - child.setOrderNumber(orderNo); - child.setNum(new BigDecimal(1)); - child.setEditStatus(root.getEditStatus()); - child.setSource(EBomSourceEnum.FROM_MDM.getValue()); - child.setVirtualPartType(type.getValue()); - child.setProjectType("L"); - child.setProjectTypeInputType(ProjectTypeInputTypeEnum.MANUAL_INPUT.getValue()); - child.setMaterialUnit("PC"); - child.setMaterialOriginalUnit("PC"); - //child.setVirtualPartRootMaterialNo(rootMaterialNo); - child.setCreatedBy(SessionUtil.getUserCode()); - child.setDrawingNo(buildDrawingNo(root.getDrawingNo(), material.getMaterialName(), type, is1020Factory)); - child.setMaterialDesc(child.getDrawingNo()); - child.setMaterialName(child.getDrawingNo()); - child.setMaterialCategoryCode(type.getMaterialCategoryCode()); - children.add(child); + String drawingNo = buildDrawingNo(root.getDrawingNo(), material.getMaterialName(), type, is1020Factory); + BomNewEbomChildEntity child = ebomChildService.lambdaQuery() + .eq(BomNewEbomChildEntity::getParentRowId, parentRowId) + .eq(BomNewEbomChildEntity::getDrawingNo, drawingNo) + .one(); + if (Objects.isNull(child)) { + child = new BomNewEbomChildEntity(); + child.setRowId(IdWorker.getId()); + BomNewEbomParentEntity p = ebomParentService.lambdaQuery() + .eq(BomNewEbomParentEntity::getDrawingNo, drawingNo) + .one(); + if (Objects.nonNull(p)) { + child.setMaterialNo(p.getMaterialNo()); + } + child.setParentRowId(parentRowId); + child.setIdentityNo(parentRowId + "_" + child.getRowId()); + child.setOrderNumber(orderNo); + child.setNum(new BigDecimal(1)); + child.setEditStatus(root.getEditStatus()); + child.setSource(EBomSourceEnum.FROM_MDM.getValue()); + child.setVirtualPartType(type.getValue()); + child.setProjectType("L"); + child.setProjectTypeInputType(ProjectTypeInputTypeEnum.MANUAL_INPUT.getValue()); + child.setMaterialUnit("PC"); + child.setMaterialOriginalUnit("PC"); + child.setCreatedBy(SessionUtil.getUserCode()); + child.setDrawingNo(drawingNo); + child.setMaterialDesc(child.getDrawingNo()); + child.setMaterialName(child.getDrawingNo()); + child.setMaterialCategoryCode(type.getMaterialCategoryCode()); + child.setVirtualPartRootMaterialNo(root.getMaterialNo()); + children.add(child); + } return child; } 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 67e88745..3e6697d8 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 @@ -2373,6 +2373,7 @@ public class BomNewEbomParentService extends ServiceImpl getChildListForGenerateVirtualPackage(BomNewEbomParentEntity parent) { List children = ebomChildService.lambdaQuery() .eq(BomNewEbomChildEntity::getVirtualPartRootMaterialNo, parent.getMaterialNo()) + .eq(BomNewEbomChildEntity::getVirtualPartType, VirtualPackageTypeEnum.UN_VIRTUAL_PACKAGE.getValue()) .ne(BomNewEbomChildEntity::getProjectType, BomConstant.PROJECT_TYPE_TEMPORARY) .orderByAsc(BomNewEbomChildEntity::getOrderNumber) .list(); diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/EBomImportService.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/EBomImportService.java index f7f2118c..1333b2e1 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/EBomImportService.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/EBomImportService.java @@ -70,13 +70,18 @@ public class EBomImportService { } Pair, List> pcs = convertToBom(datas); - VUtils.isTure(checkInconsistentData(pcs.getLeft().get(0), pcs.getLeft(), pcs.getRight())) - .throwMessage("导入的数据已存在,请勿重复导入"); + VUtils.isTure(checkInconsistentData(pcs.getLeft().get(0), pcs.getLeft(), pcs.getRight())).throwMessage("导入的数据已存在,请勿重复导入"); save(pcs.getLeft(), pcs.getRight()); bomNewEbomParentService.resetAllBomExist(); + bomNewEbomParentService.batchCheckAndSaveEBomException(pcs.getLeft().stream() + .filter(p -> p.getRootIs() == 1) + .map(BomNewEbomParentEntity::getRowId) + .collect(Collectors.toList()) + ); + return Collections.emptyList(); } finally { excelContextTL.remove(); @@ -87,14 +92,10 @@ public class EBomImportService { public void save(List parents, List children) { Set pMaterialNos = parents.stream().map(BomNewEbomParentEntity::getMaterialNo).collect(Collectors.toSet()); List oldParents = bomNewEbomParentService.getLatestByMaterialNo(pMaterialNos); - parents.forEach(p -> { - BomNewEbomParentEntity oldParent = oldParents.stream() - .filter(op -> op.getMaterialNo().equals(p.getMaterialNo())) - .findFirst() - .orElse(null); - if (!Objects.isNull(oldParent) && !Objects.equals(oldParent.getStatus(), EBomStatusEnum.PUBLISHED.getValue())) { - bomNewEbomParentService.getBaseMapper().deleteById(oldParent.getRowId()); - bomNewEbomChildService.deleteAllChildren(oldParent.getRowId()); + oldParents.forEach(p -> { + if (!Objects.equals(p.getStatus(), EBomStatusEnum.PUBLISHED.getValue())) { + bomNewEbomParentService.getBaseMapper().deleteById(p.getRowId()); + bomNewEbomChildService.deleteAllChildren(p.getRowId()); } }); bomNewEbomParentService.setLastVersionIs0(pMaterialNos); @@ -108,7 +109,15 @@ public class EBomImportService { BomNewEbomParentEntity oldParent = bomNewEbomParentService.getLatestByMaterialNo(parent.getMaterialNo()); boolean isSame = true; if (Objects.isNull(oldParent)) { - return false; + List cc = children.stream() + .filter(c -> c.getParentRowId().equals(parent.getRowId())) + .collect(Collectors.toList()); + for (BomNewEbomChildEntity ccc : cc) { + if (!checkInconsistentData(parent.getRowId(), ccc, parents, children)) { + isSame = false; + } + } + return isSame; } isSame = Objects.equals(parent.getMaterialUnit(), oldParent.getMaterialUnit()) && NumberUtil.equals(parent.getNum(), oldParent.getNum()) @@ -205,6 +214,12 @@ public class EBomImportService { String id = RandomUtil.randomNumbers(9); dto.setMaterialNo(BomConstant.PROJECT_TYPE_TEMPORARY + id); dto.setDrawingNo(BomConstant.PROJECT_TYPE_TEMPORARY + id); + if (Objects.isNull(dto.getNum())) { + dto.setNum(BigDecimal.ONE); + } + if (Objects.isNull(dto.getUnit())) { + dto.setUnit("PC"); + } } excelContextTL.get().add(dto); @@ -260,6 +275,15 @@ public class EBomImportService { ); } + numError = datas.stream().filter(u -> StrUtil.equals(u.getMaterialNo(), u.getParentMaterialNo())) + .map(BaseImportExcelDTO::getRowNum) + .collect(Collectors.toList()); + if (!numError.isEmpty()) { + errorMsg.addAll(numError.stream().map(n -> OperationErrorMsgVO.create("第" + n + "行", "项目物料与抬头物料相同")) + .collect(Collectors.toList()) + ); + } + return errorMsg; } @@ -336,6 +360,7 @@ public class EBomImportService { BomNewEbomParentEntity parent = new BomNewEbomParentEntity(); parent.setRowId(IdWorker.getId()); + parent.setCurrentVersion(OriginalConstant.DEFAULT_BOM_VERSION); parent.setMaterialNo(data.getMaterialNo()); parent.setMaterialDesc(data.getMaterialDesc()); BaseMaterialVO vo = materialBaseInfos.stream() @@ -355,7 +380,6 @@ public class EBomImportService { parent.setMaterialOriginalUnit(data.getUnit()); parent.setNum(data.getNum()); parent.setTotalWeight(BomUtil.calculateTotalWeight(parent.getNum(), parent.getUnitWeight())); - parent.setCurrentVersion(OriginalConstant.DEFAULT_BOM_VERSION); parent.setUserRootIs(0); parent.setRootIs(0); if (userRoleService.technician()) {