1、转PBOM问题修复222

This commit is contained in:
大米 2024-06-26 11:47:31 +08:00
parent f7bbd9ac7f
commit 12bedbf9a2
4 changed files with 86 additions and 36 deletions

View File

@ -13,9 +13,7 @@ import com.nflg.product.bomnew.util.ListCommonUtil;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import java.util.ArrayList; import java.util.*;
import java.util.List;
import java.util.Map;
import java.util.concurrent.RecursiveTask; import java.util.concurrent.RecursiveTask;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -53,8 +51,16 @@ public class EBomDetailTask extends RecursiveTask<List<BomNewEbomParentVO>> {
if (CollUtil.isNotEmpty(materialNos)) { if (CollUtil.isNotEmpty(materialNos)) {
List<BomNewEbomParentEntity> childBomlist = SpringUtil.getBean(BomNewEbomParentService.class).lambdaQuery().in(BomNewEbomParentEntity::getMaterialNo, materialNos).eq(BomNewEbomParentEntity::getLastVersionIs, 1).list(); List<BomNewEbomParentEntity> childBomlist = SpringUtil.getBean(BomNewEbomParentService.class).lambdaQuery().in(BomNewEbomParentEntity::getMaterialNo, materialNos).list();
Map<String, BomNewEbomParentEntity> stringBomNewOriginalParentEntityMap = ListCommonUtil.listToMap(childBomlist, BomNewEbomParentEntity::getMaterialNo); // Map<String, BomNewEbomParentEntity> stringBomNewOriginalParentEntityMap = ListCommonUtil.listToMap(childBomlist, BomNewEbomParentEntity::getMaterialNo);
Map<String, BomNewEbomParentEntity> stringBomNewOriginalParentEntityMap =childBomlist.stream()
.collect(Collectors.groupingBy(
BomNewEbomParentEntity::getMaterialNo,
Collectors.collectingAndThen(
Collectors.maxBy(Comparator.comparing(BomNewEbomParentEntity::getCurrentVersion)),
Optional::get
)
));
for (BomNewEbomParentVO detailVO : bomDetail) { for (BomNewEbomParentVO detailVO : bomDetail) {
if (stringBomNewOriginalParentEntityMap.containsKey(detailVO.getMaterialNo())) { if (stringBomNewOriginalParentEntityMap.containsKey(detailVO.getMaterialNo())) {
BomNewEbomParentEntity ebomParentEntity = stringBomNewOriginalParentEntityMap.get(detailVO.getMaterialNo()); BomNewEbomParentEntity ebomParentEntity = stringBomNewOriginalParentEntityMap.get(detailVO.getMaterialNo());

View File

@ -70,7 +70,7 @@ public class EBomToPBomFor31 extends EBomToPbomBase {
List<BomNewEbomParentVO> subVos = new ArrayList<>(); List<BomNewEbomParentVO> subVos = new ArrayList<>();
if (data.getMaterialName().contains("仙桃")) { //只获取下降虚拟包 if (data.getMaterialName().contains("仙桃")) { //只获取下降虚拟包
subVos.add(data); subVos.add(data);
subVos = result.stream().filter(u -> u.getParentRowId().equals(data.getBomRowId())).collect(Collectors.toList()); subVos.addAll(result.stream().filter(u -> u.getParentRowId().equals(data.getBomRowId())).collect(Collectors.toList()));
} else { } else {
// subVos = result.stream().filter(u -> u.getLevelNumber().compareTo(data.getLevelNumber()) >= 0 && u.getLevelNumber().compareTo(NumberUtil.add(data.getLevelNumber(), BigDecimal.valueOf(0.01))) < 0).collect(Collectors.toList()); // subVos = result.stream().filter(u -> u.getLevelNumber().compareTo(data.getLevelNumber()) >= 0 && u.getLevelNumber().compareTo(NumberUtil.add(data.getLevelNumber(), BigDecimal.valueOf(0.01))) < 0).collect(Collectors.toList());
subVos=getResultAllSubIncludeSelf(data); subVos=getResultAllSubIncludeSelf(data);

View File

@ -58,7 +58,7 @@ public class EBomToPBomForFormal31 extends EBomToPbomBase {
//1010 数据 //1010 数据
List<BomNewEbomParentVO> data1010=new ArrayList<>(); List<BomNewEbomParentVO> data1010=new ArrayList<>();
List<BomNewEbomParentVO> deliveryPackage1010 = result.stream().filter(u -> u.getParentRowId().equals(parent.getRowId()) && !u.getMaterialName().contains("仙桃")).collect(Collectors.toList()); List<BomNewEbomParentVO> deliveryPackage1010 = result.stream().filter(u -> u.getParentRowId().equals(parent.getRowId())).collect(Collectors.toList());
if(CollUtil.isNotEmpty(deliveryPackage1010)){ if(CollUtil.isNotEmpty(deliveryPackage1010)){
facCodes.add(EBomConstant.MAIN_FACTORY_CODE_1010); facCodes.add(EBomConstant.MAIN_FACTORY_CODE_1010);
data1010.add(parent); data1010.add(parent);
@ -67,7 +67,7 @@ public class EBomToPBomForFormal31 extends EBomToPbomBase {
if(data.getMaterialName().contains("仙桃")){ if(data.getMaterialName().contains("仙桃")){
// subVos = result.stream().filter(u -> u.getMaterialName().contains("仙桃") && u.getLevelNumber().compareTo(data.getLevelNumber()) >= 0 && u.getLevelNumber().compareTo(NumberUtil.add(data.getLevelNumber(), BigDecimal.valueOf(0.01))) < 0).collect(Collectors.toList()); // subVos = result.stream().filter(u -> u.getMaterialName().contains("仙桃") && u.getLevelNumber().compareTo(data.getLevelNumber()) >= 0 && u.getLevelNumber().compareTo(NumberUtil.add(data.getLevelNumber(), BigDecimal.valueOf(0.01))) < 0).collect(Collectors.toList());
subVos.add(data); subVos.add(data);
subVos=result.stream().filter(u->u.getParentRowId().equals(data.getBomRowId())).collect(Collectors.toList()); subVos.addAll(result.stream().filter(u->u.getParentRowId().equals(data.getBomRowId())).collect(Collectors.toList()));
} }
else { else {
// subVos = result.stream().filter(u -> u.getLevelNumber().compareTo(data.getLevelNumber()) >= 0 && u.getLevelNumber().compareTo(NumberUtil.add(data.getLevelNumber(), BigDecimal.valueOf(0.01))) < 0).collect(Collectors.toList()); // subVos = result.stream().filter(u -> u.getLevelNumber().compareTo(data.getLevelNumber()) >= 0 && u.getLevelNumber().compareTo(NumberUtil.add(data.getLevelNumber(), BigDecimal.valueOf(0.01))) < 0).collect(Collectors.toList());
@ -97,7 +97,6 @@ public class EBomToPBomForFormal31 extends EBomToPbomBase {
for (String facCode : facCodes) { for (String facCode : facCodes) {
List<BomNewEbomParentVO> parentList = ListCommonUtil.toDistinct(facBomDataMp.get(facCode).stream().filter(u -> u.getBomRowId() > 0) List<BomNewEbomParentVO> parentList = ListCommonUtil.toDistinct(facBomDataMp.get(facCode).stream().filter(u -> u.getBomRowId() > 0)
.sorted(Comparator.comparing(BomNewEbomParentVO::getLevelNumber))
.collect(Collectors.toList()), BomNewEbomParentVO::getBomRowId); .collect(Collectors.toList()), BomNewEbomParentVO::getBomRowId);
for (BomNewEbomParentVO vo : parentList) { for (BomNewEbomParentVO vo : parentList) {
String hasConvertKey = StrUtil.join("-", facCode, vo.getBomRowId()); String hasConvertKey = StrUtil.join("-", facCode, vo.getBomRowId());

View File

@ -204,6 +204,7 @@ public abstract class EBomToPbomBase {
pBomParent.setTechnologyUserName(SessionUtil.getRealName()); pBomParent.setTechnologyUserName(SessionUtil.getRealName());
pBomParent.setDeptRowId(SessionUtil.getDepartRowId()); pBomParent.setDeptRowId(SessionUtil.getDepartRowId());
pBomParent.setCreatedTime(LocalDateTime.now()); pBomParent.setCreatedTime(LocalDateTime.now());
pBomParent.setCreatedBy(SessionUtil.getUserCode());
//版本=EBom版本 //版本=EBom版本
pBomParent.setCurrentVersion(bomVersion); pBomParent.setCurrentVersion(bomVersion);
pBomParent.setEditStatus(PBomEditStatusEnum.HANDLER_CREATED.getValue()); pBomParent.setEditStatus(PBomEditStatusEnum.HANDLER_CREATED.getValue());
@ -230,31 +231,62 @@ public abstract class EBomToPbomBase {
* @param * @param
*/ */
protected void liftingLayer() { protected void liftingLayer() {
for (BomNewEbomParentVO vo : allBomDetail) { List<BomNewEbomParentVO> parentsEntList = allBomDetail.stream().filter(u -> u.getBomRowId() > 0).collect(Collectors.toList());
if (StrUtil.isNotBlank(vo.getProjectType()) && vo.getProjectType().equals(VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getProductTypeKey())) { for (BomNewEbomParentVO vo : parentsEntList) {
BomNewEbomParentVO lastVirtualPackage = getLastVirtualPackageNew(vo, VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE); List<BomNewEbomParentVO> parentEntChild = allBomDetail.stream().filter(u -> u.getParentRowId().equals(vo.getBomRowId())).collect(Collectors.toList());
if (Objects.nonNull(lastVirtualPackage)) { for (BomNewEbomParentVO child : parentEntChild) {
liftingLayerSummary(lastVirtualPackage, vo); if (StrUtil.isNotBlank(child.getProjectType()) && child.getProjectType().equals(VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getProductTypeKey())) {
vo.setSourceRowId(String.valueOf(vo.getParentRowId())); BomNewEbomParentVO lastVirtualPackage = getLastVirtualPackageNew(child, VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE);
vo.setSourceParentMaterialNo(getParentMaterialNo(vo.getBomRowId())); if (Objects.nonNull(lastVirtualPackage)) {
vo.setParentRowId(lastVirtualPackage.getBomRowId()); BomNewEbomParentVO newEnt = liftingLayerSummary(lastVirtualPackage, child);
result.add(vo); newEnt.setSourceRowId(String.valueOf(child.getParentRowId()));
newEnt.setSourceParentMaterialNo(vo.getMaterialNo());
newEnt.setParentRowId(lastVirtualPackage.getBomRowId());
result.add(newEnt);
}
continue;
} }
continue; if (StrUtil.isNotBlank(vo.getProjectType()) && vo.getProjectType().equals(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getProductTypeKey())) {
} BomNewEbomParentVO lastVirtualPackage = getLastVirtualPackageNew(vo, VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE);
if (StrUtil.isNotBlank(vo.getProjectType()) && vo.getProjectType().equals(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getProductTypeKey())) { if (Objects.nonNull(lastVirtualPackage)) {
BomNewEbomParentVO lastVirtualPackage = getLastVirtualPackageNew(vo, VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE); BomNewEbomParentVO newEnt = liftingLayerSummary(lastVirtualPackage, child);
if (Objects.nonNull(lastVirtualPackage)) { newEnt.setSourceRowId(String.valueOf(child.getParentRowId()));
liftingLayerSummary(lastVirtualPackage, vo); newEnt.setSourceParentMaterialNo(vo.getMaterialNo());
vo.setSourceRowId(String.valueOf(vo.getParentRowId())); newEnt.setParentRowId(lastVirtualPackage.getBomRowId());
vo.setSourceParentMaterialNo(getParentMaterialNo(vo.getBomRowId())); result.add(newEnt);
vo.setParentRowId(lastVirtualPackage.getBomRowId()); }
result.add(vo); continue;
} }
continue; result.add(child);
} }
result.add(vo);
} }
// 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);
// }
} }
/** /**
@ -263,20 +295,28 @@ public abstract class EBomToPbomBase {
* @param lastVirtualPackage 虚拟包 * @param lastVirtualPackage 虚拟包
* @param vo 提层项 * @param vo 提层项
*/ */
private void liftingLayerSummary(BomNewEbomParentVO lastVirtualPackage, BomNewEbomParentVO vo) { private BomNewEbomParentVO liftingLayerSummary(BomNewEbomParentVO lastVirtualPackage, BomNewEbomParentVO vo) {
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();
BeanUtil.copyProperties(vo,newEnt);
//构建虚拟包组成
buildVirtualPackageComposition(lastVirtualPackage, vo);
if (CollUtil.isNotEmpty(parentList)) { if (CollUtil.isNotEmpty(parentList)) {
for (BomNewEbomParentVO ent : parentList) { for (BomNewEbomParentVO ent : parentList) {
sum = NumberUtil.mul(sum, parentList.get(0).getNum()); sum = NumberUtil.mul(sum, ent.getNum());
//构建虚拟包组成 //构建虚拟包组成
buildVirtualPackageComposition(lastVirtualPackage, vo); buildVirtualPackageComposition(lastVirtualPackage, ent);
} }
} }
vo.setNum(sum); newEnt.setBomRowId(0L);
newEnt.setChildBomRowId(0L);
newEnt.setNum(sum);
return newEnt;
} }
@ -717,12 +757,17 @@ 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);
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();
} }