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) { private List<Long> hasCupmVo=new ArrayList<>();
if (StrUtil.isNotBlank(child.getProjectType()) && child.getProjectType().equals(VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getProductTypeKey())) { /**
BomNewEbomParentVO lastVirtualPackage = getLastVirtualPackageNew(child,vo.getParentRowId(), VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE); * @param parentVO 父项
if (Objects.nonNull(lastVirtualPackage)) { * @param directDeliveryVo 直发包
BomNewEbomParentVO newEnt = liftingLayerSummary(lastVirtualPackage, child); * @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();
}
//直发包
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.setRowId(IdWorker.getId());
newEnt.setSourceRowId(String.valueOf(child.getParentRowId())); newEnt.setSourceRowId(String.valueOf(firstLevelBom.getParentRowId()));
newEnt.setSourceParentMaterialNo(vo.getMaterialNo()); newEnt.setSourceParentMaterialNo(parentVO.getMaterialNo());
newEnt.setParentRowId(lastVirtualPackage.getBomRowId()); newEnt.setParentRowId(directDeliveryVo.getBomRowId());
result.add(newEnt); result.add(newEnt);
} }
continue; } else if (firstLevelBom.getProjectType().equals(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getProductTypeKey())) {
} if (Objects.nonNull(preAssemblyVo)) {
if (StrUtil.isNotBlank(vo.getProjectType()) && vo.getProjectType().equals(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getProductTypeKey())) { BomNewEbomParentVO newEnt = liftingLayerSummary(preAssemblyVo, firstLevelBom);
BomNewEbomParentVO lastVirtualPackage = getLastVirtualPackageNew(vo, vo.getParentRowId(), VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE);
if (Objects.nonNull(lastVirtualPackage)) {
BomNewEbomParentVO newEnt = liftingLayerSummary(lastVirtualPackage, child);
newEnt.setRowId(IdWorker.getId()); newEnt.setRowId(IdWorker.getId());
newEnt.setSourceRowId(String.valueOf(child.getParentRowId())); newEnt.setSourceRowId(String.valueOf(firstLevelBom.getParentRowId()));
newEnt.setSourceParentMaterialNo(vo.getMaterialNo()); newEnt.setSourceParentMaterialNo(parentVO.getMaterialNo());
newEnt.setParentRowId(lastVirtualPackage.getBomRowId()); newEnt.setParentRowId(preAssemblyVo.getBomRowId());
result.add(newEnt); result.add(newEnt);
} }
continue; } else {
result.add(firstLevelBom);
}
hasCupmVo.add(firstLevelBom.getRowId());
if (firstLevelBom.getBomRowId() > 0) {
liftingLayerDo(firstLevelBom, directDeliveryVo, preAssemblyVo, firstLevelBom.getParentRowIds());
} }
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() {
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()) ) {
}
}
}
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);
}
}
}
/** /**
* 提层汇总数量 * 提层汇总数量
* *
@ -376,8 +324,6 @@ public abstract class EBomToPbomBase {
} }
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);
@ -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());
} }
@ -824,7 +770,6 @@ 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)) {