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

View File

@ -1,9 +1,11 @@
package com.nflg.product.bomnew.pojo.vo;
import cn.hutool.core.util.NumberUtil;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Collections;
@ -54,6 +56,18 @@ public class ForwardReportVO extends BaseMaterialVO {
@ApiModelProperty(value = "数量")
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;
@ApiModelProperty(value = "设计人")
private String deviseName;
@ApiModelProperty(value = "设计人员编码")
private String deviseUserCode;
@ApiModelProperty(value = "创建时间-有效开始时间")
private LocalDateTime createdTime;

View File

@ -35,6 +35,7 @@ import lombok.extern.slf4j.Slf4j;
import nflg.product.common.constant.STATE;
import nflg.product.common.vo.ResultVO;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -107,6 +108,24 @@ public class BomNewEbomParentService extends ServiceImpl<BomNewEbomParentMapper,
@Resource
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 toParent = rightBomRowIdMap.get(to.getParentRowId()).get(0);
if (!compareFunc.apply(fromParent).equals(compareFunc.apply(toParent))) {
compareReportVO.setSymbol(ReportConstant.SymbolEnum.NON_EQ.getValue());
continue;

View File

@ -1,8 +1,11 @@
package com.nflg.product.bomnew.service.domain;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import com.nflg.product.bomnew.constant.ReportConstant;
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.ReportBomVO;
@ -28,7 +31,7 @@ public abstract class BaseForwardReport {
protected void sumLevel(List<ForwardReportVO> bomList) {
//分层统计避免使用遍历树统计
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) -> {
value.forEach(parent -> {
List<ForwardReportVO> dataList = bomParentMap.get(parent.getBomRowId());
@ -53,6 +56,20 @@ public abstract class BaseForwardReport {
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> 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));
List<ForwardReportVO> sumList = new ArrayList<>();
@ -116,11 +133,11 @@ public abstract class BaseForwardReport {
*/
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数据直接展示
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
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 boolean isNewVersion;
@Getter
@Setter

View File

@ -4,29 +4,28 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.lang.TypeReference;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.spring.SpringUtil;
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.OriginalConstant;
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.query.ReverseReportQuery;
import com.nflg.product.bomnew.pojo.vo.BomNewEbomParentFormalVO;
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.pojo.vo.*;
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.domain.BaseForwardReport;
import com.nflg.product.bomnew.util.FieldGetterUtil;
import com.nflg.product.bomnew.util.ListCommonUtil;
import com.nflg.product.bomnew.util.MaterialshouldBomExistUtil;
import com.nflg.product.bomnew.util.VersionUtil;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.*;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.ForkJoinTask;
import java.util.concurrent.atomic.AtomicInteger;
@ -43,6 +42,12 @@ public class EBomForwardReport extends BaseForwardReport {
super(query);
}
boolean isNewVersion(){
if (query.getVersionStrategy().compareTo(ReportConstant.VersionStrategyEnum.NEW.getValue()) == 0) {
return true;
}
return false;
}
QueryWrapper<BomNewEbomParentFormalEntity> buildQuery() {
QueryWrapper<BomNewEbomParentFormalEntity> queryWrapper = new QueryWrapper<>();
@ -62,10 +67,41 @@ public class EBomForwardReport extends BaseForwardReport {
}
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() {
QueryWrapper<BomNewEbomParentFormalEntity> queryWrapper = buildQuery();
List<BomNewEbomParentFormalEntity> list = SpringUtil.getBean(BomNewEbomParentFormalService.class).list(queryWrapper);
@ -75,6 +111,139 @@ public class EBomForwardReport extends BaseForwardReport {
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() {
List<BomNewEbomParentFormalEntity> listParent = getParent();
List< BomNewEbomParentVO> listParent = getParentV2();
if (CollUtil.isEmpty(listParent)) {
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<>();
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);
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)) {
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()));
}
bomUpAndLowLevel(ImmutableList.of(parentFormal),parentChildList,2,orderNum);
List<ForwardReportVO> nodeList = Convert.convert(new TypeReference<List<ForwardReportVO>>() {
}, parentChildList);
@ -236,8 +410,65 @@ public class EBomForwardReport extends BaseForwardReport {
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() {
List<BomNewEbomParentFormalEntity> listParent = getParent();
List<BomNewEbomParentVO> listParent = getParentV2();
if (CollUtil.isEmpty(listParent)) {
return null;
}
BomNewEbomParentFormalEntity parentFormal0 = listParent.get(0);
BomNewEbomParentVO parentFormal0 = listParent.get(0);
ForwardReportVO forwardReportVO = Convert.convert(ForwardReportVO.class, parentFormal0);
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)){
continue;
}
@ -294,37 +525,36 @@ public class EBomForwardReport extends BaseForwardReport {
* @return
*/
ReportBomVO sumReport() {
List<BomNewEbomParentFormalEntity> listParent = getParent();
List<BomNewEbomParentVO> listParent = getParentV2();
if (CollUtil.isEmpty(listParent)) {
return null;
}
BomNewEbomParentFormalEntity parentFormal0 = listParent.get(0);
BomNewEbomParentVO parentFormal0 = listParent.get(0);
ForwardReportVO forwardReportVO = Convert.convert(ForwardReportVO.class, parentFormal0);
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)){
continue;
}
List<ForwardReportVO> convertBomList = Convert.convert(new TypeReference<List<ForwardReportVO>>() {
}, bomList);
sumLevel(convertBomList);
//无子级的数据
List<ForwardReportVO> nodeList = leafMergeMaterialNo(convertBomList);
nodesList.addAll(nodeList);
AtomicInteger orderNum = new AtomicInteger();
AtomicInteger orderNum = new AtomicInteger(1);
for (ForwardReportVO vo :
nodeList) {
vo.setLevelNum(1);
vo.setOrderNumber(orderNum.incrementAndGet() + "");
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 *
select *,bom_version_row_id as bom_row_id
from t_bom_new_ebom_child
where parent_row_id = #{rowId}
order by order_number
</select>
<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
where parent_row_id in
<foreach collection="rowIds" item="rowId" open="(" separator="," close=")">