feat: [excel未处理问题9]生成虚拟包调整

This commit is contained in:
曹鹏飞 2024-04-24 15:11:57 +08:00
parent 5694f87128
commit 528cf20ab8
4 changed files with 91 additions and 64 deletions

View File

@ -785,7 +785,7 @@ public class BomNewEbomParentService extends ServiceImpl<BomNewEbomParentMapper,
//初始化虚拟包-判断枚举不是手工生成虚拟包的情况
checkAndInitVirtualPackageEnum(paramDto, root);
VUtils.isTure(root.getVirtrualPackageEnum() > 0).throwMessage("已生成过虚拟包不能2次生成");
// VUtils.isTure(root.getVirtrualPackageEnum() > 0).throwMessage("已生成过虚拟包不能2次生成");
VUtils.isTure(!Objects.equals(root.getExceptionStatus(), EBomExceptionStatusEnum.OK.getValue())
&& !Objects.equals(root.getExceptionStatus(), EBomExceptionStatusEnum.EXCEPT_NO_8.getValue()))
.throwMessage("异常状态下不允许生成虚拟包");
@ -806,6 +806,8 @@ public class BomNewEbomParentService extends ServiceImpl<BomNewEbomParentMapper,
} else {
generate = new VirtualPackageFor21(paramDto.getBomRowId(), paramDto.getVirtualPackageValue());
}
VUtils.isTure(!generate.canGenerateVirtualPackage()).throwMessage("没有需要处理的数据");
generate.generateVirtualPackage();
if (CollUtil.isNotEmpty(generate.getParentResult())) {

View File

@ -16,7 +16,6 @@ import com.nflg.product.bomnew.service.BomNewEbomParentService;
import com.nflg.product.bomnew.service.MaterialMainService;
import com.nflg.product.bomnew.service.MaterialService;
import com.nflg.product.bomnew.util.VersionUtil;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import java.io.IOException;
@ -36,10 +35,14 @@ public abstract class VirtualPackageBase {
@Getter
protected List<BomNewEbomChildEntity> childResult=new ArrayList<>();
@ApiModelProperty("物料bom行ID")
protected Long bomRowId;
@ApiModelProperty("虚拟包 1-发货包 2-制作包 4-直发包 8-发货前装配包")
//需要生成虚拟包的子节点
protected List<BomNewEbomChildEntity> children;
/*
* 虚拟包类型 1-发货包 2-制作包 4-直发包 8-发货前装配包
*/
protected List<Integer> virtualPackageValue;
//虚拟包编码
@ -53,9 +56,9 @@ public abstract class VirtualPackageBase {
* @param virtualPackageTypeEnums
* @return
*/
protected void generateVMNoFor31(String parentDrawingNo, List<BomNewEbomParentVO> child,VirtualPackageTypeEnum ... virtualPackageTypeEnums){
protected void generateVMNoFor31(String parentDrawingNo, List<BomNewEbomChildEntity> child, VirtualPackageTypeEnum... virtualPackageTypeEnums) {
List<AddVirtrualMaterialDTO> params=new ArrayList<>();
for ( BomNewEbomParentVO ch: child ) {
for (BomNewEbomChildEntity ch : child) {
for (VirtualPackageTypeEnum vpy : virtualPackageTypeEnums) {
String vDrawingNo = String.join("","(",parentDrawingNo,")","(",ch.getMaterialName(),")","(",vpy.getConMaterialName(),")" );
params.add(buildAddMaterialParamDo(StrUtil.join("",ch.getRowId().toString(), vpy.getConMaterialName()), vDrawingNo, vDrawingNo, vpy));
@ -224,6 +227,10 @@ public abstract class VirtualPackageBase {
*/
public abstract void generateVirtualPackage() throws IOException;
public abstract boolean canGenerateVirtualPackage();
public List<BomNewEbomChildEntity> getChildrenForGenerateVirtualPackage(Long bomRowId) {
}
}

View File

@ -1,15 +1,18 @@
package com.nflg.product.bomnew.service.domain.EBom;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.extra.spring.SpringUtil;
import com.google.common.collect.ImmutableList;
import com.nflg.product.bomnew.constant.VirtualPackageTypeEnum;
import com.nflg.product.bomnew.pojo.entity.BomNewEbomChildEntity;
import com.nflg.product.bomnew.pojo.entity.BomNewEbomParentEntity;
import com.nflg.product.bomnew.pojo.vo.BomNewEbomParentVO;
import com.nflg.product.bomnew.service.BomNewEbomChildService;
import com.nflg.product.bomnew.service.BomNewEbomParentService;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* 31物料生成虚拟包
@ -26,63 +29,77 @@ public class VirtualPackageFor21 extends VirtualPackageBase {
this.virtualPackageValue = virtualPackageValue;
}
/**
* 31物料生成虚拟包
* 21物料生成虚拟包
*/
@Override
public void generateVirtualPackage() {
BomNewEbomParentEntity parent = getParentByRowId(bomRowId);
BomNewEbomParentVO vo= Convert.convert(BomNewEbomParentVO.class,parent );
if(virtualPackageValue.contains(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue()) && (parent.getVirtrualPackageEnum()&VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue())!= VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue()){
generateVMNoF21(parent.getDrawingNo(), ImmutableList.of(vo),VirtualPackageTypeEnum.MAKING_PACKAGE, VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE,VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE);
}
else {
generateVMNoF21(parent.getDrawingNo(),ImmutableList.of(vo),VirtualPackageTypeEnum.MAKING_PACKAGE, VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE);
}
BomNewEbomChildEntity mpChild = SpringUtil.getBean(BomNewEbomChildService.class).lambdaQuery()
.eq(BomNewEbomChildEntity::getParentRowId, bomRowId)
.eq(BomNewEbomChildEntity::getVirtualPartType, VirtualPackageTypeEnum.MAKING_PACKAGE.getValue())
.one();
BomNewEbomParentEntity makingPackage = null;
if (Objects.isNull(mpChild)) {
BomNewEbomParentVO vo = Convert.convert(BomNewEbomParentVO.class, parent);
BomNewEbomParentEntity makingPackage=null;
if((parent.getVirtrualPackageEnum()& VirtualPackageTypeEnum.MAKING_PACKAGE.getValue())!=VirtualPackageTypeEnum.MAKING_PACKAGE.getValue()) {
//构建构建发货包下制作包
makingPackage = buildParentVirtualPackage(parent.getRowId(), VirtualPackageTypeEnum.MAKING_PACKAGE, "001", parent);
//构建构建发货包下直发
BomNewEbomParentEntity directDeliveryPackage = buildParentVirtualPackage(parent.getRowId(), VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE, "002", parent);
//构建产品-子级为制作包合直发包
buildChild(makingPackage, bomRowId, "001", VirtualPackageTypeEnum.MAKING_PACKAGE,parent.getMaterialNo());
buildChild(directDeliveryPackage, bomRowId, "002", VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE,parent.getMaterialNo());
}
if(virtualPackageValue.contains(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue()) && (parent.getVirtrualPackageEnum()& VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue())!=VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue()) {
//构建构建发货前装配包
if(Objects.isNull(makingPackage)){
makingPackage=getParentZhiZuo(parent.getDrawingNo());
if (virtualPackageValue.contains(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue()) && (parent.getVirtrualPackageEnum() & VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue()) != VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue()) {
generateVMNoF21(parent.getDrawingNo(), ImmutableList.of(vo), VirtualPackageTypeEnum.MAKING_PACKAGE, VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE, VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE);
} else {
generateVMNoF21(parent.getDrawingNo(), ImmutableList.of(vo), VirtualPackageTypeEnum.MAKING_PACKAGE, VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE);
}
BomNewEbomParentEntity preAssemblyPackage = buildParentVirtualPackage(parent.getRowId(), VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE, parent.getOrderNumber(), parent);
buildChild(preAssemblyPackage, makingPackage.getRowId(), "001", VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE,parent.getMaterialNo());
if ((parent.getVirtrualPackageEnum() & VirtualPackageTypeEnum.MAKING_PACKAGE.getValue()) != VirtualPackageTypeEnum.MAKING_PACKAGE.getValue()) {
//构建构建发货包下制作包
makingPackage = buildParentVirtualPackage(parent.getRowId(), VirtualPackageTypeEnum.MAKING_PACKAGE, "001", parent);
//构建构建发货包下直发
BomNewEbomParentEntity directDeliveryPackage = buildParentVirtualPackage(parent.getRowId(), VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE, "002", parent);
//构建产品-子级为制作包合直发包
buildChild(makingPackage, bomRowId, "001", VirtualPackageTypeEnum.MAKING_PACKAGE, parent.getMaterialNo());
buildChild(directDeliveryPackage, bomRowId, "002", VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE, parent.getMaterialNo());
}
} else {
makingPackage = SpringUtil.getBean(BomNewEbomParentService.class).lambdaQuery()
.eq(BomNewEbomParentEntity::getMaterialNo, mpChild.getMaterialNo())
.orderByDesc(BomNewEbomParentEntity::getRowId)
.last(" limit 1")
.one();
}
List<BomNewEbomParentVO> child = getChild();
if (virtualPackageValue.contains(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue()) && (parent.getVirtrualPackageEnum() & VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue()) != VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue()) {
//构建构建发货前装配包
BomNewEbomParentEntity preAssemblyPackage = buildParentVirtualPackage(parent.getRowId(), VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE, parent.getOrderNumber(), parent);
buildChild(preAssemblyPackage, makingPackage.getRowId(), "001", VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE, parent.getMaterialNo());
}
//List<BomNewEbomParentVO> child = getChild();
//将产品子级放制作包下
if(Objects.nonNull(makingPackage)) {
for (BomNewEbomParentVO item : child) {
BomNewEbomChildEntity itemUp = new BomNewEbomChildEntity();
itemUp.setRowId(item.getRowId());
itemUp.setParentRowId(makingPackage.getRowId());
this.childResult.add(itemUp);
for (BomNewEbomChildEntity item : children) {
// BomNewEbomChildEntity itemUp = new BomNewEbomChildEntity();
// itemUp.setRowId(item.getRowId());
// itemUp.setParentRowId(makingPackage.getRowId());
item.setParentRowId(makingPackage.getRowId());
this.childResult.add(item);
}
}
parent.setVirtrualPackageEnum(virtualPackageValue.stream().collect(Collectors.summingInt(u->u)));
parent.setVirtrualPackageEnum(virtualPackageValue.stream().mapToInt(u -> u).sum());
parentResult.add(parent);
}
@Override
public boolean canGenerateVirtualPackage() {
children = SpringUtil.getBean(BomNewEbomChildService.class)
.lambdaQuery()
.eq(BomNewEbomChildEntity::getParentRowId, bomRowId)
.eq(BomNewEbomChildEntity::getVirtualPartType, VirtualPackageTypeEnum.UN_VIRTUAL_PACKAGE.getValue())
.list();
if (CollUtil.isNotEmpty(children)) return true;
if (virtualPackageValue.contains(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue())) {
BomNewEbomParentEntity parent = getParentByRowId(bomRowId);
return (parent.getVirtrualPackageEnum() & VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue())
!= VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue();
}
return false;
}
}

View File

@ -6,8 +6,7 @@ import com.nflg.product.base.core.exception.NflgBusinessException;
import com.nflg.product.bomnew.constant.VirtualPackageTypeEnum;
import com.nflg.product.bomnew.pojo.entity.BomNewEbomChildEntity;
import com.nflg.product.bomnew.pojo.entity.BomNewEbomParentEntity;
import com.nflg.product.bomnew.pojo.vo.BomNewEbomParentVO;
import com.nflg.product.bomnew.service.MaterialMainService;
import com.nflg.product.bomnew.service.BomNewEbomChildService;
import nflg.product.common.constant.STATE;
import java.util.List;
@ -24,7 +23,7 @@ public class VirtualPackageFor31 extends VirtualPackageBase {
* @param bomRowId 物料BOM-行ID
* @param virtualPackageValue 要生成的虚拟包
*/
public VirtualPackageFor31(Long bomRowId ,List<Integer> virtualPackageValue){
public VirtualPackageFor31(Long bomRowId, List<Integer> virtualPackageValue) {
this.bomRowId=bomRowId;
this.virtualPackageValue=virtualPackageValue;
}
@ -35,25 +34,23 @@ public class VirtualPackageFor31 extends VirtualPackageBase {
@Override
public void generateVirtualPackage() {
List<BomNewEbomParentVO> child = getChild();
SpringUtil.getBean(MaterialMainService.class).intiMaterialInfo(child);
// List<BomNewEbomChildEntity> child = getChild();
//SpringUtil.getBean(MaterialMainService.class).intiMaterialInfo(child);
BomNewEbomParentEntity parent = getParentByRowId(bomRowId);
try {
//生成虚拟包
if(CollUtil.isNotEmpty(child)) {
if (CollUtil.isNotEmpty(children)) {
if (virtualPackageValue.contains(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue()) && (VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue() & parent.getVirtrualPackageEnum()) != VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue()){
generateVMNoFor31(parent.getDrawingNo(), child , VirtualPackageTypeEnum.DELIVERY_PACKAGE,VirtualPackageTypeEnum.MAKING_PACKAGE
generateVMNoFor31(parent.getDrawingNo(), children, VirtualPackageTypeEnum.DELIVERY_PACKAGE, VirtualPackageTypeEnum.MAKING_PACKAGE
,VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE, VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE);
}
else {
generateVMNoFor31(parent.getDrawingNo(),child, VirtualPackageTypeEnum.DELIVERY_PACKAGE, VirtualPackageTypeEnum.MAKING_PACKAGE
generateVMNoFor31(parent.getDrawingNo(), children, VirtualPackageTypeEnum.DELIVERY_PACKAGE, VirtualPackageTypeEnum.MAKING_PACKAGE
, VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE);
}
}
for (BomNewEbomParentVO item : child) {
for (BomNewEbomChildEntity item : children) {
BomNewEbomParentEntity makingPackage=null;
if((VirtualPackageTypeEnum.DELIVERY_PACKAGE.getValue()&parent.getVirtrualPackageEnum())!=VirtualPackageTypeEnum.DELIVERY_PACKAGE.getValue()) {
//构建发货包
@ -91,9 +88,16 @@ public class VirtualPackageFor31 extends VirtualPackageBase {
}catch (Exception ex) {
throw new NflgBusinessException(STATE.BusinessError, ex.getMessage());
}
}
@Override
public boolean canGenerateVirtualPackage() {
children = SpringUtil.getBean(BomNewEbomChildService.class)
.lambdaQuery()
.eq(BomNewEbomChildEntity::getParentRowId, bomRowId)
.eq(BomNewEbomChildEntity::getVirtualPartType, VirtualPackageTypeEnum.UN_VIRTUAL_PACKAGE.getValue())
.list();
return CollUtil.isNotEmpty(children);
}
private Integer getVPackageNum(BomNewEbomParentEntity parent){
@ -103,7 +107,4 @@ public class VirtualPackageFor31 extends VirtualPackageBase {
}
return vNum;
}
}