EBOM转PBOM新逻辑-不发生产-20240819

This commit is contained in:
大米 2024-08-19 17:28:44 +08:00
parent 9d8e471998
commit 0b7987d87d
10 changed files with 115 additions and 20 deletions

View File

@ -243,6 +243,19 @@ public class BomNewPbomChildEntity implements Serializable {
@ApiModelProperty(value = "来源状态1-EBOM导入、2-PBOM创建、3-E->P修改")
private Integer sourceStatus;
@TableField(value = "original_material_no")
@ApiModelProperty(value = "原始物料编码-来自ebom(不会变)")
private String originalMaterialNo;
@TableField(value = "original_num")
@ApiModelProperty(value = "原始数量-来自ebom(不会变)")
private BigDecimal originalNum;
@TableField(value = "original_project_type")
@ApiModelProperty(value = "原始项目类别-来自ebom(不会变)")
private String originalProjectType;
private static final long serialVersionUID = -76633783850936076L;
}

View File

@ -361,6 +361,13 @@ public class BomNewEbomParentVO extends BaseMaterialVO implements Serializable {
@ApiModelProperty("因子级都为F or Z 项而不转")
private Integer notToPBomForFZ=0;
private String materialNoAndNumAndProjectType;
public String getMaterialNoAndNumAndProjectType() {
return StrUtil.join("",getMaterialNo(),getNum(),getProjectType());
}
private static final long serialVersionUID = 1L;
@Override

View File

@ -299,11 +299,28 @@ public class BomNewPbomParentVO extends BaseMaterialVO implements Serializable {
@ApiModelProperty(value = "来源状态1-EBOM导入、2-PBOM创建、3-E->P修改")
private String sourceStatusName;
@ApiModelProperty("原始物料编码")
private String originalMaterialNo;
@ApiModelProperty("原始数量")
private BigDecimal originalNum;
@ApiModelProperty("原始项目类别")
private String originalProjectType;
private String materialNoAndProjectType;
private String materialNoAndNumAndProjectType;
public String getMaterialNoAndProjectType() {
return StrUtil.join(getMaterialNo(),getProjectType());
return StrUtil.join("",getMaterialNo(),getProjectType());
}
public String getMaterialNoAndNumAndProjectType() {
return StrUtil.join("",StrUtil.isNotBlank(getOriginalMaterialNo())?getOriginalMaterialNo(): getMaterialNo(),Objects.nonNull(getOriginalNum())?getOriginalNum(): getNum(),StrUtil.isNotBlank(getOriginalProjectType())?getOriginalProjectType(): getProjectType());
}
private static final long serialVersionUID = 1L;

View File

@ -77,6 +77,9 @@ public class ChangeImpactUpgrade extends EBomToPbomBase {
childEnt.setParentRowId(vParent.getRowId());
childEnt.setFacCode(facCode);
childEnt.setIdentityNo(StrUtil.join("-", vParent.getMaterialNo(), eb.getMaterialNo()));
childEnt.setOriginalMaterialNo(eb.getMaterialNo());
childEnt.setOriginalProjectType(eb.getProjectType());
childEnt.setOriginalNum(eb.getNum());
this.pBomChildResult.add(childEnt);
}
}

View File

@ -58,7 +58,7 @@ public class EBomToPBom extends EBomToPbomBase {
//buildPBomParent(parent, facCode);
for (BomNewEbomParentVO vo : parentList) {
String hasConvertKey = StrUtil.join("-", facCode, vo.getBomRowId());
if (hasConvert.contains(hasConvertKey) || PBomStatusEnum.PUBLISH.equalsValue(vo.getStatus())) {
if (hasConvert.contains(hasConvertKey) || (PBomStatusEnum.PUBLISH.equalsValue(vo.getStatus()) && !VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.equalsValue(vo.getVirtualPartType()) && !VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.equalsValue(vo.getVirtualPartType()))) {
continue;
}
hasConvert.add(hasConvertKey);
@ -74,10 +74,10 @@ public class EBomToPBom extends EBomToPbomBase {
//子级
List<BomNewEbomParentVO> child = result.stream().filter(u -> u.getParentRowId().equals(vo.getBomRowId()) && !childDelMaterialNos.contains(u.getMaterialNo())).distinct().collect(Collectors.toList());
List<BomNewEbomParentVO> mergeChild = mergeChild(child);
//判断pbom 是否一致
if( compareContentIsSame(vo, mergeChild, facCode)){
continue;
}
BomNewPbomParentEntity parentEnt = buildPBomParent(vo, facCode,parentList);
if(Objects.isNull(parentEnt)){
continue;
@ -93,6 +93,9 @@ public class EBomToPBom extends EBomToPbomBase {
childEnt.setFacCode(facCode);
childEnt.setSourceRowId(eb.getRowId());
childEnt.setIdentityNo(StrUtil.join("-", parentEnt.getMaterialNo(), eb.getMaterialNo()));
childEnt.setOriginalMaterialNo(eb.getMaterialNo());
childEnt.setOriginalProjectType(eb.getProjectType());
childEnt.setOriginalNum(eb.getNum());
this.pBomChildResult.add(childEnt);
}

View File

@ -99,7 +99,7 @@ public class EBomToPBomFor31 extends EBomToPbomBase {
.collect(Collectors.toList()), BomNewEbomParentVO::getBomRowId);
for (BomNewEbomParentVO vo : parentList) {
String hasConvertKey = StrUtil.join("-", facCode, vo.getBomRowId());
if (hasConvert.contains(hasConvertKey) || PBomStatusEnum.PUBLISH.equalsValue(vo.getStatus())) {
if (hasConvert.contains(hasConvertKey) || (PBomStatusEnum.PUBLISH.equalsValue(vo.getStatus()) && !VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.equalsValue(vo.getVirtualPartType()) && !VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.equalsValue(vo.getVirtualPartType()) )) {
continue;
}
hasConvert.add(hasConvertKey);
@ -133,6 +133,9 @@ public class EBomToPBomFor31 extends EBomToPbomBase {
childEnt.setIdentityNo(StrUtil.join("-", parentEnt.getMaterialNo(), eb.getMaterialNo()));
childEnt.setSource(PbomSourceEnum.FROM_EBOM.getValue());
childEnt.setSourceStatus(PbomSourceStatusEnum.EBOM.getValue());
childEnt.setOriginalMaterialNo(eb.getMaterialNo());
childEnt.setOriginalNum(eb.getNum());
childEnt.setOriginalProjectType(eb.getProjectType());
this.pBomChildResult.add(childEnt);
}
}

View File

@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil;
import com.alibaba.excel.enums.BooleanEnum;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.nflg.product.bomnew.constant.ConvertToPBomModelEnum;
import com.nflg.product.bomnew.constant.VirtualPackageTypeEnum;
import com.nflg.product.bomnew.pojo.entity.BomNewPbomChildEntity;
import com.nflg.product.bomnew.pojo.entity.BomNewPbomParentEntity;
import com.nflg.product.bomnew.pojo.vo.BomNewEbomParentVO;
@ -74,6 +75,12 @@ public class EBomToPBomForFormal extends EBomToPbomBase {
if( compareContentIsSame(vo, mergeChild, facCode)){
continue;
}
// 直发包 或发货前装配包 对比PBOM 已有版本
if (VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.equalsValue(vo.getVirtualPartType()) || VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.equalsValue(vo.getVirtualPartType())) {
if(pBomSameIs(vo,mergeChild,facCode)){
continue;
}
}
BomNewPbomParentEntity parentEnt = buildPBomParent(vo, facCode,parentList);
if(Objects.isNull(parentEnt)){
@ -90,6 +97,9 @@ public class EBomToPBomForFormal extends EBomToPbomBase {
childEnt.setFacCode(facCode);
childEnt.setSourceRowId(eb.getRowId());
childEnt.setIdentityNo(StrUtil.join("-", parentEnt.getMaterialNo(), eb.getMaterialNo()));
childEnt.setOriginalMaterialNo(eb.getMaterialNo());
childEnt.setOriginalNum(eb.getNum());
childEnt.setOriginalProjectType(eb.getProjectType());
this.pBomChildResult.add(childEnt);
}

View File

@ -7,6 +7,7 @@ import com.alibaba.excel.enums.BooleanEnum;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.nflg.product.bomnew.constant.ConvertToPBomModelEnum;
import com.nflg.product.bomnew.constant.EBomConstant;
import com.nflg.product.bomnew.constant.EBomStatusEnum;
import com.nflg.product.bomnew.constant.VirtualPackageTypeEnum;
import com.nflg.product.bomnew.pojo.entity.BomNewPbomChildEntity;
import com.nflg.product.bomnew.pojo.entity.BomNewPbomParentEntity;
@ -117,9 +118,15 @@ public class EBomToPBomForFormal31 extends EBomToPbomBase {
//子级
List<BomNewEbomParentVO> child = facBomDataMp.get(facCode).stream().filter(u -> u.getParentRowId().equals(vo.getBomRowId()) && !childDelMaterialNos.contains(u.getMaterialNo())).distinct().collect(Collectors.toList());
List<BomNewEbomParentVO> mergeChild = mergeChild(child);
// if( compareContentIsSame(vo, mergeChild, facCode)){
// continue;
// }
// 直发包 或发货前装配包 对比PBOM 已有版本
if (VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.equalsValue(vo.getVirtualPartType()) || VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.equalsValue(vo.getVirtualPartType())) {
if(compareContentIsSame(vo,mergeChild,facCode)){
continue;
}
}
BomNewPbomParentEntity parentEnt = buildPBomParent(vo, facCode,parentList);
if(Objects.isNull(parentEnt)){
continue;
@ -134,6 +141,9 @@ public class EBomToPBomForFormal31 extends EBomToPbomBase {
childEnt.setParentRowId(parentEnt.getRowId());
childEnt.setFacCode(facCode);
childEnt.setIdentityNo(StrUtil.join("-", parentEnt.getMaterialNo(), eb.getMaterialNo()));
childEnt.setOriginalMaterialNo(eb.getMaterialNo());
childEnt.setOriginalNum(eb.getNum());
childEnt.setOriginalProjectType(eb.getProjectType());
this.pBomChildResult.add(childEnt);
}
}

View File

@ -96,16 +96,12 @@ public abstract class EBomToPbomBase {
List<BomNewPbomParentVO> oldBomNoTChildren = oldBomDetail.stream().filter(u -> !EBomConstant.PROJECT_TYPE_T.equalsIgnoreCase(u.getProjectType())).collect(Collectors.toList());
//新BOM 除T项外
List<BomNewEbomParentVO> newBomNoTChildren = newChildren.stream().filter(u -> !EBomConstant.PROJECT_TYPE_T.equalsIgnoreCase(u.getProjectType())).collect(Collectors.toList());
if (oldBomNoTChildren.size() != newBomNoTChildren.size()) {
Set<String> oldChildSet = oldBomNoTChildren.stream().map(u -> u.getMaterialNoAndNumAndProjectType()).collect(Collectors.toSet());
Set<String> newChildSet = newBomNoTChildren.stream().map(u -> u.getMaterialNoAndNumAndProjectType()).collect(Collectors.toSet());
if(!oldChildSet.equals(newChildSet)){
return false;
}
//除T项外的对比
Map<String, BomNewPbomParentVO> oldBomMap = oldBomNoTChildren.stream().collect(Collectors.toMap(BomNewPbomParentVO::getMaterialNoAndProjectType, u -> u, (k1, k2) -> k1));
for (BomNewEbomParentVO newVo : newBomNoTChildren) {
if (!oldBomMap.containsKey(newVo.getMaterialNoAndProductType()) || !Objects.equals(newVo.getNum(), oldBomMap.get(newVo.getMaterialNoAndProductType()).getNum())) {
return false;
}
}
//当T项外都一致时直接更新T项
List<BomNewPbomParentVO> bomDetailForT = oldBomDetail.stream().filter(u -> EBomConstant.PROJECT_TYPE_T.equalsIgnoreCase(u.getProcureType())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(bomDetailForT)) {
@ -121,6 +117,9 @@ public abstract class EBomToPbomBase {
childEnt.setParentRowId(oldParent.getRowId());
childEnt.setFacCode(facCode);
childEnt.setIdentityNo(StrUtil.join("-", oldParent.getMaterialNo(), netT.getMaterialNo()));
childEnt.setOriginalMaterialNo(netT.getMaterialNo());
childEnt.setOriginalNum(netT.getNum());
childEnt.setOriginalProjectType(netT.getProjectType());
this.pBomChildResult.add(childEnt);
}
}
@ -198,14 +197,41 @@ public abstract class EBomToPbomBase {
return null;
} else { //pbom-处于正式表
//Ebom为已发布时则直接跳过 直发包发货前装配包是则需对比Bom明细一致则跳过否则升级
if (!EBomStatusEnum.PUBLISHED.equalsValue(parentVo.getStatus()) || (VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.equalsValue(parentVo.getVirtualPartType()) || VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.equalsValue(parentVo.getVirtualPartType()))) {
String version = StrUtil.isBlank(parentVo.getCurrentVersion()) ? VersionUtil.getNextVersion("") : parentVo.getCurrentVersion();
String bomVersion = VersionUtil.compare(version, oldParent.getCurrentVersion()) > 0 ? version : VersionUtil.getNextVersion(oldParent.getCurrentVersion());
return buildParentEntity(parentVo, facCode, oldParent, bomVersion);
}
return null;
}
}
/**
* Pbom明细对比
* @param pVo
* @param newChildren
* @param facCode
* @return 一样则返回true 否则返回 false
*/
protected boolean pBomSameIs(BomNewEbomParentVO pVo, List<BomNewEbomParentVO> newChildren, String facCode){
BomNewPbomParentEntity oldParent = SpringUtil.getBean(BomNewPbomParentService.class).lambdaQuery()
.eq(BomNewPbomParentEntity::getMaterialNo, pVo.getMaterialNo())
.eq(BomNewPbomParentEntity::getFacCode, facCode).last(" order by current_version desc limit 1").one();
//正式才需对比
if(Objects.nonNull(oldParent) && PBomStatusEnum.PUBLISH.getValue()<= oldParent.getStatus()){
List<BomNewPbomChildEntity> pBomChildList = SpringUtil.getBean(BomNewPbomChildService.class).lambdaQuery().eq(BomNewPbomChildEntity::getParentRowId, oldParent.getRowId()).list();
Set<String> oldSet = pBomChildList.stream().map(u -> StrUtil.join("",u.getMaterialNo(), u.getNum(), u.getProjectType())).collect(Collectors.toSet());
Set<String> newSet = newChildren.stream().map(u -> StrUtil.join("", u.getMaterialNo(), u.getNum(), u.getProjectType())).collect(Collectors.toSet());
if(oldSet.equals(newSet)){
return true;
}
}
return false;
}
private BomNewPbomParentEntity buildParentEntity(BomNewEbomParentVO parentVo, String facCode, BomNewPbomParentEntity oldParent, String bomVersion) {
BomNewPbomParentEntity pBomParent = new BomNewPbomParentEntity();
BeanUtil.copyProperties(parentVo, pBomParent, "sourceRowId");

View File

@ -35,11 +35,14 @@
<result column="virtual_part_type" property="virtualPartType" jdbcType="INTEGER"/>
<result column="virtual_part_root_material_no" property="virtualPartRootMaterialNo"/>
<result column="bom_version_row_id" property="bomVersionRowId" jdbcType="BIGINT" />
<result column="original_material_no" property="originalMaterialNo" jdbcType="VARCHAR"/>
<result column="original_num" property="orderNumber" jdbcType="DECIMAL" />
<result column="original_project_type" property="originalProjectType" jdbcType="VARCHAR"/>
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
row_id, parent_row_id, identity_no, fac_code, order_number, drawing_no, material_no, material_name, material_desc, material_texture, material_unit, material_category_code, unit_weight, num, total_weight, project_type, production_factory_code,production_factory_code_input_type, set_production_factory_time, super_material_status, virtual_part_is, created_by, created_time, modify_time, source_row_id, remark, source_parent_material_no ,virtual_part_type ,virtual_part_root_material_no ,bom_version_row_id </sql>
row_id, parent_row_id, identity_no, fac_code, order_number, drawing_no, material_no, material_name, material_desc, material_texture, material_unit, material_category_code, unit_weight, num, total_weight, project_type, production_factory_code,production_factory_code_input_type, set_production_factory_time, super_material_status, virtual_part_is, created_by, created_time, modify_time, source_row_id, remark, source_parent_material_no ,virtual_part_type ,virtual_part_root_material_no ,bom_version_row_id ,original_material_no , original_num, original_project_type </sql>
<delete id="delByRowId">