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

View File

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