obom
This commit is contained in:
parent
304e73479d
commit
49c3380406
|
|
@ -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.query.ReverseReportQuery;
|
||||||
import com.nflg.product.bomnew.pojo.vo.*;
|
import com.nflg.product.bomnew.pojo.vo.*;
|
||||||
import com.nflg.product.bomnew.service.domain.EBom.EBomForwardReport;
|
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.service.domain.PBom.PBomForwardReport;
|
||||||
import com.nflg.product.bomnew.util.VUtils;
|
import com.nflg.product.bomnew.util.VUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
@ -57,7 +58,7 @@ public class ForwardReportService {
|
||||||
public List<ForwardReportVO> chilidBom(ChildBomReportQuery query) {
|
public List<ForwardReportVO> chilidBom(ChildBomReportQuery query) {
|
||||||
//原始BOM
|
//原始BOM
|
||||||
if (query.getBomType().compareTo(ReportConstant.BomTypeEnum.ORIGINALBOM.getValue()) == 0) {
|
if (query.getBomType().compareTo(ReportConstant.BomTypeEnum.ORIGINALBOM.getValue()) == 0) {
|
||||||
|
return chilidOriginalBomList(query);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -131,10 +132,20 @@ public class ForwardReportService {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
List<ForwardReportVO> chilidOriginalBomList(ChildBomReportQuery query) {
|
||||||
|
List<BomOriginalListVO> list = SpringUtil.getBean(BomNewOriginalParentService .class).getBaseMapper().getParentChild(query.getBomRowId());
|
||||||
|
List<ForwardReportVO> childBomLit = Convert.convert(
|
||||||
|
new TypeReference<List<ForwardReportVO>>() {
|
||||||
|
|
||||||
|
}, list);
|
||||||
|
return childBomLit;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
ReportBomVO queryOriginalBom(ReverseReportQuery query) {
|
ReportBomVO queryOriginalBom(ReverseReportQuery query) {
|
||||||
return null;
|
OriginalBomForwardReport originalBomForwardReport=new OriginalBomForwardReport(query);
|
||||||
|
|
||||||
|
return originalBomForwardReport.genReport();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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<List<BomOriginalListVO>> {
|
||||||
|
|
||||||
|
private List<BomOriginalListVO> bomDetail;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public static int levelNum=1;
|
||||||
|
|
||||||
|
List<BomOriginalListVO> result = new ArrayList<>();
|
||||||
|
|
||||||
|
public OriginalBomFormalTreeTask(List<BomOriginalListVO> inBomDetail) {
|
||||||
|
bomDetail = inBomDetail;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理BOM明细中未选择Bom版本的明细;使用最新版
|
||||||
|
*/
|
||||||
|
public void handlerChildBomVersionDetail() {
|
||||||
|
|
||||||
|
|
||||||
|
for (BomOriginalListVO vo:
|
||||||
|
bomDetail ) {
|
||||||
|
vo.setLevelNum(levelNum);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Long> bomRowIds=bomDetail.stream().filter(u -> u.getBomRowId()>0 ).map(BomOriginalListVO::getBomRowId).collect(Collectors.toList());
|
||||||
|
|
||||||
|
if (CollUtil.isNotEmpty(bomRowIds)) {
|
||||||
|
|
||||||
|
List<BomNewOriginalParentEntity> bomlist = SpringUtil.getBean(BomNewOriginalParentService.class ).lambdaQuery().in(BomNewOriginalParentEntity::getRowId, bomRowIds).list();
|
||||||
|
Map<Long, BomNewOriginalParentEntity> 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<BomOriginalListVO > compute() {
|
||||||
|
|
||||||
|
handlerChildBomVersionDetail();
|
||||||
|
// 最新 BOM 版本
|
||||||
|
result.addAll(bomDetail);
|
||||||
|
|
||||||
|
if (CollUtil.isNotEmpty(bomDetail)) {
|
||||||
|
levelNumAdd();
|
||||||
|
List<Long> childBowIds = bomDetail.stream().filter(u-> u.getBomRowId()!=null && u.getBomRowId() > 0).map(u->u.getBomRowId()).collect(Collectors.toList());
|
||||||
|
if(CollUtil.isNotEmpty(childBowIds)) {
|
||||||
|
List<BomOriginalListVO> 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++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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<BomNewOriginalParentEntity> buildQuery() {
|
||||||
|
QueryWrapper<BomNewOriginalParentEntity> 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<BomNewOriginalParentEntity> queryWrapper = buildQuery();
|
||||||
|
List<BomNewOriginalParentEntity> 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<BomNewEbomChildFormalEntity> queryWrapper = new QueryWrapper<>();
|
||||||
|
// queryWrapper.lambda().eq(BomNewEbomChildFormalEntity::getParentRowId, parentFormal.getRowId());
|
||||||
|
//
|
||||||
|
// List<BomNewEbomChildFormalEntity> list = SpringUtil.getBean(BomNewEbomChildFormalService.class).list(queryWrapper);
|
||||||
|
//
|
||||||
|
List<BomOriginalListVO> list = SpringUtil.getBean(BomNewOriginalParentService.class).getBaseMapper().getParentChild(parentFormal.getRowId());
|
||||||
|
List<ForwardReportVO> nodeList=null;
|
||||||
|
|
||||||
|
if (CollectionUtil.isNotEmpty(list)) {
|
||||||
|
|
||||||
|
nodeList = Convert.convert(new TypeReference<List<ForwardReportVO>>() {
|
||||||
|
}, list);
|
||||||
|
for (ForwardReportVO vo :
|
||||||
|
nodeList) {
|
||||||
|
vo.setCreatedTime(parentFormal.getConvertToEbomTime());
|
||||||
|
vo.setLevelNum(1);
|
||||||
|
// vo.setOrderNumber("");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return buildReportBomVo(forwardReportVO,nodeList);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* bomid下所有数据
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<BomOriginalListVO> bomDetailList(Long bomRowId) {
|
||||||
|
List<BomOriginalListVO> childList = SpringUtil.getBean(BomNewOriginalParentService.class).getBaseMapper().getParentChild(bomRowId);
|
||||||
|
OriginalBomFormalTreeTask task = new OriginalBomFormalTreeTask(childList);
|
||||||
|
ForkJoinPool pool = new ForkJoinPool();
|
||||||
|
ForkJoinTask<List<BomOriginalListVO>> submit = pool.submit(task);
|
||||||
|
|
||||||
|
List<BomOriginalListVO> bomList = submit.join();
|
||||||
|
return bomList;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 多层
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
ReportBomVO multiReport() {
|
||||||
|
BomNewOriginalParentEntity parentFormal = getParent();
|
||||||
|
|
||||||
|
|
||||||
|
ForwardReportVO forwardReportVO = Convert.convert(ForwardReportVO.class, parentFormal);
|
||||||
|
forwardReportVO.setCreatedTime(parentFormal.getConvertToEbomTime());
|
||||||
|
|
||||||
|
List<BomOriginalListVO> bomList = bomDetailList(parentFormal.getRowId());
|
||||||
|
List<ForwardReportVO> convertBomList = Convert.convert(new TypeReference<List<ForwardReportVO>>() {
|
||||||
|
}, bomList);
|
||||||
|
|
||||||
|
sumLevel(convertBomList);
|
||||||
|
List<ForwardReportVO> 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<BomOriginalListVO> bomList = bomDetailList(parentFormal.getRowId());
|
||||||
|
List<ForwardReportVO> convertBomList = Convert.convert(new TypeReference<List<ForwardReportVO>>() {
|
||||||
|
}, bomList);
|
||||||
|
|
||||||
|
sumLevel(convertBomList);
|
||||||
|
|
||||||
|
//无子级的数据
|
||||||
|
List<ForwardReportVO> 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -83,14 +83,14 @@
|
||||||
|
|
||||||
<!--获取原始bom列表-->
|
<!--获取原始bom列表-->
|
||||||
<select id="getParentChild" resultType="com.nflg.product.bomnew.pojo.vo.BomOriginalListVO">
|
<select id="getParentChild" resultType="com.nflg.product.bomnew.pojo.vo.BomOriginalListVO">
|
||||||
select *
|
select *,bom_version_row_id as bom_row_id
|
||||||
from t_bom_new_original_child
|
from t_bom_new_original_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.BomOriginalListVO">
|
<select id="getParentChildBatch" resultType="com.nflg.product.bomnew.pojo.vo.BomOriginalListVO">
|
||||||
select *
|
select *,bom_version_row_id as bom_row_id
|
||||||
from t_bom_new_original_child
|
from t_bom_new_original_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=")">
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue