From 1029cffc09a35dc814b7baa622f58b04a1a0e154 Mon Sep 17 00:00:00 2001 From: jing's Date: Mon, 19 Feb 2024 22:53:26 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E6=A0=91=E5=BD=A2=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bomnew/constant/ReportConstant.java | 16 + .../master/BomNewEbomParentFormalMapper.java | 3 + .../bomnew/pojo/query/ReverseReportQuery.java | 4 + .../pojo/vo/BomNewEbomParentFormalVO.java | 328 ++++++++++++++++++ .../bomnew/pojo/vo/ForwardReportVO.java | 69 +++- .../bomnew/service/ForwardReportService.java | 5 - .../domain/EBom/EBomFormalTreeTask.java | 109 ++++++ .../domain/EBom/EBomForwardReport.java | 137 ++++++-- .../master/BomNewEbomParentFormalMapper.xml | 16 +- 9 files changed, 657 insertions(+), 30 deletions(-) create mode 100644 nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomNewEbomParentFormalVO.java create mode 100644 nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomFormalTreeTask.java diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/constant/ReportConstant.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/constant/ReportConstant.java index fbece3a8..d9a16c52 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/constant/ReportConstant.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/constant/ReportConstant.java @@ -48,6 +48,22 @@ public class ReportConstant { } + @AllArgsConstructor + @Getter + public enum DataTypeEnum implements ValueEnum { + + //0-树形状 1-列表 + TREE(0, "树形"), + LIST(1, "列表"); + + + private final Integer value; + private final String description; + + } + + + diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewEbomParentFormalMapper.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewEbomParentFormalMapper.java index 9f33c4e9..05a50fcf 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewEbomParentFormalMapper.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewEbomParentFormalMapper.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.nflg.product.bomnew.pojo.entity.BomNewEbomParentEntity; import com.nflg.product.bomnew.pojo.entity.BomNewEbomParentFormalEntity; import com.nflg.product.bomnew.pojo.query.BomNewEbomParentQuery; +import com.nflg.product.bomnew.pojo.vo.BomNewEbomParentFormalVO; import com.nflg.product.bomnew.pojo.vo.BomNewEbomParentVO; import com.nflg.product.bomnew.pojo.vo.BomNewEbomUpgradeChangeVO; import com.nflg.product.bomnew.pojo.vo.MaterialHistoryProjectTypeVO; @@ -20,5 +21,7 @@ import java.util.Set; */ public interface BomNewEbomParentFormalMapper extends BaseMapper { + List getParentChild(@Param("rowId") Long rowId); + List getParentChildBatch(@Param("rowIds") List rowIds); } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/query/ReverseReportQuery.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/query/ReverseReportQuery.java index 48eecb64..ee908719 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/query/ReverseReportQuery.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/query/ReverseReportQuery.java @@ -40,4 +40,8 @@ public class ReverseReportQuery { @ApiModelProperty("有效性-结束时间") private String endDate; + + @ApiModelProperty("数据显示方式 0-树形状 1-列表") + private Integer dataType; + } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomNewEbomParentFormalVO.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomNewEbomParentFormalVO.java new file mode 100644 index 00000000..41672131 --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomNewEbomParentFormalVO.java @@ -0,0 +1,328 @@ +package com.nflg.product.bomnew.pojo.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Collections; +import java.util.List; +import java.util.Objects; + +/** + * t_bom_new_ebom_parent + * + * @author makejava + * @since 2023-12-14 10:49:36 + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "com-nflg-product-bomnew-pojo-new-vo-BomNewEbomParentFormalEntityVO") +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=定版(已发布PBOM)99=借用件 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 Long 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 childNodes = Collections.emptyList(); + + private static final long serialVersionUID = 1L; + + + + +} diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/ForwardReportVO.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/ForwardReportVO.java index 54d1453a..81d690f0 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/ForwardReportVO.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/ForwardReportVO.java @@ -1,9 +1,76 @@ package com.nflg.product.bomnew.pojo.vo; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Collections; +import java.util.List; +import java.util.Objects; + @Data -public class ForwardReportVO extends ReverseReportVO{ +public class ForwardReportVO extends BaseMaterialVO { + + @ApiModelProperty("行id") + private Long rowId=0L; + + @ApiModelProperty("BOM版本ID") + private Long bomRowId=0L; + + @ApiModelProperty("父级行ID") + private Long parentRowId=0L; + + + + @ApiModelProperty("排序号") + private String orderNumber; + + @ApiModelProperty("层级") + private Integer levelNum; + + + + @ApiModelProperty("版本号") + private String currentVersion; + +// @ApiModelProperty("项目类别") +// private String projectType; +// @ApiModelProperty("物料编码") +// private String materialNo; +// @ApiModelProperty("物料类别名称") +// private String materialCategoryName; +// +// @ApiModelProperty("物料描述") +// private String materialDesc; +// @ApiModelProperty("单位") +// private String materialUnit; + + + + + @ApiModelProperty(value = "数量") + private BigDecimal num; + + + @ApiModelProperty(value = "创建人编码") + private String createdBy; + + @ApiModelProperty(value = "创建时间-有效开始时间") + private LocalDateTime createdTime; + + @ApiModelProperty(value = "版本过期时间=下个版本的创建时间") + private LocalDateTime expireEndTime; + + + + + + private List childNodes = Collections.emptyList(); + public LocalDateTime getExpireEndTime(){ + return Objects.isNull(expireEndTime)? LocalDateTime.parse("9999-12-31 23:59:59", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")):expireEndTime; + } } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/ForwardReportService.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/ForwardReportService.java index 58a9909f..c3f86929 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/ForwardReportService.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/ForwardReportService.java @@ -75,13 +75,8 @@ public class ForwardReportService { ReportBomVO queryEBom(ReverseReportQuery query) { - - EBomForwardReport eBomForwardReport = new EBomForwardReport(query); - return eBomForwardReport.genReport(); - - } ReportBomVO queryPBom(ReverseReportQuery query) { diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomFormalTreeTask.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomFormalTreeTask.java new file mode 100644 index 00000000..02a853ef --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomFormalTreeTask.java @@ -0,0 +1,109 @@ +package com.nflg.product.bomnew.service.domain.EBom; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.extra.spring.SpringUtil; +import com.nflg.product.bomnew.pojo.entity.BomNewEbomParentEntity; +import com.nflg.product.bomnew.pojo.entity.BomNewEbomParentFormalEntity; +import com.nflg.product.bomnew.pojo.vo.BomNewEbomParentFormalVO; +import com.nflg.product.bomnew.pojo.vo.BomNewEbomParentVO; +import com.nflg.product.bomnew.service.BomNewEbomParentFormalService; +import com.nflg.product.bomnew.service.BomNewEbomParentService; +import com.nflg.product.bomnew.util.ListCommonUtil; +import lombok.Getter; +import lombok.Setter; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.RecursiveTask; +import java.util.stream.Collectors; + + +public class EBomFormalTreeTask extends RecursiveTask> { + + private List bomDetail; + + + + @Getter + @Setter + public static int levelNum=1; + + List result = new ArrayList<>(); + + public EBomFormalTreeTask(List inBomDetail) { + bomDetail = inBomDetail; + } + + /** + * 处理BOM明细中未选择Bom版本的明细;使用最新版 + */ + public void handlerChildBomVersionDetail() { + + + for (BomNewEbomParentFormalVO vo: + bomDetail ) { + vo.setLevelNum(levelNum); + } + + List bomRowIds=bomDetail.stream().filter(u -> u.getBomRowId()>0 ).map(BomNewEbomParentFormalVO::getBomRowId).collect(Collectors.toList()); + + if (CollUtil.isNotEmpty(bomRowIds)) { + + List bomlist = SpringUtil.getBean(BomNewEbomParentFormalService.class ).lambdaQuery().in(BomNewEbomParentFormalEntity::getRowId, bomRowIds).list(); + Map parentEntityMap = ListCommonUtil.listToMap(bomlist, BomNewEbomParentFormalEntity::getRowId); + for (BomNewEbomParentFormalVO detailVO : bomDetail) { + if (parentEntityMap.containsKey(detailVO.getBomRowId())) { + BomNewEbomParentFormalEntity ebomParentEntity = parentEntityMap.get(detailVO.getBomRowId()); + detailVO.setChildBomRowId(ebomParentEntity.getRowId()); + // detailVO.setBomRowId(ebomParentEntity.getRowId()); + detailVO.setSourceRowId(ebomParentEntity.getSourceRowId()); + detailVO.setCurrentVersion(ebomParentEntity.getCurrentVersion()); + detailVO.setDeviseUserCode(ebomParentEntity.getDeviseUserCode()); + detailVO.setDeptName(ebomParentEntity.getDeptName()); + detailVO.setDeviseName(ebomParentEntity.getDeviseName()); + detailVO.setBomExist(ebomParentEntity.getBomExist()); + + } + } + + + } + + + } + + /** + * 递归调用零部件BOM + * + * @return + */ + @Override + protected List compute() { + + handlerChildBomVersionDetail(); + // 最新 BOM 版本 + result.addAll(bomDetail); + + if (CollUtil.isNotEmpty(bomDetail)) { + levelNumAdd(); + List childBowIds = bomDetail.stream().filter(u-> u.getBomRowId()!=null && u.getBomRowId() > 0).map(u->u.getBomRowId()).collect(Collectors.toList()); + if(CollUtil.isNotEmpty(childBowIds)) { + List bom = SpringUtil.getBean(BomNewEbomParentFormalService.class).getBaseMapper().getParentChildBatch(childBowIds); + EBomFormalTreeTask task = new EBomFormalTreeTask(bom); + task.fork(); + bomDetail.addAll(task.join()); + return bomDetail; + } + + } + return result; + + + } + + public synchronized void levelNumAdd(){ + levelNum++; + } +} diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomForwardReport.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomForwardReport.java index 14d2a0a5..4a6c97cc 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomForwardReport.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomForwardReport.java @@ -2,27 +2,33 @@ package com.nflg.product.bomnew.service.domain.EBom; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.collection.ListUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.lang.TypeReference; import cn.hutool.core.util.StrUtil; import cn.hutool.extra.spring.SpringUtil; +import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.nflg.product.base.core.exception.NflgBusinessException; import com.nflg.product.bomnew.constant.ReportConstant; import com.nflg.product.bomnew.pojo.entity.BomNewEbomChildFormalEntity; import com.nflg.product.bomnew.pojo.entity.BomNewEbomParentFormalEntity; import com.nflg.product.bomnew.pojo.query.ReverseReportQuery; -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.BomNewEbomChildFormalService; import com.nflg.product.bomnew.service.BomNewEbomParentFormalService; +import com.nflg.product.bomnew.util.ListCommonUtil; import com.nflg.product.bomnew.util.VersionUtil; import nflg.product.common.constant.STATE; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.concurrent.ForkJoinPool; +import java.util.concurrent.ForkJoinTask; +import java.util.stream.Collectors; public class EBomForwardReport { @@ -39,7 +45,10 @@ public class EBomForwardReport { queryWrapper.lambda().eq(BomNewEbomParentFormalEntity::getDrawingNo,query.getDrawingNo()); } if(query.getVersionStrategy().compareTo(ReportConstant.VersionStrategyEnum.NEW.getValue()) ==0){ - queryWrapper.lambda().eq(BomNewEbomParentFormalEntity::getLastVersionIs,1); + // queryWrapper.lambda().eq(BomNewEbomParentFormalEntity::getLastVersionIs,1); + + queryWrapper.lambda().eq(BomNewEbomParentFormalEntity::getCurrentVersion,getMaxVersion()); + }else { queryWrapper.lambda().eq(BomNewEbomParentFormalEntity::getCurrentVersion,query.getBomVersion()); } @@ -63,8 +72,25 @@ public class EBomForwardReport { } BomNewEbomParentFormalEntity parentFormal=list.get(0); + parentFormal.setLevelNum(null); + parentFormal.setOrderNumber(null); return parentFormal; } + public String getMaxVersion(){ + ReportBomVersionVO reportBomVersionVO= bomVersion(); + if(reportBomVersionVO.getVList().size()==1){ + return reportBomVersionVO.getVList().get(0).getVersion(); + } + + String maxVersion=reportBomVersionVO.getVList().get(0).getVersion(); + for(int index=1;index0){ + maxVersion=version; + } + } + return maxVersion; + } ReportBomVO singleReport(){ @@ -85,7 +111,7 @@ public class EBomForwardReport { for (ForwardReportVO vo: nodeList ) { vo.setCreatedTime(reportBomVO.getParent().getCreatedTime()); - vo.setOrderNumber(""); + // vo.setOrderNumber(""); } reportBomVO.setChildNodes(nodeList); } @@ -95,21 +121,6 @@ public class EBomForwardReport { } - public String getMaxVersion(){ - ReportBomVersionVO reportBomVersionVO= bomVersion(); - if(reportBomVersionVO.getVList().size()==1){ - return reportBomVersionVO.getVList().get(0).getVersion(); - } - - String maxVersion=reportBomVersionVO.getVList().get(0).getVersion(); - for(int index=1;index0){ - maxVersion=version; - } - } - return maxVersion; - } @@ -142,17 +153,99 @@ public class EBomForwardReport { return reportBomVersionVO; } + ReportBomVO multiReport(){ + BomNewEbomParentFormalEntity parentFormal= getParent(); + ReportBomVO reportBomVO=new ReportBomVO(); + reportBomVO.setBomType(query.getBomType()); + reportBomVO.setQueryType(query.getQueryType()); + + ForwardReportVO forwardReportVO= Convert.convert(ForwardReportVO.class, parentFormal); + forwardReportVO.setCreatedTime(parentFormal.getConvertToEbomTime()); + reportBomVO.setParent(forwardReportVO); + + + List childList=SpringUtil.getBean(BomNewEbomParentFormalService.class).getBaseMapper().getParentChild(parentFormal.getRowId()); + EBomFormalTreeTask task=new EBomFormalTreeTask(childList); + ForkJoinPool pool = new ForkJoinPool(); + ForkJoinTask> submit = pool.submit(task); + + List bomList= submit.join(); + + + List convertBomList=Convert.convert(new TypeReference>() { + },bomList); + // System.out.println(JSON.toJSONString(bomList)); + + sumLevel(convertBomList); + //分组数据 + List rootList= listToTree(convertBomList, parentFormal.getRowId()); + + sumLevel(rootList); + // System.out.println(JSON.toJSONString(rootList)); + reportBomVO.setChildNodes(rootList); + return reportBomVO; + + + } + + + + + + void sumLevel(List bomList){ + + Map> listMap=bomList.stream().collect(Collectors.groupingBy(ForwardReportVO::getLevelNum)); + Map> bomParentMap=bomList.stream().collect(Collectors.groupingBy(ForwardReportVO::getParentRowId)); + listMap.forEach((key,value)-> { + + value.forEach(parent->{ + + List dataList=bomParentMap.get(parent.getBomRowId()); + if(CollectionUtil.isNotEmpty(dataList)){ + for (ForwardReportVO data: + dataList) { + data.setNum(parent.getNum().multiply(data.getNum())); + } + + } + + }); + + }); + + } + + + + List listToTree( List bomList,Long parentRowId){ + + Map> listMap=bomList.stream().collect(Collectors.groupingBy(ForwardReportVO::getParentRowId)); + + bomList.forEach(item -> { + item.setChildNodes(listMap.get(item.getBomRowId())); + }); + + List rootList= bomList.stream().filter(item ->Objects.equals(parentRowId,item.getParentRowId())).collect(Collectors.toList()); + + return rootList; + } + + + + + public ReportBomVO genReport(){ - + //单层 if (query.getQueryType().compareTo(ReportConstant.QueryTypeEnum.SINGLE.getValue()) == 0){ return singleReport(); } + //多层 if ( query.getQueryType().compareTo(ReportConstant.QueryTypeEnum.MULTI.getValue()) == 0){ - + return multiReport(); } if ( query.getQueryType().compareTo(ReportConstant.QueryTypeEnum.SUM.getValue()) == 0) { diff --git a/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewEbomParentFormalMapper.xml b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewEbomParentFormalMapper.xml index 7dda47e9..2bbfa388 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewEbomParentFormalMapper.xml +++ b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewEbomParentFormalMapper.xml @@ -62,6 +62,18 @@ notice_nums, modify_time - - + +