Merge branch 'refs/heads/feature/DM/nflg-bom' into feature/DM/nflg-bom-transition

# Conflicts:
#	nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/EbomV2Api.java
This commit is contained in:
曹鹏飞 2024-05-22 17:05:30 +08:00
commit fb62f92f05
2 changed files with 67 additions and 55 deletions

View File

@ -1,5 +1,6 @@
package com.nflg.product.bomnew.api.user; package com.nflg.product.bomnew.api.user;
import cn.hutool.core.collection.CollUtil;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import com.mzt.logapi.context.LogRecordContext; import com.mzt.logapi.context.LogRecordContext;
import com.mzt.logapi.starter.annotation.LogRecord; import com.mzt.logapi.starter.annotation.LogRecord;
@ -7,12 +8,14 @@ import com.nflg.product.base.core.api.BaseApi;
import com.nflg.product.base.core.conmon.util.SessionUtil; import com.nflg.product.base.core.conmon.util.SessionUtil;
import com.nflg.product.bomnew.mapper.master.BomNewEbomChildMapper; import com.nflg.product.bomnew.mapper.master.BomNewEbomChildMapper;
import com.nflg.product.bomnew.pojo.dto.EbomExcelDTO; import com.nflg.product.bomnew.pojo.dto.EbomExcelDTO;
import com.nflg.product.bomnew.pojo.entity.BomOriginalCadParentEntity;
import com.nflg.product.bomnew.pojo.query.GenerateVirtualPackageQuery; import com.nflg.product.bomnew.pojo.query.GenerateVirtualPackageQuery;
import com.nflg.product.bomnew.pojo.vo.ImportOriginalBomVO; import com.nflg.product.bomnew.pojo.vo.ImportOriginalBomVO;
import com.nflg.product.bomnew.pojo.vo.ListForGenerateVirtualPackageVO; import com.nflg.product.bomnew.pojo.vo.ListForGenerateVirtualPackageVO;
import com.nflg.product.bomnew.pojo.vo.OperationErrorMsgVO; import com.nflg.product.bomnew.pojo.vo.OperationErrorMsgVO;
import com.nflg.product.bomnew.service.*; import com.nflg.product.bomnew.service.*;
import com.nflg.product.bomnew.util.EecExcelUtil; import com.nflg.product.bomnew.util.EecExcelUtil;
import com.nflg.product.bomnew.util.VUtils;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import nflg.product.common.vo.ResultVO; import nflg.product.common.vo.ResultVO;
@ -25,8 +28,10 @@ import org.ttzero.excel.entity.Workbook;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import java.util.stream.Collectors;
/** /**
@ -44,8 +49,7 @@ public class EbomV2Api extends BaseApi {
BomNewOriginalParentV2Service originalParentV2Service; BomNewOriginalParentV2Service originalParentV2Service;
@Resource @Resource
BomNewEbomChildMapper bomNewEbomChildMapper; BomNewEbomChildMapper bomNewEbomChildMapper;
@Resource
BomNewOriginalParentService originalParentService;
@Resource @Resource
BomNewEbomParentService ebomParentService; BomNewEbomParentService ebomParentService;
@Resource @Resource
@ -53,22 +57,36 @@ public class EbomV2Api extends BaseApi {
@Resource @Resource
EBomImportService eBomImportService; EBomImportService eBomImportService;
@Resource
BomOriginalCadParentService originalCadParentService;
@GetMapping("pullFromCadAndToEBom") @GetMapping("pullFromCadAndToEBom")
@ApiOperation("从CAD获取BOM数据并转为EBom") @ApiOperation("从CAD获取BOM数据并转为EBom")
@Transactional(rollbackFor = Exception.class)
public ResultVO<List<ImportOriginalBomVO>> pullFromCadAndToEBom() throws ExecutionException, InterruptedException { public ResultVO<List<ImportOriginalBomVO>> pullFromCadAndToEBom() throws ExecutionException, InterruptedException {
List<BomOriginalCadParentEntity> parents = originalCadParentService.lambdaQuery().eq(BomOriginalCadParentEntity::getStatus, 1).eq(BomOriginalCadParentEntity::getCreatedBy, SessionUtil.getUserCode()).list();
List<ImportOriginalBomVO> result=new ArrayList<>();
try {
List<ImportOriginalBomVO> result = originalParentV2Service.pullFromCadAndToEBom(SessionUtil.getUserCode()); result = originalParentV2Service.pullFromCadAndToEBom(parents);
//更新物料使用
bomNewEbomChildMapper.updateEBomMaterialUse();
//更新物料使用 //跟新EBom 根节点
bomNewEbomChildMapper.updateEBomMaterialUse(); ebomParentService.getBaseMapper().updateRootState();
ebomParentService.getBaseMapper().updateRootForWaitReview();
//跟新EBom 根节点 ebomParentService.resetAllBomExist();
ebomParentService.getBaseMapper().updateRootState(); }
ebomParentService.getBaseMapper().updateRootForWaitReview(); catch (Exception e){
VUtils.isTure(true).throwMessage("转换失败:"+e.getMessage());
ebomParentService.resetAllBomExist(); }
finally {
List<Integer> delRowIds = parents.stream().map(BomOriginalCadParentEntity::getRowId).collect(Collectors.toList());
if (CollUtil.isNotEmpty(delRowIds)) {
originalParentV2Service.delCadData(delRowIds);
}
}
return ResultVO.success(result); return ResultVO.success(result);
} }

View File

@ -8,14 +8,12 @@ import cn.hutool.extra.spring.SpringUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import com.nflg.product.bomnew.constant.OriginalEditStatusEnum; import com.nflg.product.bomnew.constant.OriginalEditStatusEnum;
import com.nflg.product.bomnew.constant.OriginalStatusEnum; import com.nflg.product.bomnew.constant.OriginalStatusEnum;
import com.nflg.product.bomnew.mapper.master.BomNewOriginalParentMapper; import com.nflg.product.bomnew.mapper.master.BomNewOriginalParentMapper;
import com.nflg.product.bomnew.pojo.dto.BaseImportExcelDTO; import com.nflg.product.bomnew.pojo.dto.BaseImportExcelDTO;
import com.nflg.product.bomnew.pojo.dto.BomNewOriginalExcelDTO; import com.nflg.product.bomnew.pojo.dto.BomNewOriginalExcelDTO;
import com.nflg.product.bomnew.pojo.entity.BomNewOriginalChildEntity;
import com.nflg.product.bomnew.pojo.entity.BomNewOriginalParentEntity; import com.nflg.product.bomnew.pojo.entity.BomNewOriginalParentEntity;
import com.nflg.product.bomnew.pojo.entity.BomOriginalCadChildEntity; import com.nflg.product.bomnew.pojo.entity.BomOriginalCadChildEntity;
import com.nflg.product.bomnew.pojo.entity.BomOriginalCadParentEntity; import com.nflg.product.bomnew.pojo.entity.BomOriginalCadParentEntity;
@ -23,7 +21,6 @@ import com.nflg.product.bomnew.pojo.vo.BaseMaterialVO;
import com.nflg.product.bomnew.pojo.vo.BomOriginalListVO; import com.nflg.product.bomnew.pojo.vo.BomOriginalListVO;
import com.nflg.product.bomnew.pojo.vo.BomOriginalPlmBomVO; import com.nflg.product.bomnew.pojo.vo.BomOriginalPlmBomVO;
import com.nflg.product.bomnew.pojo.vo.ImportOriginalBomVO; import com.nflg.product.bomnew.pojo.vo.ImportOriginalBomVO;
import com.nflg.product.bomnew.service.domain.OriginalBom.OriginalBomToEBomConvert;
import com.nflg.product.bomnew.service.domain.OriginalBom.OriginalBomToEBomV2Convert; import com.nflg.product.bomnew.service.domain.OriginalBom.OriginalBomToEBomV2Convert;
import com.nflg.product.bomnew.service.domain.OriginalBom.PlmBomToOriginalConvert; import com.nflg.product.bomnew.service.domain.OriginalBom.PlmBomToOriginalConvert;
import com.nflg.product.bomnew.service.domain.OriginalBom.PlmBomToOriginalConvertV2; import com.nflg.product.bomnew.service.domain.OriginalBom.PlmBomToOriginalConvertV2;
@ -86,11 +83,12 @@ public class BomNewOriginalParentV2Service extends ServiceImpl<BomNewOriginalPar
BomNewOriginalMaterialUseService originalMaterialUseService; BomNewOriginalMaterialUseService originalMaterialUseService;
@Resource @Resource
@Qualifier( "syncOriginalBomToFormalPool") @Qualifier("syncOriginalBomToFormalPool")
ThreadPoolTaskExecutor syncOriginalBomToFormalPool; ThreadPoolTaskExecutor syncOriginalBomToFormalPool;
/** /**
* 检查物料编码在主数据中是否存在 * 检查物料编码在主数据中是否存在
*
* @param materialNos * @param materialNos
* @param <T> * @param <T>
*/ */
@ -105,63 +103,59 @@ public class BomNewOriginalParentV2Service extends ServiceImpl<BomNewOriginalPar
/** /**
* 从CAD获取数据并转EBom * 从CAD获取数据并转EBom
* @param userCode *
* @param
* @return * @return
*/ */
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public List<ImportOriginalBomVO> pullFromCadAndToEBom(String userCode) throws ExecutionException, InterruptedException { public List<ImportOriginalBomVO> pullFromCadAndToEBom(List<BomOriginalCadParentEntity> parents) throws ExecutionException, InterruptedException {
List<BomOriginalCadParentEntity> parents = originalCadParentService.lambdaQuery().eq(BomOriginalCadParentEntity::getStatus, 1).eq(BomOriginalCadParentEntity::getCreatedBy, userCode).list();
List<ImportOriginalBomVO> toEBomResult = new ArrayList(); List<ImportOriginalBomVO> toEBomResult = new ArrayList();
try { VUtils.isTure(CollUtil.isEmpty(parents)).throwMessage("没有你的数据,你无需转换");
//检查物料编码在主数据中是否存在
List<BomOriginalCadChildEntity> childs = originalCadChildService.lambdaQuery().in(BomOriginalCadChildEntity::getParentRowId, parents.stream().map(u -> u.getRowId()).collect(Collectors.toList())).list();
checkMaterialHasExist(parents.stream().filter(u -> StrUtil.isNotBlank(u.getMaterialNo())).map(BomOriginalCadParentEntity::getMaterialNo).collect(Collectors.toList()));
checkMaterialHasExist(childs.stream().filter(u -> StrUtil.isNotBlank(u.getMaterialNo())).map(BomOriginalCadChildEntity::getMaterialNo).collect(Collectors.toList()));
VUtils.isTure(CollUtil.isEmpty(parents)).throwMessage("没有你的数据,你无需转换"); //父级物料编码不能为空
//检查物料编码在主数据中是否存在 materialMainService.initMaterialForDrawdingNo(parents, BomOriginalCadParentEntity::getChartNo, BomOriginalCadParentEntity::setMaterialNo, BomOriginalCadParentEntity::setMaterialName);
List<BomOriginalCadChildEntity> childs = originalCadChildService.lambdaQuery().in(BomOriginalCadChildEntity::getParentRowId, parents.stream().map(u -> u.getRowId()).collect(Collectors.toList())).list(); Set<String> noMaterialNoChartNos = parents.stream().filter(u -> StrUtil.isBlank(u.getMaterialNo())).map(u -> u.getChartNo()).collect(Collectors.toSet());
checkMaterialHasExist(parents.stream().filter(u -> StrUtil.isNotBlank(u.getMaterialNo())).map(BomOriginalCadParentEntity::getMaterialNo).collect(Collectors.toList())); VUtils.isTure(CollUtil.isNotEmpty(noMaterialNoChartNos)).throwMessage(StrUtil.join(",", noMaterialNoChartNos) + "物料编码为空,请检查(父级物料编码不能为空)");
checkMaterialHasExist(childs.stream().filter(u -> StrUtil.isNotBlank(u.getMaterialNo())).map(BomOriginalCadChildEntity::getMaterialNo).collect(Collectors.toList()));
//父级物料编码不能为空 PlmBomToOriginalConvertV2 convert = new PlmBomToOriginalConvertV2();
materialMainService.initMaterialForDrawdingNo(parents, BomOriginalCadParentEntity::getChartNo, BomOriginalCadParentEntity::setMaterialNo, BomOriginalCadParentEntity::setMaterialName); for (BomOriginalCadParentEntity parent : parents) {
List<String> noMaterialNoChartNos = parents.stream().filter(u -> StrUtil.isBlank(u.getMaterialNo())).map(u -> u.getChartNo()).collect(Collectors.toList()); //转原始BOM
VUtils.isTure(CollUtil.isNotEmpty(noMaterialNoChartNos)).throwMessage(StrUtil.join(",", noMaterialNoChartNos) + "物料编码为空,请检查(父级物料编码不能为空)"); convert.convertOriginalBom(parent);
PlmBomToOriginalConvertV2 convert = new PlmBomToOriginalConvertV2();
for (BomOriginalCadParentEntity parent : parents) {
//转原始BOM
convert.convertOriginalBom(parent);
}
if (CollUtil.isNotEmpty(convert.getResultParent())) {
this.saveOrUpdateBatch(convert.getResultParent());
}
if (CollUtil.isNotEmpty(convert.getResultChild())) {
originalChildService.saveOrUpdateBatch(convert.getResultChild());
}
//转Ebom
if (CollUtil.isNotEmpty(convert.getResultParent())) {
toEBomResult = convertToEBomV2(convert.getResultParent().stream().map(u -> u.getRowId()).collect(Collectors.toList()));
}
} }
catch (Exception ex){ if (CollUtil.isNotEmpty(convert.getResultParent())) {
VUtils.isTure(true).throwMessage("转换失败:"+ex.getMessage()); this.saveOrUpdateBatch(convert.getResultParent());
} }
finally { if (CollUtil.isNotEmpty(convert.getResultChild())) {
//删除cad临时表数据 originalChildService.saveOrUpdateBatch(convert.getResultChild());
List<Integer> delRowIds = parents.stream().map(BomOriginalCadParentEntity::getRowId).collect(Collectors.toList()); }
if (CollUtil.isNotEmpty(delRowIds)) { //转Ebom
originalCadParentService.getBaseMapper().deleteBatchIds(delRowIds);
originalCadParentService.getBaseMapper().delChildByParentRowIds(delRowIds); if (CollUtil.isNotEmpty(convert.getResultParent())) {
} toEBomResult = convertToEBomV2(convert.getResultParent().stream().map(u -> u.getRowId()).collect(Collectors.toList()));
} }
return toEBomResult; return toEBomResult;
} }
@Transactional()
public void delCadData(List<Integer> rowIds) {
if (CollUtil.isNotEmpty(rowIds)) {
originalCadParentService.getBaseMapper().deleteBatchIds(rowIds);
originalCadParentService.getBaseMapper().delChildByParentRowIds(rowIds);
}
}
/** /**
* 原始BOM-转EBOM-v2 * 原始BOM-转EBOM-v2
*
* @param bomRowIds * @param bomRowIds
* @return * @return
* @throws ExecutionException * @throws ExecutionException