Merge branch 'refs/heads/feature/DM/nflg-bom' into feature/DM/nflg-bom-transition
This commit is contained in:
commit
2e3e1221a5
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<>();
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
Loading…
Reference in New Issue