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

This commit is contained in:
曹鹏飞 2024-06-27 14:06:55 +08:00
commit 1943b3107f
3 changed files with 69 additions and 123 deletions

View File

@ -10,6 +10,7 @@ import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
@ -353,8 +354,8 @@ public class BomNewEbomParentVO extends BaseMaterialVO implements Serializable {
private List<BomNewEbomParentVO> childNodes = Collections.emptyList();
@ApiModelProperty("父级物料编码")
private List<String> parentMaterialNos;
@ApiModelProperty("父级物料RowId")
private List<Long> parentRowIds=new ArrayList<>();
private static final long serialVersionUID = 1L;

View File

@ -534,7 +534,7 @@ public class BomNewEbomParentService extends ServiceImpl<BomNewEbomParentMapper,
EBomToPBom eBomToPBom = new EBomToPBom();
eBomToPBom.generateDrawingNo(bomDetail, rowId, "");
return result;
return result.stream().distinct().collect(Collectors.toList());
}
@ -553,7 +553,7 @@ public class BomNewEbomParentService extends ServiceImpl<BomNewEbomParentMapper,
ForkJoinTask<List<BomNewEbomParentVO>> submit = bomDetailPool.submit(detailTask);
List<BomNewEbomParentVO> result = submit.join();
return result;
return result.stream().distinct().collect(Collectors.toList());
}

View File

@ -233,117 +233,65 @@ public abstract class EBomToPbomBase {
*/
protected void liftingLayer() {
result.add(parent);
List<BomNewEbomParentVO> parentsEntList = allBomDetail.stream().filter(u -> u.getBomRowId() > 0).collect(Collectors.toList());
for (BomNewEbomParentVO vo : parentsEntList) {
List<BomNewEbomParentVO> parentEntChild = allBomDetail.stream().filter(u -> u.getParentRowId().equals(vo.getBomRowId())).collect(Collectors.toList());
for (BomNewEbomParentVO child : parentEntChild) {
if (StrUtil.isNotBlank(child.getProjectType()) && child.getProjectType().equals(VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getProductTypeKey())) {
BomNewEbomParentVO lastVirtualPackage = getLastVirtualPackageNew(child,vo.getParentRowId(), VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE);
if (Objects.nonNull(lastVirtualPackage)) {
BomNewEbomParentVO newEnt = liftingLayerSummary(lastVirtualPackage, child);
newEnt.setRowId(IdWorker.getId());
newEnt.setSourceRowId(String.valueOf(child.getParentRowId()));
newEnt.setSourceParentMaterialNo(vo.getMaterialNo());
newEnt.setParentRowId(lastVirtualPackage.getBomRowId());
result.add(newEnt);
}
continue;
}
if (StrUtil.isNotBlank(vo.getProjectType()) && vo.getProjectType().equals(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getProductTypeKey())) {
BomNewEbomParentVO lastVirtualPackage = getLastVirtualPackageNew(vo, vo.getParentRowId(), VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE);
if (Objects.nonNull(lastVirtualPackage)) {
BomNewEbomParentVO newEnt = liftingLayerSummary(lastVirtualPackage, child);
newEnt.setRowId(IdWorker.getId());
newEnt.setSourceRowId(String.valueOf(child.getParentRowId()));
newEnt.setSourceParentMaterialNo(vo.getMaterialNo());
newEnt.setParentRowId(lastVirtualPackage.getBomRowId());
result.add(newEnt);
}
continue;
}
result.add(child);
}
}
// for (BomNewEbomParentVO vo : allBomDetail) {
// if (StrUtil.isNotBlank(vo.getProjectType()) && vo.getProjectType().equals(VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getProductTypeKey())) {
// BomNewEbomParentVO lastVirtualPackage = getLastVirtualPackageNew(vo, VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE);
// if (Objects.nonNull(lastVirtualPackage)) {
// liftingLayerSummary(lastVirtualPackage, vo);
// vo.setSourceRowId(String.valueOf(vo.getParentRowId()));
// vo.setSourceParentMaterialNo(getParentMaterialNo(vo.getBomRowId()));
// vo.setParentRowId(lastVirtualPackage.getBomRowId());
// result.add(vo);
// }
// continue;
// }
// if (StrUtil.isNotBlank(vo.getProjectType()) && vo.getProjectType().equals(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getProductTypeKey())) {
// BomNewEbomParentVO lastVirtualPackage = getLastVirtualPackageNew(vo, VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE);
// if (Objects.nonNull(lastVirtualPackage)) {
// liftingLayerSummary(lastVirtualPackage, vo);
// vo.setSourceRowId(String.valueOf(vo.getParentRowId()));
// vo.setSourceParentMaterialNo(getParentMaterialNo(vo.getBomRowId()));
// vo.setParentRowId(lastVirtualPackage.getBomRowId());
// result.add(vo);
// }
// continue;
// }
// result.add(vo);
// }
liftingLayerDo(parent, null, null, ImmutableList.of());
}
protected void liftingLayerNew() {
result.add(parent);
List<BomNewEbomParentVO> firstSubList = allBomDetail.stream().filter(u -> u.getParentRowId().equals(parent.getBomRowId())).collect(Collectors.toList());
BomNewEbomParentVO zfVo=null;
BomNewEbomParentVO fhqVO=null;
while (CollUtil.isNotEmpty(firstSubList)) {
for (BomNewEbomParentVO vo : firstSubList) {
List<BomNewEbomParentVO> zfList = firstSubList.stream().filter(u -> u.getParentRowId().equals(vo.getBomRowId()) && VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.equalsValue(u.getVirtualPartType())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(zfList)) {
zfVo=zfList.get(0);
}
if(Objects.isNull(zfVo) && VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getProductTypeKey().equals(vo.getVirtualPartType()) ) {
}
private List<Long> hasCupmVo=new ArrayList<>();
/**
* @param parentVO 父项
* @param directDeliveryVo 直发包
* @param preAssemblyVo 发货前装配包
*/
public void liftingLayerDo(BomNewEbomParentVO parentVO, BomNewEbomParentVO directDeliveryVo, BomNewEbomParentVO preAssemblyVo, List<Long> parentRowIds) {
List<BomNewEbomParentVO> firstLevelBoms = allBomDetail.stream().filter(u -> u.getParentRowId().equals(parentVO.getBomRowId())).collect(Collectors.toList());
for (BomNewEbomParentVO firstLevelBom : firstLevelBoms) {
if(hasCupmVo.contains(firstLevelBom.getRowId())){
firstLevelBom.getParentRowIds().clear();
}
}
for (BomNewEbomParentVO vo : parentsEntList) {
List<BomNewEbomParentVO> parentEntChild = allBomDetail.stream().filter(u -> u.getParentRowId().equals(vo.getBomRowId())).collect(Collectors.toList());
for (BomNewEbomParentVO child : parentEntChild) {
if (StrUtil.isNotBlank(child.getProjectType()) && child.getProjectType().equals(VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getProductTypeKey())) {
BomNewEbomParentVO lastVirtualPackage = getLastVirtualPackageNew(child,vo.getParentRowId(), VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE);
if (Objects.nonNull(lastVirtualPackage)) {
BomNewEbomParentVO newEnt = liftingLayerSummary(lastVirtualPackage, child);
newEnt.setRowId(IdWorker.getId());
newEnt.setSourceRowId(String.valueOf(child.getParentRowId()));
newEnt.setSourceParentMaterialNo(vo.getMaterialNo());
newEnt.setParentRowId(lastVirtualPackage.getBomRowId());
result.add(newEnt);
}
continue;
//直发包
firstLevelBom.getParentRowIds().add(firstLevelBom.getParentRowId());
firstLevelBom.getParentRowIds().addAll(parentRowIds);
List<BomNewEbomParentVO> directDeliveryVoList = firstLevelBoms.stream().filter(u -> VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.equalsValue(u.getVirtualPartType())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(directDeliveryVoList)) {
directDeliveryVo = directDeliveryVoList.get(0);
}
List<BomNewEbomParentVO> preAssemblyVoList = firstLevelBoms.stream().filter(u -> VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.equalsValue(u.getVirtualPartType())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(preAssemblyVoList)) {
preAssemblyVo = preAssemblyVoList.get(0);
}
//虚拟包
if (firstLevelBom.getVirtualPartType() > 0) {
result.add(firstLevelBom);
} else if (VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getProductTypeKey().equals(firstLevelBom.getProjectType())) {
if (Objects.nonNull(directDeliveryVo)) {
BomNewEbomParentVO newEnt = liftingLayerSummary(directDeliveryVo, firstLevelBom);
newEnt.setRowId(IdWorker.getId());
newEnt.setSourceRowId(String.valueOf(firstLevelBom.getParentRowId()));
newEnt.setSourceParentMaterialNo(parentVO.getMaterialNo());
newEnt.setParentRowId(directDeliveryVo.getBomRowId());
result.add(newEnt);
}
if (StrUtil.isNotBlank(vo.getProjectType()) && vo.getProjectType().equals(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getProductTypeKey())) {
BomNewEbomParentVO lastVirtualPackage = getLastVirtualPackageNew(vo, vo.getParentRowId(), VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE);
if (Objects.nonNull(lastVirtualPackage)) {
BomNewEbomParentVO newEnt = liftingLayerSummary(lastVirtualPackage, child);
newEnt.setRowId(IdWorker.getId());
newEnt.setSourceRowId(String.valueOf(child.getParentRowId()));
newEnt.setSourceParentMaterialNo(vo.getMaterialNo());
newEnt.setParentRowId(lastVirtualPackage.getBomRowId());
result.add(newEnt);
}
continue;
} else if (firstLevelBom.getProjectType().equals(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getProductTypeKey())) {
if (Objects.nonNull(preAssemblyVo)) {
BomNewEbomParentVO newEnt = liftingLayerSummary(preAssemblyVo, firstLevelBom);
newEnt.setRowId(IdWorker.getId());
newEnt.setSourceRowId(String.valueOf(firstLevelBom.getParentRowId()));
newEnt.setSourceParentMaterialNo(parentVO.getMaterialNo());
newEnt.setParentRowId(preAssemblyVo.getBomRowId());
result.add(newEnt);
}
result.add(child);
} else {
result.add(firstLevelBom);
}
hasCupmVo.add(firstLevelBom.getRowId());
if (firstLevelBom.getBomRowId() > 0) {
liftingLayerDo(firstLevelBom, directDeliveryVo, preAssemblyVo, firstLevelBom.getParentRowIds());
}
}
}
/**
* 提层汇总数量
*
@ -354,8 +302,8 @@ public abstract class EBomToPbomBase {
BigDecimal sum = vo.getNum();
// String parentLevelNo = BomLevelUtil.getParentLevelNo(vo.getLevelNo());
List<BomNewEbomParentVO> parentList = getAllParent(vo);
BomNewEbomParentVO newEnt=new BomNewEbomParentVO();
BeanUtil.copyProperties(vo,newEnt);
BomNewEbomParentVO newEnt = new BomNewEbomParentVO();
BeanUtil.copyProperties(vo, newEnt);
//构建虚拟包组成
buildVirtualPackageComposition(lastVirtualPackage, vo);
@ -371,13 +319,11 @@ public abstract class EBomToPbomBase {
newEnt.setBomRowId(0L);
newEnt.setChildBomRowId(0L);
newEnt.setNum(sum);
return newEnt;
return newEnt;
}
protected List<BomNewEbomParentVO> getAllParent(BomNewEbomParentVO vo) {
List<BomNewEbomParentVO> result = new ArrayList<>();
BomNewEbomParentVO parentEnt = getParent(vo);
@ -444,7 +390,7 @@ public abstract class EBomToPbomBase {
}
private void changeImpactDo(BomNewEbomParentVO parentVO) {
List<BomNewEbomParentVO> subVos = getAllSubInListIncludeSelf(parentVO,allBomDetail);
List<BomNewEbomParentVO> subVos = getAllSubInListIncludeSelf(parentVO, allBomDetail);
List<BomNewEbomParentVO> subVosParent = subVos.stream().filter(u -> u.getBomRowId() > 0).collect(Collectors.toList());
for (BomNewEbomParentVO vo : subVosParent) {
@ -515,8 +461,8 @@ public abstract class EBomToPbomBase {
private void buildChangeImpactEntity(BomNewEbomVirtualPackageCompositionEntity v, BomNewEbomParentVO vo) {
List<BomNewEbomUpgradeChangeEntity> checkExists = upgradeChangeResult.stream().filter(u ->u.getMaterialNo().equals(v.getVirtualPackageMaterialNo()) && u.getRelMaterialNo().equals(vo.getMaterialNo())).collect(Collectors.toList());
if(CollUtil.isNotEmpty(checkExists)){
List<BomNewEbomUpgradeChangeEntity> checkExists = upgradeChangeResult.stream().filter(u -> u.getMaterialNo().equals(v.getVirtualPackageMaterialNo()) && u.getRelMaterialNo().equals(vo.getMaterialNo())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(checkExists)) {
return;
}
BomNewEbomUpgradeChangeEntity changeEntity = new BomNewEbomUpgradeChangeEntity();
@ -560,7 +506,7 @@ public abstract class EBomToPbomBase {
}
private BomNewEbomParentVO getLastVirtualPackageNew(BomNewEbomParentVO vo, Long parentRowId, VirtualPackageTypeEnum virtualPackageTypeEnum) {
BomNewEbomParentVO parentEnt = getParent(vo,parentRowId);
BomNewEbomParentVO parentEnt = getParent(vo, parentRowId);
Boolean flag = true;
while (Objects.nonNull(parentEnt) && parentEnt.getParentRowId() > 0 && flag) {
//制作
@ -575,7 +521,7 @@ public abstract class EBomToPbomBase {
return null;
}
private BomNewEbomParentVO getParent(BomNewEbomParentVO vo,Long parentRowId) {
private BomNewEbomParentVO getParent(BomNewEbomParentVO vo, Long parentRowId) {
List<BomNewEbomParentVO> parents = allBomDetail.stream().filter(u -> u.getParentRowId().equals(parentRowId) && u.getBomRowId().equals(vo.getParentRowId())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(parents)) {
return parents.get(0);
@ -584,7 +530,7 @@ public abstract class EBomToPbomBase {
}
private BomNewEbomParentVO getParent(BomNewEbomParentVO vo) {
List<BomNewEbomParentVO> parents = allBomDetail.stream().filter(u -> u.getBomRowId().equals(vo.getParentRowId())).collect(Collectors.toList());
List<BomNewEbomParentVO> parents = allBomDetail.stream().filter(u -> vo.getParentRowIds().contains(u.getParentRowId()) && u.getBomRowId().equals(vo.getParentRowId())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(parents)) {
return parents.get(0);
}
@ -788,7 +734,7 @@ public abstract class EBomToPbomBase {
getAllSubData(ImmutableList.of(parentVO.getBomRowId()), reusltSub);
return reusltSub;
return reusltSub.stream().distinct().collect(Collectors.toList());
}
protected List<BomNewEbomParentVO> getAllSubInListIncludeSelf(BomNewEbomParentVO parentVO, List<BomNewEbomParentVO> list) {
@ -797,7 +743,7 @@ public abstract class EBomToPbomBase {
getAllSubData(ImmutableList.of(parentVO.getBomRowId()), reusltSub, list);
return reusltSub;
return reusltSub.stream().distinct().collect(Collectors.toList());
}
@ -810,7 +756,7 @@ public abstract class EBomToPbomBase {
if (CollUtil.isNotEmpty(subMarterialBomRowIds)) {
subMaterials = list.stream().filter(u -> subMarterialBomRowIds.contains(u.getParentRowId())).collect(Collectors.toList());
} else {
subMaterials=Collections.emptyList();
subMaterials = Collections.emptyList();
}
}
}
@ -824,8 +770,7 @@ public abstract class EBomToPbomBase {
private void getAllSubData(List<Long> parentRowIds, List<BomNewEbomParentVO> subResult) {
List<BomNewEbomParentVO> subMaterials = result.stream().filter(u -> parentRowIds.contains(u.getParentRowId())).collect(Collectors.toList());
List<BomNewEbomParentVO> subMaterials = result.stream().filter(u -> parentRowIds.contains(u.getParentRowId())).collect(Collectors.toList());
//直发包发货前装配包不递归
while (CollUtil.isNotEmpty(subMaterials)) {
subResult.addAll(subMaterials);
@ -833,9 +778,9 @@ public abstract class EBomToPbomBase {
List<Long> subMarterialBomRowIds = subMaterials.stream().filter(u -> u.getBomRowId() > 0).map(u -> u.getBomRowId()).collect(Collectors.toList());
if (CollUtil.isNotEmpty(subMarterialBomRowIds)) {
subMaterials=result.stream().filter(u -> subMarterialBomRowIds.contains(u.getParentRowId())).collect(Collectors.toList());
subMaterials = result.stream().filter(u -> subMarterialBomRowIds.contains(u.getParentRowId())).collect(Collectors.toList());
} else {
subMaterials=Collections.emptyList();
subMaterials = Collections.emptyList();
}
}
}