From c4fd3f89cb025c543c000253ff044df0d7d20a7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A7=E7=B1=B3?= <470431449@qq.com> Date: Fri, 29 Dec 2023 19:12:27 +0800 Subject: [PATCH] =?UTF-8?q?1.ebom=5Fparent=20=E5=8E=BB=E6=8E=89=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E7=B1=BB=E5=88=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nflg/product/bomnew/api/user/EbomApi.java | 13 ++++++++ .../bomnew/pojo/vo/BomNewEbomChildVO.java | 3 +- .../service/BomNewEbomParentService.java | 2 -- .../domain/EBom/DependencyChecker.java | 33 +++++++++++++++++++ .../bomnew/service/domain/EBom/EBomEdit.java | 22 ++++++------- .../domain/EBom/VirtualPackageBase.java | 4 +-- .../OriginalBom/OriginalBomToEBomConvert.java | 2 +- .../nflg/product/bomnew/util/TreeUtils.java | 22 ++++++++----- 8 files changed, 74 insertions(+), 27 deletions(-) create mode 100644 nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/DependencyChecker.java diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/EbomApi.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/EbomApi.java index f726e985..86e4ff70 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/EbomApi.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/EbomApi.java @@ -320,6 +320,19 @@ public class EbomApi extends BaseApi { } + @PostMapping("intiException") + @ApiOperation("初始化错误类型") + public ResultVO intiException(@RequestParam("bomRowId") Long bomRowId) throws ExecutionException, InterruptedException { + + bomNewEbomParentService.checkAndSaveEBomException(bomRowId ); + return ResultVO.success(true); + } + + + + + + } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomNewEbomChildVO.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomNewEbomChildVO.java index d8cef019..9735d835 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomNewEbomChildVO.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomNewEbomChildVO.java @@ -75,8 +75,7 @@ public class BomNewEbomChildVO extends BaseMaterialVO implements Serializable { */ @ApiModelProperty(value = "项目类别输入方式: 0-自动匹配 1-手工录入 3-来自物料主数据 4-来自历史统计") private Integer projectTypeInputType; - @ApiModelProperty(value = "项目类别") - private String projectType; + /** * 创建人工号 */ 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 ec170931..ccfdd361 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 @@ -345,8 +345,6 @@ public class BomNewEbomParentService extends ServiceImpl visited; // 使用Integer类型的哈希码 + private Set nodes; + + public DependencyChecker() { + visited = new HashMap<>(); + nodes = new HashSet<>(); + } + + public void addDependency(String child, String parent) { + nodes.add(child); + nodes.add(parent); + } + + public boolean hasCycle() { + for (String node : nodes) { + if (!visited.put(node.hashCode(), false) == false) { + // 当前节点已经被访问过,存在循环依赖 + return true; + } + } + return false; + } +} diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomEdit.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomEdit.java index 171ccb64..b251a97b 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomEdit.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomEdit.java @@ -72,9 +72,9 @@ public class EBomEdit { parent.setLastVersionIs(1); parent.setEditStatus(EbomEditStatusEnum.HANDLER_CREATED.getValue()); parent.setExceptionStatus(EBomExceptionStatusEnum.OK.getValue()); - if(StrUtil.isEmpty(parent.getProjectType())){ - parent.setExceptionStatus(EBomExceptionStatusEnum.EXCEPT_NO_8.getValue()); - } +// if(StrUtil.isEmpty(parent.getProjectType())){ +// parent.setExceptionStatus(EBomExceptionStatusEnum.EXCEPT_NO_8.getValue()); +// } parent.setStatus(SpringUtil.getBean(UserRoleService.class).technician()? EBomStatusEnum.CHECKED.getValue():EBomStatusEnum.WAIT_CHECK.getValue()); parent.setCreatedJob(SpringUtil.getBean(UserRoleService.class).technician()?UserJobEnum.ENGINEER.getValue():UserJobEnum.DESIGNER.getValue()); @@ -245,14 +245,14 @@ public class EBomEdit { child.setExceptionStatus(EBomExceptionStatusEnum.EXCEPT_NO_8.getValue()); } - if(StrUtil.isNotEmpty(parent.getProjectType()) && StrUtil.containsAny(parent.getProjectType(),ProjectTypeInputTypeEnum.ProjectTypeEnum.TYPE_Q.getValue(),ProjectTypeInputTypeEnum.ProjectTypeEnum.TYPE_F.getValue())){ - if(StrUtil.equals(ProjectTypeInputTypeEnum.ProjectTypeEnum.TYPE_Q.getValue(),child.getProjectType())){ - child.setExceptionStatus(EBomExceptionStatusEnum.EXCEPT_NO_9.getValue()); - } - if(StrUtil.equals(ProjectTypeInputTypeEnum.ProjectTypeEnum.TYPE_F.getValue(),child.getProjectType())){ - child.setExceptionStatus(EBomExceptionStatusEnum.EXCEPT_NO_10.getValue()); - } - } +// if(StrUtil.isNotEmpty(parent.getProjectType()) && StrUtil.containsAny(parent.getProjectType(),ProjectTypeInputTypeEnum.ProjectTypeEnum.TYPE_Q.getValue(),ProjectTypeInputTypeEnum.ProjectTypeEnum.TYPE_F.getValue())){ +// if(StrUtil.equals(ProjectTypeInputTypeEnum.ProjectTypeEnum.TYPE_Q.getValue(),child.getProjectType())){ +// child.setExceptionStatus(EBomExceptionStatusEnum.EXCEPT_NO_9.getValue()); +// } +// if(StrUtil.equals(ProjectTypeInputTypeEnum.ProjectTypeEnum.TYPE_F.getValue(),child.getProjectType())){ +// child.setExceptionStatus(EBomExceptionStatusEnum.EXCEPT_NO_10.getValue()); +// } +// } // VUtils.isTure(parent.getProjectType().equals(child.getProjectType())).throwMessage("父、子级项目类型不能相同"); 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 98a32f2c..d90e329f 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 @@ -83,8 +83,8 @@ public abstract class VirtualPackageBase { parent.setMaterialDesc(vMaterialDesc); parent.setCurrentVersion(VersionUtil.getNextVersion(Objects.nonNull(oldParent)?oldParent.getCurrentVersion():"")); parent.setVirtualPackageIs(1); - parent.setProjectType("L"); - parent.setProjectTypeInputType(ProjectTypeInputTypeEnum.AUTO_MATCH.getValue()); +// parent.setProjectType("L"); +// parent.setProjectTypeInputType(ProjectTypeInputTypeEnum.AUTO_MATCH.getValue()); parent.setShouldBomExist(1); parent.setBomExist(1); parent.setSourceRowId(0L); diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/OriginalBom/OriginalBomToEBomConvert.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/OriginalBom/OriginalBomToEBomConvert.java index 3474ce84..43d27205 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/OriginalBom/OriginalBomToEBomConvert.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/OriginalBom/OriginalBomToEBomConvert.java @@ -296,7 +296,7 @@ public class OriginalBomToEBomConvert extends BaseConvert { BeanUtil.copyProperties(parentEnt, eBomParent, "materialGetType"); eBomParent.setRowId(parentEnt.getEBomRowId() > 0 ? parentEnt.getEBomRowId() : IdWorker.getId()); eBomParent.setSource(EBomSourceEnum.FROM_BOM.getValue()); - eBomParent.setCurrentVersion(Objects.isNull(ebom) ? "" : VersionUtil.getNextVersion(ebom.getCurrentVersion())); + eBomParent.setCurrentVersion(VersionUtil.getNextVersion(Objects.isNull(ebom) ? "" : VersionUtil.getNextVersion(ebom.getCurrentVersion()) )); eBomParent.setConvertToEbomTime(LocalDateTime.now()); eBomParent.setSourceRowId(parentEnt.getBomRowId()); eBomParent.setLastVersionIs(1); diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/util/TreeUtils.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/util/TreeUtils.java index fe29c2e7..567400b5 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/util/TreeUtils.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/util/TreeUtils.java @@ -1,7 +1,8 @@ package com.nflg.product.bomnew.util; import cn.hutool.core.collection.CollUtil; - +import com.nflg.product.bomnew.service.domain.EBom.DependencyChecker; + import javax.validation.constraints.NotNull; import java.util.*; @@ -127,22 +128,25 @@ public class TreeUtils { * @return List 存在循环依赖的具体行-rowId */ public static List checkParentChildRelationship(List list ,Function getParentFun, Function getChildFun,Function getRowIdFun) { - Set parents = new HashSet<>(); - List result=new ArrayList<>(); + DependencyChecker checker = new DependencyChecker(); for (T data : list) { String parent = getParentFun.apply(data); String child = getChildFun.apply(data); + checker.addDependency(child, parent); - if (parents.contains(child)) { - result.add(getRowIdFun.apply(data)); - } - - parents.add(parent); } - return result; + if (checker.hasCycle()) { + System.out.println("存在循环依赖"); + } else { + System.out.println("不存在循环依赖"); + } + + + + return null; } }