EBOM转PBOM新逻辑-不发生产-20240819
This commit is contained in:
parent
9d8e471998
commit
0b7987d87d
|
|
@ -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;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
@ -114,7 +114,7 @@ public class EBomToPBomFor31 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)) {
|
||||
if(compareContentIsSame(vo, mergeChild, facCode)){
|
||||
continue;
|
||||
}
|
||||
BomNewPbomParentEntity parentEnt = buildPBomParent(vo, facCode, parentList);
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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,8 +118,14 @@ 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;
|
||||
// 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)){
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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()) {
|
||||
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;
|
||||
}
|
||||
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项外都一致时,直接更新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-处于正式表
|
||||
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);
|
||||
//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");
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
Loading…
Reference in New Issue