1、31码同时生成1020虚拟包

This commit is contained in:
大米 2024-05-06 11:05:15 +08:00
parent f0add5e114
commit 807e177d39
5 changed files with 153 additions and 38 deletions

View File

@ -22,7 +22,7 @@ import java.io.IOException;
* ebom-临时过渡接口 * ebom-临时过渡接口
* *
*/ */
@Api(tags = "EBom临时接口") @Api(tags = "EBom临时过渡版接口")
@RestController @RestController
@RequestMapping("bom/new/ebom/temp") @RequestMapping("bom/new/ebom/temp")
public class EbomTempApi extends BaseApi { public class EbomTempApi extends BaseApi {

View File

@ -1,8 +1,11 @@
package com.nflg.product.bomnew.constant; package com.nflg.product.bomnew.constant;
import com.google.common.collect.ImmutableList;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import java.util.List;
/** /**
* @author 大米 * @author 大米
* @date 2023/11/11 20:09 * @date 2023/11/11 20:09
@ -28,6 +31,9 @@ public class EBomConstant {
public static final String XIAN_TAO_FACTORY_Name_1020="仙桃"; public static final String XIAN_TAO_FACTORY_Name_1020="仙桃";
//虚拟包-1010 和1020 图号名称 1020 名称后面
public static final List<String> VIRTUAL_PACKAGE_DRAWING_NO_1010_AND_1020= ImmutableList.of("",EBomConstant.XIAN_TAO_FACTORY_Name_1020);
@AllArgsConstructor @AllArgsConstructor
@Getter @Getter

View File

@ -792,18 +792,12 @@ public class BomNewEbomParentService extends ServiceImpl<BomNewEbomParentMapper,
.throwMessage("异常状态下不允许生成虚拟包"); .throwMessage("异常状态下不允许生成虚拟包");
LogRecordContext.putVariable("gvbom", root); LogRecordContext.putVariable("gvbom", root);
// Boolean flag = true;
// for (Integer f : paramDto.getVirtualPackageValue()) {
// flag = flag & ((root.getVirtrualPackageEnum() & f) == f);
// }
// VUtils.isTure(flag).throwMessage("已生成虚拟包,无需重复生成");
BomNewEbomParentVO parent = Convert.convert(BomNewEbomParentVO.class, root); BomNewEbomParentVO parent = Convert.convert(BomNewEbomParentVO.class, root);
materialMainService.intiMaterialInfo(ImmutableList.of(parent), BomNewEbomParentVO::getMaterialNo); materialMainService.intiMaterialInfo(ImmutableList.of(parent), BomNewEbomParentVO::getMaterialNo);
if (parent.getMaterialCategoryCode().startsWith("30") || ImmutableList.of("200601", "200401").contains(parent.getMaterialCategoryCode())) { if (parent.getMaterialCategoryCode().startsWith("30") || ImmutableList.of("200601", "200401").contains(parent.getMaterialCategoryCode())) {
VirtualPackageBase generate; VirtualPackageBase generate;
if (parent.getMaterialCategoryCode().startsWith("30")) { if (parent.getMaterialCategoryCode().startsWith("30")) {
generate = new VirtualPackageFor31(paramDto.getBomRowId(), paramDto.getVirtualPackageValue()); generate = new VirtualPackageFor31Temp(paramDto.getBomRowId(), paramDto.getVirtualPackageValue());
} else { } else {
generate = new VirtualPackageFor21(paramDto.getBomRowId(), paramDto.getVirtualPackageValue()); generate = new VirtualPackageFor21(paramDto.getBomRowId(), paramDto.getVirtualPackageValue());
} }

View File

@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.spring.SpringUtil; import cn.hutool.extra.spring.SpringUtil;
import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.google.common.collect.ImmutableList;
import com.nflg.product.base.core.conmon.util.SessionUtil; import com.nflg.product.base.core.conmon.util.SessionUtil;
import com.nflg.product.bomnew.constant.*; import com.nflg.product.bomnew.constant.*;
import com.nflg.product.bomnew.pojo.dto.AddVirtrualMaterialDTO; import com.nflg.product.bomnew.pojo.dto.AddVirtrualMaterialDTO;
@ -17,10 +18,12 @@ import com.nflg.product.bomnew.service.MaterialMainService;
import com.nflg.product.bomnew.service.MaterialService; import com.nflg.product.bomnew.service.MaterialService;
import com.nflg.product.bomnew.util.VersionUtil; import com.nflg.product.bomnew.util.VersionUtil;
import lombok.Getter; import lombok.Getter;
import org.bouncycastle.LICENSE;
import java.io.IOException; import java.io.IOException;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.*; import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -72,6 +75,40 @@ public abstract class VirtualPackageBase {
} }
//过渡临时版-生成虚拟包物料编码
protected void transitionGenerateVMNoFor31(String parentDrawingNo, List<BomNewEbomChildEntity> child, VirtualPackageTypeEnum... virtualPackageTypeEnums) {
List<AddVirtrualMaterialDTO> params=new ArrayList<>();
//需新建的物料编码
Set<String> vDrawingNoNewSet=new HashSet<>();
for (BomNewEbomChildEntity ch : child) {
for (VirtualPackageTypeEnum vpy : virtualPackageTypeEnums) {
for(String fac : EBomConstant.VIRTUAL_PACKAGE_DRAWING_NO_1010_AND_1020) {
String vDrawingNo = String.join("", "(", parentDrawingNo, ")", "(", ch.getMaterialName()+fac, ")", "(", vpy.getConMaterialName(), ")");
vDrawingNoNewSet.add(vDrawingNo);
}
}
}
List<MaterialMainEntity> oldMaterialList = SpringUtil.getBean(MaterialMainService.class).lambdaQuery().in(MaterialMainEntity::getDrawingNo, vDrawingNoNewSet)
.list();
Map<String, MaterialMainEntity> oldMaterialMap = oldMaterialList.stream().collect(Collectors.toMap(MaterialMainEntity::getDrawingNo, Function.identity(), (k1, k2) -> k1));
for (BomNewEbomChildEntity ch : child) {
for (VirtualPackageTypeEnum vpy : virtualPackageTypeEnums) {
for (String fac : EBomConstant.VIRTUAL_PACKAGE_DRAWING_NO_1010_AND_1020) {
String vDrawingNo = String.join("", "(", parentDrawingNo, ")", "(", ch.getMaterialName()+fac, ")", "(", vpy.getConMaterialName(), ")");
params.add(buildAddMaterialParamDo(StrUtil.join("", ch.getRowId().toString(), vpy.getConMaterialName()+fac), vDrawingNo, vDrawingNo, vpy, oldMaterialMap));
}
}
}
List<AddVirtrualMaterialDTO> addM = params.stream().filter(u -> StrUtil.isBlank(u.getMaterialNo())).collect(Collectors.toList());
if(CollUtil.isNotEmpty(addM)) {
Map<String, AddVirtrualMaterialDTO> vMNosResult = SpringUtil.getBean(MaterialService.class).batchAddMaterial(addM);
vMNos.putAll(vMNosResult);
}
}
/** /**
* 申请虚拟包 * 申请虚拟包
* @param child * @param child
@ -121,6 +158,84 @@ public abstract class VirtualPackageBase {
return ent; return ent;
} }
private AddVirtrualMaterialDTO buildAddMaterialParamDo(String key, String drawingNo, String materialName, VirtualPackageTypeEnum virtualPackageType,Map<String,MaterialMainEntity> oldMaterialMap){
MaterialMainEntity oldMaterial = oldMaterialMap.get(drawingNo);
AddVirtrualMaterialDTO ent=new AddVirtrualMaterialDTO();
if(Objects.nonNull(oldMaterial)){
ent.setKey(key);
ent.setDrawingNo(drawingNo);
ent.setMaterialNo(oldMaterial.getMaterialNo());
ent.setMaterialName(oldMaterial.getMaterialName());
ent.setMaterialDesc(oldMaterial.getMaterialDesc());
ent.setMaterialCategoryCode(oldMaterial.getMaterialCategoryCode());
vMNos.put(ent.getKey(),ent);
}
else {
ent.setKey(key);
ent.setDrawingNo(drawingNo);
ent.setMaterialName(materialName);
ent.setMaterialDesc(materialName);
ent.setMaterialCategoryCode(virtualPackageType.getMaterialCategoryCode());
}
return ent;
}
/**
* 过渡临时版-创建BOM
* @param rowId
* @param virtualPackageTypeEnum
* @param orderNum
* @param p
* @return
*/
protected BomNewEbomParentEntity buildTransitionParentVirtualPackage(Long rowId, VirtualPackageTypeEnum virtualPackageTypeEnum, String orderNum, BomNewEbomParentEntity p,String fac) {
AddVirtrualMaterialDTO addM = vMNos.get(StrUtil.join("",rowId,virtualPackageTypeEnum.getConMaterialName(),fac));
BomNewEbomParentEntity oldParent= SpringUtil.getBean(BomNewEbomParentService.class).lambdaQuery()
.eq(BomNewEbomParentEntity::getMaterialNo, addM.getMaterialNo())
.eq(BomNewEbomParentEntity::getLastVersionIs,1)
//.ne(BomNewEbomParentEntity::getStatus, EBomStatusEnum.PUBLISHED.getValue())
.one();
if(Objects.nonNull(oldParent) && !EBomStatusEnum.PUBLISHED.equalsValue(oldParent.getStatus()) ){
return oldParent;
}
if(Objects.nonNull(oldParent)){
oldParent.setLastVersionIs(0);
this.parentResult.add(oldParent);
}
// String materialNo = SpringUtil.getBean(MaterialService.class).addMaterial(drawingNo, vMaterialName,materialDesc, virtualPackageType.getMaterialCategoryCode());
BomNewEbomParentEntity parent =new BomNewEbomParentEntity();
parent.setRowId(IdWorker.getId());
parent.setOrderNumber(StrUtil.isNotBlank(orderNum) ? StrUtil.padPre(orderNum,3,"0"):"001");
parent.setDrawingNo(addM.getDrawingNo() );
parent.setMaterialNo(addM.getMaterialNo());
parent.setMaterialName(addM.getMaterialName());
parent.setMaterialDesc(addM.getMaterialDesc());
parent.setCurrentVersion(VersionUtil.getNextVersion(Objects.nonNull(oldParent)?oldParent.getCurrentVersion():""));
parent.setVirtualPackageIs(1);
// parent.setProjectType("L");
// parent.setProjectTypeInputType(ProjectTypeInputTypeEnum.AUTO_MATCH.getValue());
parent.setShouldBomExist(1);
parent.setBomExist(1);
parent.setMaterialUnit("PC");
parent.setSourceRowId(0L);
parent.setLastVersionIs(1);
parent.setNum(new BigDecimal(1));
parent.setDeviseUserCode(SessionUtil.getUserCode());
parent.setDeviseName(SessionUtil.getRealName());
parent.setCreatedBy(SessionUtil.getUserCode());
parent.setDeptName(SessionUtil.getDepartName());
parent.setSource(EBomSourceEnum.FROM_MDM.getValue());
//parent.setModifyTime(LocalDateTime.now());
parent.setStatus(p.getStatus());
parent.setEditStatus(p.getEditStatus());
this.parentResult.add(parent);
return parent;
}
protected BomNewEbomParentEntity buildParentVirtualPackage(Long rowId, VirtualPackageTypeEnum virtualPackageTypeEnum, String orderNum, BomNewEbomParentEntity p) { protected BomNewEbomParentEntity buildParentVirtualPackage(Long rowId, VirtualPackageTypeEnum virtualPackageTypeEnum, String orderNum, BomNewEbomParentEntity p) {
AddVirtrualMaterialDTO addM = vMNos.get(StrUtil.join("",rowId,virtualPackageTypeEnum.getConMaterialName())); AddVirtrualMaterialDTO addM = vMNos.get(StrUtil.join("",rowId,virtualPackageTypeEnum.getConMaterialName()));

View File

@ -3,6 +3,7 @@ package com.nflg.product.bomnew.service.domain.EBom;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.extra.spring.SpringUtil; import cn.hutool.extra.spring.SpringUtil;
import com.nflg.product.base.core.exception.NflgBusinessException; import com.nflg.product.base.core.exception.NflgBusinessException;
import com.nflg.product.bomnew.constant.EBomConstant;
import com.nflg.product.bomnew.constant.VirtualPackageTypeEnum; import com.nflg.product.bomnew.constant.VirtualPackageTypeEnum;
import com.nflg.product.bomnew.pojo.entity.BomNewEbomChildEntity; import com.nflg.product.bomnew.pojo.entity.BomNewEbomChildEntity;
import com.nflg.product.bomnew.pojo.entity.BomNewEbomParentEntity; import com.nflg.product.bomnew.pojo.entity.BomNewEbomParentEntity;
@ -35,52 +36,51 @@ public class VirtualPackageFor31Temp extends VirtualPackageBase {
@Override @Override
public void generateVirtualPackage() { public void generateVirtualPackage() {
// List<BomNewEbomChildEntity> child = getChild();
//SpringUtil.getBean(MaterialMainService.class).intiMaterialInfo(child);
BomNewEbomParentEntity parent = getParentByRowId(bomRowId); BomNewEbomParentEntity parent = getParentByRowId(bomRowId);
try { try {
//生成虚拟包 //生成虚拟包
if (CollUtil.isNotEmpty(children)) { if (CollUtil.isNotEmpty(children)) {
if (virtualPackageValue.contains(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue()) && (VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue() & parent.getVirtrualPackageEnum()) != VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue()){ if (virtualPackageValue.contains(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue()) && (VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue() & parent.getVirtrualPackageEnum()) != VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue()){
generateVMNoFor31(parent.getDrawingNo(), children, VirtualPackageTypeEnum.DELIVERY_PACKAGE, VirtualPackageTypeEnum.MAKING_PACKAGE transitionGenerateVMNoFor31(parent.getDrawingNo(), children, VirtualPackageTypeEnum.DELIVERY_PACKAGE, VirtualPackageTypeEnum.MAKING_PACKAGE
,VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE, VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE); ,VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE, VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE);
} }
else { else {
generateVMNoFor31(parent.getDrawingNo(), children, VirtualPackageTypeEnum.DELIVERY_PACKAGE, VirtualPackageTypeEnum.MAKING_PACKAGE transitionGenerateVMNoFor31(parent.getDrawingNo(), children, VirtualPackageTypeEnum.DELIVERY_PACKAGE, VirtualPackageTypeEnum.MAKING_PACKAGE
, VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE); , VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE);
} }
} }
for (BomNewEbomChildEntity item : children) { for (BomNewEbomChildEntity item : children) {
BomNewEbomParentEntity makingPackage=null; for(String fac: EBomConstant.VIRTUAL_PACKAGE_DRAWING_NO_1010_AND_1020) {
if((VirtualPackageTypeEnum.DELIVERY_PACKAGE.getValue()&parent.getVirtrualPackageEnum())!=VirtualPackageTypeEnum.DELIVERY_PACKAGE.getValue()) { BomNewEbomParentEntity makingPackage = null;
//构建发货包 if ((VirtualPackageTypeEnum.DELIVERY_PACKAGE.getValue() & parent.getVirtrualPackageEnum()) != VirtualPackageTypeEnum.DELIVERY_PACKAGE.getValue()) {
BomNewEbomParentEntity deliveryPackage = buildParentVirtualPackage(item.getRowId(), VirtualPackageTypeEnum.DELIVERY_PACKAGE, item.getOrderNumber(), parent); //构建发货包
//构建构建发货包下制作包 BomNewEbomParentEntity deliveryPackage = buildTransitionParentVirtualPackage(item.getRowId(), VirtualPackageTypeEnum.DELIVERY_PACKAGE, item.getOrderNumber(), parent,fac);
makingPackage = buildParentVirtualPackage(item.getRowId(), VirtualPackageTypeEnum.MAKING_PACKAGE, "002", parent); //构建构建发货包下制作包
//构建构建发货包下直发 makingPackage = buildTransitionParentVirtualPackage(item.getRowId(), VirtualPackageTypeEnum.MAKING_PACKAGE, "002", parent,fac);
BomNewEbomParentEntity directDeliveryPackage = buildParentVirtualPackage(item.getRowId(), VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE, "001", parent); //构建构建发货包下直发
BomNewEbomParentEntity directDeliveryPackage = buildTransitionParentVirtualPackage(item.getRowId(), VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE, "001", parent,fac);
//构建-产品下发货包-子级 //构建-产品下发货包-子级
buildChild(deliveryPackage, bomRowId, item.getOrderNumber(), VirtualPackageTypeEnum.DELIVERY_PACKAGE,parent.getMaterialNo()); buildChild(deliveryPackage, bomRowId, item.getOrderNumber(), VirtualPackageTypeEnum.DELIVERY_PACKAGE, parent.getMaterialNo());
//构建发货包-子级 //构建发货包-子级
buildChild(makingPackage, deliveryPackage.getRowId(), "002", VirtualPackageTypeEnum.MAKING_PACKAGE,parent.getMaterialNo()); buildChild(makingPackage, deliveryPackage.getRowId(), "002", VirtualPackageTypeEnum.MAKING_PACKAGE, parent.getMaterialNo());
buildChild(directDeliveryPackage, deliveryPackage.getRowId(), "001", VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE,parent.getMaterialNo()); buildChild(directDeliveryPackage, deliveryPackage.getRowId(), "001", VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE, parent.getMaterialNo());
BomNewEbomChildEntity itemUp = new BomNewEbomChildEntity(); BomNewEbomChildEntity itemUp = new BomNewEbomChildEntity();
itemUp.setRowId(item.getRowId()); itemUp.setRowId(item.getRowId());
itemUp.setParentRowId(makingPackage.getRowId()); itemUp.setParentRowId(makingPackage.getRowId());
this.childResult.add(itemUp); this.childResult.add(itemUp);
} }
// 包含发货前装配包 // 包含发货前装配包
if (virtualPackageValue.contains(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue()) && (VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue() & parent.getVirtrualPackageEnum()) != VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue()) { if (virtualPackageValue.contains(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue()) && (VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue() & parent.getVirtrualPackageEnum()) != VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue()) {
BomNewEbomParentEntity preAssemblyPackage = buildParentVirtualPackage(item.getRowId(), VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE, item.getOrderNumber(), parent); BomNewEbomParentEntity preAssemblyPackage = buildTransitionParentVirtualPackage(item.getRowId(), VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE, item.getOrderNumber(), parent,fac);
//构建构建发货前装配包 //构建构建发货前装配包
if(Objects.isNull(makingPackage)){ if (Objects.isNull(makingPackage)) {
makingPackage=getParentZhiZuo(item.getDrawingNo()); makingPackage = getParentZhiZuo(item.getDrawingNo());
}
buildChild(preAssemblyPackage, makingPackage.getRowId(), "001", VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE, parent.getMaterialNo());
} }
buildChild(preAssemblyPackage, makingPackage.getRowId(), "001", VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE,parent.getMaterialNo());
} }
} }
parent.setVirtrualPackageEnum(getVPackageNum(parent)); parent.setVirtrualPackageEnum(getVPackageNum(parent));