Merge remote-tracking branch 'origin/feature/DM/nflg-bom' into feature/DM/nflg-bom

This commit is contained in:
大米 2024-03-15 09:38:34 +08:00
commit 304db5e16c
11 changed files with 320 additions and 105 deletions

View File

@ -1,6 +1,5 @@
package com.nflg.product.material.pojo.vo;
import jdk.nashorn.internal.objects.annotations.Constructor;
import lombok.Data;
/**

View File

@ -1,6 +1,5 @@
package com.nflg.product.material.pojo.vo;
import jdk.nashorn.internal.objects.annotations.Constructor;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.ttzero.excel.annotation.ExcelColumn;

View File

@ -281,14 +281,16 @@ public class EbomApi extends BaseApi {
@GetMapping("editDetail")
@ApiOperation("编辑物料列表")
public ResultVO<BomNewEbomEditDetailVO> editDetail(@RequestParam("bomRowId") Long bomRowId,@RequestParam("projectType") String projectType) {
public ResultVO<BomNewEbomEditDetailVO> editDetail(@RequestParam("rowId") Long rowId,@RequestParam("bomRowId") Long bomRowId,@RequestParam("projectType") String projectType) {
if(Objects.isNull(rowId)){
VUtils.isTure(true ).throwMessage("rowId 不能为空");
}
if(Objects.isNull(bomRowId)){
VUtils.isTure(true ).throwMessage("bomRowId不能为空");
}
ResultVO resultVO = new ResultVO();
resultVO.setData(bomNewEbomParentService.editDetail(bomRowId,projectType));
resultVO.setData(bomNewEbomParentService.editDetail(rowId,bomRowId,projectType));
return resultVO;
}
@ -350,10 +352,24 @@ public class EbomApi extends BaseApi {
@PostMapping("temporary")
@ApiOperation("暂存")
public ResultVO<Boolean> temporary(@RequestBody BomNewEBomParentEditDTO dto) throws ExecutionException, InterruptedException {
@LogRecord(success = "Ebom-暂存,物料编码:{{#dto.parent.materialNo}}-版本:{{#dto.parent.currentVersion}},操作结果:{{#_ret}}", bizNo = "{{#dto.parent.rowId}}",type = "Ebom-暂存")
public ResultVO<BomNewEbomParentVO> temporary(@RequestBody BomNewEBomParentEditDTO dto) throws ExecutionException, InterruptedException {
return ResultVO.success(bomNewEbomParentService.temporary(dto));
}
@PostMapping("temporaryAdd")
@ApiOperation("暂存添加")
@LogRecord(success = "Ebom-暂存添加,物料编码:{{#dto.parent.materialNo}}-版本:{{#dto.parent.currentVersion}},操作结果:{{#_ret}}", bizNo = "{{#dto.parent.rowId}}",type = "Ebom-暂存添加")
public ResultVO<BomNewEbomParentVO> temporaryAdd(@RequestBody BomNewEBomParentEditDTO dto) throws ExecutionException, InterruptedException {
return ResultVO.success(bomNewEbomParentService.temporary(dto));
}
@PostMapping("submitAdd")
@ApiOperation("提交添加")
@LogRecord(success = "Ebom-提交添加,物料编码:{{#dto.parent.materialNo}}-版本:{{#dto.parent.currentVersion}},操作结果:{{#_ret}}", bizNo = "{{#dto.parent.rowId}}",type = "Ebom-提交添加")
public ResultVO<Boolean> submitAdd(@RequestBody BomNewEBomParentEditDTO dto) throws ExecutionException, InterruptedException {
return ResultVO.success(bomNewEbomParentService.submit(dto));
}
@PostMapping("submit")
@ -364,9 +380,11 @@ public class EbomApi extends BaseApi {
}
@PostMapping("intiException")
@ApiOperation("初始化错误类型")
@LogRecord(success = "Ebom-初始化错误类型,操作结果:{{#_ret}}", bizNo = "{{#bomRowIds.toString()}}",type = "Ebom-提交")
@LogRecord(success = "Ebom-初始化错误类型,操作结果:{{#_ret}}", bizNo = "{{#bomRowIds.toString()}}",type = "Ebom-初始化错误类型")
public ResultVO<Boolean> intiException(@RequestBody List<Long> bomRowIds) throws ExecutionException, InterruptedException {
bomNewEbomParentService.batchCheckAndSaveEBomException(bomRowIds );

View File

@ -8,8 +8,8 @@ import lombok.Getter;
@Getter
public enum EbomEditStatusEnum implements ValueEnum<Integer> {
HANDLER_CREATED(1, "待处理"),
HANDLER_FINISHED(2, "处理完成");
HANDLER_CREATED(1, "待处理"),//待处理=暂存
HANDLER_FINISHED(2, "处理"); //已处理=提交
private final Integer value;

View File

@ -17,6 +17,10 @@ public class BomNewEbomImportDTO {
// private BomNewEbomParentVO parent;
@ApiModelProperty("父物料id")
private Long rowId;
@ApiModelProperty("bom id")
private Long bomRowId;
@ApiModelProperty("操作类型(1:删除 2:追加)")
private Integer opType;

View File

@ -914,6 +914,10 @@ public class BomNewEbomParentService extends ServiceImpl<BomNewEbomParentMapper,
}, result);
BomNewEbomParentEntity parentEntity = this.getBaseMapper().selectById(dto.getRowId());
if(parentEntity==null){
throw new NflgBusinessException(STATE.Error, StrUtil.format("bom {} 数据未查询到",dto.getRowId()));
}
BomNewEbomParentVO parentVO = Convert.convert(BomNewEbomParentVO.class, parentEntity);
parentVO.setBomRowId(parentVO.getRowId());
parentVO.setParentRowId(0l);
@ -924,7 +928,7 @@ public class BomNewEbomParentService extends ServiceImpl<BomNewEbomParentMapper,
BomNewEBomParentEditDTO bomNewEBomParentEditDTO = new BomNewEBomParentEditDTO();
bomNewEBomParentEditDTO.setParent(parentVO);
bomNewEBomParentEditDTO.setDatas(datas);
eBomEdit.temporary(bomNewEBomParentEditDTO);
eBomEdit.handleBom(bomNewEBomParentEditDTO);
int orderNo = 1;
@ -934,6 +938,7 @@ public class BomNewEbomParentService extends ServiceImpl<BomNewEbomParentMapper,
deleteBom(dto.getRowId());
}
} else {
//最后一个序列号
QueryWrapper<BomNewEbomChildEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(BomNewEbomChildEntity::getParentRowId, dto.getRowId()).last("limit 1");
queryWrapper.lambda().orderByDesc(BomNewEbomChildEntity::getOrderNumber);
@ -948,26 +953,26 @@ public class BomNewEbomParentService extends ServiceImpl<BomNewEbomParentMapper,
for (BomNewEbomChildEntity childEntities : eBomEdit.childEntities) {
childEntities.setOrderNumber(OrderNoUtil.orderNo2Str(orderNo));
if (childEntities.getMaterialName().contains(VirtualPackageTypeEnum.MAKING_PACKAGE.getConMaterialName())) {
childEntities.setVirtualPartType(VirtualPackageTypeEnum.MAKING_PACKAGE.getValue());
childEntities.setVirtualPartIs(1);
} else if (childEntities.getMaterialName().contains(VirtualPackageTypeEnum.DELIVERY_PACKAGE.getConMaterialName())) {
childEntities.setVirtualPartType(VirtualPackageTypeEnum.DELIVERY_PACKAGE.getValue());
childEntities.setVirtualPartIs(1);
} else if (childEntities.getMaterialName().contains(VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getConMaterialName())) {
childEntities.setVirtualPartType(VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getValue());
childEntities.setVirtualPartIs(1);
} else if (childEntities.getMaterialName().contains(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getConMaterialName())) {
childEntities.setVirtualPartType(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue());
childEntities.setVirtualPartIs(1);
}
// if (childEntities.getMaterialName().contains(VirtualPackageTypeEnum.MAKING_PACKAGE.getConMaterialName())) {
// childEntities.setVirtualPartType(VirtualPackageTypeEnum.MAKING_PACKAGE.getValue());
// childEntities.setVirtualPartIs(1);
//
// } else if (childEntities.getMaterialName().contains(VirtualPackageTypeEnum.DELIVERY_PACKAGE.getConMaterialName())) {
// childEntities.setVirtualPartType(VirtualPackageTypeEnum.DELIVERY_PACKAGE.getValue());
// childEntities.setVirtualPartIs(1);
// } else if (childEntities.getMaterialName().contains(VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getConMaterialName())) {
// childEntities.setVirtualPartType(VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getValue());
// childEntities.setVirtualPartIs(1);
// } else if (childEntities.getMaterialName().contains(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getConMaterialName())) {
// childEntities.setVirtualPartType(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue());
// childEntities.setVirtualPartIs(1);
// }
orderNo++;
}
if (CollectionUtil.isNotEmpty(eBomEdit.parentEntities)) {
this.saveOrUpdateBatch(eBomEdit.parentEntities);
if ( eBomEdit.getParentEntity()!=null) {
this.saveOrUpdate( eBomEdit.getParentEntity());
}
if (CollectionUtil.isNotEmpty(eBomEdit.childEntities)) {
@ -1282,17 +1287,36 @@ public class BomNewEbomParentService extends ServiceImpl<BomNewEbomParentMapper,
return true;
}
public BomNewEbomEditDetailVO editDetail(Long bomRowId, String projectType) {
public BomNewEbomEditDetailVO editDetail( Long rowId,Long bomRowId, String projectType) {
BomNewEbomEditDetailVO vo = new BomNewEbomEditDetailVO();
BomNewEbomParentEntity parent = this.getBaseMapper().selectById(bomRowId);
BomNewEbomParentVO parentVO = Convert.convert(BomNewEbomParentVO.class, parent);
BomNewEbomParentVO parentVO;
if(bomRowId==null || bomRowId.longValue()==0) {
BomNewEbomChildEntity child = SpringUtil.getBean(BomNewEbomChildService.class).getBaseMapper().selectById(rowId);
parentVO.setBomRowId(parentVO.getRowId());
parentVO.setParentRowId(0l);
parentVO.setProjectType(projectType);
parentVO = Convert.convert(BomNewEbomParentVO.class, child);
materialMainService.intiMaterialInfo(ImmutableList.of(parentVO), EBomConstant.EBOM_IGNORED_FIELDS_INIT_MATERIAL_DEFAULT2);
materialMainService.intiMaterialInfo(ImmutableList.of(parentVO), EBomConstant.EBOM_IGNORED_FIELDS_INIT_MATERIAL_DEFAULT2);
if (MaterialshouldBomExistUtil.checkShouldBomExist(parentVO)
|| (parentVO.getMaterialCategoryCode().startsWith("20") && (MaterialGetEnum.outsource.equalsValue(parentVO.getMaterialGetType()) || MaterialGetEnum.purchase.equalsValue(parentVO.getMaterialGetType())))
|| parentVO.getMaterialCategoryCode().equals("7013")) {
;
}else{
VUtils.isTure(true).throwMessage("编辑条件需满足1.存在下级物料或是缺BOM 2.物料的分类20且流程类型为外协和采购部分\n" +
" 3.分类70中的7013时的物料 ");
}
vo.setDatas(new ArrayList<>());
}else{
BomNewEbomParentEntity parent = this.getBaseMapper().selectById(bomRowId);
parentVO = Convert.convert(BomNewEbomParentVO.class, parent);
parentVO.setBomRowId(parentVO.getRowId());
parentVO.setProjectType(projectType);
parentVO.setParentRowId(0l);
materialMainService.intiMaterialInfo(ImmutableList.of(parentVO), EBomConstant.EBOM_IGNORED_FIELDS_INIT_MATERIAL_DEFAULT2);
vo.setDatas(getChild(bomRowId));
}
// materialMainService.intiMaterialInfo(ImmutableList.of(parentVO));
@ -1303,7 +1327,7 @@ public class BomNewEbomParentService extends ServiceImpl<BomNewEbomParentMapper,
// materialMainService.intiMaterialInfo(parentList);
//
vo.setDatas(getChild(bomRowId));
vo.setParent(parentVO);
return vo;
@ -1487,13 +1511,11 @@ public class BomNewEbomParentService extends ServiceImpl<BomNewEbomParentMapper,
*/
@Transactional(rollbackFor = Exception.class)
public Boolean temporary(BomNewEBomParentEditDTO dto) throws ExecutionException, InterruptedException {
public BomNewEbomParentVO temporary(BomNewEBomParentEditDTO dto) throws ExecutionException, InterruptedException {
EBomEdit eBomEdit = new EBomEdit(EBomSourceEnum.FROM_MDM.getValue());
dto.setOpType(EbomEditStatusEnum.HANDLER_CREATED.getValue());
eBomEdit.temporary(dto);
eBomEdit.handleBom(dto);
if (dto.getParent() != null) {
@ -1502,8 +1524,8 @@ public class BomNewEbomParentService extends ServiceImpl<BomNewEbomParentMapper,
}
}
if (CollectionUtil.isNotEmpty(eBomEdit.parentEntities)) {
this.saveOrUpdateBatch(eBomEdit.parentEntities);
if (eBomEdit.getParentEntity()!=null) {
this.saveOrUpdate(eBomEdit.getParentEntity());
}
if (CollUtil.isNotEmpty(eBomEdit.childEntities)) {
@ -1513,19 +1535,15 @@ public class BomNewEbomParentService extends ServiceImpl<BomNewEbomParentMapper,
superMaterialStatus(dto.getDatas());
List<BomNewEbomParentVO> childList = dto.getDatas();
if (dto.getParent().getRootIs() == null || dto.getParent().getRootIs() == 0) {
childList.add(dto.getParent());
}
// checkAndSaveEBomException(childList);
//不要异步
ebomChildService.getBaseMapper().updateEBomMaterialUse();
// ThreadUtil.execAsync(() -> computeLevelNumAndRootState());
return true;
BomNewEbomParentVO retParentVO= Convert.convert(BomNewEbomParentVO.class,eBomEdit.getParentEntity());
retParentVO.setBomRowId(retParentVO.getRowId());
return retParentVO;
}
/**
@ -1538,7 +1556,7 @@ public class BomNewEbomParentService extends ServiceImpl<BomNewEbomParentMapper,
EBomEdit eBomEdit = new EBomEdit(EBomSourceEnum.FROM_MDM.getValue());
dto.setOpType(EbomEditStatusEnum.HANDLER_FINISHED.getValue());
eBomEdit.submit(dto);
eBomEdit.handleBom(dto);
List<Integer> checkStatus = CollectionUtil.toList(new Integer[]{
EBomExceptionStatusEnum.EXCEPT_NO_2.getValue(),
@ -1557,27 +1575,22 @@ public class BomNewEbomParentService extends ServiceImpl<BomNewEbomParentMapper,
}
}
if ( eBomEdit.getParentEntity()!=null) {
this.saveOrUpdate(eBomEdit.getParentEntity());
}
if (CollectionUtil.isNotEmpty(eBomEdit.childEntities)) {
List<BomNewEbomParentVO> allBom = Convert.convert(new TypeReference<List<BomNewEbomParentVO>>() {
}, eBomEdit.childEntities);
BomNewEbomParentVO parent = Convert.convert(BomNewEbomParentVO.class
, eBomEdit.parentEntities.get(0));
// if (dto.getParent().getRootIs() == null || dto.getParent().getRootIs() == 0) {
// allBom.add(parent);
// }
CheckEBomException checkEBomException = new CheckEBomException(allBom);
checkEBomException.checkContainExcept(checkStatus);
}
if (CollectionUtil.isNotEmpty(eBomEdit.parentEntities)) {
this.saveOrUpdateBatch(eBomEdit.parentEntities);
}
if (CollectionUtil.isNotEmpty(eBomEdit.childEntities)) {
ebomChildService.saveOrUpdateBatch(eBomEdit.childEntities);
@ -1611,6 +1624,7 @@ public class BomNewEbomParentService extends ServiceImpl<BomNewEbomParentMapper,
if (CollectionUtil.isEmpty(delList)) {
return;
}
List<BomNewEbomParentVO> delTagList = new ArrayList<>();
List<BomNewEbomParentVO> okList = delList.stream().filter(u -> Objects.equals(EBomSourceEnum.FROM_BOM.getValue(), u.getSource())

View File

@ -255,8 +255,6 @@ public class BomNewMbomParentService extends ServiceImpl<BomNewMbomParentMapper,
}
ImportSapParamDTO result=new ImportSapParamDTO();
result.setT1(new ArrayList<>());
result.setZID(RandomUtil.randomNumbers(5));

View File

@ -10,27 +10,24 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.Sets;
import com.mzt.logapi.context.LogRecordContext;
import com.nflg.product.base.core.config.SpringContextUtils;
import com.nflg.product.base.core.conmon.util.SessionUtil;
import com.nflg.product.base.core.exception.NflgBusinessException;
import com.nflg.product.bomnew.constant.*;
import com.nflg.product.bomnew.mapper.master.BomNewOriginalParentMapper;
import com.nflg.product.bomnew.pojo.dto.BomNewOriginalExcelDTO;
import com.nflg.product.bomnew.pojo.dto.OriginalSaveBomDTO;
import com.nflg.product.bomnew.pojo.entity.*;
import com.nflg.product.bomnew.pojo.entity.BomNewOriginalChildEntity;
import com.nflg.product.bomnew.pojo.entity.BomNewOriginalMaterialUseEntity;
import com.nflg.product.bomnew.pojo.entity.BomNewOriginalParentEntity;
import com.nflg.product.bomnew.pojo.entity.BomOriginalCadParentEntity;
import com.nflg.product.bomnew.pojo.query.OriginalBomQuery;
import com.nflg.product.bomnew.pojo.vo.BomNewEbomParentVO;
import com.nflg.product.bomnew.pojo.vo.BomOriginalListVO;
import com.nflg.product.bomnew.pojo.vo.BomOriginalPlmBomVO;
import com.nflg.product.bomnew.pojo.vo.ImportOriginalBomVO;
import com.nflg.product.bomnew.service.domain.EBom.CheckEBomException;
import com.nflg.product.bomnew.service.domain.OriginalBom.OriginalBomDetailTask;
import com.nflg.product.bomnew.service.domain.OriginalBom.OriginalBomToEBomConvert;
import com.nflg.product.bomnew.service.domain.OriginalBom.PlmBomToOriginalConvert;
import com.nflg.product.bomnew.util.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.map.LinkedMap;
import org.bouncycastle.cert.dane.DANEEntry;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;
@ -46,7 +43,6 @@ import java.util.concurrent.ExecutionException;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.ForkJoinTask;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
@ -618,6 +614,9 @@ public class BomNewOriginalParentService extends ServiceImpl<BomNewOriginalParen
if (data.getChartNo().equals("")) {
data.setChartNo("");
}
if (data.getMaterialNo().equals("")) {
data.setMaterialNo("");
}
rowNum.set(rowNum.get() + 1);
excelContextTL.get().add(data);

View File

@ -8,51 +8,60 @@ import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.spring.SpringUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.google.common.collect.Sets;
import com.nflg.product.base.core.conmon.util.SessionUtil;
import com.nflg.product.base.core.exception.NflgBusinessException;
import com.nflg.product.bomnew.constant.*;
import com.nflg.product.bomnew.pojo.dto.BomNewEBomParentEditDTO;
import com.nflg.product.bomnew.pojo.entity.BomNewEbomChildEntity;
import com.nflg.product.bomnew.pojo.entity.BomNewEbomParentEntity;
import com.nflg.product.bomnew.pojo.vo.BaseMaterialVO;
import com.nflg.product.bomnew.pojo.vo.BomNewEbomParentVO;
import com.nflg.product.bomnew.service.BomNewEbomParentService;
import com.nflg.product.bomnew.service.MaterialMainService;
import com.nflg.product.bomnew.service.UserRoleService;
import com.nflg.product.bomnew.util.MaterialshouldBomExistUtil;
import com.nflg.product.bomnew.util.VUtils;
import lombok.Getter;
import nflg.product.common.constant.STATE;
import org.ttzero.excel.reader.Col;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
public class EBomEdit {
public List<BomNewEbomParentEntity> parentEntities;
@Getter
private BomNewEbomParentEntity parentEntity;
public List<BomNewEbomChildEntity> childEntities;
Integer source;
List<String> roleList;
public EBomEdit(Integer source) {
this.source = source;
parentEntities = new ArrayList<>();
childEntities = new ArrayList<>();
roleList = SpringUtil.getBean(UserRoleService.class).getUserPost();
}
BomNewEbomParentEntity createParentBomInfo(BomNewEbomParentVO vo) {
BomNewEbomParentEntity parent = new BomNewEbomParentEntity();
BeanUtil.copyProperties(vo,parent);
BomNewEbomParentEntity parent = Convert.convert(BomNewEbomParentEntity.class, vo);
//BeanUtil.copyProperties(vo,parent);
// BaseMaterialVO material = materialVOMap.get(vo.getMaterialNo());
String batchNo = IdUtil.simpleUUID();
parent.setRowId(IdWorker.getId());
parent.setBatchNo(batchNo);
// parent.setDrawingNo(material.getDrawingNo());
// parent.setMaterialNo(material.getMaterialNo());
// parent.setMaterialName(material.getMaterialName());
// parent.setMaterialDesc(material.getMaterialDesc());
// parent.setMaterialTexture(material.getMaterial());
// parent.setNum(vo.getNum() == null ? new BigDecimal(1) : vo.getNum());
parent.setTotalWeight(NumberUtil.mul(vo.getUnitWeight(), vo.getNum()));
parent.setDeviseUserCode(SessionUtil.getUserCode());
@ -62,22 +71,113 @@ public class EBomEdit {
parent.setSourceRowId(0l);
parent.setSource(source);
parent.setStatus(EBomStatusEnum.WAIT_CHECK.getValue());
parent.setNum(new BigDecimal(1));
parent.setBomExist(1);
parent.setLastVersionIs(1);
parent.setEditStatus(EbomEditStatusEnum.HANDLER_CREATED.getValue());
parent.setExceptionStatus(EBomExceptionStatusEnum.OK.getValue());
// if(StrUtil.isEmpty(parent.getProjectType())){
// parent.setExceptionStatus(EBomExceptionStatusEnum.EXCEPT_NO_8.getValue());
// }
parent.setStatus(SpringUtil.getBean(UserRoleService.class).technician() ? EBomStatusEnum.CHECKED.getValue() : EBomStatusEnum.WAIT_CHECK.getValue());
parent.setCreatedJob(SpringUtil.getBean(UserRoleService.class).technician() ? UserJobEnum.ENGINEER.getValue() : UserJobEnum.DESIGNER.getValue());
parent.setModifyTime(LocalDateTime.now());
parent.setExpireEndTime( LocalDateTime.parse("9999-12-31 23:59:59", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss") ));
return parent;
}
void checkHadBom(String materialNo){
QueryWrapper<BomNewEbomParentEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(BomNewEbomParentEntity::getMaterialNo, materialNo);
List<BomNewEbomParentEntity> existBomlist = SpringUtil.getBean(BomNewEbomParentService.class).list(queryWrapper);
VUtils.isTure(CollUtil.isNotEmpty(existBomlist)).throwMessage(materialNo+"该物料已存在BOM");
}
void createRootBom(BomNewEBomParentEditDTO createDTO) {
checkHadBom(createDTO.getParent().getMaterialNo());
parentEntity = createParentBomInfo(createDTO.getParent());
parentEntity.setEditStatus(createDTO.getOpType());
parentEntity.setRootIs(1);
parentEntity.setUserRootIs(1);
createDTO.getDatas().forEach(k -> {
k.setParentRowId(parentEntity.getRowId());
});
if (Objects.equals(createDTO.getOpType(), EbomEditStatusEnum.HANDLER_FINISHED.getValue())) {
//工艺人员
if (roleList.contains(EBomConstant.TECHNICIAN)) {
parentEntity.setStatus(EBomStatusEnum.CHECKED.getValue());
}
}
childEntities.addAll(updateOrCreateChild(createDTO));
}
List<BomNewEbomChildEntity> updateOrCreateChild(BomNewEBomParentEditDTO dto) {
List<BomNewEbomChildEntity> childEntity = Convert.convert(new TypeReference<List<BomNewEbomChildEntity>>() {
}, dto.getDatas());
for (BomNewEbomChildEntity child :
childEntity) {
child.setEditStatus(dto.getOpType());
child.setTotalWeight(NumberUtil.mul(child.getUnitWeight(), child.getNum()));
child.setModifyTime(LocalDateTime.now());
if (child.getMaterialName().contains(VirtualPackageTypeEnum.MAKING_PACKAGE.getConMaterialName())) {
child.setVirtualPartType(VirtualPackageTypeEnum.MAKING_PACKAGE.getValue());
child.setVirtualPartIs(1);
} else if (child.getMaterialName().contains(VirtualPackageTypeEnum.DELIVERY_PACKAGE.getConMaterialName())) {
child.setVirtualPartType(VirtualPackageTypeEnum.DELIVERY_PACKAGE.getValue());
child.setVirtualPartIs(1);
} else if (child.getMaterialName().contains(VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getConMaterialName())) {
child.setVirtualPartType(VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getValue());
child.setVirtualPartIs(1);
} else if (child.getMaterialName().contains(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getConMaterialName())) {
child.setVirtualPartType(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue());
child.setVirtualPartIs(1);
}
//新增数据
if (child.getRowId() == null || child.getRowId().longValue() == 0) {
child.setRowId(IdWorker.getId());
child.setIdentityNo(StrUtil.join("_", parentEntity.getRowId(), child.getRowId()));
child.setSource(source);
child.setCreatedTime(LocalDateTime.now());
child.setCreatedBy(SessionUtil.getUserCode());
child.setSourceRowId(0l);
child.setParentRowId(parentEntity.getRowId());
if(StrUtil.isEmpty(child.getOrderNumber())){
child.setOrderNumber("00");
}
child.setExceptionStatus(EBomExceptionStatusEnum.OK.getValue());
// parent.setExceptionStatus(EBomExceptionStatusEnum.OK.getValue());
checkExcept(dto.getParent(), child);
if (StrUtil.isNotBlank(child.getProjectType())) {
child.setProjectType(child.getProjectType().toUpperCase());
}
}
}
return childEntity;
}
private void checkExcept(BomNewEbomParentVO parent, BomNewEbomChildEntity child) {
@ -99,14 +199,81 @@ public class EBomEdit {
}
void checkDataRule(BomNewEBomParentEditDTO dto) {
if (dto.getParent() == null) {
throw new NflgBusinessException(STATE.Error, "parent 数据不能为空");
}
if (CollUtil.isEmpty(dto.getDatas())) {
throw new NflgBusinessException(STATE.Error, "datas 数据不能为空");
}
List<String> materialNos = dto.getDatas().stream().map(u -> u.getMaterialNo()).collect(Collectors.toList());
if(materialNos.contains(dto.getParent().getMaterialNo())){
VUtils.isTure(true).throwMessage(StrUtil.format("上下级存在相同物料{}",dto.getParent().getMaterialNo()));
}
materialNos.add(dto.getParent().getMaterialNo());
//检查物料编码是否在主数据中存在
List<BaseMaterialVO> materialBaseInfo = SpringUtil.getBean(MaterialMainService.class).getMaterialBaseInfo(materialNos);
List<String> effectiveMaterialNos = materialBaseInfo.stream().map(u -> u.getMaterialNo()).collect(Collectors.toList());
Set<String> difference = Sets.difference(new HashSet<>(materialNos), new HashSet<>(effectiveMaterialNos));
VUtils.isTure(CollUtil.isNotEmpty(difference)).throwMessage(StrUtil.join(",", difference) + "在物料主数据中不存在");
}
public void handleBom(BomNewEBomParentEditDTO dto) {
checkDataRule(dto);
//添加根节点数据
//rowId is null 必定是未入库作为根
if (dto.getParent().getRowId() == null || dto.getParent().getRowId().longValue() == 0) {
createRootBom(dto);
return;
}
//缺bom
if (dto.getParent().getBomRowId() == null || dto.getParent().getBomRowId().longValue() == 0) {
checkHadBom(dto.getParent().getMaterialNo());
dto.getParent().setBomRowId(dto.getParent().getRowId());
parentEntity = createParentBomInfo(dto.getParent());
dto.getDatas().forEach(k -> {
k.setParentRowId(parentEntity.getRowId());
});
parentEntity.setEditStatus(dto.getOpType());
}else{
parentEntity = Convert.convert(BomNewEbomParentEntity.class, dto.getParent());
parentEntity.setModifyTime(LocalDateTime.now());
}
parentEntity.setEditStatus(dto.getOpType());
//提交
if (Objects.equals(dto.getOpType(), EbomEditStatusEnum.HANDLER_FINISHED.getValue())) {
//工艺人员
if (roleList.contains(EBomConstant.TECHNICIAN)) {
parentEntity.setStatus(EBomStatusEnum.CHECKED.getValue());
}
}
childEntities.addAll(updateOrCreateChild(dto));
}
/**
* 废弃
* @param dto
*/
@Deprecated
public void temporary(BomNewEBomParentEditDTO dto) {
parentEntities = new ArrayList<>();
childEntities = new ArrayList<>();
List<String> roleList = SpringUtil.getBean(UserRoleService.class).getUserPost();
//添加数据
if (dto.getParent() == null) {
for (BomNewEbomParentVO vo : dto.getDatas()) {
@ -178,7 +345,11 @@ public class EBomEdit {
}
/**
* 废弃
* @param dto
*/
@Deprecated
public void submit(BomNewEBomParentEditDTO dto) {
@ -208,7 +379,7 @@ public class EBomEdit {
if (dto.getParent().getBomRowId() == null || dto.getParent().getBomRowId().longValue() == 0) {
dto.getParent().setBomRowId(dto.getParent().getRowId());
parent = createParentBomInfo(dto.getParent());
dto.getDatas().forEach(k->{
dto.getDatas().forEach(k -> {
k.setParentRowId(parent.getRowId());
});
parent.setEditStatus(dto.getOpType());
@ -257,7 +428,7 @@ public class EBomEdit {
// parent.setExceptionStatus(EBomExceptionStatusEnum.OK.getValue());
checkExcept(dto.getParent(), child);
}else {
} else {
child.setModifyTime(LocalDateTime.now());
}

View File

@ -49,7 +49,7 @@ public class PlmBomToOriginalConvert extends BaseConvert {
childs = Convert.toList(BomOriginalPlmBomVO.class, SpringUtil.getBean(BomOriginalCadChildService.class).lambdaQuery().eq(BomOriginalCadChildEntity::getParentRowId, inParent.getRowId()).list());
parent = Convert.convert(BomOriginalPlmBomVO.class, inParent);
//图号-初始化缺编码的物料
if(StrUtil.isBlank(parent.getMaterialNo())){
if(StrUtil.isBlank(parent.getMaterialNo()) || parent.getMaterialNo().trim().equalsIgnoreCase("")){
SpringUtil.getBean(MaterialMainService.class).initMaterialForDrawdingNo(ImmutableList.of(parent) ,BomOriginalPlmBomVO::getDrawingNo,BomOriginalPlmBomVO::setMaterialNo,BomOriginalPlmBomVO::setMaterialName);
}
List<BomOriginalPlmBomVO> noMaterialNoList = childs.stream().filter(u -> StrUtil.isBlank(u.getMaterialNo())).collect(Collectors.toList());

View File

@ -1,6 +1,5 @@
package com.nflg.product.base.core.exception;
import cn.hutool.core.util.StrUtil;
import lombok.extern.slf4j.Slf4j;
import nflg.product.common.constant.STATE;
import nflg.product.common.vo.ResultVO;
@ -9,9 +8,9 @@ import org.springframework.dao.DuplicateKeyException;
import org.springframework.jdbc.BadSqlGrammarException;
import org.springframework.web.HttpRequestMethodNotSupportedException;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.MissingServletRequestParameterException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MaxUploadSizeExceededException;
import org.springframework.web.servlet.NoHandlerFoundException;
@ -34,21 +33,24 @@ public class BaseGlobalExceptionHandle {
@ExceptionHandler(value = NflgBusinessException.class)
@ResponseBody
public ResultVO<String> handleJeecgBootException(NflgBusinessException e) {
return ResultVO.error(e.getState(), e.getMessage());
log.error(e.getMessage(), e);
//return ResultVO.error(e.getState(), e.getMessage());
return ResultVO.error(e.getState(),e.getMessage());
}
@ExceptionHandler(value = NoHandlerFoundException.class)
@ResponseBody
public ResultVO<String> handlerNoFoundException(NoHandlerFoundException e) {
log.error(e.getMessage(), e);
return ResultVO.error(404, "路径不存在,请检查路径是否正确");
//return ResultVO.error(404, "路径不存在,请检查路径是否正确");
return ResultVO.error(STATE.AddressNotFound,"路径不存在,请检查路径是否正确");
}
@ExceptionHandler(value = DuplicateKeyException.class)
@ResponseBody
public ResultVO<String> handleDuplicateKeyException(DuplicateKeyException e) {
log.error(e.getMessage(), e);
//return ResultVO.error("已存在该记录,请勿重复操作");
return ResultVO.error("已存在该记录,请勿重复操作");
}
@ -57,6 +59,7 @@ public class BaseGlobalExceptionHandle {
@ResponseBody
public ResultVO<String> handleException(Exception e) {
log.error(e.getMessage(), e);
//return ResultVO.error("操作失败,请联系系统管理员");
return ResultVO.error("操作失败,请联系系统管理员");
}
@ -68,7 +71,8 @@ public class BaseGlobalExceptionHandle {
@ExceptionHandler(value = HttpRequestMethodNotSupportedException.class)
@ResponseBody
public ResultVO<String> HttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e) {
StringBuffer sb = new StringBuffer();
log.error(e.getMessage(), e);
StringBuilder sb = new StringBuilder();
sb.append("不支持");
sb.append(e.getMethod());
sb.append("请求方法,");
@ -81,8 +85,8 @@ public class BaseGlobalExceptionHandle {
}
}
log.error(sb.toString(), e);
return ResultVO.error(STATE.PermissionDenied, "登录已过期,请重新登录");
// return ResultVO.error(STATE.PermissionDenied, sb.toString());
//return ResultVO.error(STATE.PermissionDenied, "登录已过期,请重新登录");
return ResultVO.error(STATE.PermissionDenied,"不支持的请求方法:"+e.getMethod());
}
/**
@ -92,6 +96,7 @@ public class BaseGlobalExceptionHandle {
@ResponseBody
public ResultVO<String> handleMaxUploadSizeExceededException(MaxUploadSizeExceededException e) {
log.error(e.getMessage(), e);
//return ResultVO.error("文件大小超出10MB限制, 请压缩或降低文件质量! ");
return ResultVO.error("文件大小超出10MB限制, 请压缩或降低文件质量! ");
}
@ -99,6 +104,7 @@ public class BaseGlobalExceptionHandle {
@ResponseBody
public ResultVO<String> handleDataIntegrityViolationException(DataIntegrityViolationException e) {
log.error(e.getMessage(), e);
// return ResultVO.error("字段太长,超出数据库字段的长度");
return ResultVO.error("字段太长,超出数据库字段的长度");
}
@ -106,6 +112,7 @@ public class BaseGlobalExceptionHandle {
@ResponseBody
public ResultVO<String> handleSQLException(SQLException e) {
log.error(e.getMessage(),e);
//return ResultVO.error("sql执行过程出现错误");
return ResultVO.error("sql执行过程出现错误");
}
@ -113,16 +120,16 @@ public class BaseGlobalExceptionHandle {
@ResponseBody
public ResultVO<String> handleRuntimeExceptionException(RuntimeException e) {
log.error(e.getMessage(),e);
throw new NflgBusinessException(STATE.Error, "系统错误,请联系管理员");
//throw new NflgBusinessException(STATE.Error, "系统错误,请联系管理员");
return ResultVO.error("系统错误,请联系管理员");
}
@ExceptionHandler(value = BadSqlGrammarException.class)
@ResponseBody
public ResultVO<String> handleDataAccessException(BadSqlGrammarException e) {
log.error(e.getMessage(),e);
throw new NflgBusinessException(STATE.Error, "sql 语法错误,系统错误,请联系管理员");
//throw new NflgBusinessException(STATE.Error, "sql 语法错误,系统错误,请联系管理员");
return ResultVO.error("sql 语法错误,系统错误,请联系管理员");
}
@ExceptionHandler(value = MethodArgumentNotValidException.class)
@ -133,10 +140,16 @@ public class BaseGlobalExceptionHandle {
}
@ExceptionHandler(NullPointerException.class)
@ResponseBody
public ResultVO<String> handleNullPointerException(NullPointerException ex) {
return ResultVO.error(STATE.Error, "系统错误,请联系管理员:"+ex.getMessage()) ;
log.error(ex.getMessage(),ex);
return ResultVO.error(STATE.Error, "系统错误,请联系管理员") ;
}
@ExceptionHandler(MissingServletRequestParameterException.class)
@ResponseBody
public ResultVO<String> handleMissingServletRequestParameterException(MissingServletRequestParameterException ex) {
log.error(ex.getMessage(),ex);
return ResultVO.error(STATE.ParamErr, ex.getParameterName()+"参数不能为空");
}
}