From 3125800c3f5023e7a821d5e9eebec5ce18516038 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Thu, 30 May 2024 08:42:33 +0800 Subject: [PATCH] =?UTF-8?q?fix(pbom):=20=E4=BF=AE=E5=A4=8D=E5=AF=BC?= =?UTF-8?q?=E5=85=A5=E5=88=B0sap=E6=97=B6=EF=BC=8C=E5=8F=AA=E5=AF=BC?= =?UTF-8?q?=E5=85=A5=E4=BA=86=E7=AC=AC=E4=B8=80=E5=B1=82=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nflg/product/bomnew/api/user/PBomApi.java | 2 +- .../service/BomNewPbomExportToSAPImpl.java | 120 +++++++++--------- 2 files changed, 64 insertions(+), 58 deletions(-) diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/PBomApi.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/PBomApi.java index d9067d89..f537e1af 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/PBomApi.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/PBomApi.java @@ -331,7 +331,7 @@ public class PBomApi extends BaseApi { /** * 导入到SAP - * @param rootBomRowIds 顶级bom的rowId + * @param query 顶级bom的rowId * @return */ @PostMapping("importToSAP") diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewPbomExportToSAPImpl.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewPbomExportToSAPImpl.java index 0fc66a88..eec19b84 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewPbomExportToSAPImpl.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewPbomExportToSAPImpl.java @@ -5,15 +5,15 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.extra.spring.SpringUtil; -import com.nflg.product.bomnew.constant.BomConstant; -import com.nflg.product.bomnew.constant.PBomStatusEnum; -import com.nflg.product.bomnew.constant.SapStatusEnum; -import com.nflg.product.bomnew.constant.VirtualPackageTypeEnum; +import com.nflg.product.base.core.exception.NflgBusinessException; +import com.nflg.product.bomnew.constant.*; import com.nflg.product.bomnew.pojo.dto.sap.impart2.ImportSapParamDTO; import com.nflg.product.bomnew.pojo.dto.sap.impart2.T1DTO; import com.nflg.product.bomnew.pojo.entity.BomNewPbomChildEntity; import com.nflg.product.bomnew.pojo.entity.BomNewPbomParentEntity; import com.nflg.product.bomnew.pojo.vo.OperationErrorMsgVO; +import com.nflg.product.bomnew.util.VUtils; +import nflg.product.common.constant.STATE; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -52,7 +52,7 @@ public class BomNewPbomExportToSAPImpl implements IBomNewPbomExportToSAP { BomNewPbomParentEntity root = bomNewPbomParentService.getById(rootBomRowId); is21 = root.getMaterialNo().startsWith("21"); List rcs = bomNewPbomChildService.lambdaQuery() - .eq(BomNewPbomChildEntity::getParentRowId, rootBomRowId) + .eq(BomNewPbomChildEntity::getParentRowId, root.getRowId()) .list(); if (root.getMaterialNo().startsWith("31")) { List unVirtualParts = rcs.stream() @@ -65,26 +65,35 @@ public class BomNewPbomExportToSAPImpl implements IBomNewPbomExportToSAP { } children.addAll(convert(rcs, root.getMaterialNo())); rcs.forEach(it -> { - List cps = getParents(it); - cps.forEach(pt -> { - List cpsc = getChildren(pt); - children.addAll(convert(cpsc, pt.getMaterialNo())); - cpsc.forEach(cptt -> { - if (Objects.equals(cptt.getVirtualPartType(), VirtualPackageTypeEnum.DELIVERY_PACKAGE.getValue())) { - //选出发货包 - cmap.put(cptt.getRowId(), new ArrayList<>()); - LOGGER.debug("{} 发货包 rowId:{},编号:{},描述:{}", TAG, cptt.getRowId(), cptt.getMaterialNo(), cptt.getMaterialDesc()); + BomNewPbomParentEntity cp = getParent(it); + if (Objects.nonNull(cp)) { + Long ddpRowId = null; + //选出直发包 + List cpsc = getChildren(cp); + if (CollUtil.isNotEmpty(cpsc)) { + for (BomNewPbomChildEntity cptt : cpsc) { + if (Objects.equals(cptt.getVirtualPartType(), VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getValue())) { + BomNewPbomParentEntity cpttp = getParent(cptt); + VUtils.isTure(Objects.isNull(cpttp)).throwMessage("顶层直发包parent丢失"); + ddpRowId = cpttp.getRowId(); + cmap.put(ddpRowId, new ArrayList<>()); + LOGGER.debug("{} 直发包 rowId:{},编号:{},描述:{}", TAG, ddpRowId, cpttp.getMaterialNo(), cpttp.getMaterialDesc()); + break; + } } - List cpsfp = getParents(cptt); - cpsfp.forEach(ewfce -> { - buildChildrenForSap(Objects.equals(cptt.getVirtualPartType(), VirtualPackageTypeEnum.DELIVERY_PACKAGE.getValue()) ? cptt.getRowId() : null, ewfce, it); - }); - }); - }); + } + buildChildrenForSap(ddpRowId, cp, it); + } }); ImportSapParamDTO sapDto = new ImportSapParamDTO(); sapDto.setZID(RandomUtil.randomNumbers(5)); - sapDto.setI_WERKS("1"); + if (StrUtil.equals(root.getFacCode(), EBomConstant.MAIN_FACTORY_CODE_1010)) { + sapDto.setI_WERKS("1"); + } else if (StrUtil.equals(root.getFacCode(), EBomConstant.XIAN_TAO_FACTORY_CODE_1020)) { + sapDto.setI_WERKS("2"); + } else { + throw new NflgBusinessException(STATE.BusinessError, "无效的工厂编号:" + root.getFacCode()); + } sapDto.setI_STLAN("1"); sapDto.setI_EMPNO(root.getCreatedBy()); sapDto.setT1(children); @@ -140,51 +149,47 @@ public class BomNewPbomExportToSAPImpl implements IBomNewPbomExportToSAP { /** * 构建child数据 - * @param cRowId 当前的发货包rowId - * @param p parent + * @param cRowId 顶层的的直发包rowId + * @param p 父级节点的parent * @param c 父级节点的child * @return */ private void buildChildrenForSap(Long cRowId, BomNewPbomParentEntity p, BomNewPbomChildEntity c) { List cc = getChildren(p); + if (is21 && !isForSale && Objects.equals(c.getVirtualPartType(), VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getValue())) { + LOGGER.debug("{} 丢弃21编码非销售订单的直发包 编号:{}", TAG, c.getMaterialNo()); + cc.forEach(cit -> { + LOGGER.debug("{} 丢弃21编码非销售订单的直发包下的物料 编号:{}", TAG, cit.getMaterialNo()); + }); + return; + } for (BomNewPbomChildEntity it : cc) { - if (is21 && !isForSale && !Objects.equals(it.getVirtualPartType(), VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getValue())) { - return; - } - if (Objects.equals(it.getVirtualPartType(), VirtualPackageTypeEnum.UN_VIRTUAL_PACKAGE.getValue())) { - if (Objects.equals(c.getVirtualPartType(), VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getValue())) { - if (Objects.isNull(cRowId)) { - LOGGER.debug("{} 添加物料 编号:{},父级编号:{},数量:{},描述:{}", TAG, it.getMaterialNo(), c.getMaterialNo(), it.getNum().toString(), it.getMaterialDesc()); - children.add(convert(it, c.getMaterialNo())); + if (Objects.equals(c.getVirtualPartType(), VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getValue())) { + if (Objects.nonNull(cRowId)) { + T1DTO cct = cmap.get(cRowId).stream() + .filter(ct -> (StrUtil.equals(ct.getPOSTP(), BomConstant.PROJECT_TYPE_TEMPORARY, true) && StrUtil.equals(ct.getPOTX1(), it.getMaterialDesc())) + || (!StrUtil.equals(ct.getPOSTP(), BomConstant.PROJECT_TYPE_TEMPORARY, true) && StrUtil.equals(ct.getIDNRK(), it.getMaterialNo()))) + .findFirst() + .orElse(null); + if (Objects.isNull(cct)) { + LOGGER.debug("{} 物料提层到顶级发货包 编号:{},父级编号:{},数量:{},描述:{}", TAG, it.getMaterialNo(), c.getMaterialNo(), it.getNum().toString(), it.getMaterialDesc()); + cct = convert(it, p.getMaterialNo()); + cmap.get(cRowId).add(cct); + children.add(cct); } else { - T1DTO cct = cmap.get(cRowId).stream() - .filter(ct -> (StrUtil.equals(ct.getPOSTP(), BomConstant.PROJECT_TYPE_TEMPORARY, true) && StrUtil.equals(ct.getPOTX1(), it.getMaterialDesc())) - || (!StrUtil.equals(ct.getPOSTP(), BomConstant.PROJECT_TYPE_TEMPORARY, true) && StrUtil.equals(ct.getIDNRK(), it.getMaterialNo()))) - .findFirst() - .orElse(null); - if (Objects.isNull(cct)) { - LOGGER.debug("{} 物料提层到顶级发货包 编号:{},父级编号:{},数量:{},描述:{}", TAG, it.getMaterialNo(), c.getMaterialNo(), it.getNum().toString(), it.getMaterialDesc()); - cct = convert(it, c.getMaterialNo()); - cmap.get(cRowId).add(cct); - children.add(cct); - } else { - //合并计算数量 - cct.setMENGE(new BigDecimal(cct.getMENGE()).add(it.getNum()).toString()); - LOGGER.debug("{} 物料提层到顶级发货包且合并 编号:{},父级编号:{},数量:{},合并后总数:{},描述:{}", TAG, it.getMaterialNo(), c.getMaterialNo(), it.getNum().toString(), cct.getMENGE(), it.getMaterialDesc()); - } + //合并计算数量 + cct.setMENGE(new BigDecimal(cct.getMENGE()).add(it.getNum()).toString()); + LOGGER.debug("{} 物料提层到顶级发货包且合并 编号:{},父级编号:{},数量:{},合并后总数:{},描述:{}", TAG, it.getMaterialNo(), c.getMaterialNo(), it.getNum().toString(), cct.getMENGE(), it.getMaterialDesc()); } - } else { - LOGGER.debug("{} 添加物料 编号:{},父级编号:{},数量:{},描述:{}", TAG, it.getMaterialNo(), c.getMaterialNo(), it.getNum().toString(), it.getMaterialDesc()); - children.add(convert(it, c.getMaterialNo())); } - } else if (!Objects.equals(it.getVirtualPartType(), VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getValue())) { + } else { LOGGER.debug("{} 添加物料 编号:{},父级编号:{},数量:{},描述:{}", TAG, it.getMaterialNo(), c.getMaterialNo(), it.getNum().toString(), it.getMaterialDesc()); children.add(convert(it, c.getMaterialNo())); } - List cp = getParents(it); - cp.forEach(cpt -> { - buildChildrenForSap(cRowId, cpt, it); - }); + BomNewPbomParentEntity cp = getParent(it); + if (Objects.nonNull(cp)) { + buildChildrenForSap(cRowId, cp, it); + } } } @@ -194,11 +199,12 @@ public class BomNewPbomExportToSAPImpl implements IBomNewPbomExportToSAP { .list(); } - private List getParents(BomNewPbomChildEntity child) { + private BomNewPbomParentEntity getParent(BomNewPbomChildEntity child) { return bomNewPbomParentService.lambdaQuery() .eq(BomNewPbomParentEntity::getMaterialNo, child.getMaterialNo()) - .eq(BomNewPbomParentEntity::getStatus, PBomStatusEnum.PUBLISH.getValue()) - .list(); + .eq(BomNewPbomParentEntity::getStatus, PBomStatusEnum.FACTORY_CONFIRM.getValue()) + .eq(BomNewPbomParentEntity::getFacCode, child.getFacCode()) + .one(); } // private List getChildren(List parents) {