diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewEbomExportToSAP.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewEbomExportToSAP.java index 8a9f9a3c..be35485a 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewEbomExportToSAP.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewEbomExportToSAP.java @@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; 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.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -23,7 +22,6 @@ import nflg.product.common.constant.STATE; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; @@ -37,7 +35,6 @@ public class BomNewEbomExportToSAP { private final static String TAG = "Ebom导入到SAP"; private final String dateYMD = DateUtil.format(new Date(), "yyyyMMdd"); - private final Map> cmap = new HashMap<>(); private final List children = new ArrayList<>(); private final static Logger LOGGER = LoggerFactory.getLogger(BomNewEbomExportToSAP.class); @@ -57,13 +54,15 @@ public class BomNewEbomExportToSAP { updateSapState(rootBomRowId, SapStatusEnum.PUB_RUNNING); SapStatusEnum state = SapStatusEnum.PUB_ERROR_ALL; try { - buildChildrenForSap(null, root, false); + buildChildrenForSap(root); //移除空的直发包 - cmap.forEach((k, v) -> { - if (v.isEmpty()) { - children.removeIf(it -> it.isZFB() && StrUtil.equals(it.getIDNRK(), k)); - } - }); + Set zfbMaterialNos = this.children.stream().filter(T1ExtDTO::isZFB).map(T1ExtDTO::getIDNRK).collect(Collectors.toSet()); + if (CollUtil.isNotEmpty(zfbMaterialNos)) { + Set allMaterialNos = this.children.stream().map(T1ExtDTO::getMATNR).collect(Collectors.toSet()); + zfbMaterialNos.removeAll(allMaterialNos); + LOGGER.debug("{} 移除空的直发包:{}", TAG, String.join(",", zfbMaterialNos)); + this.children.removeIf(c -> c.isZFB() && zfbMaterialNos.contains(c.getIDNRK())); + } ImportSapParamDTO sapDto = new ImportSapParamDTO(); sapDto.setZID(RandomUtil.randomNumbers(5)); @@ -91,65 +90,23 @@ public class BomNewEbomExportToSAP { } /** - * 构建child数据 - * @param zfbMaterialNo 上层的直发包编号 + * 构建child数据发包编号 * @param p 上级节点的parent */ - private void buildChildrenForSap(String zfbMaterialNo, BomNewEbomParentEntity p, boolean ignore) { + private void buildChildrenForSap(BomNewEbomParentEntity p) { List cc = getChildren(p); for (BomNewEbomChildEntity it : cc) { - handlerItem(zfbMaterialNo, it, p, ignore); + handlerItem(it, p); } LOGGER.debug("children数量:" + children.size()); } - private void handlerItem(String zfbMaterialNo, BomNewEbomChildEntity it, BomNewEbomParentEntity p, boolean ignore) { - if (StrUtil.equals(it.getProjectType(), ProjectTypeInputTypeEnum.ProjectTypeEnum.TYPE_F.getValue())) { - if (StrUtil.isNotBlank(zfbMaterialNo)) { - T1ExtDTO cct = cmap.get(zfbMaterialNo).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(), p.getMaterialNo(), it.getNum().toString(), it.getMaterialDesc()); - cct = convert(it, p.getMaterialNo(), false, false); - cmap.get(zfbMaterialNo).add(cct); - children.add(cct); - } else { - //合并计算数量 - cct.setMENGE(new BigDecimal(cct.getMENGE()).add(it.getNum()).toString()); - LOGGER.debug("{} 物料提层到上级直发包且合并 编号:{},父级编号:{},数量:{},合并后总数:{},描述:{}", TAG, it.getMaterialNo(), p.getMaterialNo(), it.getNum().toString(), cct.getMENGE(), it.getMaterialDesc()); - } - } - } else { - LOGGER.debug("{} 添加物料 编号:{},父级编号:{},数量:{},描述:{}", TAG, it.getMaterialNo(), p.getMaterialNo(), it.getNum().toString(), it.getMaterialDesc()); - children.add(convert(it, p.getMaterialNo(), ignore, Objects.equals(it.getVirtualPartType(), VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getValue()))); - } - if (it.getVirtualPartType() > VirtualPackageTypeEnum.UN_VIRTUAL_PACKAGE.getValue() - && !Objects.equals(it.getVirtualPartType(), VirtualPackageTypeEnum.MAKING_PACKAGE.getValue())) { - zfbMaterialNo = null; - } + private void handlerItem(BomNewEbomChildEntity it, BomNewEbomParentEntity p) { + LOGGER.debug("{} 添加物料 编号:{},父级编号:{},数量:{},描述:{}", TAG, it.getMaterialNo(), p.getMaterialNo(), it.getNum().toString(), it.getMaterialDesc()); + children.add(convert(it, p.getMaterialNo(), Objects.equals(it.getVirtualPartType(), VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getValue()))); BomNewEbomParentEntity cp = getParent(it); if (Objects.nonNull(cp)) { - List pcs = getChildren(cp); - if (CollUtil.isNotEmpty(pcs)) { - BomNewEbomChildEntity zfc = pcs.stream() - .filter(pt -> Objects.equals(pt.getVirtualPartType(), VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getValue())) - .findFirst() - .orElse(null); - if (Objects.nonNull(zfc)) { - BomNewEbomParentEntity zfp = getParent(zfc); - VUtils.isTure(Objects.isNull(zfp)).throwMessage(StrUtil.format("直发包({})对应的parent丢失", zfc.getMaterialNo())); - zfbMaterialNo = zfp.getMaterialNo(); - cmap.put(zfbMaterialNo, new ArrayList<>()); - LOGGER.debug("{} 直发包 编号:{},子物料编号:{},描述:{}", TAG, zfbMaterialNo, zfc.getMaterialNo(), zfc.getMaterialDesc()); - } - } - if (!ignore && cp.getUserRootIs() == 1) { - ignore = true; - } - buildChildrenForSap(zfbMaterialNo, cp, ignore); + buildChildrenForSap(cp); } } @@ -168,7 +125,7 @@ public class BomNewEbomExportToSAP { } } - private T1ExtDTO convert(BomNewEbomChildEntity child, String parentMaterialNo, boolean ignore, boolean isZFB) { + private T1ExtDTO convert(BomNewEbomChildEntity child, String parentMaterialNo, boolean isZFB) { T1ExtDTO t = new T1ExtDTO(); t.setID(RandomUtil.randomNumbers(5)); t.setMATNR(parentMaterialNo); @@ -177,7 +134,7 @@ public class BomNewEbomExportToSAP { t.setDATUM(dateYMD); t.setMEINS(child.getMaterialUnit()); t.setIDNRK(child.getMaterialNo()); - t.setIgnore(ignore); + t.setIgnore(false); t.setZFB(isZFB); if (BomConstant.PROJECT_TYPE_TEMPORARY.equals(child.getProjectType())) { t.setIDNRK(""); @@ -191,6 +148,7 @@ public class BomNewEbomExportToSAP { .select(BomNewEbomParentEntity::getRowId, BomNewEbomParentEntity::getMaterialNo , BomNewEbomParentEntity::getMaterialDesc, BomNewEbomParentEntity::getUserRootIs) .eq(BomNewEbomParentEntity::getMaterialNo, c.getMaterialNo()) + .eq(BomNewEbomParentEntity::getUserRootIs, 0) .eq(BomNewEbomParentEntity::getStatus, EBomStatusEnum.PUBLISHED.getValue()) .ne(BomNewEbomParentEntity::getSource, EBomSourceEnum.FROM_SAP.getValue()) .orderByDesc(BomNewEbomParentEntity::getCurrentVersion)