diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/dto/sap/impart2/T1ExtDTO.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/dto/sap/impart2/T1ExtDTO.java index e05182b0..e3189574 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/dto/sap/impart2/T1ExtDTO.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/dto/sap/impart2/T1ExtDTO.java @@ -35,4 +35,9 @@ public class T1ExtDTO { protected String POTX1 = ""; private boolean ignore = false; + + /* + * 是否是直发包 + */ + private boolean isZFB = false; } 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 56a250f1..8a9f9a3c 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 @@ -37,7 +37,7 @@ 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 Map> cmap = new HashMap<>(); private final List children = new ArrayList<>(); private final static Logger LOGGER = LoggerFactory.getLogger(BomNewEbomExportToSAP.class); @@ -57,7 +57,13 @@ public class BomNewEbomExportToSAP { updateSapState(rootBomRowId, SapStatusEnum.PUB_RUNNING); SapStatusEnum state = SapStatusEnum.PUB_ERROR_ALL; try { - buildChildrenForSap(0L, root, null, false); + buildChildrenForSap(null, root, false); + //移除空的直发包 + cmap.forEach((k, v) -> { + if (v.isEmpty()) { + children.removeIf(it -> it.isZFB() && StrUtil.equals(it.getIDNRK(), k)); + } + }); ImportSapParamDTO sapDto = new ImportSapParamDTO(); sapDto.setZID(RandomUtil.randomNumbers(5)); @@ -86,56 +92,43 @@ public class BomNewEbomExportToSAP { /** * 构建child数据 - * @param cRowId 上层的直发包rowId + * @param zfbMaterialNo 上层的直发包编号 * @param p 上级节点的parent - * @param c 上级节点的child - * @return 是否是空的直发包 */ - private boolean buildChildrenForSap(Long cRowId, BomNewEbomParentEntity p, BomNewEbomChildEntity c, boolean ignore) { + private void buildChildrenForSap(String zfbMaterialNo, BomNewEbomParentEntity p, boolean ignore) { List cc = getChildren(p); - if (CollUtil.isEmpty(cc)) { - return Objects.equals(c.getVirtualPartType(), VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getValue()); - } - boolean isEmpty = false; for (BomNewEbomChildEntity it : cc) { - isEmpty = handlerItem(cRowId, it, p, c, ignore, isEmpty); + handlerItem(zfbMaterialNo, it, p, ignore); } LOGGER.debug("children数量:" + children.size()); - return isEmpty; } - private boolean handlerItem(Long cRowId, BomNewEbomChildEntity it, BomNewEbomParentEntity p, BomNewEbomChildEntity c, boolean ignore, boolean isEmpty) { - if (Objects.nonNull(c) && Objects.equals(c.getVirtualPartType(), VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getValue())) { - if (Objects.nonNull(cRowId)) { - if (cRowId == 0L) { - LOGGER.debug("{} 添加物料 编号:{},父级编号:{},数量:{},描述:{}", TAG, it.getMaterialNo(), p.getMaterialNo(), it.getNum().toString(), it.getMaterialDesc()); - children.add(convert(it, p.getMaterialNo(), false)); + 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 { - T1ExtDTO 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(), p.getMaterialNo(), it.getNum().toString(), it.getMaterialDesc()); - cct = convert(it, p.getMaterialNo(), false); - cmap.get(cRowId).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()); - } + //合并计算数量 + cct.setMENGE(new BigDecimal(cct.getMENGE()).add(it.getNum()).toString()); + LOGGER.debug("{} 物料提层到上级直发包且合并 编号:{},父级编号:{},数量:{},合并后总数:{},描述:{}", TAG, it.getMaterialNo(), p.getMaterialNo(), it.getNum().toString(), cct.getMENGE(), it.getMaterialDesc()); } } - isEmpty = true; - } else if (!Objects.equals(it.getVirtualPartType(), VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getValue())) { + } else { LOGGER.debug("{} 添加物料 编号:{},父级编号:{},数量:{},描述:{}", TAG, it.getMaterialNo(), p.getMaterialNo(), it.getNum().toString(), it.getMaterialDesc()); - children.add(convert(it, p.getMaterialNo(), ignore)); + 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())) { - cRowId = null; + zfbMaterialNo = null; } BomNewEbomParentEntity cp = getParent(it); if (Objects.nonNull(cp)) { @@ -148,22 +141,16 @@ public class BomNewEbomExportToSAP { if (Objects.nonNull(zfc)) { BomNewEbomParentEntity zfp = getParent(zfc); VUtils.isTure(Objects.isNull(zfp)).throwMessage(StrUtil.format("直发包({})对应的parent丢失", zfc.getMaterialNo())); - cRowId = zfp.getRowId(); - cmap.put(cRowId, new ArrayList<>()); - LOGGER.debug("{} 直发包 rowId:{},编号:{},描述:{}", TAG, cRowId, zfc.getMaterialNo(), zfc.getMaterialDesc()); + zfbMaterialNo = zfp.getMaterialNo(); + cmap.put(zfbMaterialNo, new ArrayList<>()); + LOGGER.debug("{} 直发包 编号:{},子物料编号:{},描述:{}", TAG, zfbMaterialNo, zfc.getMaterialNo(), zfc.getMaterialDesc()); } } if (!ignore && cp.getUserRootIs() == 1) { ignore = true; } - boolean b = buildChildrenForSap(cRowId, cp, it, ignore); - if (!b && Objects.equals(it.getVirtualPartType(), VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getValue())) { - //非空的直发包 - LOGGER.debug("{} 添加物料 编号:{},父级编号:{},数量:{},描述:{}", TAG, it.getMaterialNo(), p.getMaterialNo(), it.getNum().toString(), it.getMaterialDesc()); - children.add(convert(it, p.getMaterialNo(), ignore)); - } + buildChildrenForSap(zfbMaterialNo, cp, ignore); } - return isEmpty; } private void saveSapErrorMsg(Long rootBomRowId, List liErrMsg) { @@ -181,7 +168,7 @@ public class BomNewEbomExportToSAP { } } - private T1ExtDTO convert(BomNewEbomChildEntity child, String parentMaterialNo, boolean ignore) { + private T1ExtDTO convert(BomNewEbomChildEntity child, String parentMaterialNo, boolean ignore, boolean isZFB) { T1ExtDTO t = new T1ExtDTO(); t.setID(RandomUtil.randomNumbers(5)); t.setMATNR(parentMaterialNo); @@ -191,6 +178,7 @@ public class BomNewEbomExportToSAP { t.setMEINS(child.getMaterialUnit()); t.setIDNRK(child.getMaterialNo()); t.setIgnore(ignore); + t.setZFB(isZFB); if (BomConstant.PROJECT_TYPE_TEMPORARY.equals(child.getProjectType())) { t.setIDNRK(""); t.setPOTX1(child.getMaterialDesc());