1、解决提层项问题

This commit is contained in:
大米 2024-06-27 11:43:25 +08:00
parent aba0507bf9
commit 250702f310
3 changed files with 67 additions and 121 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

@ -536,7 +536,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());
} }
@ -555,7 +555,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

@ -230,117 +230,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(parentVO.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(parentVO.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);
}
}
}
/** /**
* 提层汇总数量 * 提层汇总数量
* *
@ -373,8 +321,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);
@ -581,7 +527,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);
} }
@ -821,7 +767,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)) {