发布Mbom

This commit is contained in:
大米 2024-01-06 13:42:02 +08:00
parent 9f20578fef
commit 94cfdfb291
3 changed files with 102 additions and 89 deletions

View File

@ -125,7 +125,7 @@ public class PBomApi extends BaseApi {
@PostMapping("createTechnologyPackage") @PostMapping("createTechnologyPackage")
@ApiOperation("编辑-创建虚拟包") @ApiOperation("编辑-创建虚拟包")
public ResultVO<BaseMaterialVO> createTechnologyPackage(TechnologyPackageParam packageParam) throws IOException { public ResultVO<BaseMaterialVO> createTechnologyPackage(@Valid @RequestBody TechnologyPackageParam packageParam) throws IOException {
return ResultVO.success( bomNewPbomParentService.createTechnologyPackage(packageParam)); return ResultVO.success( bomNewPbomParentService.createTechnologyPackage(packageParam));
@ -178,9 +178,6 @@ public class PBomApi extends BaseApi {
VUtils.isTure(!PBomStatusEnum.PUBLISH.equalsValue(parent.getStatus())).throwMessage("只有已发布的BOM才能生成MBom"); VUtils.isTure(!PBomStatusEnum.PUBLISH.equalsValue(parent.getStatus())).throwMessage("只有已发布的BOM才能生成MBom");
// //
VUtils.isTure(!parent.getFacCode().equals(EBomConstant.MAIN_FACTORY_CODE_1010)).throwMessage("只有1010工厂BOM才能进行分工厂"); VUtils.isTure(!parent.getFacCode().equals(EBomConstant.MAIN_FACTORY_CODE_1010)).throwMessage("只有1010工厂BOM才能进行分工厂");
return ResultVO.success(bomNewPbomParentService.convertToMBom(bomRowId)); return ResultVO.success(bomNewPbomParentService.convertToMBom(bomRowId));
} }

View File

@ -446,4 +446,13 @@ public class BomNewPbomParentService extends ServiceImpl<BomNewPbomParentMapper,
return true; return true;
} }
/**
* 获取CRM 订单号
* @param materialNo
* @return
*/
public String getCrmOrderNo(String materialNo){
return "";
}
} }

View File

@ -24,6 +24,7 @@ import com.nflg.product.bomnew.util.VUtils;
import com.nflg.product.bomnew.util.VersionUtil; import com.nflg.product.bomnew.util.VersionUtil;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Getter; import lombok.Getter;
import org.checkerframework.checker.units.qual.A;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
@ -44,6 +45,10 @@ public class ConvertToMBom {
private List<ConvertToMBomDTO> allChild_1010; private List<ConvertToMBomDTO> allChild_1010;
private List<ConvertToMBomDTO> allChildTreeList_1020 = new ArrayList<>();
private List<ConvertToMBomDTO> allChildTreeList_1010 = new ArrayList();
@Getter @Getter
List<BomNewMbomParentEntity> mBomParentResult = new ArrayList<>(); List<BomNewMbomParentEntity> mBomParentResult = new ArrayList<>();
@ -54,7 +59,9 @@ public class ConvertToMBom {
public ConvertToMBom(BomNewPbomParentEntity inRootParent, List<BomNewPbomParentVO> inAllChild) { public ConvertToMBom(BomNewPbomParentEntity inRootParent, List<BomNewPbomParentVO> inAllChild) {
this.parent = inRootParent; this.parent = inRootParent;
this.allChild_1010 = Convert.toList(ConvertToMBomDTO.class, inAllChild); this.allChild_1010 = Convert.toList(ConvertToMBomDTO.class, inAllChild);
Collections.copy(allChild_1010, allChild_1020);
allChild_1020 = (List<ConvertToMBomDTO>) ((ArrayList<ConvertToMBomDTO>) allChild_1010).clone();
} }
/** /**
@ -77,7 +84,7 @@ public class ConvertToMBom {
BomNewMbomParentEntity mBomParent = new BomNewMbomParentEntity(); BomNewMbomParentEntity mBomParent = new BomNewMbomParentEntity();
BeanUtil.copyProperties(parent, mBomParent); BeanUtil.copyProperties(parent, mBomParent);
BomNewMbomParentEntity oldParent = SpringUtil.getBean(BomNewMbomParentService.class).lambdaQuery().eq(BomNewMbomParentEntity::getMaterialNo, parent.getMaterialNo()) BomNewMbomParentEntity oldParent = SpringUtil.getBean(BomNewMbomParentService.class).lambdaQuery().eq(BomNewMbomParentEntity::getMaterialNo, parent.getMaterialNo())
.eq(BomNewMbomParentEntity::getLastVersionIs, 1).eq(BomNewMbomParentEntity::getFacCode,facCode).one(); .eq(BomNewMbomParentEntity::getLastVersionIs, 1).eq(BomNewMbomParentEntity::getFacCode, facCode).one();
if (Objects.nonNull(oldParent)) { if (Objects.nonNull(oldParent)) {
mBomParent.setCurrentVersion(VersionUtil.getNextVersion(oldParent.getCurrentVersion())); mBomParent.setCurrentVersion(VersionUtil.getNextVersion(oldParent.getCurrentVersion()));
oldParent.setLastVersionIs(0); oldParent.setLastVersionIs(0);
@ -92,37 +99,35 @@ public class ConvertToMBom {
mBomParent.setModifyTime(LocalDateTime.now()); mBomParent.setModifyTime(LocalDateTime.now());
this.mBomParentResult.add(mBomParent); this.mBomParentResult.add(mBomParent);
buildChild(EBomConstant.MAIN_FACTORY_CODE_1010.equals(facCode)? allChild_1010:allChild_1020,mBomParent.getRowId()); buildChild(EBomConstant.MAIN_FACTORY_CODE_1010.equals(facCode) ? allChildTreeList_1010 : allChildTreeList_1020, mBomParent.getRowId());
} }
/** /**
* 构建子级 * 构建子级
* *
* @param allChild * @param allChild
*/ */
private void buildChild(List<ConvertToMBomDTO> allChild, Long bomRowId) { private void buildChild(List<ConvertToMBomDTO> allChild, Long bomRowId) {
List<ConvertToMBomDTO> childBomTree = ConvertToMbomUtil.toTree(parent.getRowId(), allChild_1010, ConvertToMBomDTO::getRelParentRowId, ConvertToMBomDTO::getBomRowId); List<ConvertToMBomDTO> childBomTree = ConvertToMbomUtil.toTree(parent.getRowId(), allChild, ConvertToMBomDTO::getRelParentRowId, ConvertToMBomDTO::getBomRowId);
; for (ConvertToMBomDTO item : childBomTree) {
List<ConvertToMBomDTO> parentChildren;
Long parentRowId = 0L;
for (ConvertToMBomDTO item : childBomTree) {
//构建子级 //构建子级
if (item.getDelIs().equals(0)) { if (item.getDelIs().equals(0)) {
parentRowId = buildChildDo(item, bomRowId, 0L); buildMBomChildDo(item, 0L,bomRowId);
}
parentChildren = item.getChildNodes();
while (CollUtil.isNotEmpty(parentChildren)) {
for (ConvertToMBomDTO itemChild : parentChildren) {
if (item.getDelIs().equals(0)) {
parentRowId = buildChildDo(itemChild, bomRowId, parentRowId);
}
parentChildren = itemChild.getChildNodes();
}
} }
}
}
private void buildMBomChildDo(ConvertToMBomDTO item , Long parentRowId ,Long bomRowId){
if (item.getDelIs().equals(0)) {
parentRowId = buildChildDo(item, bomRowId, parentRowId);
}
for (ConvertToMBomDTO itemChild : item.getChildNodes()) {
buildMBomChildDo(itemChild, parentRowId,bomRowId);
} }
} }
@ -130,16 +135,17 @@ public class ConvertToMBom {
/** /**
* 处理制作下为空的虚拟包 * 处理制作下为空的虚拟包
* 当制作下子级为空时--删除该发货制作和直发 * 当制作下子级为空时--删除该发货制作和直发
* @param allChildTree *
* @param
*/ */
private void handEmptyMakePackage(List<ConvertToMBomDTO> allChildTree){ private void handEmptyMakePackage() {
List<ConvertToMBomDTO> childBomTree = ConvertToMbomUtil.toTree(parent.getRowId(), allChild_1020, ConvertToMBomDTO::getRelParentRowId, ConvertToMBomDTO::getBomRowId); List<ConvertToMBomDTO> childBomTree = ConvertToMbomUtil.toTree(parent.getRowId(), allChildTreeList_1020, ConvertToMBomDTO::getRelParentRowId, ConvertToMBomDTO::getBomRowId);
for (ConvertToMBomDTO item : allChildTree) { for (ConvertToMBomDTO item : childBomTree) {
if(VirtualPackageTypeEnum.DELIVERY_PACKAGE.equalsValue(item.getVirtualPartType()) ){ if (VirtualPackageTypeEnum.DELIVERY_PACKAGE.equalsValue(item.getVirtualPartType())) {
List<ConvertToMBomDTO> makeChild = item.getChildNodes().stream().filter(u -> VirtualPackageTypeEnum.MAKING_PACKAGE.equalsValue(u.getVirtualPartType())).collect(Collectors.toList()); List<ConvertToMBomDTO> makeChild = item.getChildNodes().stream().filter(u -> VirtualPackageTypeEnum.MAKING_PACKAGE.equalsValue(u.getVirtualPartType())).collect(Collectors.toList());
if(CollUtil.isEmpty(makeChild) || CollUtil.isEmpty(makeChild.get(0).getChildNodes().stream().filter(u->u.getDelIs().equals(0)).collect(Collectors.toList()))){ if (CollUtil.isEmpty(makeChild) || CollUtil.isEmpty(makeChild.get(0).getChildNodes().stream().filter(u -> u.getDelIs().equals(0)).collect(Collectors.toList()))) {
item.setRelParentRowId(0L); item.setRelParentRowId(0L);
} }
} }
@ -162,100 +168,101 @@ public class ConvertToMBom {
} }
private void handler1010() { private void handler1010() {
List<ConvertToMBomDTO> childBomTree = ConvertToMbomUtil.toTree(parent.getRowId(), allChild_1010, ConvertToMBomDTO::getParentRowId, ConvertToMBomDTO::getBomRowId); List<ConvertToMBomDTO> childBomTree = ConvertToMbomUtil.toTree(parent.getRowId(), allChild_1010, ConvertToMBomDTO::getParentRowId, ConvertToMBomDTO::getBomRowId);
List<ConvertToMBomDTO> parentChildren;
for (ConvertToMBomDTO item : childBomTree) { for (ConvertToMBomDTO item : childBomTree) {
//默认 //默认
item.setRelParentRowId(item.getParentRowId()); recursionHandlerChild1010(item);
setDel(item, EBomConstant.MAIN_FACTORY_CODE_1010);
parentChildren = item.getChildNodes();
while (CollUtil.isNotEmpty(parentChildren)) {
for (ConvertToMBomDTO childItem : parentChildren) {
//默认
childItem.setRelParentRowId(childItem.getParentRowId());
setDel(childItem, EBomConstant.MAIN_FACTORY_CODE_1010);
handlerMaterial(childItem, EBomConstant.MAIN_FACTORY_CODE_1010);
parentChildren = childItem.getChildNodes();
}
}
} }
} }
/** private void recursionHandlerChild1010(ConvertToMBomDTO item) {
* 处理1020
*/ item.setRelParentRowId(item.getParentRowId());
setDel(item, EBomConstant.MAIN_FACTORY_CODE_1010);
handlerMaterial(item, EBomConstant.MAIN_FACTORY_CODE_1010);
this.allChildTreeList_1010.add(item);
for (ConvertToMBomDTO itemChild : item.getChildNodes()) {
recursionHandlerChild1010(itemChild);
}
}
private void handler1020() { private void handler1020() {
List<ConvertToMBomDTO> childBomTree = ConvertToMbomUtil.toTree(parent.getRowId(), allChild_1020, ConvertToMBomDTO::getParentRowId, ConvertToMBomDTO::getBomRowId); List<ConvertToMBomDTO> childBomTree = ConvertToMbomUtil.toTree(parent.getRowId(), allChild_1020, ConvertToMBomDTO::getParentRowId, ConvertToMBomDTO::getBomRowId);
//虚拟包名称加仙桃 //虚拟包名称加仙桃
initFac1020Info(childBomTree); initFac1020Info(childBomTree);
List<ConvertToMBomDTO> parentChildren;
//31下直发包
ConvertToMBomDTO directDeliveryPackage;
ConvertToMBomDTO parentNode = Convert.convert(ConvertToMBomDTO.class, parent);
for (ConvertToMBomDTO item : childBomTree) { for (ConvertToMBomDTO item : childBomTree) {
//默认
item.setRelParentRowId(item.getParentRowId());
setDel(item, EBomConstant.XIAN_TAO_FACTORY_CODE_1020);
parentChildren = item.getChildNodes();
directDeliveryPackage = item.getChildNodes().stream().filter(u -> VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.equalsValue(u.getVirtualPartType())).collect(Collectors.toList()).get(0);
VUtils.isTure(Objects.isNull(directDeliveryPackage)).throwMessage("发货包下,没有直发包");
while (CollUtil.isNotEmpty(parentChildren)) {
parentNode = item;
for (ConvertToMBomDTO childItem : parentChildren) {
//默认 ConvertToMBomDTO directDeliveryPackage = item.getChildNodes().stream().filter(u -> VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.equalsValue(u.getVirtualPartType())).collect(Collectors.toList()).get(0);
childItem.setRelParentRowId(childItem.getParentRowId()); VUtils.isTure(Objects.isNull(directDeliveryPackage)).throwMessage("发货包下,没有直发包");
setDel(childItem, EBomConstant.XIAN_TAO_FACTORY_CODE_1020);
//非31下的直发包 recursionHandlerChild1020(item, directDeliveryPackage);
if (VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.equalsValue(parentNode.getVirtualPartType()) && parentNode.getRowId() != directDeliveryPackage.getRowId()) {
handlerDirectDeliveryPackage(childItem, EBomConstant.XIAN_TAO_FACTORY_CODE_1020, directDeliveryPackage);
} else {
handlerMaterial(childItem, EBomConstant.XIAN_TAO_FACTORY_CODE_1020);
}
parentChildren = childItem.getChildNodes();
parentNode = childItem;
}
}
} }
//处理制作包无下级的情况 //处理制作包无下级的情况
handEmptyMakePackage(childBomTree); handEmptyMakePackage();
} }
private void recursionHandlerChild1020(ConvertToMBomDTO item, ConvertToMBomDTO directDeliveryPackage) {
item.setRelParentRowId(item.getParentRowId());
setDel(item, EBomConstant.XIAN_TAO_FACTORY_CODE_1020);
//非31下的直发包
if(!item.getParentRowId().equals(parent.getRowId())) {
ConvertToMBomDTO parentNode = getParent(item.getParentRowId(), EBomConstant.XIAN_TAO_FACTORY_CODE_1020);
if (VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.equalsValue(parentNode.getVirtualPartType()) && parentNode.getRowId() != directDeliveryPackage.getRowId()) {
handlerDirectDeliveryPackage(item, EBomConstant.XIAN_TAO_FACTORY_CODE_1020, directDeliveryPackage);
} else {
handlerMaterial(item, EBomConstant.XIAN_TAO_FACTORY_CODE_1020);
}
}
this.allChildTreeList_1020.add(item);
for (ConvertToMBomDTO itemChild : item.getChildNodes()) {
recursionHandlerChild1020(itemChild, directDeliveryPackage);
}
}
/** /**
* 处理直发包下的物料 * 处理直发包下的物料
* 所有直发包归到31下的直发包 * 所有直发包归到31下的直发包
*/ */
private void handlerDirectDeliveryPackage(ConvertToMBomDTO childItem, String facCode, ConvertToMBomDTO directDeliveryPackage) { private void handlerDirectDeliveryPackage(ConvertToMBomDTO childItem, String facCode, ConvertToMBomDTO directDeliveryPackage) {
ConvertToMBomDTO relParent = getParent(childItem.getParentRowId(), facCode); if (!childItem.getParentRowId().equals(parent.getRowId())) {
while (Objects.nonNull(relParent) && !VirtualPackageTypeEnum.MAKING_PACKAGE.equalsValue(relParent.getVirtualPartType())) { ConvertToMBomDTO relParent = getParent(childItem.getParentRowId(), facCode);
childItem.setNum(NumberUtil.mul(childItem.getNum(), relParent.getNum())); while (Objects.nonNull(relParent) && !VirtualPackageTypeEnum.MAKING_PACKAGE.equalsValue(relParent.getVirtualPartType())) {
relParent = getParent(relParent.getParentRowId(), facCode); childItem.setNum(NumberUtil.mul(childItem.getNum(), relParent.getNum()));
relParent = getParent(relParent.getParentRowId(), facCode);
}
childItem.setRelParentRowId(directDeliveryPackage.getBomRowId());
} }
childItem.setRelParentRowId(directDeliveryPackage.getBomRowId());
} }
/** /**
* 处理一般材料 * 处理一般材料(提层)
* *
* @param childItem * @param childItem
* @param facCode * @param facCode
*/ */
private void handlerMaterial(ConvertToMBomDTO childItem, String facCode) { private void handlerMaterial(ConvertToMBomDTO childItem, String facCode) {
ConvertToMBomDTO relParent = getParent(childItem.getParentRowId(), facCode); if (!childItem.getParentRowId().equals(parent.getRowId())) {
while (Objects.nonNull(relParent) && relParent.getDelIs().equals(1)) { ConvertToMBomDTO relParent = getParent(childItem.getParentRowId(), facCode);
childItem.setNum(NumberUtil.mul(childItem.getNum(), relParent.getNum())); while (Objects.nonNull(relParent) && relParent.getDelIs().equals(1)) {
relParent = getParent(relParent.getParentRowId(), facCode); childItem.setNum(NumberUtil.mul(childItem.getNum(), relParent.getNum()));
relParent = getParent(relParent.getParentRowId(), facCode);
}
childItem.setRelParentRowId(relParent.getBomRowId());
} }
childItem.setRelParentRowId(relParent.getBomRowId());
} }
private void setDel(ConvertToMBomDTO item, String facCode) { private void setDel(ConvertToMBomDTO item, String facCode) {