ebom编辑重构

This commit is contained in:
jing's 2024-03-14 16:11:17 +08:00
parent 49f606a9ae
commit 5175f8a606
5 changed files with 247 additions and 101 deletions

View File

@ -281,14 +281,16 @@ public class EbomApi extends BaseApi {
@GetMapping("editDetail") @GetMapping("editDetail")
@ApiOperation("编辑物料列表") @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(bomRowId)){
VUtils.isTure(true ).throwMessage("rowId 不能为空");
}
if(Objects.isNull(bomRowId)){ if(Objects.isNull(bomRowId)){
VUtils.isTure(true ).throwMessage("bomRowId不能为空"); VUtils.isTure(true ).throwMessage("bomRowId不能为空");
} }
ResultVO resultVO = new ResultVO(); ResultVO resultVO = new ResultVO();
resultVO.setData(bomNewEbomParentService.editDetail(bomRowId,projectType)); resultVO.setData(bomNewEbomParentService.editDetail(rowId,bomRowId,projectType));
return resultVO; return resultVO;
} }
@ -350,7 +352,8 @@ public class EbomApi extends BaseApi {
@PostMapping("temporary") @PostMapping("temporary")
@ApiOperation("暂存") @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)); return ResultVO.success(bomNewEbomParentService.temporary(dto));
} }
@ -364,9 +367,11 @@ public class EbomApi extends BaseApi {
} }
@PostMapping("intiException") @PostMapping("intiException")
@ApiOperation("初始化错误类型") @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 { public ResultVO<Boolean> intiException(@RequestBody List<Long> bomRowIds) throws ExecutionException, InterruptedException {
bomNewEbomParentService.batchCheckAndSaveEBomException(bomRowIds ); bomNewEbomParentService.batchCheckAndSaveEBomException(bomRowIds );

View File

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

View File

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

View File

@ -914,6 +914,10 @@ public class BomNewEbomParentService extends ServiceImpl<BomNewEbomParentMapper,
}, result); }, result);
BomNewEbomParentEntity parentEntity = this.getBaseMapper().selectById(dto.getRowId()); 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); BomNewEbomParentVO parentVO = Convert.convert(BomNewEbomParentVO.class, parentEntity);
parentVO.setBomRowId(parentVO.getRowId()); parentVO.setBomRowId(parentVO.getRowId());
parentVO.setParentRowId(0l); parentVO.setParentRowId(0l);
@ -924,7 +928,7 @@ public class BomNewEbomParentService extends ServiceImpl<BomNewEbomParentMapper,
BomNewEBomParentEditDTO bomNewEBomParentEditDTO = new BomNewEBomParentEditDTO(); BomNewEBomParentEditDTO bomNewEBomParentEditDTO = new BomNewEBomParentEditDTO();
bomNewEBomParentEditDTO.setParent(parentVO); bomNewEBomParentEditDTO.setParent(parentVO);
bomNewEBomParentEditDTO.setDatas(datas); bomNewEBomParentEditDTO.setDatas(datas);
eBomEdit.temporary(bomNewEBomParentEditDTO); eBomEdit.handleBom(bomNewEBomParentEditDTO);
int orderNo = 1; int orderNo = 1;
@ -934,6 +938,7 @@ public class BomNewEbomParentService extends ServiceImpl<BomNewEbomParentMapper,
deleteBom(dto.getRowId()); deleteBom(dto.getRowId());
} }
} else { } else {
//最后一个序列号
QueryWrapper<BomNewEbomChildEntity> queryWrapper = new QueryWrapper<>(); QueryWrapper<BomNewEbomChildEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(BomNewEbomChildEntity::getParentRowId, dto.getRowId()).last("limit 1"); queryWrapper.lambda().eq(BomNewEbomChildEntity::getParentRowId, dto.getRowId()).last("limit 1");
queryWrapper.lambda().orderByDesc(BomNewEbomChildEntity::getOrderNumber); queryWrapper.lambda().orderByDesc(BomNewEbomChildEntity::getOrderNumber);
@ -948,26 +953,26 @@ public class BomNewEbomParentService extends ServiceImpl<BomNewEbomParentMapper,
for (BomNewEbomChildEntity childEntities : eBomEdit.childEntities) { for (BomNewEbomChildEntity childEntities : eBomEdit.childEntities) {
childEntities.setOrderNumber(OrderNoUtil.orderNo2Str(orderNo)); childEntities.setOrderNumber(OrderNoUtil.orderNo2Str(orderNo));
if (childEntities.getMaterialName().contains(VirtualPackageTypeEnum.MAKING_PACKAGE.getConMaterialName())) { // if (childEntities.getMaterialName().contains(VirtualPackageTypeEnum.MAKING_PACKAGE.getConMaterialName())) {
childEntities.setVirtualPartType(VirtualPackageTypeEnum.MAKING_PACKAGE.getValue()); // childEntities.setVirtualPartType(VirtualPackageTypeEnum.MAKING_PACKAGE.getValue());
childEntities.setVirtualPartIs(1); // childEntities.setVirtualPartIs(1);
//
} else if (childEntities.getMaterialName().contains(VirtualPackageTypeEnum.DELIVERY_PACKAGE.getConMaterialName())) { // } else if (childEntities.getMaterialName().contains(VirtualPackageTypeEnum.DELIVERY_PACKAGE.getConMaterialName())) {
childEntities.setVirtualPartType(VirtualPackageTypeEnum.DELIVERY_PACKAGE.getValue()); // childEntities.setVirtualPartType(VirtualPackageTypeEnum.DELIVERY_PACKAGE.getValue());
childEntities.setVirtualPartIs(1); // childEntities.setVirtualPartIs(1);
} else if (childEntities.getMaterialName().contains(VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getConMaterialName())) { // } else if (childEntities.getMaterialName().contains(VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getConMaterialName())) {
childEntities.setVirtualPartType(VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getValue()); // childEntities.setVirtualPartType(VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getValue());
childEntities.setVirtualPartIs(1); // childEntities.setVirtualPartIs(1);
} else if (childEntities.getMaterialName().contains(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getConMaterialName())) { // } else if (childEntities.getMaterialName().contains(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getConMaterialName())) {
childEntities.setVirtualPartType(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue()); // childEntities.setVirtualPartType(VirtualPackageTypeEnum.PRE_ASSEMBLY_PACKAGE.getValue());
childEntities.setVirtualPartIs(1); // childEntities.setVirtualPartIs(1);
} // }
orderNo++; orderNo++;
} }
if (CollectionUtil.isNotEmpty(eBomEdit.parentEntities)) { if ( eBomEdit.getParentEntity()!=null) {
this.saveOrUpdateBatch(eBomEdit.parentEntities); this.saveOrUpdate( eBomEdit.getParentEntity());
} }
if (CollectionUtil.isNotEmpty(eBomEdit.childEntities)) { if (CollectionUtil.isNotEmpty(eBomEdit.childEntities)) {
@ -1282,17 +1287,36 @@ public class BomNewEbomParentService extends ServiceImpl<BomNewEbomParentMapper,
return true; 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);
BomNewEbomEditDetailVO vo = new BomNewEbomEditDetailVO();
BomNewEbomParentVO parentVO;
if(bomRowId==null || bomRowId.longValue()==0) {
BomNewEbomChildEntity child = SpringUtil.getBean(BomNewEbomChildService.class).getBaseMapper().selectById(rowId);
parentVO = Convert.convert(BomNewEbomParentVO.class, child);
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.setBomRowId(parentVO.getRowId());
parentVO.setParentRowId(0l);
parentVO.setProjectType(projectType); parentVO.setProjectType(projectType);
parentVO.setParentRowId(0l);
materialMainService.intiMaterialInfo(ImmutableList.of(parentVO), EBomConstant.EBOM_IGNORED_FIELDS_INIT_MATERIAL_DEFAULT2); materialMainService.intiMaterialInfo(ImmutableList.of(parentVO), EBomConstant.EBOM_IGNORED_FIELDS_INIT_MATERIAL_DEFAULT2);
vo.setDatas(getChild(bomRowId));
}
// materialMainService.intiMaterialInfo(ImmutableList.of(parentVO)); // materialMainService.intiMaterialInfo(ImmutableList.of(parentVO));
@ -1303,7 +1327,7 @@ public class BomNewEbomParentService extends ServiceImpl<BomNewEbomParentMapper,
// materialMainService.intiMaterialInfo(parentList); // materialMainService.intiMaterialInfo(parentList);
// //
vo.setDatas(getChild(bomRowId));
vo.setParent(parentVO); vo.setParent(parentVO);
return vo; return vo;
@ -1487,13 +1511,11 @@ public class BomNewEbomParentService extends ServiceImpl<BomNewEbomParentMapper,
*/ */
@Transactional(rollbackFor = Exception.class) @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()); EBomEdit eBomEdit = new EBomEdit(EBomSourceEnum.FROM_MDM.getValue());
dto.setOpType(EbomEditStatusEnum.HANDLER_CREATED.getValue()); dto.setOpType(EbomEditStatusEnum.HANDLER_CREATED.getValue());
eBomEdit.temporary(dto); eBomEdit.handleBom(dto);
if (dto.getParent() != null) { if (dto.getParent() != null) {
@ -1502,8 +1524,8 @@ public class BomNewEbomParentService extends ServiceImpl<BomNewEbomParentMapper,
} }
} }
if (CollectionUtil.isNotEmpty(eBomEdit.parentEntities)) { if (eBomEdit.getParentEntity()!=null) {
this.saveOrUpdateBatch(eBomEdit.parentEntities); this.saveOrUpdate(eBomEdit.getParentEntity());
} }
if (CollUtil.isNotEmpty(eBomEdit.childEntities)) { if (CollUtil.isNotEmpty(eBomEdit.childEntities)) {
@ -1513,19 +1535,15 @@ public class BomNewEbomParentService extends ServiceImpl<BomNewEbomParentMapper,
superMaterialStatus(dto.getDatas()); superMaterialStatus(dto.getDatas());
List<BomNewEbomParentVO> childList = dto.getDatas();
if (dto.getParent().getRootIs() == null || dto.getParent().getRootIs() == 0) {
childList.add(dto.getParent());
}
// checkAndSaveEBomException(childList); // checkAndSaveEBomException(childList);
//不要异步 //不要异步
ebomChildService.getBaseMapper().updateEBomMaterialUse(); ebomChildService.getBaseMapper().updateEBomMaterialUse();
// ThreadUtil.execAsync(() -> computeLevelNumAndRootState()); // 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()); EBomEdit eBomEdit = new EBomEdit(EBomSourceEnum.FROM_MDM.getValue());
dto.setOpType(EbomEditStatusEnum.HANDLER_FINISHED.getValue()); dto.setOpType(EbomEditStatusEnum.HANDLER_FINISHED.getValue());
eBomEdit.submit(dto); eBomEdit.handleBom(dto);
List<Integer> checkStatus = CollectionUtil.toList(new Integer[]{ List<Integer> checkStatus = CollectionUtil.toList(new Integer[]{
EBomExceptionStatusEnum.EXCEPT_NO_2.getValue(), 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)) { if (CollectionUtil.isNotEmpty(eBomEdit.childEntities)) {
List<BomNewEbomParentVO> allBom = Convert.convert(new TypeReference<List<BomNewEbomParentVO>>() { List<BomNewEbomParentVO> allBom = Convert.convert(new TypeReference<List<BomNewEbomParentVO>>() {
}, eBomEdit.childEntities); }, 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 checkEBomException = new CheckEBomException(allBom);
checkEBomException.checkContainExcept(checkStatus); checkEBomException.checkContainExcept(checkStatus);
} }
if (CollectionUtil.isNotEmpty(eBomEdit.parentEntities)) {
this.saveOrUpdateBatch(eBomEdit.parentEntities);
}
if (CollectionUtil.isNotEmpty(eBomEdit.childEntities)) { if (CollectionUtil.isNotEmpty(eBomEdit.childEntities)) {
ebomChildService.saveOrUpdateBatch(eBomEdit.childEntities); ebomChildService.saveOrUpdateBatch(eBomEdit.childEntities);
@ -1611,6 +1624,7 @@ public class BomNewEbomParentService extends ServiceImpl<BomNewEbomParentMapper,
if (CollectionUtil.isEmpty(delList)) { if (CollectionUtil.isEmpty(delList)) {
return; return;
} }
List<BomNewEbomParentVO> delTagList = new ArrayList<>(); List<BomNewEbomParentVO> delTagList = new ArrayList<>();
List<BomNewEbomParentVO> okList = delList.stream().filter(u -> Objects.equals(EBomSourceEnum.FROM_BOM.getValue(), u.getSource()) List<BomNewEbomParentVO> okList = delList.stream().filter(u -> Objects.equals(EBomSourceEnum.FROM_BOM.getValue(), u.getSource())

View File

@ -19,43 +19,50 @@ import com.nflg.product.bomnew.pojo.entity.BomNewEbomChildEntity;
import com.nflg.product.bomnew.pojo.entity.BomNewEbomParentEntity; import com.nflg.product.bomnew.pojo.entity.BomNewEbomParentEntity;
import com.nflg.product.bomnew.pojo.vo.BaseMaterialVO; import com.nflg.product.bomnew.pojo.vo.BaseMaterialVO;
import com.nflg.product.bomnew.pojo.vo.BomNewEbomParentVO; 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.MaterialMainService;
import com.nflg.product.bomnew.service.UserRoleService; import com.nflg.product.bomnew.service.UserRoleService;
import com.nflg.product.bomnew.util.MaterialshouldBomExistUtil;
import com.nflg.product.bomnew.util.VUtils; import com.nflg.product.bomnew.util.VUtils;
import lombok.Getter;
import nflg.product.common.constant.STATE; import nflg.product.common.constant.STATE;
import org.ttzero.excel.reader.Col; import org.ttzero.excel.reader.Col;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
public class EBomEdit { public class EBomEdit {
public List<BomNewEbomParentEntity> parentEntities; public List<BomNewEbomParentEntity> parentEntities;
@Getter
private BomNewEbomParentEntity parentEntity;
public List<BomNewEbomChildEntity> childEntities; public List<BomNewEbomChildEntity> childEntities;
Integer source; Integer source;
List<String> roleList;
public EBomEdit(Integer source) { public EBomEdit(Integer source) {
this.source = source; this.source = source;
parentEntities = new ArrayList<>(); parentEntities = new ArrayList<>();
childEntities = new ArrayList<>(); childEntities = new ArrayList<>();
roleList = SpringUtil.getBean(UserRoleService.class).getUserPost();
} }
BomNewEbomParentEntity createParentBomInfo(BomNewEbomParentVO vo) { BomNewEbomParentEntity createParentBomInfo(BomNewEbomParentVO vo) {
BomNewEbomParentEntity parent = new BomNewEbomParentEntity(); BomNewEbomParentEntity parent = Convert.convert(BomNewEbomParentEntity.class, vo);
BeanUtil.copyProperties(vo,parent); //BeanUtil.copyProperties(vo,parent);
// BaseMaterialVO material = materialVOMap.get(vo.getMaterialNo()); // BaseMaterialVO material = materialVOMap.get(vo.getMaterialNo());
String batchNo = IdUtil.simpleUUID(); String batchNo = IdUtil.simpleUUID();
parent.setRowId(IdWorker.getId()); parent.setRowId(IdWorker.getId());
parent.setBatchNo(batchNo); parent.setBatchNo(batchNo);
parent.setTotalWeight(NumberUtil.mul(vo.getUnitWeight(), vo.getNum())); parent.setTotalWeight(NumberUtil.mul(vo.getUnitWeight(), vo.getNum()));
parent.setDeviseUserCode(SessionUtil.getUserCode()); parent.setDeviseUserCode(SessionUtil.getUserCode());
parent.setCurrentVersion("A00"); parent.setCurrentVersion("A00");
@ -64,7 +71,7 @@ public class EBomEdit {
parent.setSourceRowId(0l); parent.setSourceRowId(0l);
parent.setSource(source); parent.setSource(source);
parent.setStatus(EBomStatusEnum.WAIT_CHECK.getValue()); parent.setStatus(EBomStatusEnum.WAIT_CHECK.getValue());
parent.setNum(new BigDecimal(1));
parent.setBomExist(1); parent.setBomExist(1);
parent.setLastVersionIs(1); parent.setLastVersionIs(1);
parent.setEditStatus(EbomEditStatusEnum.HANDLER_CREATED.getValue()); parent.setEditStatus(EbomEditStatusEnum.HANDLER_CREATED.getValue());
@ -74,37 +81,102 @@ public class EBomEdit {
parent.setStatus(SpringUtil.getBean(UserRoleService.class).technician() ? EBomStatusEnum.CHECKED.getValue() : EBomStatusEnum.WAIT_CHECK.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.setCreatedJob(SpringUtil.getBean(UserRoleService.class).technician() ? UserJobEnum.ENGINEER.getValue() : UserJobEnum.DESIGNER.getValue());
parent.setModifyTime(LocalDateTime.now()); parent.setModifyTime(LocalDateTime.now());
parent.setExpireEndTime( LocalDateTime.parse("9999-12-31 23:59:59", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss") ));
return parent; return parent;
} }
void checkHadBom(String materialNo){
void createBom(BomNewEBomParentEditDTO createDTO){ QueryWrapper<BomNewEbomParentEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(BomNewEbomParentEntity::getMaterialNo, materialNo);
List<String> materialNos = createDTO.getDatas().stream().map(u -> u.getMaterialNo()).collect(Collectors.toList()); List<BomNewEbomParentEntity> existBomlist = SpringUtil.getBean(BomNewEbomParentService.class).list(queryWrapper);
materialNos.add(createDTO.getParent().getMaterialNo()); VUtils.isTure(CollUtil.isNotEmpty(existBomlist)).throwMessage(materialNo+"该物料已存在BOM");
//检查物料编码是否在主数据中存在
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) + "在物料档案中不存在");
List<BomNewEbomParentEntity> existBomlist =SpringUtil.getBean(MaterialMainService.class).lambdaQuery().eq(BomNewEbomParentEntity::getMaterialNo, createDTO.getParent().getMaterialNo()).list();
QueryWrapper<BomNewEbomParentEntity>
VUtils.isTure(CollUtil.isNotEmpty(existBomlist)).throwMessage("该物料已存在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) { private void checkExcept(BomNewEbomParentVO parent, BomNewEbomChildEntity child) {
@ -127,32 +199,79 @@ public class EBomEdit {
} }
void checkDataRule(BomNewEBomParentEditDTO dto){ void checkDataRule(BomNewEBomParentEditDTO dto) {
if(dto.getParent()==null){ if (dto.getParent() == null) {
throw new NflgBusinessException(STATE.Error,"parent 数据不能为空"); throw new NflgBusinessException(STATE.Error, "parent 数据不能为空");
} }
if(CollUtil.isEmpty(dto.getDatas())){ if (CollUtil.isEmpty(dto.getDatas())) {
throw new NflgBusinessException(STATE.Error,"datas 数据不能为空"); 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) { public void temporary(BomNewEBomParentEditDTO dto) {
checkDataRule(dto);
List<String> roleList = SpringUtil.getBean(UserRoleService.class).getUserPost(); List<String> roleList = SpringUtil.getBean(UserRoleService.class).getUserPost();
//添加数据
if(dto.getParent().getRowId()==null){
}
if (dto.getParent() == null) { if (dto.getParent() == null) {
@ -226,7 +345,11 @@ public class EBomEdit {
} }
/**
* 废弃
* @param dto
*/
@Deprecated
public void submit(BomNewEBomParentEditDTO dto) { public void submit(BomNewEBomParentEditDTO dto) {
@ -256,7 +379,7 @@ public class EBomEdit {
if (dto.getParent().getBomRowId() == null || dto.getParent().getBomRowId().longValue() == 0) { if (dto.getParent().getBomRowId() == null || dto.getParent().getBomRowId().longValue() == 0) {
dto.getParent().setBomRowId(dto.getParent().getRowId()); dto.getParent().setBomRowId(dto.getParent().getRowId());
parent = createParentBomInfo(dto.getParent()); parent = createParentBomInfo(dto.getParent());
dto.getDatas().forEach(k->{ dto.getDatas().forEach(k -> {
k.setParentRowId(parent.getRowId()); k.setParentRowId(parent.getRowId());
}); });
parent.setEditStatus(dto.getOpType()); parent.setEditStatus(dto.getOpType());
@ -305,7 +428,7 @@ public class EBomEdit {
// parent.setExceptionStatus(EBomExceptionStatusEnum.OK.getValue()); // parent.setExceptionStatus(EBomExceptionStatusEnum.OK.getValue());
checkExcept(dto.getParent(), child); checkExcept(dto.getParent(), child);
}else { } else {
child.setModifyTime(LocalDateTime.now()); child.setModifyTime(LocalDateTime.now());
} }