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 149f9ce5..587f6ad6 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 @@ -12,6 +12,7 @@ import com.nflg.product.bomnew.pojo.query.ChildBomReportQuery; import com.nflg.product.bomnew.pojo.query.ReverseReportQuery; import com.nflg.product.bomnew.pojo.vo.*; import com.nflg.product.bomnew.service.domain.EBom.EBomForwardReport; +import com.nflg.product.bomnew.service.domain.OriginalBom.OriginalBomForwardReport; import com.nflg.product.bomnew.service.domain.PBom.PBomForwardReport; import com.nflg.product.bomnew.util.VUtils; import org.springframework.stereotype.Service; @@ -57,7 +58,7 @@ public class ForwardReportService { public List chilidBom(ChildBomReportQuery query) { //原始BOM if (query.getBomType().compareTo(ReportConstant.BomTypeEnum.ORIGINALBOM.getValue()) == 0) { - + return chilidOriginalBomList(query); } @@ -131,10 +132,20 @@ public class ForwardReportService { } + List chilidOriginalBomList(ChildBomReportQuery query) { + List list = SpringUtil.getBean(BomNewOriginalParentService .class).getBaseMapper().getParentChild(query.getBomRowId()); + List childBomLit = Convert.convert( + new TypeReference>() { + + }, list); + return childBomLit; + } ReportBomVO queryOriginalBom(ReverseReportQuery query) { - return null; + OriginalBomForwardReport originalBomForwardReport=new OriginalBomForwardReport(query); + + return originalBomForwardReport.genReport(); } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/OriginalBom/OriginalBomFormalTreeTask.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/OriginalBom/OriginalBomFormalTreeTask.java new file mode 100644 index 00000000..2ab71282 --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/OriginalBom/OriginalBomFormalTreeTask.java @@ -0,0 +1,109 @@ +package com.nflg.product.bomnew.service.domain.OriginalBom; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.extra.spring.SpringUtil; +import com.nflg.product.bomnew.pojo.entity.BomNewEbomParentFormalEntity; +import com.nflg.product.bomnew.pojo.entity.BomNewOriginalParentEntity; +import com.nflg.product.bomnew.pojo.vo.BomNewEbomParentFormalVO; +import com.nflg.product.bomnew.pojo.vo.BomOriginalListVO; +import com.nflg.product.bomnew.service.BomNewEbomParentFormalService; +import com.nflg.product.bomnew.service.BomNewOriginalParentService; +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 OriginalBomFormalTreeTask extends RecursiveTask> { + + private List bomDetail; + + + + @Getter + @Setter + public static int levelNum=1; + + List result = new ArrayList<>(); + + public OriginalBomFormalTreeTask(List inBomDetail) { + bomDetail = inBomDetail; + } + + /** + * 处理BOM明细中未选择Bom版本的明细;使用最新版 + */ + public void handlerChildBomVersionDetail() { + + + for (BomOriginalListVO vo: + bomDetail ) { + vo.setLevelNum(levelNum); + } + + List bomRowIds=bomDetail.stream().filter(u -> u.getBomRowId()>0 ).map(BomOriginalListVO::getBomRowId).collect(Collectors.toList()); + + if (CollUtil.isNotEmpty(bomRowIds)) { + + List bomlist = SpringUtil.getBean(BomNewOriginalParentService.class ).lambdaQuery().in(BomNewOriginalParentEntity::getRowId, bomRowIds).list(); + Map parentEntityMap = ListCommonUtil.listToMap(bomlist, BomNewOriginalParentEntity::getRowId); + for (BomOriginalListVO detailVO : bomDetail) { + if (parentEntityMap.containsKey(detailVO.getBomRowId())) { + BomNewOriginalParentEntity ebomParentEntity = parentEntityMap.get(detailVO.getBomRowId()); + detailVO.setChildBomRowId(ebomParentEntity.getRowId()); + detailVO.setCreatedTime(ebomParentEntity.getConvertToEbomTime()); + // detailVO.setBomRowId(ebomParentEntity.getRowId()); + + 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(BomNewOriginalParentService.class).getBaseMapper().getParentChildBatch(childBowIds); + OriginalBomFormalTreeTask task = new OriginalBomFormalTreeTask(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/OriginalBom/OriginalBomForwardReport.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/OriginalBom/OriginalBomForwardReport.java new file mode 100644 index 00000000..6a62c79e --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/OriginalBom/OriginalBomForwardReport.java @@ -0,0 +1,197 @@ +package com.nflg.product.bomnew.service.domain.OriginalBom; + +import cn.hutool.core.collection.CollectionUtil; +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.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.nflg.product.base.core.exception.NflgBusinessException; +import com.nflg.product.bomnew.constant.OriginalStatusEnum; +import com.nflg.product.bomnew.constant.ReportConstant; +import com.nflg.product.bomnew.pojo.entity.BomNewEbomParentFormalEntity; +import com.nflg.product.bomnew.pojo.entity.BomNewOriginalParentEntity; +import com.nflg.product.bomnew.pojo.query.ReverseReportQuery; +import com.nflg.product.bomnew.pojo.vo.*; +import com.nflg.product.bomnew.service.BomNewEbomParentFormalService; +import com.nflg.product.bomnew.service.BomNewOriginalParentService; +import com.nflg.product.bomnew.service.domain.BaseForwardReport; +import com.nflg.product.bomnew.service.domain.EBom.EBomFormalTreeTask; +import com.nflg.product.bomnew.util.VersionUtil; +import nflg.product.common.constant.STATE; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ForkJoinPool; +import java.util.concurrent.ForkJoinTask; + +/** + * 原始bom报表统计 + */ +public class OriginalBomForwardReport extends BaseForwardReport { + + + public OriginalBomForwardReport(ReverseReportQuery query) { + + super(query); + } + + + QueryWrapper buildQuery() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().eq(BomNewOriginalParentEntity::getDrawingNo, query.getDrawingNo()); + if (StrUtil.isNotBlank(query.getMaterialNo())) { + queryWrapper.lambda().eq(BomNewOriginalParentEntity::getMaterialNo, query.getMaterialNo()); + } + + queryWrapper.lambda().eq(BomNewOriginalParentEntity::getLastVersionIs,1); + // queryWrapper.lambda().eq(BomNewOriginalParentEntity::getStatus, OriginalStatusEnum.OVER_CONVERT.getValue()); + if (StrUtil.isNotBlank(query.getStartDate()) && StrUtil.isNotBlank(query.getEndDate())) { + queryWrapper.lambda().between(BomNewOriginalParentEntity::getConvertToEbomTime, query.getStartDate(), query.getEndDate()); + } + return queryWrapper; + } + + + BomNewOriginalParentEntity getParent() { + QueryWrapper queryWrapper = buildQuery(); + List list = SpringUtil.getBean(BomNewOriginalParentService.class).list(queryWrapper); + if (CollectionUtil.isEmpty(list)) { + throw new NflgBusinessException(STATE.BusinessError, StrUtil.format("未查到图号为{}的数据信息", query.getDrawingNo())); + } + BomNewOriginalParentEntity parentFormal = list.get(0); + parentFormal.setLevelNum(null); + + return parentFormal; + } + + + /** + * 单层 + * + * @return + */ + ReportBomVO singleReport() { + + BomNewOriginalParentEntity parentFormal = getParent(); + ForwardReportVO forwardReportVO = Convert.convert(ForwardReportVO.class, parentFormal); + forwardReportVO.setCreatedTime(parentFormal.getConvertToEbomTime()); + +// QueryWrapper queryWrapper = new QueryWrapper<>(); +// queryWrapper.lambda().eq(BomNewEbomChildFormalEntity::getParentRowId, parentFormal.getRowId()); +// +// List list = SpringUtil.getBean(BomNewEbomChildFormalService.class).list(queryWrapper); +// + List list = SpringUtil.getBean(BomNewOriginalParentService.class).getBaseMapper().getParentChild(parentFormal.getRowId()); + List nodeList=null; + + if (CollectionUtil.isNotEmpty(list)) { + + nodeList = Convert.convert(new TypeReference>() { + }, list); + for (ForwardReportVO vo : + nodeList) { + vo.setCreatedTime(parentFormal.getConvertToEbomTime()); + vo.setLevelNum(1); + // vo.setOrderNumber(""); + } + + } + + return buildReportBomVo(forwardReportVO,nodeList); + } + + + + /** + * bomid下所有数据 + * + * @return + */ + List bomDetailList(Long bomRowId) { + List childList = SpringUtil.getBean(BomNewOriginalParentService.class).getBaseMapper().getParentChild(bomRowId); + OriginalBomFormalTreeTask task = new OriginalBomFormalTreeTask(childList); + ForkJoinPool pool = new ForkJoinPool(); + ForkJoinTask> submit = pool.submit(task); + + List bomList = submit.join(); + return bomList; + } + + + /** + * 多层 + * + * @return + */ + ReportBomVO multiReport() { + BomNewOriginalParentEntity parentFormal = getParent(); + + + ForwardReportVO forwardReportVO = Convert.convert(ForwardReportVO.class, parentFormal); + forwardReportVO.setCreatedTime(parentFormal.getConvertToEbomTime()); + + List bomList = bomDetailList(parentFormal.getRowId()); + List convertBomList = Convert.convert(new TypeReference>() { + }, bomList); + + sumLevel(convertBomList); + List rootList; + //转化为树结构 + rootList = showDataStyle(convertBomList, parentFormal.getRowId()); + + return buildReportBomVo(forwardReportVO,rootList,query.getDataType()); + + + } + + + /** + * 汇总 + * 1. 查询所有不含子级的物料信息,并对数据进行汇总。 + * + * @return + */ + ReportBomVO sumReport() { + + BomNewOriginalParentEntity parentFormal = getParent(); + + + ForwardReportVO forwardReportVO = Convert.convert(ForwardReportVO.class, parentFormal); + forwardReportVO.setCreatedTime(parentFormal.getConvertToEbomTime()); + + List bomList = bomDetailList(parentFormal.getRowId()); + List convertBomList = Convert.convert(new TypeReference>() { + }, bomList); + + sumLevel(convertBomList); + + //无子级的数据 + List sumList =leafMergeMaterialNo(convertBomList); + + return buildReportBomVo(forwardReportVO,sumList); + } + + + + + + 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) { + return sumReport(); + } + + return null; + } + + +} diff --git a/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewOriginalParentMapper.xml b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewOriginalParentMapper.xml index 75ddde80..139b6a4a 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewOriginalParentMapper.xml +++ b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewOriginalParentMapper.xml @@ -83,14 +83,14 @@