diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/constant/EBomExceptionStatusEnum.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/constant/EBomExceptionStatusEnum.java index fafab8cf..2de71e30 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/constant/EBomExceptionStatusEnum.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/constant/EBomExceptionStatusEnum.java @@ -33,7 +33,8 @@ public enum EBomExceptionStatusEnum implements ValueEnum { EXCEPT_NO_10(10, "项目赋值异常(当父级物料的项目类型为F时,子级中不能存在项目类型为F的物料)"), EXCEPT_NO_11(11, "未填写变更原因和技术通知单"), EXCEPT_NO_12(12, "数量需要用户确认"), - EXCEPT_NO_13(13, "项目类型需要用户确认") ; + EXCEPT_NO_13(13, "项目类型需要用户确认") , + EXCEPT_NO_14(14,"黄色警告"); diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewEbomChildMapper.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewEbomChildMapper.java index e583d490..a723b7d6 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewEbomChildMapper.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewEbomChildMapper.java @@ -2,6 +2,7 @@ package com.nflg.product.bomnew.mapper.master; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.nflg.product.bomnew.pojo.entity.BomNewEbomChildEntity; +import com.nflg.product.bomnew.pojo.vo.ChildMaxExceptionStateVO; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -21,4 +22,6 @@ public interface BomNewEbomChildMapper extends BaseMapper * 全量更新-EBOM物料use */ void updateEBomMaterialUse(); + + List getChildMaxExceptionState(@Param("bomRowIds") List bomRowIds); } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/ChildMaxExceptionStateVO.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/ChildMaxExceptionStateVO.java new file mode 100644 index 00000000..927851e4 --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/ChildMaxExceptionStateVO.java @@ -0,0 +1,15 @@ +package com.nflg.product.bomnew.pojo.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 子节点最大状态 + */ +@Data +public class ChildMaxExceptionStateVO { + + private Long parentRowId; + @ApiModelProperty("最大异常状态") + private Integer maxExceptionState; +} 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 3d9ee064..2c080a4d 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 @@ -131,6 +131,8 @@ public class BomNewEbomParentService extends ServiceImpl getParentMaterialByMaterialNo(String materialNo, Boolean selfIs) { + public List getParentMaterialByMaterialNo(String materialNo, Boolean selfIs) { BomNewEbomMaterialUseEntity materialBom = bomNewEbomMaterialUseService.lambdaQuery().eq(BomNewEbomMaterialUseEntity::getMaterialNo, materialNo).one(); List result = new ArrayList<>(); if (Objects.nonNull(materialBom) && StrUtil.isNotBlank(materialBom.getParentMaterialNo())) { @@ -190,6 +192,38 @@ public class BomNewEbomParentService extends ServiceImpl getBatchParentMaterialByMaterialNo(List materialNos) { + List materialBom = bomNewEbomMaterialUseService.lambdaQuery().in(BomNewEbomMaterialUseEntity::getMaterialNo, materialNos).list(); + List result = new ArrayList<>(); + if (CollUtil.isNotEmpty(materialBom)) { + Set relSkuNo = getParentMaterialByUse(materialBom); + while (CollUtil.isNotEmpty(relSkuNo)) { + result.addAll(relSkuNo); + List relSkuList = bomNewEbomMaterialUseService.lambdaQuery().in(BomNewEbomMaterialUseEntity::getMaterialNo, relSkuNo).list(); + relSkuNo.clear(); + relSkuNo = getParentMaterialByUse(relSkuList); + + } + } + return result; + } + + private Set getParentMaterialByUse(List list){ + Set result=new HashSet<>(); + for ( BomNewEbomMaterialUseEntity materialUse: list) { + Set relSkuNo = Sets.newHashSet(StrUtil.split(materialUse.getParentMaterialNo(), ",")); + result.addAll(relSkuNo); + } + return result; + } + private Set getSelfMaterialNo(Set relSkuNo) { Set selfParentMaterialNo = this.getBaseMapper().getSelfParentMaterialNo(SessionUtil.getUserCode(), relSkuNo); return selfParentMaterialNo; @@ -285,8 +319,8 @@ public class BomNewEbomParentService extends ServiceImpl list ){ + List exceptionList = allBomDetail.stream().filter(u -> u.getExceptionStatus() > 1).collect(Collectors.toList()); + List exceptionMaterialNos = exceptionList.stream().map(u -> u.getMaterialNo()).collect(Collectors.toList()); + List allErrorParent = SpringUtil.getBean(BomNewEbomParentService.class).getBatchParentMaterialByMaterialNo(exceptionMaterialNos); + List warnList = allBomDetail.stream().filter(u -> allErrorParent.contains(u.getMaterialNo()) && EBomExceptionStatusEnum.OK.equalsValue(u.getExceptionStatus())).collect(Collectors.toList()); + warnList.forEach(k->{ + k.setExceptionStatus(EBomExceptionStatusEnum.EXCEPT_NO_14.getValue()); + }); + } /** diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/CheckEBomExceptoinDynamic.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/CheckEBomExceptoinDynamic.java new file mode 100644 index 00000000..402d1bc9 --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/CheckEBomExceptoinDynamic.java @@ -0,0 +1,53 @@ +package com.nflg.product.bomnew.service.domain.EBom; + + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.extra.spring.SpringUtil; +import com.nflg.product.bomnew.constant.EBomExceptionStatusEnum; +import com.nflg.product.bomnew.constant.MaterialGetEnum; +import com.nflg.product.bomnew.mapper.master.BomNewEbomChildMapper; +import com.nflg.product.bomnew.pojo.vo.BomNewEbomParentVO; +import com.nflg.product.bomnew.pojo.vo.ChildMaxExceptionStateVO; +import com.nflg.product.bomnew.util.ListCommonUtil; + +import java.math.BigDecimal; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * 动态检查BOM 异常状态 + */ +public class CheckEBomExceptoinDynamic { + + public static void check(List list){ + + + for (BomNewEbomParentVO vo : list) { + //物料状态-解除异常 + if (StrUtil.isNotBlank(vo.getMaterialNo()) + && MaterialGetEnum.MaterialStateEnum.OK.equalsValue(vo.getMaterialState()) + && EBomExceptionStatusEnum.EXCEPT_NO_2.equalsValue(vo.getExceptionStatus())) { + vo.setExceptionStatus(EBomExceptionStatusEnum.OK.getValue()); + } + //警告状态(子节点有异常则父节点黄色警告),子级无异常则解除警告 + List parentList = list.stream().filter(u -> u.getBomRowId() > 0).collect(Collectors.toList()); + List bomRowIds = parentList.stream().map(u -> u.getBomRowId()).collect(Collectors.toList()); + if(CollUtil.isNotEmpty(bomRowIds)) { + List childMaxExceptionState = SpringUtil.getBean(BomNewEbomChildMapper.class).getChildMaxExceptionState(bomRowIds); + List okParent = childMaxExceptionState.stream().filter(u -> u.getMaxExceptionState().equals(1)).map(u -> u.getParentRowId()).collect(Collectors.toList()); + if(CollUtil.isNotEmpty(okParent)){ + List collect = list.stream().filter(u -> okParent.contains(u.getBomRowId()) && EBomExceptionStatusEnum.EXCEPT_NO_14.equalsValue(u.getExceptionStatus())).collect(Collectors.toList()); + collect.forEach(k->{ + k.setExceptionStatus(EBomExceptionStatusEnum.OK.getValue()); + }); + + } + } + + } + } +} diff --git a/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewEbomChildMapper.xml b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewEbomChildMapper.xml index c1dddac3..7913bbbb 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewEbomChildMapper.xml +++ b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewEbomChildMapper.xml @@ -59,4 +59,13 @@ join t_bom_new_ebom_child b on a.row_id=b.parent_row_id and a.last_version_is=1 group by b.material_no ; + +