diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/EbomApi.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/EbomApi.java index ffe25517..ef7fdb3f 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/EbomApi.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/EbomApi.java @@ -13,10 +13,7 @@ import com.nflg.product.bomnew.pojo.entity.BomNewEbomParentEntity; import com.nflg.product.bomnew.pojo.query.BomNewEbomMaterialQuery; import com.nflg.product.bomnew.pojo.query.BomNewEbomParentQuery; import com.nflg.product.bomnew.pojo.query.OriginalBomQuery; -import com.nflg.product.bomnew.pojo.vo.BaseMaterialVO; -import com.nflg.product.bomnew.pojo.vo.BomNewEbomEditDetailVO; -import com.nflg.product.bomnew.pojo.vo.BomNewEbomParentVO; -import com.nflg.product.bomnew.pojo.vo.BomOriginalListVO; +import com.nflg.product.bomnew.pojo.vo.*; import com.nflg.product.bomnew.service.BomNewEbomParentService; import com.nflg.product.bomnew.service.BomNewOriginalParentService; import com.nflg.product.bomnew.service.MaterialMainService; @@ -163,6 +160,7 @@ public class EbomApi extends BaseApi { return ResultVO.error("请上传Excel文件"); } List result = EecExcelUtil.getExcelContext(file.getInputStream(), BomNewEBomImportExcelDTO.class); + materialMainService.intiMaterialInfo(result, BomNewEBomImportExcelDTO::getMaterialNo); return ResultVO.success(result); } @@ -180,18 +178,6 @@ public class EbomApi extends BaseApi { return ResultVO.success(true); } - @PostMapping("createParentBom") - @ApiOperation("创建根节点BOM") - public ResultVO createParentBom(@RequestBody BomNewEBomCreateDTO createDTO) { - VUtils.isTure(StrUtil.isBlank(createDTO.getMaterialNo())).throwMessage("物料编码不能为空"); - //子级物料编码不能为空 - VUtils.isTure(CollUtil.isEmpty(createDTO.getDatas())).throwMessage("子级不能为空"); - List noMaterialList = createDTO.getDatas().stream().filter(u -> StrUtil.isBlank(u.getMaterialNo())).collect(Collectors.toList()); - VUtils.isTure(CollUtil.isNotEmpty(noMaterialList)).throwMessage("子级存在物料编码为空的数据"); - bomNewEbomParentService.createBom(createDTO); - return ResultVO.success(true); - } - @PostMapping("revertDesign") @ApiOperation("退回到设计") @@ -231,7 +217,7 @@ public class EbomApi extends BaseApi { @PostMapping("queryMaterial") @ApiOperation("查询物料信息") - public ResultVO queryMaterial(@RequestBody BomNewEbomMaterialQuery query) { + public ResultVO queryMaterial(@RequestBody BomNewEbomMaterialQuery query) { if (StringUtils.isEmpty(query.getDrawingNo()) && StringUtils.isEmpty(query.getMaterialNo())) { return ResultVO.error(STATE.Error, "图号或物料编码不能为空"); } @@ -242,6 +228,33 @@ public class EbomApi extends BaseApi { + @GetMapping("delete") + @ApiOperation("删除物料") + public ResultVO deleteMaterial(@RequestParam("bomRowId") Long bomRowId ) throws ExecutionException, InterruptedException{ + bomNewEbomParentService.deleteMaterial(bomRowId); + bomNewEbomParentService.computeLevelNumAndRootState(); + return ResultVO.success(true); + } + + + +//temporary + + + @PostMapping("temporary") + @ApiOperation("暂存") + public ResultVO temporary(@RequestBody BomNewEBomParentEditDTO dto) { + return ResultVO.success(bomNewEbomParentService.temporary(dto)); + } + + + + @PostMapping("submit") + @ApiOperation("提交") + public ResultVO submit(@RequestBody BomNewEBomParentEditDTO dto) { + return ResultVO.success(bomNewEbomParentService.submit(dto)); + } + diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewEbomParentMapper.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewEbomParentMapper.java index 060e1c35..d4ad3518 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewEbomParentMapper.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewEbomParentMapper.java @@ -56,4 +56,6 @@ public interface BomNewEbomParentMapper extends BaseMapper getChildForMaterialNoSeach(@Param("materialNoList") List materialNoList,@Param("materialNo") String materialNo); void updateRootState(); + + void delBatch(@Param("rowIds") List rowIds); } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/dto/BomNewEBomParentCreateDTO.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/dto/BomNewEBomParentCreateDTO.java index 105641c6..841f3f6a 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/dto/BomNewEBomParentCreateDTO.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/dto/BomNewEBomParentCreateDTO.java @@ -1,5 +1,6 @@ package com.nflg.product.bomnew.pojo.dto; +import com.nflg.product.bomnew.pojo.vo.BomNewEbomParentVO; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -11,7 +12,9 @@ public class BomNewEBomParentCreateDTO { @ApiModelProperty("操作类型 1-暂存 2-提交") private Integer opType=1; @ApiModelProperty("列表数据") - private List datas; + private List datas; + + } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/dto/BomNewEBomParentEditDTO.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/dto/BomNewEBomParentEditDTO.java index ad389935..e192f617 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/dto/BomNewEBomParentEditDTO.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/dto/BomNewEBomParentEditDTO.java @@ -1,5 +1,6 @@ package com.nflg.product.bomnew.pojo.dto; +import com.nflg.product.bomnew.pojo.vo.BomNewEbomParentVO; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -8,16 +9,9 @@ import java.util.List; @Data public class BomNewEBomParentEditDTO extends BomNewEBomParentCreateDTO{ @ApiModelProperty("上层") - private BomNewEbomParentDTO parent; - - + private BomNewEbomParentVO parent; @ApiModelProperty("删除的列表") - private List delDatas; - - - - - + private List delDatas; } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewEbomParentService.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewEbomParentService.java index d59b823d..534cfb60 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewEbomParentService.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewEbomParentService.java @@ -2,6 +2,7 @@ package com.nflg.product.bomnew.service; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; @@ -18,22 +19,15 @@ 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.BomNewEbomParentMapper; -import com.nflg.product.bomnew.pojo.dto.BomNewEBomCreateDTO; -import com.nflg.product.bomnew.pojo.dto.BomNewEBomRevertDTO; -import com.nflg.product.bomnew.pojo.dto.EBomToPBomParamDTO; -import com.nflg.product.bomnew.pojo.dto.VirtualPackageParamDto; -import com.nflg.product.bomnew.pojo.entity.BomNewEbomChildEntity; -import com.nflg.product.bomnew.pojo.entity.BomNewEbomMaterialUseEntity; -import com.nflg.product.bomnew.pojo.entity.BomNewEbomParentEntity; -import com.nflg.product.bomnew.pojo.entity.MaterialMainEntity; +import com.nflg.product.bomnew.pojo.dto.*; +import com.nflg.product.bomnew.pojo.entity.*; import com.nflg.product.bomnew.pojo.query.BomNewEbomMaterialQuery; import com.nflg.product.bomnew.pojo.query.BomNewEbomParentQuery; -import com.nflg.product.bomnew.pojo.vo.BaseMaterialVO; -import com.nflg.product.bomnew.pojo.vo.BomNewEbomEditDetailVO; -import com.nflg.product.bomnew.pojo.vo.BomNewEbomParentVO; -import com.nflg.product.bomnew.pojo.vo.EbomExcelVO; +import com.nflg.product.bomnew.pojo.vo.*; import com.nflg.product.bomnew.service.domain.EBom.*; +import com.nflg.product.bomnew.service.domain.OriginalBom.OriginalBomDetailTask; import com.nflg.product.bomnew.util.*; +import lombok.extern.slf4j.Slf4j; import nflg.product.common.constant.STATE; import nflg.product.common.vo.ResultVO; import org.apache.commons.lang3.StringUtils; @@ -62,6 +56,7 @@ import java.util.stream.Collectors; * @since 2023-11-17 16:55:11 */ @Service +@Slf4j public class BomNewEbomParentService extends ServiceImpl { @@ -517,6 +512,49 @@ public class BomNewEbomParentService extends ServiceImpl list = this.lambdaQuery().le(BomNewEbomParentEntity ::getLevelNum, 0).list(); + + if (CollUtil.isNotEmpty(list)) { + for (BomNewEbomParentEntity bom : list) { + bom.setRootIs(1); + List bomDetail = this.getBaseMapper().getParentChild(bom.getRowId()); + EBomDetailTask detailTask = new EBomDetailTask(bomDetail); + detailTask.setLevelNum(1); + ForkJoinTask> submit = bomDetailPool.submit(detailTask); + submit.get(); + bom.setLevelNum(detailTask.getLevelNum()); + } + this.saveOrUpdateBatch(list); + } + return true; + + } + + + /** + * 计算层级数和根节点状态 + */ + public void computeLevelNumAndRootState() { + //计算树的层级数 +// CompletableFuture.runAsync(() -> { + try { + this.getBaseMapper().updateRootState(); + this.compucteLevelNum(); + + } catch (Exception e) { + log.info("计算层级出错:"+e.getMessage()); + } +// }); + } + + + /** * 手工创建EBOM @@ -803,7 +841,7 @@ public class BomNewEbomParentService extends ServiceImpl materialMainList=null; if (StringUtils.isNotEmpty(query.getMaterialNo())) { materialMainList = materialMainService.lambdaQuery().eq(MaterialMainEntity::getMaterialNo, query.getMaterialNo()).list(); @@ -827,8 +865,10 @@ public class BomNewEbomParentService extends ServiceImpl bomTree = getBomTree(bomRowId); + List delBom=null; + if (userRoleService.designer()) { + delBom = bomTree.stream().filter(u -> u.getBomRowId() > 0 + && u.getSource().equals(EBomSourceEnum.FROM_MDM.getValue()) + && EBomStatusEnum.PUBLISHED.equalsValue(u.getStatus())) + .collect(Collectors.toList()); + } + + if(CollUtil.isNotEmpty(delBom)) { + + List delParentRowId = new ArrayList<>(); + for (BomNewEbomParentVO bom : delBom) { + delParentRowId.add(bom.getBomRowId()); + } + delParentRowId.add(bomRowId); + if (CollUtil.isNotEmpty(delParentRowId)) { + this.getBaseMapper().delBatch(delParentRowId); + } + } + + return true; + } + + + /** + * 暂存 + * + * 用户临时处理数据,数据的处理状态为“待处理”,当用户单击暂存的时候,所有的数据都不需要校验,直接保存即可。 + */ + + public Boolean temporary(BomNewEBomParentEditDTO dto){ + + EBomEdit eBomEdit=new EBomEdit(); + eBomEdit.temporary(dto); + if(CollectionUtil.isNotEmpty(eBomEdit.parentEntities)){ + this.saveOrUpdateBatch(eBomEdit.parentEntities ); + } + + if(CollUtil.isNotEmpty(eBomEdit.childEntities)){ + ebomChildService.saveOrUpdateBatch(eBomEdit.childEntities); + } + if(dto.getParent()!=null){ + if(dto.getParent().getSource().equals(EBomSourceEnum.FROM_MDM.getValue()) || dto.getParent().getSource().equals(EBomSourceEnum.FROM_EXCE.getValue())){ + if(CollUtil.isNotEmpty(dto.getDelDatas())) { + List rowIdList = dto.getDelDatas().stream().filter(u -> u.getRowId().longValue() > 0).map(BomNewEbomParentVO::getRowId).collect(Collectors.toList()); + ebomChildService.removeByIds(rowIdList); + + } + } + } + + return true; + } + + /** + * 提交物料 + */ + public Boolean submit(BomNewEBomParentEditDTO dto){ + + EBomEdit eBomEdit=new EBomEdit(); + eBomEdit.temporary(dto); + if(CollectionUtil.isNotEmpty(eBomEdit.parentEntities)){ + this.saveOrUpdateBatch(eBomEdit.parentEntities ); + } + + if(CollUtil.isNotEmpty(eBomEdit.childEntities)){ + ebomChildService.saveOrUpdateBatch(eBomEdit.childEntities); + } + if(dto.getParent()!=null){ + if(dto.getParent().getSource().equals(EBomSourceEnum.FROM_MDM.getValue()) + || dto.getParent().getSource().equals(EBomSourceEnum.FROM_EXCE.getValue())){ + + if(CollUtil.isNotEmpty(dto.getDelDatas())) { + List rowIdList = dto.getDelDatas().stream().filter(u -> u.getRowId().longValue() > 0).map(BomNewEbomParentVO::getRowId).collect(Collectors.toList()); + ebomChildService.removeByIds(rowIdList); + + } + } + } + + return true; + + } + } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomEdit.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomEdit.java new file mode 100644 index 00000000..231c5e1f --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomEdit.java @@ -0,0 +1,146 @@ +package com.nflg.product.bomnew.service.domain.EBom; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.convert.Convert; +import cn.hutool.core.lang.TypeReference; +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.toolkit.IdWorker; +import com.google.common.collect.Sets; +import com.nflg.product.base.core.conmon.util.SessionUtil; +import com.nflg.product.bomnew.constant.EBomSourceEnum; +import com.nflg.product.bomnew.constant.EBomStatusEnum; +import com.nflg.product.bomnew.constant.EbomEditStatusEnum; +import com.nflg.product.bomnew.constant.ProjectTypeInputTypeEnum; +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.pojo.vo.OptionalEbomConfigVO; +import com.nflg.product.bomnew.service.BomNewEbomParentService; +import com.nflg.product.bomnew.service.MaterialMainService; +import com.nflg.product.bomnew.util.ListCommonUtil; +import com.nflg.product.bomnew.util.VUtils; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.*; +import java.util.stream.Collectors; + +public class EBomEdit { + + public List parentEntities; + + public List childEntities; + + + BomNewEbomParentEntity createParentBomInfo(BomNewEbomParentVO vo) { + BomNewEbomParentEntity parent = new BomNewEbomParentEntity(); + BeanUtil.copyProperties(parent, vo); + + // 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()); + parent.setCurrentVersion("A00"); + parent.setDeviseName(SessionUtil.getRealName()); + parent.setDeptName(SessionUtil.getDepartName()); + + parent.setSource(EBomSourceEnum.FROM_MDM.getValue()); + parent.setStatus(EBomStatusEnum.WAIT_CHECK.getValue()); + + parent.setBomExist(1); + parent.setLastVersionIs(1); + parent.setEditStatus(EbomEditStatusEnum.HANDLER_CREATED.getValue()); + + return parent; + } + + + + + + + + + + + public void temporary(BomNewEBomParentEditDTO dto) { + + + List materialNos = dto.getDatas().stream().map(u -> u.getMaterialNo()).collect(Collectors.toList()); + + //检查物料编码是否在主数据中存在 + List materialBaseInfo = SpringUtil.getBean(MaterialMainService.class).getMaterialBaseInfo(materialNos); + List effectiveMaterialNos = materialBaseInfo.stream().map(u -> u.getMaterialNo()).collect(Collectors.toList()); + + Set difference = Sets.difference(new HashSet<>(materialNos), new HashSet<>(effectiveMaterialNos)); + VUtils.isTure(CollUtil.isNotEmpty(difference)).throwMessage(StrUtil.join(",", difference) + "在物料档案中不存在"); + // Map materialVOMap = ListCommonUtil.listToMap(materialBaseInfo, BaseMaterialVO::getMaterialNo); + parentEntities = new ArrayList<>(); + childEntities = new ArrayList<>(); + //添加数据 + if (dto.getParent() == null) { + for (BomNewEbomParentVO vo : dto.getDatas()) { + parentEntities.add(createParentBomInfo (vo)); + } + + } else { + BomNewEbomParentEntity parent; + //缺bom + if (dto.getParent().getBomRowId() == null || dto.getParent().getBomRowId().longValue() == 0) { + parent = createParentBomInfo(dto.getParent()); + parentEntities.add(parent); + }else { + parent = Convert.convert(BomNewEbomParentEntity.class, dto.getParent()); + } + + SpringUtil.getBean(BomNewEbomParentService.class).initBomException(dto.getDatas()); + childEntities=Convert.convert(new TypeReference>() { + }, dto.getDatas()); + + for (BomNewEbomChildEntity child : + childEntities) { + child.setRowId(IdWorker.getId()); + + child.setProjectTypeInputType(ProjectTypeInputTypeEnum.MANUAL_INPUT.getValue()); + child.setTotalWeight(NumberUtil.mul(child.getUnitWeight(), child.getNum())); + + //新增数据 + if(child.getRowId()==null || child.getRowId().longValue()==0){ + child.setIdentityNo(StrUtil.join("-", parent.getRowId(), parent.getRowId())); + + child.setSource(EBomSourceEnum.FROM_MDM.getValue()); + child.setEditStatus(EbomEditStatusEnum.HANDLER_CREATED.getValue()); + child.setCreatedTime(LocalDateTime.now()); + child.setCreatedBy(SessionUtil.getUserCode()); + } + + + child.setParentRowId(parent.getRowId()); + VUtils.isTure(parent.getProjectType().equals(child.getProjectType())).throwMessage("父、子级项目类型不能相同"); + + } + } + + } + + + + + + +} diff --git a/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewEbomParentMapper.xml b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewEbomParentMapper.xml index 9f2746b4..38128e44 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewEbomParentMapper.xml +++ b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewEbomParentMapper.xml @@ -172,4 +172,20 @@ on a.material_no=b.material_no and a.created_by=b.created_by where a.last_version_is=1 and b.row_id is null ) t on a.row_id=t.row_id set a.user_root_is=1; + + + + + delete from t_bom_new_ebom_parent where row_id in + + #{rowId} + ; + delete from t_bom_new_ebom_child where parent_row_id in + + #{rowId} + ; + + + +