Merge remote-tracking branch 'origin/feature/DM/nflg-bom-transition' into feature/DM/nflg-bom-transition

This commit is contained in:
曹鹏飞 2024-07-05 08:27:54 +08:00
commit 45df3ddcef
8 changed files with 661 additions and 379 deletions

View File

@ -22,305 +22,305 @@ import java.util.Objects;
@Data @Data
@Accessors(chain = true) @Accessors(chain = true)
@ApiModel(value = "com-nflg-product-bomnew-pojo-new-vo-BomNewEbomParentFormalVO") @ApiModel(value = "com-nflg-product-bomnew-pojo-new-vo-BomNewEbomParentFormalVO")
public class BomNewEbomParentFormalVO extends BaseMaterialVO implements Serializable { public class BomNewEbomParentFormalVO extends BomNewEbomParentVO {
//
/** // /**
* 主键行ID-雪花 // * 主键行ID-雪花
*/ // */
@ApiModelProperty(value = "主键行ID-雪花") // @ApiModelProperty(value = "主键行ID-雪花")
private Long rowId; // private Long rowId;
//
/** // /**
* 批号-来自plm-临时 // * 批号-来自plm-临时
*/ // */
@ApiModelProperty(value = "批号-来自plm-临时") // @ApiModelProperty(value = "批号-来自plm-临时")
private String batchNo; // private String batchNo;
//
//
//
@ApiModelProperty("物料BOM版本ID") // @ApiModelProperty("物料BOM版本ID")
private Long bomRowId=0L; // private Long bomRowId=0L;
//
@ApiModelProperty("父级行ID") // @ApiModelProperty("父级行ID")
private Long parentRowId=0L; // private Long parentRowId=0L;
//
//
@ApiModelProperty("物料bom行ID") // @ApiModelProperty("物料bom行ID")
private Long childBomRowId; // private Long childBomRowId;
//
//
/** // /**
* 排序号 // * 排序号
*/ // */
@ApiModelProperty(value = "排序号") // @ApiModelProperty(value = "排序号")
private String orderNumber; // private String orderNumber;
//
//
//
//
/** // /**
* 单重 // * 单重
*/ // */
@ApiModelProperty(value = "单重") // @ApiModelProperty(value = "单重")
private BigDecimal unitWeight; // private BigDecimal unitWeight;
//
/** // /**
* 总重 // * 总重
*/ // */
@ApiModelProperty(value = "总重") // @ApiModelProperty(value = "总重")
private BigDecimal totalWeight; // private BigDecimal totalWeight;
//
/** // /**
* 版本号 // * 版本号
*/ // */
@ApiModelProperty(value = "版本号") // @ApiModelProperty(value = "版本号")
private String currentVersion; // private String currentVersion;
//
/** // /**
* 数量 // * 数量
*/ // */
@ApiModelProperty(value = "数量") // @ApiModelProperty(value = "数量")
private BigDecimal num; // private BigDecimal num;
//
/** // /**
* 来源1-原BOM转换 2-EXCE导入 3-MDM创建 // * 来源1-原BOM转换 2-EXCE导入 3-MDM创建
*/ // */
@ApiModelProperty(value = "来源1-原BOM转换 2-EXCE导入 3-MDM创建") // @ApiModelProperty(value = "来源1-原BOM转换 2-EXCE导入 3-MDM创建")
private Integer source; // private Integer source;
//
//
//
/** // /**
* 项目类别输入方式: 0-自动匹配 1-手工录入 3-来自物料主数据 4-来自历史统计 // * 项目类别输入方式: 0-自动匹配 1-手工录入 3-来自物料主数据 4-来自历史统计
*/ // */
@ApiModelProperty(value = "项目类别输入方式: 0-自动匹配 1-手工录入 3-来自物料主数据 4-来自历史统计") // @ApiModelProperty(value = "项目类别输入方式: 0-自动匹配 1-手工录入 3-来自物料主数据 4-来自历史统计")
private Integer projectTypeInputType; // private Integer projectTypeInputType;
//
/** // /**
* 是否跟节点 0- 1- // * 是否跟节点 0- 1-
*/ // */
@ApiModelProperty(value = "是否跟节点 0-否 1-是") // @ApiModelProperty(value = "是否跟节点 0-否 1-是")
private Integer rootIs; // private Integer rootIs;
//
/** // /**
* 是否应该有BOM 0- 1- // * 是否应该有BOM 0- 1-
*/ // */
@ApiModelProperty(value = "是否应该有BOM 0-否 1-是") // @ApiModelProperty(value = "是否应该有BOM 0-否 1-是")
private Integer shouldBomExist; // private Integer shouldBomExist;
//
/** // /**
* 超级物料 0- 1- // * 超级物料 0- 1-
*/ // */
@ApiModelProperty(value = "超级物料 0-否 1-是") // @ApiModelProperty(value = "超级物料 0-否 1-是")
private Integer superMaterialStatus; // private Integer superMaterialStatus;
//
/** // /**
* 是否有BOM: 0- 1- // * 是否有BOM: 0- 1-
*/ // */
@ApiModelProperty(value = "是否有BOM: 0-否 1-是") // @ApiModelProperty(value = "是否有BOM: 0-否 1-是")
private Integer bomExist; // private Integer bomExist;
//
//
public Integer getBomExist(){ // public Integer getBomExist(){
if(Objects.isNull(bomExist)){ // if(Objects.isNull(bomExist)){
bomExist=0; // bomExist=0;
} // }
return bomExist; // return bomExist;
} // }
//
/** // /**
* 是否最新版0- 1- // * 是否最新版0- 1-
*/ // */
@ApiModelProperty(value = "是否最新版0-否 1-是") // @ApiModelProperty(value = "是否最新版0-否 1-是")
private Integer lastVersionIs; // private Integer lastVersionIs;
//
/** // /**
* 1=待处理2=已处理 // * 1=待处理2=已处理
*/ // */
@ApiModelProperty(value = "1=待处理、2=已处理") // @ApiModelProperty(value = "1=待处理、2=已处理")
private Integer editStatus; // private Integer editStatus;
//
/** // /**
* 1=待复核2=已复核3=已退回4=定版已发布PBOM // * 1=待复核2=已复核3=已退回4=定版已发布PBOM
*/ // */
@ApiModelProperty(value = "1=待复核、2=已复核、3=已退回、4=定版已发布PBOM99=借用件 100=引用件") // @ApiModelProperty(value = "1=待复核、2=已复核、3=已退回、4=定版已发布PBOM99=借用件 100=引用件")
private Integer status; // private Integer status;
//
/** // /**
* 是否用户跟节点 0- 1- // * 是否用户跟节点 0- 1-
*/ // */
@ApiModelProperty(value = "是否用户跟节点 0-否 1-是") // @ApiModelProperty(value = "是否用户跟节点 0-否 1-是")
private Integer userRootIs; // private Integer userRootIs;
//
/** // /**
* 异常状态1=正常2=冻结/完全弃用异常3=递归异常4=数据不完整异常5=超级物料异常6=重复异常 // * 异常状态1=正常2=冻结/完全弃用异常3=递归异常4=数据不完整异常5=超级物料异常6=重复异常
*/ // */
@ApiModelProperty(value = "异常状态1=正常、2=冻结/完全弃用异常、3=递归异常、4=数据不完整异常、5=超级物料异常、6=重复异常 7=物料主数据不存在 8=项目类别为空 9=项目赋值异常(父级物料的项目类型为Q时子级中不能存在项目类别为Q的物料) 10=项目赋值异常(当父级物料的项目类型为F时子级中不能存在项目类型为F的物料) 11=未填写变更原因和技术通知单 12=数量需要用户确认 13=项目类型需要用户确认") // @ApiModelProperty(value = "异常状态1=正常、2=冻结/完全弃用异常、3=递归异常、4=数据不完整异常、5=超级物料异常、6=重复异常 7=物料主数据不存在 8=项目类别为空 9=项目赋值异常(父级物料的项目类型为Q时子级中不能存在项目类别为Q的物料) 10=项目赋值异常(当父级物料的项目类型为F时子级中不能存在项目类型为F的物料) 11=未填写变更原因和技术通知单 12=数量需要用户确认 13=项目类型需要用户确认")
private Integer exceptionStatus; // private Integer exceptionStatus;
//
/** // /**
* 来源行ID(原始BOM中的行ID) // * 来源行ID(原始BOM中的行ID)
*/ // */
@ApiModelProperty(value = "来源行ID(原始BOM中的行ID)") // @ApiModelProperty(value = "来源行ID(原始BOM中的行ID)")
private String sourceRowId; // private String sourceRowId;
//
/** // /**
* 设计人员编码 // * 设计人员编码
*/ // */
@ApiModelProperty(value = "设计人员编码") // @ApiModelProperty(value = "设计人员编码")
private String deviseUserCode; // private String deviseUserCode;
//
/** // /**
* 设计人员名称 // * 设计人员名称
*/ // */
@ApiModelProperty(value = "设计人员名称") // @ApiModelProperty(value = "设计人员名称")
private String deviseName; // private String deviseName;
//
//
//
//
/** // /**
* 创建人编码 // * 创建人编码
*/ // */
@ApiModelProperty(value = "创建人编码") // @ApiModelProperty(value = "创建人编码")
private String createdBy; // private String createdBy;
//
/** // /**
* 创建时间 // * 创建时间
*/ // */
@ApiModelProperty(value = "创建时间") // @ApiModelProperty(value = "创建时间")
private LocalDateTime createdTime; // private LocalDateTime createdTime;
//
/** // /**
* 创建人员所属岗位 0-设计人员 1-工艺人员 2-其他 // * 创建人员所属岗位 0-设计人员 1-工艺人员 2-其他
*/ // */
@ApiModelProperty(value = "创建人员所属岗位 0-设计人员 1-工艺人员 2-其他") // @ApiModelProperty(value = "创建人员所属岗位 0-设计人员 1-工艺人员 2-其他")
private Integer createdJob; // private Integer createdJob;
//
/** // /**
* 复核时间 // * 复核时间
*/ // */
@ApiModelProperty(value = "复核时间") // @ApiModelProperty(value = "复核时间")
private LocalDateTime auditTime; // private LocalDateTime auditTime;
//
/** // /**
* 复核人 // * 复核人
*/ // */
@ApiModelProperty(value = "复核人") // @ApiModelProperty(value = "复核人")
private String auditUserName; // private String auditUserName;
//
/** // /**
* 发布时间 // * 发布时间
*/ // */
@ApiModelProperty(value = "发布时间") // @ApiModelProperty(value = "发布时间")
private LocalDateTime releaseTime; // private LocalDateTime releaseTime;
//
/** // /**
* 发布人 // * 发布人
*/ // */
@ApiModelProperty(value = "发布人") // @ApiModelProperty(value = "发布人")
private String releaseUserName; // private String releaseUserName;
//
/** // /**
* 退回时间 // * 退回时间
*/ // */
@ApiModelProperty(value = "退回时间") // @ApiModelProperty(value = "退回时间")
private LocalDateTime revertTime; // private LocalDateTime revertTime;
//
/** // /**
* 退回人 // * 退回人
*/ // */
@ApiModelProperty(value = "退回人") // @ApiModelProperty(value = "退回人")
private String revertUserName; // private String revertUserName;
//
/** // /**
* 版本过期时间=下个版本的创建时间 // * 版本过期时间=下个版本的创建时间
*/ // */
@ApiModelProperty(value = "版本过期时间=下个版本的创建时间") // @ApiModelProperty(value = "版本过期时间=下个版本的创建时间")
private LocalDateTime expireEndTime; // private LocalDateTime expireEndTime;
//
//
public LocalDateTime getExpireEndTime(){ // public LocalDateTime getExpireEndTime(){
// new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("9999-12-31 23:59:59"); // // new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("9999-12-31 23:59:59");
//
return LocalDateTime.parse("9999-12-31 23:59:59", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); // return LocalDateTime.parse("9999-12-31 23:59:59", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
//
} // }
//
//
/** // /**
* 转换pbom时间 // * 转换pbom时间
*/ // */
@ApiModelProperty(value = "转换pbom时间") // @ApiModelProperty(value = "转换pbom时间")
private LocalDateTime convertToEbomTime; // private LocalDateTime convertToEbomTime;
//
/** // /**
* 备注 // * 备注
*/ // */
@ApiModelProperty(value = "备注") // @ApiModelProperty(value = "备注")
private String remark; // private String remark;
//
/** // /**
* 设计维护部门名称 // * 设计维护部门名称
*/ // */
@ApiModelProperty(value = "设计维护部门名称") // @ApiModelProperty(value = "设计维护部门名称")
private String deptName; // private String deptName;
//
/** // /**
* bom树的高度 // * bom树的高度
*/ // */
@ApiModelProperty(value = "bom树的高度") // @ApiModelProperty(value = "bom树的高度")
private Integer levelNum; // private Integer levelNum;
//
/** // /**
* 升版说明 // * 升版说明
*/ // */
@ApiModelProperty(value = "升版说明") // @ApiModelProperty(value = "升版说明")
private String changeDesc; // private String changeDesc;
//
/** // /**
* 通知单号 // * 通知单号
*/ // */
@ApiModelProperty(value = "通知单号") // @ApiModelProperty(value = "通知单号")
private String noticeNums; // private String noticeNums;
//
/** // /**
* 修改时间 // * 修改时间
*/ // */
@ApiModelProperty(value = "修改时间") // @ApiModelProperty(value = "修改时间")
private LocalDateTime modifyTime; // private LocalDateTime modifyTime;
//
@ApiModelProperty("bom层级数") // @ApiModelProperty("bom层级数")
private BigDecimal levelNumber; // private BigDecimal levelNumber;
//
@ApiModelProperty("层级号如1-1") // @ApiModelProperty("层级号如1-1")
private String levelNo; // private String levelNo;
//
@ApiModelProperty("来源行-父项物料编码") // @ApiModelProperty("来源行-父项物料编码")
private String sourceParentMaterialNo; // private String sourceParentMaterialNo;
//
@ApiModelProperty("是否虚拟包 0-否 1-是") // @ApiModelProperty("是否虚拟包 0-否 1-是")
private Integer virtualPackageIs; // private Integer virtualPackageIs;
//
//
//
//
//
@ApiModelProperty("是否虚拟件") // @ApiModelProperty("是否虚拟件")
private Integer virtualPartIs; // private Integer virtualPartIs;
//
@ApiModelProperty("0-非虚拟包 1-发货包 2-制作包 4-直发包 8-发货前装配包") // @ApiModelProperty("0-非虚拟包 1-发货包 2-制作包 4-直发包 8-发货前装配包")
private Integer virtualPartType=0; // private Integer virtualPartType=0;
//
@ApiModelProperty("生成虚拟包的跟节点物料编码") // @ApiModelProperty("生成虚拟包的跟节点物料编码")
private String virtualPartRootMaterialNo; // private String virtualPartRootMaterialNo;
//
//
//
//
private List<BomNewEbomParentFormalVO> childNodes = Collections.emptyList(); // private List<BomNewEbomParentFormalVO> childNodes = Collections.emptyList();
//
private static final long serialVersionUID = 1L; // private static final long serialVersionUID = 1L;

View File

@ -1,9 +1,11 @@
package com.nflg.product.bomnew.pojo.vo; package com.nflg.product.bomnew.pojo.vo;
import cn.hutool.core.util.NumberUtil;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.Collections; import java.util.Collections;
@ -54,6 +56,18 @@ public class ForwardReportVO extends BaseMaterialVO {
@ApiModelProperty(value = "数量") @ApiModelProperty(value = "数量")
private BigDecimal num; private BigDecimal num;
public BigDecimal getNum(){
if(Objects.nonNull(num)) {
DecimalFormat df2 = new DecimalFormat("#.####");
return new BigDecimal(df2.format(num));
}
return num;
}
/** /**
* 单重 * 单重
*/ */
@ -70,7 +84,8 @@ public class ForwardReportVO extends BaseMaterialVO {
private String createdBy; private String createdBy;
@ApiModelProperty(value = "设计人") @ApiModelProperty(value = "设计人")
private String deviseName; private String deviseName;
@ApiModelProperty(value = "设计人员编码")
private String deviseUserCode;
@ApiModelProperty(value = "创建时间-有效开始时间") @ApiModelProperty(value = "创建时间-有效开始时间")
private LocalDateTime createdTime; private LocalDateTime createdTime;

View File

@ -35,6 +35,7 @@ import lombok.extern.slf4j.Slf4j;
import nflg.product.common.constant.STATE; import nflg.product.common.constant.STATE;
import nflg.product.common.vo.ResultVO; import nflg.product.common.vo.ResultVO;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -107,6 +108,24 @@ public class BomNewEbomParentService extends ServiceImpl<BomNewEbomParentMapper,
@Resource @Resource
private BomNewSapErrorMsgService bomNewSapErrorMsgService; private BomNewSapErrorMsgService bomNewSapErrorMsgService;
public List<BomNewEbomParentVO> getParentChild( Long rowId) {
return this.getBaseMapper().getParentChild(rowId);
}
public List<BomNewEbomParentVO> getParentChildBatch( List<Long> rowIds) {
return this.getBaseMapper().getParentChildBatch(rowIds);
}
/** /**
* 获取列表 * 获取列表
* *

View File

@ -325,6 +325,7 @@ public class CompareReportService {
} }
ForwardReportVO fromParent = leftBomRowIdMap.get(from.getParentRowId()).get(0); ForwardReportVO fromParent = leftBomRowIdMap.get(from.getParentRowId()).get(0);
ForwardReportVO toParent = rightBomRowIdMap.get(to.getParentRowId()).get(0); ForwardReportVO toParent = rightBomRowIdMap.get(to.getParentRowId()).get(0);
if (!compareFunc.apply(fromParent).equals(compareFunc.apply(toParent))) { if (!compareFunc.apply(fromParent).equals(compareFunc.apply(toParent))) {
compareReportVO.setSymbol(ReportConstant.SymbolEnum.NON_EQ.getValue()); compareReportVO.setSymbol(ReportConstant.SymbolEnum.NON_EQ.getValue());
continue; continue;

View File

@ -1,8 +1,11 @@
package com.nflg.product.bomnew.service.domain; package com.nflg.product.bomnew.service.domain;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import com.nflg.product.bomnew.constant.ReportConstant; import com.nflg.product.bomnew.constant.ReportConstant;
import com.nflg.product.bomnew.pojo.query.ReverseReportQuery; import com.nflg.product.bomnew.pojo.query.ReverseReportQuery;
import com.nflg.product.bomnew.pojo.vo.BomNewEbomParentVO;
import com.nflg.product.bomnew.pojo.vo.ForwardReportVO; import com.nflg.product.bomnew.pojo.vo.ForwardReportVO;
import com.nflg.product.bomnew.pojo.vo.ReportBomVO; import com.nflg.product.bomnew.pojo.vo.ReportBomVO;
@ -28,7 +31,7 @@ public abstract class BaseForwardReport {
protected void sumLevel(List<ForwardReportVO> bomList) { protected void sumLevel(List<ForwardReportVO> bomList) {
//分层统计避免使用遍历树统计 //分层统计避免使用遍历树统计
Map<Integer, List<ForwardReportVO>> listMap = bomList.stream().collect(Collectors.groupingBy(ForwardReportVO::getLevelNum)); Map<Integer, List<ForwardReportVO>> listMap = bomList.stream().collect(Collectors.groupingBy(ForwardReportVO::getLevelNum));
Map<Long, List<ForwardReportVO>> bomParentMap = bomList.stream().collect(Collectors.groupingBy(ForwardReportVO::getParentRowId)); Map<Long, List<ForwardReportVO>> bomParentMap = bomList.stream().filter(u->Objects.nonNull(u.getParentRowId())&&u.getParentRowId()>0).collect(Collectors.groupingBy(ForwardReportVO::getParentRowId));
listMap.forEach((key, value) -> { listMap.forEach((key, value) -> {
value.forEach(parent -> { value.forEach(parent -> {
List<ForwardReportVO> dataList = bomParentMap.get(parent.getBomRowId()); List<ForwardReportVO> dataList = bomParentMap.get(parent.getBomRowId());
@ -53,6 +56,20 @@ public abstract class BaseForwardReport {
protected List<ForwardReportVO> leafMergeMaterialNo(List<ForwardReportVO> convertBomList) { protected List<ForwardReportVO> leafMergeMaterialNo(List<ForwardReportVO> convertBomList) {
//无子级的数据 //无子级的数据
List<ForwardReportVO> leafList = convertBomList.stream().filter(item -> (item.getBomRowId() == null || item.getBomRowId().longValue() == 0)).collect(Collectors.toList()); List<ForwardReportVO> leafList = convertBomList.stream().filter(item -> (item.getBomRowId() == null || item.getBomRowId().longValue() == 0)).collect(Collectors.toList());
List<ForwardReportVO> bomList = convertBomList.stream().filter(u -> ObjectUtil.isNotNull(u.getBomRowId()) && u.getBomRowId() > 0)
.collect(Collectors.toList());
bomList.forEach(item->{
List<ForwardReportVO> tmpList= convertBomList.stream().filter(u -> Objects.equals(u.getParentRowId(),item.getBomRowId()) )
.collect(Collectors.toList());
if(CollUtil.isEmpty(tmpList)){
leafList.add(item);
}
});
//相同物料合并统计 //相同物料合并统计
Map<String, List<ForwardReportVO>> materialNoListMap = leafList.stream().collect(Collectors.groupingBy(ForwardReportVO::getMaterialNo)); Map<String, List<ForwardReportVO>> materialNoListMap = leafList.stream().collect(Collectors.groupingBy(ForwardReportVO::getMaterialNo));
List<ForwardReportVO> sumList = new ArrayList<>(); List<ForwardReportVO> sumList = new ArrayList<>();
@ -116,11 +133,11 @@ public abstract class BaseForwardReport {
*/ */
protected List<ForwardReportVO> listToList(List<ForwardReportVO> bomList, Long parentRowId) { protected List<ForwardReportVO> listToList(List<ForwardReportVO> bomList, Long parentRowId) {
Map<Long, List<ForwardReportVO>> listMap = bomList.stream().collect(Collectors.groupingBy(ForwardReportVO::getParentRowId)); Map<Long, List<ForwardReportVO>> listMap = bomList.stream().filter(item ->Objects.nonNull(item.getParentRowId())&&item.getParentRowId()>0).collect(Collectors.groupingBy(ForwardReportVO::getParentRowId));
//第一层数据 //第一层数据
List<ForwardReportVO> parentChildList = bomList.stream().filter(item -> Objects.equals(parentRowId, item.getParentRowId())).collect(Collectors.toList()); List<ForwardReportVO> parentChildList = bomList.stream().filter(item -> Objects.equals(parentRowId, item.getRowId())).collect(Collectors.toList());
//无bom数据直接展示 //无bom数据直接展示
List<ForwardReportVO> rootList = parentChildList.stream().filter(item -> item.getBomRowId() == null || item.getBomRowId().longValue() == 0).collect(Collectors.toList()); List<ForwardReportVO> rootList = parentChildList.stream().filter(item -> Objects.isNull(item.getBomRowId()) || item.getBomRowId().longValue() == 0).collect(Collectors.toList());
//第一层数据有bom //第一层数据有bom
List<ForwardReportVO> moreBomList = parentChildList.stream().filter(item -> item.getBomRowId() != null && item.getBomRowId().longValue() > 0).collect(Collectors.toList()); List<ForwardReportVO> moreBomList = parentChildList.stream().filter(item -> item.getBomRowId() != null && item.getBomRowId().longValue() > 0).collect(Collectors.toList());
//采用前序遍历 ->-> 输出 //采用前序遍历 ->-> 输出

View File

@ -29,7 +29,7 @@ public class EBomFormalTreeTask extends RecursiveTask<List<BomNewEbomParentForma
private List<BomNewEbomParentFormalVO> bomDetail; private List<BomNewEbomParentFormalVO> bomDetail;
private boolean isNewVersion;
@Getter @Getter
@Setter @Setter

View File

@ -4,29 +4,28 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import cn.hutool.core.lang.TypeReference; import cn.hutool.core.lang.TypeReference;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.spring.SpringUtil; import cn.hutool.extra.spring.SpringUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.google.common.collect.ImmutableList;
import com.nflg.product.bomnew.constant.EBomConstant; import com.nflg.product.bomnew.constant.EBomConstant;
import com.nflg.product.bomnew.constant.OriginalConstant; import com.nflg.product.bomnew.constant.OriginalConstant;
import com.nflg.product.bomnew.constant.ReportConstant; import com.nflg.product.bomnew.constant.ReportConstant;
import com.nflg.product.bomnew.pojo.entity.BomNewEbomParentEntity;
import com.nflg.product.bomnew.pojo.entity.BomNewEbomParentFormalEntity; import com.nflg.product.bomnew.pojo.entity.BomNewEbomParentFormalEntity;
import com.nflg.product.bomnew.pojo.query.ReverseReportQuery; import com.nflg.product.bomnew.pojo.query.ReverseReportQuery;
import com.nflg.product.bomnew.pojo.vo.BomNewEbomParentFormalVO; import com.nflg.product.bomnew.pojo.vo.*;
import com.nflg.product.bomnew.pojo.vo.ForwardReportVO;
import com.nflg.product.bomnew.pojo.vo.ReportBomVO;
import com.nflg.product.bomnew.pojo.vo.ReportBomVersionVO;
import com.nflg.product.bomnew.service.BomNewEbomParentFormalService; import com.nflg.product.bomnew.service.BomNewEbomParentFormalService;
import com.nflg.product.bomnew.service.BomNewEbomParentService;
import com.nflg.product.bomnew.service.MaterialMainService; import com.nflg.product.bomnew.service.MaterialMainService;
import com.nflg.product.bomnew.service.domain.BaseForwardReport; import com.nflg.product.bomnew.service.domain.BaseForwardReport;
import com.nflg.product.bomnew.util.FieldGetterUtil;
import com.nflg.product.bomnew.util.ListCommonUtil; import com.nflg.product.bomnew.util.ListCommonUtil;
import com.nflg.product.bomnew.util.MaterialshouldBomExistUtil; import com.nflg.product.bomnew.util.MaterialshouldBomExistUtil;
import com.nflg.product.bomnew.util.VersionUtil; import com.nflg.product.bomnew.util.VersionUtil;
import java.util.ArrayList; import java.util.*;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ForkJoinPool; import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.ForkJoinTask; import java.util.concurrent.ForkJoinTask;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
@ -43,6 +42,12 @@ public class EBomForwardReport extends BaseForwardReport {
super(query); super(query);
} }
boolean isNewVersion(){
if (query.getVersionStrategy().compareTo(ReportConstant.VersionStrategyEnum.NEW.getValue()) == 0) {
return true;
}
return false;
}
QueryWrapper<BomNewEbomParentFormalEntity> buildQuery() { QueryWrapper<BomNewEbomParentFormalEntity> buildQuery() {
QueryWrapper<BomNewEbomParentFormalEntity> queryWrapper = new QueryWrapper<>(); QueryWrapper<BomNewEbomParentFormalEntity> queryWrapper = new QueryWrapper<>();
@ -62,10 +67,41 @@ public class EBomForwardReport extends BaseForwardReport {
} }
return queryWrapper; return queryWrapper;
} }
public void buildQueryParam( QueryWrapper<? extends BomNewEbomParentEntity> queryWrapper) {
queryWrapper .eq(FieldGetterUtil.getFieldInfo(BomNewEbomParentEntity::getMaterialNo), query.getMaterialNo());
if (StrUtil.isNotBlank(query.getDrawingNo())) {
queryWrapper .eq(FieldGetterUtil.getFieldInfo(BomNewEbomParentEntity::getDrawingNo), query.getDrawingNo());
}
if (query.getVersionStrategy().compareTo(ReportConstant.VersionStrategyEnum.DEFINE.getValue()) == 0) {
queryWrapper .eq(FieldGetterUtil.getFieldInfo(BomNewEbomParentEntity::getCurrentVersion), query.getBomVersion());
}else if(query.getVersionStrategy().compareTo(ReportConstant.VersionStrategyEnum.ALL.getValue()) == 0
&& StrUtil.isNotEmpty(query.getBomVersion())){
queryWrapper .eq(FieldGetterUtil.getFieldInfo(BomNewEbomParentEntity::getCurrentVersion), query.getBomVersion());
}
if (StrUtil.isNotBlank(query.getStartDate()) && StrUtil.isNotBlank(query.getEndDate())) {
queryWrapper .ge(FieldGetterUtil.getFieldInfo(BomNewEbomParentEntity::getCreatedTime), query.getStartDate())
.le(FieldGetterUtil.getFieldInfo(BomNewEbomParentEntity::getConvertToEbomTime), query.getEndDate());
}
}
List<BomNewEbomParentFormalEntity> getParent() { List<BomNewEbomParentFormalEntity> getParent() {
QueryWrapper<BomNewEbomParentFormalEntity> queryWrapper = buildQuery(); QueryWrapper<BomNewEbomParentFormalEntity> queryWrapper = buildQuery();
List<BomNewEbomParentFormalEntity> list = SpringUtil.getBean(BomNewEbomParentFormalService.class).list(queryWrapper); List<BomNewEbomParentFormalEntity> list = SpringUtil.getBean(BomNewEbomParentFormalService.class).list(queryWrapper);
@ -75,6 +111,139 @@ public class EBomForwardReport extends BaseForwardReport {
return list; return list;
} }
List<BomNewEbomParentVO> getParentV2() {
List<BomNewEbomParentVO> rlist=null;
if(isNewVersion()){
QueryWrapper<BomNewEbomParentEntity> queryWrapper = new QueryWrapper<>();
buildQueryParam(queryWrapper);
List<BomNewEbomParentEntity> list = SpringUtil.getBean(BomNewEbomParentService.class).list(queryWrapper);
rlist=Convert.convert(new TypeReference<List<BomNewEbomParentVO>>() {
}, list);
}else{
QueryWrapper<BomNewEbomParentFormalEntity > queryWrapper = new QueryWrapper<>();
buildQueryParam(queryWrapper);
List<BomNewEbomParentFormalEntity> list = SpringUtil.getBean(BomNewEbomParentFormalService.class).list(queryWrapper);
rlist=Convert.convert(new TypeReference<List<BomNewEbomParentVO>>() {
}, list);
}
if(CollUtil.isNotEmpty(rlist)){
rlist.forEach(item->{
item.setBomRowId(item.getRowId());
});
}
return rlist;
}
List< BomNewEbomParentVO> getParentChildList(List<Long> bomRowId){
List< BomNewEbomParentVO> parentChildList=null;
if(isNewVersion()){
parentChildList = SpringUtil.getBean(BomNewEbomParentService.class).getParentChildBatch(bomRowId);
}else{
List< BomNewEbomParentFormalVO > childList= SpringUtil.getBean(BomNewEbomParentFormalService.class).getParentChildBatch(bomRowId);
if(CollUtil.isNotEmpty(childList)){
parentChildList =(List< BomNewEbomParentVO>)(List)childList;
// parentChildList= Collections.unmodifiableList(childList );
}
}
return parentChildList;
}
List< BomNewEbomParentVO> getParentList(List<Long> bomRowId){
List< BomNewEbomParentVO> parentList=null;
if(isNewVersion()){
List<BomNewEbomParentEntity> bomlist = SpringUtil.getBean(BomNewEbomParentService.class).lambdaQuery().in(BomNewEbomParentEntity::getRowId, bomRowId).list();
parentList=Convert.convert(new TypeReference<List< BomNewEbomParentVO>>() {
},bomlist);
}else{
List<BomNewEbomParentFormalEntity> bomlist = SpringUtil.getBean(BomNewEbomParentFormalService.class).lambdaQuery().in(BomNewEbomParentFormalEntity::getRowId, bomRowId).list();
parentList=Convert.convert(new TypeReference<List< BomNewEbomParentVO >>() {
},bomlist);
}
return parentList;
}
/*
bom 子级同步有bom版本号
*/
void bomUpAndLowLevel( List<BomNewEbomParentVO> parent,List< BomNewEbomParentVO> parentChildList,int levelNum,AtomicInteger orderNum){
if (CollectionUtil.isNotEmpty(parentChildList)) {
List<Long> bomRowIds = parentChildList.stream().filter(u -> Objects.nonNull(u.getBomRowId()) && u.getBomRowId() > 0).map(BomNewEbomParentVO::getBomRowId).collect(Collectors.toList());
Map<Long, BomNewEbomParentVO> parentEntityMap=null;
if(CollUtil.isNotEmpty(bomRowIds)) {
List< BomNewEbomParentVO> bomlist = getParentList(bomRowIds);
parentEntityMap = ListCommonUtil.listToMap(bomlist, BomNewEbomParentVO::getRowId);
}
Map<Long, BomNewEbomParentVO> noBomParentEntityMap=ListCommonUtil.listToMap(parent, BomNewEbomParentVO::getRowId);
for (BomNewEbomParentVO vo :
parentChildList) {
if (Objects.nonNull(parentEntityMap) && parentEntityMap.containsKey(vo.getBomRowId())) {
// vo.setCreatedTime(forwardReportVO.getCreatedTime());
// vo.setExpireEndTime(parentFormal.getConvertToEbomTime());
BomNewEbomParentVO ebomParentEntity = parentEntityMap.get(vo.getBomRowId());
vo.setLevelNum(levelNum);
vo.setOrderNumber(orderNum.getAndIncrement() + "");
vo.setDeviseName(ebomParentEntity.getDeviseName());
vo.setDeviseUserCode(ebomParentEntity.getDeviseUserCode());
vo.setCurrentVersion(ebomParentEntity.getCurrentVersion());
} else {
vo.setLevelNum(levelNum);
vo.setOrderNumber(orderNum.getAndIncrement() + "");
if(Objects.nonNull(noBomParentEntityMap) && noBomParentEntityMap.containsKey(vo.getParentRowId())){
BomNewEbomParentVO parentVO=noBomParentEntityMap.get(vo.getParentRowId());
vo.setDeviseName(parentVO.getDeviseName());
vo.setDeviseUserCode(parentVO.getDeviseUserCode());
}
if (MaterialshouldBomExistUtil.checkShouldBomExist(vo)) {
vo.setCurrentVersion(OriginalConstant.NO_BOM_VERSION);
} else {
vo.setCurrentVersion(OriginalConstant.DEFAULT_BOM_VERSION);
}
}
}
// Collections.sort(nodeList, (option0, option1) -> option0.getOrderNumber().compareTo(option1.getOrderNumber()));
}
}
/** /**
* 最大的版本号 * 最大的版本号
* *
@ -107,68 +276,73 @@ public class EBomForwardReport extends BaseForwardReport {
*/ */
ReportBomVO singleReport() { ReportBomVO singleReport() {
List<BomNewEbomParentFormalEntity> listParent = getParent(); List< BomNewEbomParentVO> listParent = getParentV2();
if (CollUtil.isEmpty(listParent)) { if (CollUtil.isEmpty(listParent)) {
return null; return null;
} }
BomNewEbomParentFormalEntity parentFormal0 = listParent.get(0);
ForwardReportVO forwardReportVO = Convert.convert(ForwardReportVO.class, parentFormal0); ForwardReportVO forwardReportVO =Convert.convert( ForwardReportVO.class,listParent.get(0));
List<ForwardReportVO> nodesList = new ArrayList<>(); List<ForwardReportVO> nodesList = new ArrayList<>();
for (BomNewEbomParentFormalEntity parentFormal : listParent) { for (BomNewEbomParentVO parentFormal : listParent) {
List< BomNewEbomParentVO> parentChildList = getParentChildList(ImmutableList.of(parentFormal.getRowId()));
List<BomNewEbomParentFormalVO> parentChildList = SpringUtil.getBean(BomNewEbomParentFormalService.class).getParentChild(parentFormal.getRowId());
initMaterialInfo(parentChildList); initMaterialInfo(parentChildList);
AtomicInteger orderNum = new AtomicInteger(1);
parentFormal.setLevelNum(1);
parentFormal.setOrderNumber(orderNum.getAndIncrement()+"");
nodesList.add(Convert.convert(ForwardReportVO.class,parentFormal));
// if (CollectionUtil.isNotEmpty(parentChildList)) {
//
// List<Long> bomRowIds = parentChildList.stream().filter(u -> Objects.nonNull(u.getBomRowId()) && u.getBomRowId() > 0).map(BomNewEbomParentVO::getBomRowId).collect(Collectors.toList());
// Map<Long, BomNewEbomParentVO> parentEntityMap=null;
// if(CollUtil.isNotEmpty(bomRowIds)) {
// List< BomNewEbomParentVO> bomlist = getParentList(bomRowIds);
//
// parentEntityMap = ListCommonUtil.listToMap(bomlist, BomNewEbomParentVO::getRowId);
// }
//
// for (BomNewEbomParentVO vo :
// parentChildList) {
//
// if (Objects.nonNull(parentEntityMap) && parentEntityMap.containsKey(vo.getBomRowId())) {
// // vo.setCreatedTime(forwardReportVO.getCreatedTime());
// // vo.setExpireEndTime(parentFormal.getConvertToEbomTime());
//
// BomNewEbomParentVO ebomParentEntity = parentEntityMap.get(vo.getBomRowId());
// vo.setLevelNum(2);
// vo.setOrderNumber(orderNum.incrementAndGet() + "");
// vo.setDeviseName(ebomParentEntity.getDeviseName());
// vo.setDeviseUserCode(ebomParentEntity.getDeviseUserCode());
// vo.setCurrentVersion(ebomParentEntity.getCurrentVersion());
//
//
// } else {
// vo.setLevelNum(2);
// vo.setOrderNumber(orderNum.incrementAndGet() + "");
// vo.setDeviseName(parentFormal.getDeviseName());
// vo.setDeviseUserCode(parentFormal.getDeviseUserCode());
// if (MaterialshouldBomExistUtil.checkShouldBomExist(vo)) {
// vo.setCurrentVersion(OriginalConstant.NO_BOM_VERSION);
// } else {
// vo.setCurrentVersion(OriginalConstant.DEFAULT_BOM_VERSION);
// }
//
//
// }
//
// }
//
//
//
// // Collections.sort(nodeList, (option0, option1) -> option0.getOrderNumber().compareTo(option1.getOrderNumber()));
//
// }
if (CollectionUtil.isNotEmpty(parentChildList)) { bomUpAndLowLevel(ImmutableList.of(parentFormal),parentChildList,2,orderNum);
List<Long> bomRowIds = parentChildList.stream().filter(u -> Objects.nonNull(u.getBomRowId()) && u.getBomRowId() > 0).map(BomNewEbomParentFormalVO::getBomRowId).collect(Collectors.toList());
Map<Long, BomNewEbomParentFormalEntity> parentEntityMap=null;
if(CollUtil.isNotEmpty(bomRowIds)) {
List<BomNewEbomParentFormalEntity> bomlist = SpringUtil.getBean(BomNewEbomParentFormalService.class).lambdaQuery().in(BomNewEbomParentFormalEntity::getRowId, bomRowIds).list();
parentEntityMap = ListCommonUtil.listToMap(bomlist, BomNewEbomParentFormalEntity::getRowId);
}
AtomicInteger orderNum = new AtomicInteger();
for (BomNewEbomParentFormalVO vo :
parentChildList) {
if (Objects.nonNull(parentEntityMap) && parentEntityMap.containsKey(vo.getBomRowId())) {
// vo.setCreatedTime(forwardReportVO.getCreatedTime());
// vo.setExpireEndTime(parentFormal.getConvertToEbomTime());
BomNewEbomParentFormalEntity ebomParentEntity = parentEntityMap.get(vo.getBomRowId());
vo.setLevelNum(1);
vo.setOrderNumber(orderNum.incrementAndGet() + "");
vo.setDeviseName(ebomParentEntity.getDeviseName());
vo.setDeviseUserCode(ebomParentEntity.getDeviseUserCode());
vo.setCurrentVersion(ebomParentEntity.getCurrentVersion());
} else {
vo.setLevelNum(1);
vo.setOrderNumber(orderNum.incrementAndGet() + "");
vo.setDeviseName(parentFormal.getDeviseName());
vo.setDeviseName(parentFormal.getDeviseUserCode());
if (MaterialshouldBomExistUtil.checkShouldBomExist(vo)) {
vo.setCurrentVersion(OriginalConstant.NO_BOM_VERSION);
} else {
vo.setCurrentVersion(OriginalConstant.DEFAULT_BOM_VERSION);
}
}
}
// Collections.sort(nodeList, (option0, option1) -> option0.getOrderNumber().compareTo(option1.getOrderNumber()));
}
List<ForwardReportVO> nodeList = Convert.convert(new TypeReference<List<ForwardReportVO>>() { List<ForwardReportVO> nodeList = Convert.convert(new TypeReference<List<ForwardReportVO>>() {
}, parentChildList); }, parentChildList);
@ -236,8 +410,65 @@ public class EBomForwardReport extends BaseForwardReport {
return null; return null;
} }
void initMaterialInfo(List<BomNewEbomParentFormalVO> list) {
SpringUtil.getBean(MaterialMainService.class).intiMaterialInfo(list, BomNewEbomParentFormalVO::getMaterialNo, EBomConstant.EBOM_IGNORED_FIELDS_INIT_MATERIAL_DEFAULT2); /**
* 迭代查询整颗树
* @return
*/
List<BomNewEbomParentVO> bomDetailTreeList(BomNewEbomParentVO parentBomRow) {
int levelNum = 1;
AtomicInteger orderNum = new AtomicInteger(1);
if(ObjectUtil.isNull( parentBomRow)){
return null;
}
List<BomNewEbomParentVO> voList = new ArrayList<>();
parentBomRow.setLevelNum(levelNum);
parentBomRow.setOrderNumber(orderNum.getAndIncrement()+"");
voList.add( parentBomRow );
levelNum++;
List<Long> rowIdList = new ArrayList<>( Arrays.asList(parentBomRow.getRowId()) );
List<BomNewEbomParentVO> parentVOList=new ArrayList<>(Arrays.asList(parentBomRow));
while (!rowIdList.isEmpty()) {
List< BomNewEbomParentVO> parentChildList= getParentChildList(rowIdList);
rowIdList.clear();
if (CollUtil.isNotEmpty(parentChildList)) {
bomUpAndLowLevel(parentVOList,parentChildList,levelNum,orderNum);
voList.addAll(parentChildList);
levelNum++;
List<Long> nextBomId = parentChildList.stream().filter(u -> ObjectUtil.isNotNull(u.getBomRowId()) && u.getBomRowId() > 0)
.map(BomNewEbomParentVO::getBomRowId).collect(Collectors.toList());
parentVOList.clear();
parentVOList.addAll(parentChildList.stream().filter(u -> ObjectUtil.isNotNull(u.getBomRowId()) && u.getBomRowId() > 0)
.collect(Collectors.toList()));
if (CollUtil.isNotEmpty(nextBomId)) {
rowIdList.addAll(nextBomId);
}
}
}
return voList;
}
void initMaterialInfo(List<? extends BomNewEbomParentVO> list) {
SpringUtil.getBean(MaterialMainService.class).intiMaterialInfo(list, BomNewEbomParentVO::getMaterialNo, EBomConstant.EBOM_IGNORED_FIELDS_INIT_MATERIAL_DEFAULT2);
} }
@ -249,18 +480,18 @@ public class EBomForwardReport extends BaseForwardReport {
ReportBomVO multiReport() { ReportBomVO multiReport() {
List<BomNewEbomParentFormalEntity> listParent = getParent(); List<BomNewEbomParentVO> listParent = getParentV2();
if (CollUtil.isEmpty(listParent)) { if (CollUtil.isEmpty(listParent)) {
return null; return null;
} }
BomNewEbomParentFormalEntity parentFormal0 = listParent.get(0); BomNewEbomParentVO parentFormal0 = listParent.get(0);
ForwardReportVO forwardReportVO = Convert.convert(ForwardReportVO.class, parentFormal0); ForwardReportVO forwardReportVO = Convert.convert(ForwardReportVO.class, parentFormal0);
List<ForwardReportVO> nodesList = new ArrayList<>(); List<ForwardReportVO> nodesList = new ArrayList<>();
for (BomNewEbomParentFormalEntity parentFormal : listParent) { for (BomNewEbomParentVO parentFormal : listParent) {
List<BomNewEbomParentFormalVO> bomList = bomDetailList(parentFormal.getRowId()); List<BomNewEbomParentVO> bomList = bomDetailTreeList(parentFormal);
if(CollUtil.isEmpty(bomList)){ if(CollUtil.isEmpty(bomList)){
continue; continue;
} }
@ -294,37 +525,36 @@ public class EBomForwardReport extends BaseForwardReport {
* @return * @return
*/ */
ReportBomVO sumReport() { ReportBomVO sumReport() {
List<BomNewEbomParentFormalEntity> listParent = getParent(); List<BomNewEbomParentVO> listParent = getParentV2();
if (CollUtil.isEmpty(listParent)) { if (CollUtil.isEmpty(listParent)) {
return null; return null;
} }
BomNewEbomParentFormalEntity parentFormal0 = listParent.get(0); BomNewEbomParentVO parentFormal0 = listParent.get(0);
ForwardReportVO forwardReportVO = Convert.convert(ForwardReportVO.class, parentFormal0); ForwardReportVO forwardReportVO = Convert.convert(ForwardReportVO.class, parentFormal0);
List<ForwardReportVO> nodesList = new ArrayList<>(); List<ForwardReportVO> nodesList = new ArrayList<>();
for (BomNewEbomParentFormalEntity parentFormal : listParent) { for (BomNewEbomParentVO parentFormal : listParent) {
List<BomNewEbomParentFormalVO> bomList = bomDetailList(parentFormal.getRowId()); List<BomNewEbomParentVO> bomList = bomDetailTreeList(parentFormal );
if(CollUtil.isEmpty(bomList)){ if(CollUtil.isEmpty(bomList)){
continue; continue;
} }
List<ForwardReportVO> convertBomList = Convert.convert(new TypeReference<List<ForwardReportVO>>() { List<ForwardReportVO> convertBomList = Convert.convert(new TypeReference<List<ForwardReportVO>>() {
}, bomList); }, bomList);
sumLevel(convertBomList); sumLevel(convertBomList);
//无子级的数据 //无子级的数据
List<ForwardReportVO> nodeList = leafMergeMaterialNo(convertBomList); List<ForwardReportVO> nodeList = leafMergeMaterialNo(convertBomList);
nodesList.addAll(nodeList); nodesList.addAll(nodeList);
AtomicInteger orderNum = new AtomicInteger(); AtomicInteger orderNum = new AtomicInteger(1);
for (ForwardReportVO vo : for (ForwardReportVO vo :
nodeList) { nodeList) {
vo.setLevelNum(1); vo.setLevelNum(1);
vo.setOrderNumber(orderNum.incrementAndGet() + ""); vo.setOrderNumber(orderNum.incrementAndGet() + "");
vo.setExpireEndTime(parentFormal.getConvertToEbomTime()); vo.setExpireEndTime(parentFormal.getConvertToEbomTime());
vo.setDeviseName(forwardReportVO.getDeviseName()); // vo.setDeviseName(forwardReportVO.getDeviseName());
} }
} }

View File

@ -223,14 +223,14 @@
<!--获取子级--> <!--获取子级-->
<select id="getParentChild" resultType="com.nflg.product.bomnew.pojo.vo.BomNewEbomParentVO"> <select id="getParentChild" resultType="com.nflg.product.bomnew.pojo.vo.BomNewEbomParentVO">
select * select *,bom_version_row_id as bom_row_id
from t_bom_new_ebom_child from t_bom_new_ebom_child
where parent_row_id = #{rowId} where parent_row_id = #{rowId}
order by order_number order by order_number
</select> </select>
<select id="getParentChildBatch" resultType="com.nflg.product.bomnew.pojo.vo.BomNewEbomParentVO"> <select id="getParentChildBatch" resultType="com.nflg.product.bomnew.pojo.vo.BomNewEbomParentVO">
select * select *,bom_version_row_id as bom_row_id
from t_bom_new_ebom_child from t_bom_new_ebom_child
where parent_row_id in where parent_row_id in
<foreach collection="rowIds" item="rowId" open="(" separator="," close=")"> <foreach collection="rowIds" item="rowId" open="(" separator="," close=")">