发布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")
@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));
@ -178,9 +178,6 @@ public class PBomApi extends BaseApi {
VUtils.isTure(!PBomStatusEnum.PUBLISH.equalsValue(parent.getStatus())).throwMessage("只有已发布的BOM才能生成MBom");
//
VUtils.isTure(!parent.getFacCode().equals(EBomConstant.MAIN_FACTORY_CODE_1010)).throwMessage("只有1010工厂BOM才能进行分工厂");
return ResultVO.success(bomNewPbomParentService.convertToMBom(bomRowId));
}

View File

@ -446,4 +446,13 @@ public class BomNewPbomParentService extends ServiceImpl<BomNewPbomParentMapper,
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 io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import org.checkerframework.checker.units.qual.A;
import java.time.LocalDateTime;
import java.util.ArrayList;
@ -44,6 +45,10 @@ public class ConvertToMBom {
private List<ConvertToMBomDTO> allChild_1010;
private List<ConvertToMBomDTO> allChildTreeList_1020 = new ArrayList<>();
private List<ConvertToMBomDTO> allChildTreeList_1010 = new ArrayList();
@Getter
List<BomNewMbomParentEntity> mBomParentResult = new ArrayList<>();
@ -54,7 +59,9 @@ public class ConvertToMBom {
public ConvertToMBom(BomNewPbomParentEntity inRootParent, List<BomNewPbomParentVO> inAllChild) {
this.parent = inRootParent;
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();
BeanUtil.copyProperties(parent, mBomParent);
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)) {
mBomParent.setCurrentVersion(VersionUtil.getNextVersion(oldParent.getCurrentVersion()));
oldParent.setLastVersionIs(0);
@ -92,37 +99,35 @@ public class ConvertToMBom {
mBomParent.setModifyTime(LocalDateTime.now());
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
*/
private void buildChild(List<ConvertToMBomDTO> allChild, Long bomRowId) {
List<ConvertToMBomDTO> childBomTree = ConvertToMbomUtil.toTree(parent.getRowId(), allChild_1010, ConvertToMBomDTO::getRelParentRowId, ConvertToMBomDTO::getBomRowId);
List<ConvertToMBomDTO> parentChildren;
Long parentRowId = 0L;
for (ConvertToMBomDTO item : childBomTree) {
List<ConvertToMBomDTO> childBomTree = ConvertToMbomUtil.toTree(parent.getRowId(), allChild, ConvertToMBomDTO::getRelParentRowId, ConvertToMBomDTO::getBomRowId);
; for (ConvertToMBomDTO item : childBomTree) {
//构建子级
if (item.getDelIs().equals(0)) {
parentRowId = buildChildDo(item, bomRowId, 0L);
}
parentChildren = item.getChildNodes();
while (CollUtil.isNotEmpty(parentChildren)) {
for (ConvertToMBomDTO itemChild : parentChildren) {
if (item.getDelIs().equals(0)) {
parentRowId = buildChildDo(itemChild, bomRowId, parentRowId);
}
parentChildren = itemChild.getChildNodes();
}
buildMBomChildDo(item, 0L,bomRowId);
}
}
}
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);
for (ConvertToMBomDTO item : allChildTree) {
if(VirtualPackageTypeEnum.DELIVERY_PACKAGE.equalsValue(item.getVirtualPartType()) ){
List<ConvertToMBomDTO> childBomTree = ConvertToMbomUtil.toTree(parent.getRowId(), allChildTreeList_1020, ConvertToMBomDTO::getRelParentRowId, ConvertToMBomDTO::getBomRowId);
for (ConvertToMBomDTO item : childBomTree) {
if (VirtualPackageTypeEnum.DELIVERY_PACKAGE.equalsValue(item.getVirtualPartType())) {
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);
}
}
@ -162,100 +168,101 @@ public class ConvertToMBom {
}
private void handler1010() {
List<ConvertToMBomDTO> childBomTree = ConvertToMbomUtil.toTree(parent.getRowId(), allChild_1010, ConvertToMBomDTO::getParentRowId, ConvertToMBomDTO::getBomRowId);
List<ConvertToMBomDTO> parentChildren;
for (ConvertToMBomDTO item : childBomTree) {
//默认
item.setRelParentRowId(item.getParentRowId());
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();
}
}
recursionHandlerChild1010(item);
}
}
/**
* 处理1020
*/
private void recursionHandlerChild1010(ConvertToMBomDTO item) {
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() {
List<ConvertToMBomDTO> childBomTree = ConvertToMbomUtil.toTree(parent.getRowId(), allChild_1020, ConvertToMBomDTO::getParentRowId, ConvertToMBomDTO::getBomRowId);
//虚拟包名称加仙桃
initFac1020Info(childBomTree);
List<ConvertToMBomDTO> parentChildren;
//31下直发包
ConvertToMBomDTO directDeliveryPackage;
ConvertToMBomDTO parentNode = Convert.convert(ConvertToMBomDTO.class, parent);
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) {
//默认
childItem.setRelParentRowId(childItem.getParentRowId());
setDel(childItem, EBomConstant.XIAN_TAO_FACTORY_CODE_1020);
//非31下的直发包
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;
}
}
ConvertToMBomDTO directDeliveryPackage = item.getChildNodes().stream().filter(u -> VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.equalsValue(u.getVirtualPartType())).collect(Collectors.toList()).get(0);
VUtils.isTure(Objects.isNull(directDeliveryPackage)).throwMessage("发货包下,没有直发包");
recursionHandlerChild1020(item, directDeliveryPackage);
}
//处理制作包无下级的情况
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下的直发包
*/
private void handlerDirectDeliveryPackage(ConvertToMBomDTO childItem, String facCode, ConvertToMBomDTO directDeliveryPackage) {
ConvertToMBomDTO relParent = getParent(childItem.getParentRowId(), facCode);
while (Objects.nonNull(relParent) && !VirtualPackageTypeEnum.MAKING_PACKAGE.equalsValue(relParent.getVirtualPartType())) {
childItem.setNum(NumberUtil.mul(childItem.getNum(), relParent.getNum()));
relParent = getParent(relParent.getParentRowId(), facCode);
if (!childItem.getParentRowId().equals(parent.getRowId())) {
ConvertToMBomDTO relParent = getParent(childItem.getParentRowId(), facCode);
while (Objects.nonNull(relParent) && !VirtualPackageTypeEnum.MAKING_PACKAGE.equalsValue(relParent.getVirtualPartType())) {
childItem.setNum(NumberUtil.mul(childItem.getNum(), relParent.getNum()));
relParent = getParent(relParent.getParentRowId(), facCode);
}
childItem.setRelParentRowId(directDeliveryPackage.getBomRowId());
}
childItem.setRelParentRowId(directDeliveryPackage.getBomRowId());
}
/**
* 处理一般材料
* 处理一般材料(提层)
*
* @param childItem
* @param facCode
*/
private void handlerMaterial(ConvertToMBomDTO childItem, String facCode) {
ConvertToMBomDTO relParent = getParent(childItem.getParentRowId(), facCode);
while (Objects.nonNull(relParent) && relParent.getDelIs().equals(1)) {
childItem.setNum(NumberUtil.mul(childItem.getNum(), relParent.getNum()));
relParent = getParent(relParent.getParentRowId(), facCode);
if (!childItem.getParentRowId().equals(parent.getRowId())) {
ConvertToMBomDTO relParent = getParent(childItem.getParentRowId(), facCode);
while (Objects.nonNull(relParent) && relParent.getDelIs().equals(1)) {
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) {