diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewEbomVirtualPackageCompositionMapper.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewEbomVirtualPackageCompositionMapper.java index f3d8ae1b..06de2764 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewEbomVirtualPackageCompositionMapper.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewEbomVirtualPackageCompositionMapper.java @@ -4,6 +4,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.nflg.product.bomnew.pojo.entity.BomNewEbomVirtualPackageCompositionEntity; import org.apache.ibatis.annotations.Param; +import java.util.Collection; +import java.util.List; + /** * t_bom_new_ebom_virtual_package_composition 表数据库访问层 * @@ -14,4 +17,6 @@ import org.apache.ibatis.annotations.Param; public interface BomNewEbomVirtualPackageCompositionMapper extends BaseMapper { void delByVnoAndParentNo(@Param("virtualPackageMaterialNo")String virtualPackageMaterialNo, @Param("parentMaterialNo")String parentMaterialNo); + + void batchDelByVMaterialNos(@Param("virtualMaterialNos") Collection virtualMaterialNos); } 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 3041dec7..5acc7b6c 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 @@ -16,6 +16,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; import com.google.common.collect.Sets; import com.mzt.logapi.context.LogRecordContext; import com.nflg.product.base.core.conmon.util.SessionUtil; @@ -914,6 +915,13 @@ public class BomNewEbomParentService extends ServiceImpl vMaterialNos = eBomToPBom.getVirtualPackageCompositionResult().stream().map(u -> u.getVirtualPackageMaterialNo()).collect(Collectors.toSet()); + virtualPackageCompositionService.getBaseMapper().batchDelByVMaterialNos(vMaterialNos); + virtualPackageCompositionService.saveBatch(eBomToPBom.getVirtualPackageCompositionResult()); + } + //删除EBOM中和正式表BOM一致的数据 List delEBomParents = bomTree.stream().filter(u -> u.getHasChangeState().equals(1)).collect(Collectors.toList()); if(CollUtil.isNotEmpty(delEBomParents)){ @@ -947,7 +955,7 @@ public class BomNewEbomParentService extends ServiceImpl!EBomStatusEnum.PUBLISHED.equalsValue(u.getStatus()) && u.getBomRowId() > 0).collect(Collectors.toList()) ); + eBomToFormal(bomRowIds, bomTree.stream().filter(u ->!u.getHasChangeState().equals(1) && !EBomStatusEnum.PUBLISHED.equalsValue(u.getStatus()) && u.getBomRowId() > 0).collect(Collectors.toList()) ); } //子级记录-bom版本 List bomChildren = new ArrayList<>(); diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomToPbomBase.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomToPbomBase.java index 86ebeeb1..1753e28b 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomToPbomBase.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomToPbomBase.java @@ -2,12 +2,14 @@ package com.nflg.product.bomnew.service.domain.EBom; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateTime; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.extra.spring.SpringUtil; import com.alibaba.excel.enums.BooleanEnum; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; import com.nflg.product.base.core.conmon.util.SessionUtil; import com.nflg.product.bomnew.constant.*; @@ -26,6 +28,7 @@ import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; +import java.util.stream.Stream; public abstract class EBomToPbomBase { @@ -42,6 +45,8 @@ public abstract class EBomToPbomBase { protected List result = new ArrayList<>(); + protected BomNewEbomVirtualPackageCompositionService virtualPackageCompositionService=SpringUtil.getBean(BomNewEbomVirtualPackageCompositionService.class); + @Getter protected List pBomParentResult = new ArrayList<>(); @@ -163,6 +168,7 @@ public abstract class EBomToPbomBase { SpringUtil.getBean(BomNewPbomChildService.class).getBaseMapper().deleteByMap(ImmutableMap.of("parent_row_id", oldParent.getRowId())); oldParent.setCurrentVersion(parentVo.getCurrentVersion()); oldParent.setSourceRowId(parentVo.getRowId()); + oldParent.setCreatedTime(LocalDateTime.now()); this.pBomParentResult.add(oldParent); return oldParent; } @@ -192,6 +198,7 @@ public abstract class EBomToPbomBase { pBomParent.setTechnologyUserCode(SessionUtil.getUserCode()); pBomParent.setTechnologyUserName(SessionUtil.getRealName()); pBomParent.setDeptRowId(SessionUtil.getDepartRowId()); + pBomParent.setCreatedTime(LocalDateTime.now()); //版本=EBom版本 pBomParent.setCurrentVersion(bomVersion); pBomParent.setEditStatus(PBomEditStatusEnum.HANDLER_CREATED.getValue()); @@ -230,10 +237,6 @@ public abstract class EBomToPbomBase { vo.setParentRowId(lastVirtualPackage.getBomRowId()); result.add(vo); } - //当没找到直发包时,丢弃 -// else { -// // buildUpgradeChange(vo); -// } continue; } if (StrUtil.isNotBlank(vo.getProjectType()) && vo.getProjectType().equals(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getProductTypeKey())) { @@ -245,9 +248,6 @@ public abstract class EBomToPbomBase { vo.setParentRowId(lastVirtualPackage.getBomRowId()); result.add(vo); } -// else { //当没找到直发包时,丢弃 -// // buildUpgradeChange(vo); -// } continue; } result.add(vo); @@ -335,36 +335,38 @@ public abstract class EBomToPbomBase { private void liftingLayerSummary(BomNewEbomParentVO lastVirtualPackage, BomNewEbomParentVO vo) { BigDecimal sum = vo.getNum(); String parentLevelNo = BomLevelUtil.getParentLevelNo(vo.getLevelNo()); - List parentFullPathNum = new ArrayList<>(); + while (parentLevelNo.length() >= lastVirtualPackage.getLevelNo().length()) { String pNo = parentLevelNo; List parentList = allBomDetail.stream().filter(u -> u.getLevelNo().equals(pNo)).collect(Collectors.toList()); if (CollUtil.isNotEmpty(parentList)) { sum = NumberUtil.mul(sum, parentList.get(0).getNum()); - parentFullPathNum.add(parentList.get(0).getNum()); + + //构建虚拟包组成 + buildVirtualPackageComposition(lastVirtualPackage, vo); } -// else { -// parentFullPathNum.add(parentList.get(0).getNum()); -// } parentLevelNo = BomLevelUtil.getParentLevelNo(parentLevelNo); } vo.setNum(sum); - //构建虚拟包组成 - buildVirtualPackageComposition(lastVirtualPackage, vo, parentFullPathNum); + } - private void buildVirtualPackageComposition(BomNewEbomParentVO lastVirtualPackage, BomNewEbomParentVO vo, List parentFullPathNum) { + /** + * 构建虚拟包组成 + * @param lastVirtualPackage + * @param vo + */ + private void buildVirtualPackageComposition(BomNewEbomParentVO lastVirtualPackage, BomNewEbomParentVO vo) { BomNewEbomVirtualPackageCompositionEntity packageCompositionEntity = new BomNewEbomVirtualPackageCompositionEntity(); packageCompositionEntity.setRowId(IdWorker.getId()); packageCompositionEntity.setVirtualPackageMaterialNo(lastVirtualPackage.getMaterialNo()); List voParent = allBomDetail.stream().filter(u -> u.getBomRowId().equals(vo.getParentRowId())).collect(Collectors.toList()); - VUtils.isTure(CollUtil.isEmpty(voParent)).throwMessage(vo.getMaterialNo() + " 未找到父级"); packageCompositionEntity.setParentMaterialNo(voParent.get(0).getMaterialNo()); packageCompositionEntity.setChildMaterialNo(vo.getMaterialNo()); - packageCompositionEntity.setParentFullPathNum(StrUtil.join(",", parentFullPathNum)); + packageCompositionEntity.setNum(vo.getNum()); packageCompositionEntity.setProjectType(vo.getProjectType()); packageCompositionEntity.setUnitWeight(vo.getUnitWeight()); packageCompositionEntity.setTotalWeight(vo.getTotalWeight()); @@ -372,6 +374,46 @@ public abstract class EBomToPbomBase { this.virtualPackageCompositionResult.add(packageCompositionEntity); } + /** + * 变更影响 + */ + protected void changeImpact(){ + Set vmaterialNo = allBomDetail.stream().filter(u -> VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.equalsValue(u.getVirtualPartType()) || VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.equalsValue(u.getVirtualPartType())).map(u -> u.getMaterialNo()).collect(Collectors.toSet()); + List firstParent = allBomDetail.stream().filter(u -> u.getParentRowId().equals(parent.getRowId())).collect(Collectors.toList()); + for (BomNewEbomParentVO vo : firstParent) { + changeImpactDo(vo); + } + + + } + + private void changeImpactDo(BomNewEbomParentVO parentVO){ + List subVos = allBomDetail.stream().filter(u -> u.getLevelNumber().compareTo(parentVO.getLevelNumber()) >= 0 && u.getLevelNumber().compareTo(NumberUtil.add(parentVO.getLevelNumber(), BigDecimal.valueOf(0.01))) < 0) + .sorted(Comparator.comparing(BomNewEbomParentVO::getLevelNumber)).collect(Collectors.toList()); + for (BomNewEbomParentVO vo : subVos) { + + } + } + + private Boolean compareVirtualPackage(BomNewEbomParentVO vo) { + List impactVm = virtualPackageCompositionService.lambdaQuery().eq(BomNewEbomVirtualPackageCompositionEntity::getParentMaterialNo, vo.getMaterialNo()).list(); + if(CollUtil.isNotEmpty(impactVm)){ + List childList = allBomDetail.stream().filter(u -> u.getParentRowId().equals(vo.getBomRowId())).collect(Collectors.toList()); + Map impactVmMp = impactVm.stream().collect(Collectors.toMap(v -> v.getChildMaterialNo(), v -> v, (v1, v2) -> v1)); + //对比F项 + List impactVmF = impactVm.stream().filter(u -> VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getProductTypeKey().equals(u.getProjectType())).collect(Collectors.toList()); + + List childListF = childList.stream().filter(u -> VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getProductTypeKey().equals(u.getProjectType())).collect(Collectors.toList()); + if(impactVmF.size()!=impactVmF.size()){ + return true; + } + for (BomNewEbomParentVO child : childList) { +// if(impactVmMp.containsKey()); + } + } + return false; + } + private String getParentMaterialNo(Long parentRowId) { List collect = allBomDetail.stream().filter(u -> u.getBomRowId().equals(parentRowId)).collect(Collectors.toList()); if (CollUtil.isNotEmpty(collect)) { @@ -530,6 +572,16 @@ public abstract class EBomToPbomBase { parentBom.setCurrentVersion(VersionUtil.getNextVersion(oldEBom.getCurrentVersion())); parentBom.setHasChangeState(2); } + + //如子级都为F 项父级也不转 + Set projectSet = newParentChild.stream().map(u -> u.getProjectType().toUpperCase()).collect(Collectors.toSet()); + if(CollUtil.isNotEmpty(projectSet)){ + if(!VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getProductTypeKey().equals(parentBom.getVirtualPartType()) && !VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getProductTypeKey().equals(parentBom.getVirtualPartType()) && + (ImmutableSet.of("F").equals(projectSet) || ImmutableSet.of("F","Z").equals(projectSet)|| ImmutableSet.of("Z").equals(projectSet))){ + parentBom.setNoConvertToPBomIs(1); + } + } + } } diff --git a/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewEbomVirtualPackageCompositionMapper.xml b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewEbomVirtualPackageCompositionMapper.xml index 8e3950ad..9bdb7b93 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewEbomVirtualPackageCompositionMapper.xml +++ b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewEbomVirtualPackageCompositionMapper.xml @@ -27,4 +27,12 @@ where virtual_package_material_no=#{virtualPackageMaterialNo} and parent_material_no=#{parentMaterialNo} + + + delete from t_bom_new_ebom_virtual_package_composition + where virtual_package_material_no in + + #{item} + +