From 0b7987d87da102639579351595cbba567cc083a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A7=E7=B1=B3?= <470431449@qq.com> Date: Mon, 19 Aug 2024 17:28:44 +0800 Subject: [PATCH] =?UTF-8?q?EBOM=E8=BD=ACPBOM=E6=96=B0=E9=80=BB=E8=BE=91-?= =?UTF-8?q?=E4=B8=8D=E5=8F=91=E7=94=9F=E4=BA=A7-20240819?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pojo/entity/BomNewPbomChildEntity.java | 13 +++++ .../bomnew/pojo/vo/BomNewEbomParentVO.java | 7 +++ .../bomnew/pojo/vo/BomNewPbomParentVO.java | 19 ++++++- .../domain/EBom/ChangeImpactUpgrade.java | 3 ++ .../service/domain/EBom/EBomToPBom.java | 7 ++- .../service/domain/EBom/EBomToPBomFor31.java | 7 ++- .../domain/EBom/EBomToPBomForFormal.java | 10 ++++ .../domain/EBom/EBomToPBomForFormal31.java | 14 +++++- .../service/domain/EBom/EBomToPbomBase.java | 50 ++++++++++++++----- .../mapper/master/BomNewPbomChildMapper.xml | 5 +- 10 files changed, 115 insertions(+), 20 deletions(-) diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/BomNewPbomChildEntity.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/BomNewPbomChildEntity.java index 6b4e1858..31fc3bd5 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/BomNewPbomChildEntity.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/BomNewPbomChildEntity.java @@ -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; } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomNewEbomParentVO.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomNewEbomParentVO.java index 197ae3f6..6dc8c979 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomNewEbomParentVO.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomNewEbomParentVO.java @@ -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 diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomNewPbomParentVO.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomNewPbomParentVO.java index 03d20c54..8defbefd 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomNewPbomParentVO.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomNewPbomParentVO.java @@ -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; diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/ChangeImpactUpgrade.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/ChangeImpactUpgrade.java index ae252edb..68102b87 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/ChangeImpactUpgrade.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/ChangeImpactUpgrade.java @@ -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); } } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomToPBom.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomToPBom.java index abfa48c0..85caa0fd 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomToPBom.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomToPBom.java @@ -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 child = result.stream().filter(u -> u.getParentRowId().equals(vo.getBomRowId()) && !childDelMaterialNos.contains(u.getMaterialNo())).distinct().collect(Collectors.toList()); List 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); } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomToPBomFor31.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomToPBomFor31.java index e23163b3..2699eb66 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomToPBomFor31.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomToPBomFor31.java @@ -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 child = facBomDataMp.get(facCode).stream().filter(u -> u.getParentRowId().equals(vo.getBomRowId()) && !childDelMaterialNos.contains(u.getMaterialNo())).distinct().collect(Collectors.toList()); List 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); } } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomToPBomForFormal.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomToPBomForFormal.java index de3d1d0f..058b315a 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomToPBomForFormal.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomToPBomForFormal.java @@ -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); } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomToPBomForFormal31.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomToPBomForFormal31.java index d9c69824..1326b5f5 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomToPBomForFormal31.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomToPBomForFormal31.java @@ -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 child = facBomDataMp.get(facCode).stream().filter(u -> u.getParentRowId().equals(vo.getBomRowId()) && !childDelMaterialNos.contains(u.getMaterialNo())).distinct().collect(Collectors.toList()); List 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); } } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomToPbomBase.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomToPbomBase.java index 74dc3531..f9cd629e 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomToPbomBase.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomToPbomBase.java @@ -96,16 +96,12 @@ public abstract class EBomToPbomBase { List oldBomNoTChildren = oldBomDetail.stream().filter(u -> !EBomConstant.PROJECT_TYPE_T.equalsIgnoreCase(u.getProjectType())).collect(Collectors.toList()); //新BOM 除T项外 List newBomNoTChildren = newChildren.stream().filter(u -> !EBomConstant.PROJECT_TYPE_T.equalsIgnoreCase(u.getProjectType())).collect(Collectors.toList()); - if (oldBomNoTChildren.size() != newBomNoTChildren.size()) { - return false; - } - //除T项外的对比 - Map 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 oldChildSet = oldBomNoTChildren.stream().map(u -> u.getMaterialNoAndNumAndProjectType()).collect(Collectors.toSet()); + Set newChildSet = newBomNoTChildren.stream().map(u -> u.getMaterialNoAndNumAndProjectType()).collect(Collectors.toSet()); + if(!oldChildSet.equals(newChildSet)){ + return false; } + //当T项外都一致时,直接更新T项 List 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 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 pBomChildList = SpringUtil.getBean(BomNewPbomChildService.class).lambdaQuery().eq(BomNewPbomChildEntity::getParentRowId, oldParent.getRowId()).list(); + Set oldSet = pBomChildList.stream().map(u -> StrUtil.join("",u.getMaterialNo(), u.getNum(), u.getProjectType())).collect(Collectors.toSet()); + Set 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"); diff --git a/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewPbomChildMapper.xml b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewPbomChildMapper.xml index 41b485ee..9038b605 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewPbomChildMapper.xml +++ b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewPbomChildMapper.xml @@ -35,11 +35,14 @@ + + + - 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 + 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