From d04b48d43fd78c99f18d9d516fcf81e88cc1f1c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Thu, 16 May 2024 10:58:16 +0800 Subject: [PATCH] =?UTF-8?q?feat(ebom):=20=E8=BF=87=E6=B8=A1=E7=89=8831?= =?UTF-8?q?=E7=A0=81=E7=94=9F=E6=88=90=E8=99=9A=E6=8B=9F=E5=8C=85=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../product/bomnew/api/user/EbomV2Api.java | 25 ++ .../query/GenerateVirtualPackageItem.java | 39 +++ .../query/GenerateVirtualPackageQuery.java | 28 ++ .../ChildListForGenerateVirtualPackageVO.java | 61 +++++ .../vo/ListForGenerateVirtualPackageVO.java | 30 +++ ...enerateVirtualPackageServiceFor21Impl.java | 17 ++ ...enerateVirtualPackageServiceFor31Impl.java | 253 ++++++++++++++++++ .../service/BomNewEbomParentService.java | 55 ++++ .../bomnew/service/EBomImportService.java | 3 + ...mNewEbomGenerateVirtualPackageService.java | 12 + 10 files changed, 523 insertions(+) create mode 100644 nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/query/GenerateVirtualPackageItem.java create mode 100644 nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/query/GenerateVirtualPackageQuery.java create mode 100644 nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/ChildListForGenerateVirtualPackageVO.java create mode 100644 nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/ListForGenerateVirtualPackageVO.java create mode 100644 nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewEbomGenerateVirtualPackageServiceFor21Impl.java create mode 100644 nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewEbomGenerateVirtualPackageServiceFor31Impl.java create mode 100644 nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/IBomNewEbomGenerateVirtualPackageService.java diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/EbomV2Api.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/EbomV2Api.java index 3f2bb63f..fa9dc693 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/EbomV2Api.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/EbomV2Api.java @@ -7,7 +7,9 @@ import com.nflg.product.base.core.api.BaseApi; import com.nflg.product.base.core.conmon.util.SessionUtil; import com.nflg.product.bomnew.mapper.master.BomNewEbomChildMapper; import com.nflg.product.bomnew.pojo.dto.EbomExcelDTO; +import com.nflg.product.bomnew.pojo.query.GenerateVirtualPackageQuery; import com.nflg.product.bomnew.pojo.vo.ImportOriginalBomVO; +import com.nflg.product.bomnew.pojo.vo.ListForGenerateVirtualPackageVO; import com.nflg.product.bomnew.pojo.vo.OperationErrorMsgVO; import com.nflg.product.bomnew.service.BomNewEbomParentService; import com.nflg.product.bomnew.service.BomNewOriginalParentService; @@ -105,4 +107,27 @@ public class EbomV2Api extends BaseApi { .addSheet(new ListSheet<>("sheet1", ImmutableList.of(new EbomExcelDTO()))) .writeTo(response.getOutputStream()); } + + /** + * 获取物料列表以生成发货包(31编码专用) + * @param bomRowId bom的行id + * @return + */ + @GetMapping("getListForGenerateVirtualPackage") + @ApiOperation("获取物料列表以生成发货包(31编码专用)") + public ResultVO getListForGenerateVirtualPackage(@RequestParam("bomRowId") Long bomRowId) { + return ResultVO.success(ebomParentService.getListForGenerateVirtualPackage(bomRowId)); + } + + /** + * 生成发货包(31编码专用) + * @param query 请求数据 + * @return + */ + @PostMapping("generateVirtualPackage") + @ApiOperation("生成发货包(31编码专用)") + public ResultVO generateVirtualPackage(@RequestBody GenerateVirtualPackageQuery query) { + ebomParentService.generateVirtualPackageV2(query); + return ResultVO.success(); + } } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/query/GenerateVirtualPackageItem.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/query/GenerateVirtualPackageItem.java new file mode 100644 index 00000000..7df1dd65 --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/query/GenerateVirtualPackageItem.java @@ -0,0 +1,39 @@ +package com.nflg.product.bomnew.pojo.query; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotNull; + +/** + * @author 曹鹏飞 + * @date 2024/5/15 10:42:20 + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "com-nflg-product-material-pojo-query-GenerateVirtualPackageItem") +public class GenerateVirtualPackageItem { + + /** + * 行id + */ + @ApiModelProperty(value = "行id", required = true) + @NotNull + private Long rowId; + + /** + * 是否生成泉州工厂发货包 true-生成;false-不生成 + */ + @ApiModelProperty(value = "是否生成泉州工厂发货包", required = true) + @NotNull + private boolean generate1010; + + /** + * 是否生成仙桃工厂发货包 true-生成;false-不生成 + */ + @ApiModelProperty(value = "是否生成仙桃工厂发货包", required = true) + @NotNull + private boolean generate1020; +} diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/query/GenerateVirtualPackageQuery.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/query/GenerateVirtualPackageQuery.java new file mode 100644 index 00000000..5dc2293c --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/query/GenerateVirtualPackageQuery.java @@ -0,0 +1,28 @@ +package com.nflg.product.bomnew.pojo.query; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @author 曹鹏飞 + * @date 2024/5/15 10:38:41 + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "com-nflg-product-material-pojo-query-GenerateVirtualPackageQuery") +public class GenerateVirtualPackageQuery { + + @ApiModelProperty(value = "父级物料行id", required = true) + @NotNull + private Long parentRowId; + + @ApiModelProperty(value = "子级物料列表", required = true) + @NotEmpty + private List children; +} diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/ChildListForGenerateVirtualPackageVO.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/ChildListForGenerateVirtualPackageVO.java new file mode 100644 index 00000000..4148279f --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/ChildListForGenerateVirtualPackageVO.java @@ -0,0 +1,61 @@ +package com.nflg.product.bomnew.pojo.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * @author 曹鹏飞 + * @date 2024/5/15 10:30:47 + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "com-nflg-product-material-pojo-vo-ChildListForGenerateVirtualPackageVO") +public class ChildListForGenerateVirtualPackageVO { + + @ApiModelProperty(value = "主键-雪花") + private Long rowId; + + /** + * 排序号 + */ + @ApiModelProperty(value = "排序号") + private String orderNumber; + + /** + * 项目类别 + */ + @ApiModelProperty(value = "项目类别") + private String projectType; + + /** + * 物料编码 + */ + @ApiModelProperty(value = "物料编码") + private String materialNo; + + /** + * 图号 + */ + @ApiModelProperty(value = "图号") + private String drawingNo; + + /** + * 物料描述 + */ + @ApiModelProperty(value = "物料描述") + private String materialDesc; + + /** + * 泉州工厂是否已生成发货包 true:已生成;false:未生成 + */ + @ApiModelProperty(value = "泉州工厂是否已生成发货包") + private boolean hasGenerated1010; + + /** + * 仙桃工厂是否已生成发货包 true:已生成;false:未生成 + */ + @ApiModelProperty(value = "仙桃工厂是否已生成发货包") + private boolean hasGenerated1020; +} diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/ListForGenerateVirtualPackageVO.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/ListForGenerateVirtualPackageVO.java new file mode 100644 index 00000000..d650f46e --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/ListForGenerateVirtualPackageVO.java @@ -0,0 +1,30 @@ +package com.nflg.product.bomnew.pojo.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.List; + +/** + * @author 曹鹏飞 + * @date 2024/5/15 10:27:12 + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "com-nflg-product-material-pojo-vo-ListForGenerateVirtualPackageVO") +public class ListForGenerateVirtualPackageVO { + + /** + * 父级物料 + */ + @ApiModelProperty(value = "父级物料") + private BomNewEbomParentVO parent; + + /** + * 子级物料 + */ + @ApiModelProperty(value = "子级物料") + private List children; +} diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewEbomGenerateVirtualPackageServiceFor21Impl.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewEbomGenerateVirtualPackageServiceFor21Impl.java new file mode 100644 index 00000000..75026ade --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewEbomGenerateVirtualPackageServiceFor21Impl.java @@ -0,0 +1,17 @@ +package com.nflg.product.bomnew.service; + +import com.nflg.product.bomnew.pojo.query.GenerateVirtualPackageQuery; + +/** + * @author 曹鹏飞 + * @date 2024/5/15 09:55:12 + */ +public class BomNewEbomGenerateVirtualPackageServiceFor21Impl implements IBomNewEbomGenerateVirtualPackageService { + + @Override + public void generate(GenerateVirtualPackageQuery query) { + + } + + +} diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewEbomGenerateVirtualPackageServiceFor31Impl.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewEbomGenerateVirtualPackageServiceFor31Impl.java new file mode 100644 index 00000000..72c6bcba --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewEbomGenerateVirtualPackageServiceFor31Impl.java @@ -0,0 +1,253 @@ +package com.nflg.product.bomnew.service; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.extra.spring.SpringUtil; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.nflg.product.base.core.conmon.util.SessionUtil; +import com.nflg.product.bomnew.constant.EBomSourceEnum; +import com.nflg.product.bomnew.constant.OriginalConstant; +import com.nflg.product.bomnew.constant.ProjectTypeInputTypeEnum; +import com.nflg.product.bomnew.constant.VirtualPackageTypeEnum; +import com.nflg.product.bomnew.pojo.dto.AddVirtrualMaterialDTO; +import com.nflg.product.bomnew.pojo.entity.BomNewEbomChildEntity; +import com.nflg.product.bomnew.pojo.entity.BomNewEbomParentEntity; +import com.nflg.product.bomnew.pojo.query.GenerateVirtualPackageQuery; +import com.nflg.product.bomnew.pojo.vo.ChildListForGenerateVirtualPackageVO; +import com.nflg.product.bomnew.util.VUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * @author 曹鹏飞 + * @date 2024/5/15 09:54:41 + */ +public class BomNewEbomGenerateVirtualPackageServiceFor31Impl implements IBomNewEbomGenerateVirtualPackageService { + + private static final Logger LOGGER = LoggerFactory.getLogger(BomNewEbomGenerateVirtualPackageServiceFor31Impl.class); + + private final BomNewEbomParentService ebomParentService = SpringUtil.getBean(BomNewEbomParentService.class); + private final BomNewEbomChildService ebomChildService = SpringUtil.getBean(BomNewEbomChildService.class); + private final MaterialService materialService = SpringUtil.getBean(MaterialService.class); + + private final List children = new ArrayList<>(); + private final List parents = new ArrayList<>(); + private final List childRowIdsForDel = new ArrayList<>(); + + @Override + public void generate(GenerateVirtualPackageQuery query) { + BomNewEbomParentEntity root = ebomParentService.getById(query.getParentRowId()); + VUtils.isTure(Objects.isNull(root)).throwMessage("无效的数据"); + + VUtils.isTure(root.getMaterialNo().startsWith("21")).throwMessage("21编码接口调用错误"); + VUtils.isTure(!root.getMaterialNo().startsWith("31")).throwMessage("该编码的物料不能生成发货包:" + root.getMaterialNo()); + + List olds = ebomParentService.getChildListForGenerateVirtualPackage(root); + query.getChildren().forEach(it -> { + ChildListForGenerateVirtualPackageVO old = olds.stream().filter(f -> Objects.equals(f.getRowId(), it.getRowId())).findFirst().orElse(null); + VUtils.isTure(Objects.isNull(old)).throwMessage(it.getRowId() + "无效"); + BomNewEbomChildEntity child = ebomChildService.getById(it.getRowId()); + if (it.isGenerate1010() && it.isGenerate1020()) { + selectedAll(root, child, old); + } else if (!it.isGenerate1010() && !it.isGenerate1020()) { + cancelAll(root, child, old); + } else if (it.isGenerate1010()) { + selected1010Cancel1020(root, child, old); + } else { + selected1020Cancel1010(root, child, old); + } + }); + + List addM = children.stream().filter(c -> StrUtil.isBlank(c.getMaterialNo())).map(c -> { + AddVirtrualMaterialDTO ent = new AddVirtrualMaterialDTO(); + ent.setKey(c.getRowId().toString()); + ent.setDrawingNo(c.getDrawingNo()); + ent.setMaterialName(c.getMaterialName()); + ent.setMaterialDesc(c.getMaterialDesc()); + ent.setMaterialCategoryCode(c.getMaterialCategoryCode()); + return ent; + }).collect(Collectors.toList()); + Map vMNosResult = materialService.batchAddMaterial(addM); + vMNosResult.forEach((k, v) -> { + children.stream().filter(c -> Objects.equals(c.getRowId(), Convert.toLong(k))).forEach(c -> { + c.setMaterialNo(v.getMaterialNo()); + }); + parents.stream().filter(c -> Objects.equals(c.getRowId(), Convert.toLong(k))).forEach(c -> { + c.setMaterialNo(v.getMaterialNo()); + }); + }); + + save(); + } + + @Transactional(rollbackFor = Exception.class) + public void save() { + if (CollUtil.isNotEmpty(childRowIdsForDel)) { + ebomChildService.getBaseMapper().deleteBatchIds(childRowIdsForDel); + } + if (CollUtil.isNotEmpty(children)) { + ebomChildService.saveOrUpdateBatch(children); + } + if (CollUtil.isNotEmpty(parents)) { + ebomParentService.saveOrUpdateBatch(parents); + } + } + + private void selected1020Cancel1010(BomNewEbomParentEntity root, BomNewEbomChildEntity child, ChildListForGenerateVirtualPackageVO old) { + if (old.isHasGenerated1010()) { + buildDelDeliveryVirtualPackage(root, child, false); + } + if (!old.isHasGenerated1020()) { + build1020VirtualPackage(root, true, child); + } + } + + private void selected1010Cancel1020(BomNewEbomParentEntity root, BomNewEbomChildEntity child, ChildListForGenerateVirtualPackageVO old) { + if (old.isHasGenerated1020()) { + buildDelDeliveryVirtualPackage(root, child, true); + } + if (!old.isHasGenerated1010()) { + build1010VirtualPackage(root, child); + } + } + + private void build1010VirtualPackage(BomNewEbomParentEntity root, BomNewEbomChildEntity child) { + //发货包 + BomNewEbomChildEntity qc1 = buildVirtualPackage(false, root.getRowId(), root, child, VirtualPackageTypeEnum.DELIVERY_PACKAGE, child.getOrderNumber()); + BomNewEbomParentEntity qp1 = buildVirtualPackage(root, qc1); + //制作包 + BomNewEbomChildEntity qc2 = buildVirtualPackage(false, qp1.getRowId(), root, child, VirtualPackageTypeEnum.MAKING_PACKAGE, "001"); + BomNewEbomParentEntity qp2 = buildVirtualPackage(qp1, qc2); + child.setParentRowId(qp2.getRowId()); + child.setModifyTime(LocalDateTime.now()); + children.add(child); + //直发包 + buildVirtualPackage(false, qp1.getRowId(), root, child, VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE, "002"); + } + + private void build1020VirtualPackage(BomNewEbomParentEntity root, boolean mount, BomNewEbomChildEntity child) { + //发货包 + BomNewEbomChildEntity xc1 = buildVirtualPackage(true, root.getRowId(), root, child, VirtualPackageTypeEnum.DELIVERY_PACKAGE, child.getOrderNumber()); + BomNewEbomParentEntity xp1 = buildVirtualPackage(root, xc1); + //制作包 + BomNewEbomChildEntity xc2 = buildVirtualPackage(true, xp1.getRowId(), root, child, VirtualPackageTypeEnum.MAKING_PACKAGE, "001"); + if (mount) { + BomNewEbomParentEntity xp2 = buildVirtualPackage(xp1, xc2); + child.setParentRowId(xp2.getRowId()); + child.setModifyTime(LocalDateTime.now()); + children.add(child); + } + //直发包 + buildVirtualPackage(true, xp1.getRowId(), root, child, VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE, "002"); + } + + private void selectedAll(BomNewEbomParentEntity root, BomNewEbomChildEntity child, ChildListForGenerateVirtualPackageVO old) { + if (old.isHasGenerated1010() && old.isHasGenerated1020()) { + return; + } + if (!old.isHasGenerated1010()) { + build1010VirtualPackage(root, child); + } + if (!old.isHasGenerated1020()) { + build1020VirtualPackage(root, false, child); + } + } + + private void cancelAll(BomNewEbomParentEntity root, BomNewEbomChildEntity child, ChildListForGenerateVirtualPackageVO old) { + child.setParentRowId(root.getRowId()); + child.setModifyTime(LocalDateTime.now()); + children.add(child); + if (old.isHasGenerated1010()) { + buildDelDeliveryVirtualPackage(root, child, false); + } + if (old.isHasGenerated1020()) { + buildDelDeliveryVirtualPackage(root, child, true); + } + } + + /** + * 删除发货包 + * @param root 根节点 + * @param child 物料 + * @param is1020Factory 是否是仙桃工厂 + */ + private void buildDelDeliveryVirtualPackage(BomNewEbomParentEntity root, BomNewEbomChildEntity child, boolean is1020Factory) { + //发货包 + String drawingNo = buildDrawingNo(root.getDrawingNo(), child.getMaterialName(), VirtualPackageTypeEnum.DELIVERY_PACKAGE, is1020Factory); + BomNewEbomChildEntity c = ebomChildService.lambdaQuery() + .eq(BomNewEbomChildEntity::getParentRowId, root.getRowId()) + .eq(BomNewEbomChildEntity::getDrawingNo, drawingNo) + .one(); + if (Objects.isNull(c)) { + LOGGER.error("{}应有发货包“{}”但未找到", root.getMaterialNo(), drawingNo); + } else { + childRowIdsForDel.add(c.getRowId()); + } + } + + private BomNewEbomParentEntity buildVirtualPackage(BomNewEbomParentEntity parent, BomNewEbomChildEntity child) { + BomNewEbomParentEntity p = ebomParentService.lambdaQuery() + .eq(BomNewEbomParentEntity::getDrawingNo, child.getDrawingNo()) + .one(); + if (Objects.isNull(p)) { + p = Convert.convert(BomNewEbomParentEntity.class, child); + p.setCreatedBy(SessionUtil.getUserCode()); + p.setCurrentVersion(OriginalConstant.DEFAULT_BOM_VERSION); + p.setVirtualPackageIs(1); + p.setRootIs(0); + p.setUserRootIs(0); + p.setDeviseName(SessionUtil.getRealName()); + p.setDeviseUserCode(SessionUtil.getUserCode()); + p.setDeptName(SessionUtil.getDepartName()); + p.setRootIsForWaitReview(0); + p.setAuditTime(parent.getAuditTime()); + p.setAuditUserName(parent.getAuditUserName()); + p.setStatus(parent.getStatus()); + p.setLastVersionIs(1); + p.setBatchNo(""); + p.setLevelNum(parent.getLevelNum() + 1); + p.setBomExist(1); + parents.add(p); + } + return p; + } + + private BomNewEbomChildEntity buildVirtualPackage(boolean is1020Factory, Long parentRowId, BomNewEbomParentEntity root + , BomNewEbomChildEntity material, VirtualPackageTypeEnum type, String orderNo) { + BomNewEbomChildEntity child = new BomNewEbomChildEntity(); + child.setRowId(IdWorker.getId()); + child.setParentRowId(parentRowId); + child.setIdentityNo(parentRowId + "_" + child.getRowId()); + child.setOrderNumber(orderNo); + child.setNum(new BigDecimal(1)); + child.setEditStatus(root.getEditStatus()); + child.setSource(EBomSourceEnum.FROM_MDM.getValue()); + child.setVirtualPartType(type.getValue()); + child.setProjectType("L"); + child.setProjectTypeInputType(ProjectTypeInputTypeEnum.MANUAL_INPUT.getValue()); + child.setMaterialUnit("PC"); + child.setMaterialOriginalUnit("PC"); + //child.setVirtualPartRootMaterialNo(rootMaterialNo); + child.setCreatedBy(SessionUtil.getUserCode()); + child.setDrawingNo(buildDrawingNo(root.getDrawingNo(), material.getMaterialName(), type, is1020Factory)); + child.setMaterialDesc(child.getDrawingNo()); + child.setMaterialName(child.getDrawingNo()); + child.setMaterialCategoryCode(type.getMaterialCategoryCode()); + children.add(child); + return child; + } + + public static String buildDrawingNo(String drawingNo, String materialName, VirtualPackageTypeEnum type, boolean is1020Factory) { + return StrUtil.format("({})({}{})({})", drawingNo, materialName, is1020Factory ? "仙桃" : "", type.getConMaterialName()); + } +} 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 2fe875ff..67e88745 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 @@ -27,6 +27,7 @@ import com.nflg.product.bomnew.pojo.entity.*; import com.nflg.product.bomnew.pojo.query.BomExceptionQuery; import com.nflg.product.bomnew.pojo.query.BomNewEbomMaterialQuery; import com.nflg.product.bomnew.pojo.query.BomNewEbomParentQuery; +import com.nflg.product.bomnew.pojo.query.GenerateVirtualPackageQuery; import com.nflg.product.bomnew.pojo.vo.*; import com.nflg.product.bomnew.service.domain.EBom.*; import com.nflg.product.bomnew.util.*; @@ -2352,4 +2353,58 @@ public class BomNewEbomParentService extends ServiceImpl getChildListForGenerateVirtualPackage(BomNewEbomParentEntity parent) { + List children = ebomChildService.lambdaQuery() + .eq(BomNewEbomChildEntity::getVirtualPartRootMaterialNo, parent.getMaterialNo()) + .ne(BomNewEbomChildEntity::getProjectType, BomConstant.PROJECT_TYPE_TEMPORARY) + .orderByAsc(BomNewEbomChildEntity::getOrderNumber) + .list(); + if (CollUtil.isNotEmpty(children)) { + List cvos = new ArrayList<>(); + children.forEach(it -> { + ChildListForGenerateVirtualPackageVO cvo = Convert.convert(ChildListForGenerateVirtualPackageVO.class, it); + BomNewEbomParentEntity p = lambdaQuery().eq(BomNewEbomParentEntity::getRowId, it.getParentRowId()).one(); + if (p.getVirtualPackageIs() == 1) { + if (p.getMaterialDesc().contains("仙桃")) { + //如果上级虚拟包名称包含仙桃,那说明选中了仙桃,没有选中泉州 + cvo.setHasGenerated1020(true); + cvo.setHasGenerated1010(false); + } else { + cvo.setHasGenerated1010(true); + //如果上级虚拟包名称不包含仙桃,那说明选中了泉州,有没有选中仙桃,需要继续判断是否生成了仙桃的发货包 + String virtualPackageDrawingNo = BomNewEbomGenerateVirtualPackageServiceFor31Impl.buildDrawingNo( + parent.getDrawingNo(), it.getMaterialName(), VirtualPackageTypeEnum.DELIVERY_PACKAGE, true); + cvo.setHasGenerated1020(ebomChildService.lambdaQuery() + .eq(BomNewEbomChildEntity::getParentRowId, parent.getRowId()) + .eq(BomNewEbomChildEntity::getDrawingNo, virtualPackageDrawingNo) + .exists()); + } + } else { + //如果上级不是虚拟包,说明都没选中 + cvo.setHasGenerated1010(false); + cvo.setHasGenerated1020(false); + } + cvos.add(cvo); + }); + return cvos; + } + return Collections.emptyList(); + } } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/EBomImportService.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/EBomImportService.java index fb3a98a5..f7f2118c 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/EBomImportService.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/EBomImportService.java @@ -318,6 +318,9 @@ public class EBomImportService { child.setProjectType(projectType); child.setProjectTypeInputType(ProjectTypeInputTypeEnum.MANUAL_INPUT.getValue()); child.setIdentityNo(child.getParentRowId() + "_" + child.getRowId()); + if (p.getMaterialNo().startsWith("31")) { + child.setVirtualPartRootMaterialNo(p.getMaterialNo()); + } BaseMaterialVO vo = materialBaseInfos.stream() .filter(m -> m.getMaterialNo().equals(child.getMaterialNo())) .findFirst() diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/IBomNewEbomGenerateVirtualPackageService.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/IBomNewEbomGenerateVirtualPackageService.java new file mode 100644 index 00000000..b73200f9 --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/IBomNewEbomGenerateVirtualPackageService.java @@ -0,0 +1,12 @@ +package com.nflg.product.bomnew.service; + +import com.nflg.product.bomnew.pojo.query.GenerateVirtualPackageQuery; + +/** + * @author 曹鹏飞 + * @date 2024/5/15 09:51:42 + */ +public interface IBomNewEbomGenerateVirtualPackageService { + + void generate(GenerateVirtualPackageQuery query); +}