Merge branch 'refs/heads/feature/DM/nflg-bom' into feature/DM/nflg-bom-transition

This commit is contained in:
曹鹏飞 2024-06-19 16:30:50 +08:00
commit 2e3e1221a5
4 changed files with 91 additions and 18 deletions

View File

@ -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<BomNewEbomVirtualPackageCompositionEntity> {
void delByVnoAndParentNo(@Param("virtualPackageMaterialNo")String virtualPackageMaterialNo, @Param("parentMaterialNo")String parentMaterialNo);
void batchDelByVMaterialNos(@Param("virtualMaterialNos") Collection<String> virtualMaterialNos);
}

View File

@ -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<BomNewEbomParentMapper,
pBomChildService.saveOrUpdateBatch(eBomToPBom.getPBomChildResult());
}
//记录虚拟包组成
if(CollUtil.isNotEmpty(eBomToPBom.getVirtualPackageCompositionResult())){
Set<String> vMaterialNos = eBomToPBom.getVirtualPackageCompositionResult().stream().map(u -> u.getVirtualPackageMaterialNo()).collect(Collectors.toSet());
virtualPackageCompositionService.getBaseMapper().batchDelByVMaterialNos(vMaterialNos);
virtualPackageCompositionService.saveBatch(eBomToPBom.getVirtualPackageCompositionResult());
}
//删除EBOM中和正式表BOM一致的数据
List<BomNewEbomParentVO> 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<BomNewEbomParentMapper,
if (CollUtil.isNotEmpty(bomRowIds)) {
this.getBaseMapper().updateStateBatchByRowIds(EBomStatusEnum.PUBLISHED.getValue(), SessionUtil.getRealName(), bomRowIds);
//将历史已发布版-转移到正式历史表
eBomToFormal(bomRowIds, bomTree.stream().filter(u ->!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<BomNewEbomChildEntity> bomChildren = new ArrayList<>();

View File

@ -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<BomNewEbomParentVO> result = new ArrayList<>();
protected BomNewEbomVirtualPackageCompositionService virtualPackageCompositionService=SpringUtil.getBean(BomNewEbomVirtualPackageCompositionService.class);
@Getter
protected List<BomNewPbomParentEntity> 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<BigDecimal> parentFullPathNum = new ArrayList<>();
while (parentLevelNo.length() >= lastVirtualPackage.getLevelNo().length()) {
String pNo = parentLevelNo;
List<BomNewEbomParentVO> 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<BigDecimal> 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<BomNewEbomParentVO> 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<String> 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<BomNewEbomParentVO> 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<BomNewEbomParentVO> 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<BomNewEbomVirtualPackageCompositionEntity> impactVm = virtualPackageCompositionService.lambdaQuery().eq(BomNewEbomVirtualPackageCompositionEntity::getParentMaterialNo, vo.getMaterialNo()).list();
if(CollUtil.isNotEmpty(impactVm)){
List<BomNewEbomParentVO> childList = allBomDetail.stream().filter(u -> u.getParentRowId().equals(vo.getBomRowId())).collect(Collectors.toList());
Map<String, BomNewEbomVirtualPackageCompositionEntity> impactVmMp = impactVm.stream().collect(Collectors.toMap(v -> v.getChildMaterialNo(), v -> v, (v1, v2) -> v1));
//对比F项
List<BomNewEbomVirtualPackageCompositionEntity> impactVmF = impactVm.stream().filter(u -> VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getProductTypeKey().equals(u.getProjectType())).collect(Collectors.toList());
List<BomNewEbomParentVO> 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<BomNewEbomParentVO> 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<String> 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);
}
}
}
}

View File

@ -27,4 +27,12 @@
where virtual_package_material_no=#{virtualPackageMaterialNo}
and parent_material_no=#{parentMaterialNo}
</delete>
<delete id="batchDelByVMaterialNos">
delete from t_bom_new_ebom_virtual_package_composition
where virtual_package_material_no in
<foreach collection="virtualMaterialNos" item="item" index="index" open="(" separator="," close=")">
#{item}
</foreach>
</delete>
</mapper>