fix(ebom): 导入SAP的F项提层优化
This commit is contained in:
parent
a54b186845
commit
171854351e
|
|
@ -35,4 +35,9 @@ public class T1ExtDTO {
|
||||||
protected String POTX1 = "";
|
protected String POTX1 = "";
|
||||||
|
|
||||||
private boolean ignore = false;
|
private boolean ignore = false;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 是否是直发包
|
||||||
|
*/
|
||||||
|
private boolean isZFB = false;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ public class BomNewEbomExportToSAP {
|
||||||
private final static String TAG = "Ebom导入到SAP";
|
private final static String TAG = "Ebom导入到SAP";
|
||||||
|
|
||||||
private final String dateYMD = DateUtil.format(new Date(), "yyyyMMdd");
|
private final String dateYMD = DateUtil.format(new Date(), "yyyyMMdd");
|
||||||
private final Map<Long, List<T1ExtDTO>> cmap = new HashMap<>();
|
private final Map<String, List<T1ExtDTO>> cmap = new HashMap<>();
|
||||||
private final List<T1ExtDTO> children = new ArrayList<>();
|
private final List<T1ExtDTO> children = new ArrayList<>();
|
||||||
|
|
||||||
private final static Logger LOGGER = LoggerFactory.getLogger(BomNewEbomExportToSAP.class);
|
private final static Logger LOGGER = LoggerFactory.getLogger(BomNewEbomExportToSAP.class);
|
||||||
|
|
@ -57,7 +57,13 @@ public class BomNewEbomExportToSAP {
|
||||||
updateSapState(rootBomRowId, SapStatusEnum.PUB_RUNNING);
|
updateSapState(rootBomRowId, SapStatusEnum.PUB_RUNNING);
|
||||||
SapStatusEnum state = SapStatusEnum.PUB_ERROR_ALL;
|
SapStatusEnum state = SapStatusEnum.PUB_ERROR_ALL;
|
||||||
try {
|
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();
|
ImportSapParamDTO sapDto = new ImportSapParamDTO();
|
||||||
sapDto.setZID(RandomUtil.randomNumbers(5));
|
sapDto.setZID(RandomUtil.randomNumbers(5));
|
||||||
|
|
@ -86,56 +92,43 @@ public class BomNewEbomExportToSAP {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 构建child数据
|
* 构建child数据
|
||||||
* @param cRowId 上层的直发包rowId
|
* @param zfbMaterialNo 上层的直发包编号
|
||||||
* @param p 上级节点的parent
|
* @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<BomNewEbomChildEntity> cc = getChildren(p);
|
List<BomNewEbomChildEntity> cc = getChildren(p);
|
||||||
if (CollUtil.isEmpty(cc)) {
|
|
||||||
return Objects.equals(c.getVirtualPartType(), VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getValue());
|
|
||||||
}
|
|
||||||
boolean isEmpty = false;
|
|
||||||
for (BomNewEbomChildEntity it : cc) {
|
for (BomNewEbomChildEntity it : cc) {
|
||||||
isEmpty = handlerItem(cRowId, it, p, c, ignore, isEmpty);
|
handlerItem(zfbMaterialNo, it, p, ignore);
|
||||||
}
|
}
|
||||||
LOGGER.debug("children数量:" + children.size());
|
LOGGER.debug("children数量:" + children.size());
|
||||||
return isEmpty;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean handlerItem(Long cRowId, BomNewEbomChildEntity it, BomNewEbomParentEntity p, BomNewEbomChildEntity c, boolean ignore, boolean isEmpty) {
|
private void handlerItem(String zfbMaterialNo, BomNewEbomChildEntity it, BomNewEbomParentEntity p, boolean ignore) {
|
||||||
if (Objects.nonNull(c) && Objects.equals(c.getVirtualPartType(), VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getValue())) {
|
if (StrUtil.equals(it.getProjectType(), ProjectTypeInputTypeEnum.ProjectTypeEnum.TYPE_F.getValue())) {
|
||||||
if (Objects.nonNull(cRowId)) {
|
if (StrUtil.isNotBlank(zfbMaterialNo)) {
|
||||||
if (cRowId == 0L) {
|
T1ExtDTO cct = cmap.get(zfbMaterialNo).stream()
|
||||||
LOGGER.debug("{} 添加物料 编号:{},父级编号:{},数量:{},描述:{}", TAG, it.getMaterialNo(), p.getMaterialNo(), it.getNum().toString(), it.getMaterialDesc());
|
.filter(ct -> (StrUtil.equals(ct.getPOSTP(), BomConstant.PROJECT_TYPE_TEMPORARY, true) && StrUtil.equals(ct.getPOTX1(), it.getMaterialDesc()))
|
||||||
children.add(convert(it, p.getMaterialNo(), false));
|
|| (!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 {
|
} else {
|
||||||
T1ExtDTO cct = cmap.get(cRowId).stream()
|
//合并计算数量
|
||||||
.filter(ct -> (StrUtil.equals(ct.getPOSTP(), BomConstant.PROJECT_TYPE_TEMPORARY, true) && StrUtil.equals(ct.getPOTX1(), it.getMaterialDesc()))
|
cct.setMENGE(new BigDecimal(cct.getMENGE()).add(it.getNum()).toString());
|
||||||
|| (!StrUtil.equals(ct.getPOSTP(), BomConstant.PROJECT_TYPE_TEMPORARY, true) && StrUtil.equals(ct.getIDNRK(), it.getMaterialNo())))
|
LOGGER.debug("{} 物料提层到上级直发包且合并 编号:{},父级编号:{},数量:{},合并后总数:{},描述:{}", TAG, it.getMaterialNo(), p.getMaterialNo(), it.getNum().toString(), cct.getMENGE(), it.getMaterialDesc());
|
||||||
.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());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
isEmpty = true;
|
} else {
|
||||||
} else if (!Objects.equals(it.getVirtualPartType(), VirtualPackageTypeEnum.DIRECT_DELIVERY_PACKAGE.getValue())) {
|
|
||||||
LOGGER.debug("{} 添加物料 编号:{},父级编号:{},数量:{},描述:{}", TAG, it.getMaterialNo(), p.getMaterialNo(), it.getNum().toString(), it.getMaterialDesc());
|
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()
|
if (it.getVirtualPartType() > VirtualPackageTypeEnum.UN_VIRTUAL_PACKAGE.getValue()
|
||||||
&& !Objects.equals(it.getVirtualPartType(), VirtualPackageTypeEnum.MAKING_PACKAGE.getValue())) {
|
&& !Objects.equals(it.getVirtualPartType(), VirtualPackageTypeEnum.MAKING_PACKAGE.getValue())) {
|
||||||
cRowId = null;
|
zfbMaterialNo = null;
|
||||||
}
|
}
|
||||||
BomNewEbomParentEntity cp = getParent(it);
|
BomNewEbomParentEntity cp = getParent(it);
|
||||||
if (Objects.nonNull(cp)) {
|
if (Objects.nonNull(cp)) {
|
||||||
|
|
@ -148,22 +141,16 @@ public class BomNewEbomExportToSAP {
|
||||||
if (Objects.nonNull(zfc)) {
|
if (Objects.nonNull(zfc)) {
|
||||||
BomNewEbomParentEntity zfp = getParent(zfc);
|
BomNewEbomParentEntity zfp = getParent(zfc);
|
||||||
VUtils.isTure(Objects.isNull(zfp)).throwMessage(StrUtil.format("直发包({})对应的parent丢失", zfc.getMaterialNo()));
|
VUtils.isTure(Objects.isNull(zfp)).throwMessage(StrUtil.format("直发包({})对应的parent丢失", zfc.getMaterialNo()));
|
||||||
cRowId = zfp.getRowId();
|
zfbMaterialNo = zfp.getMaterialNo();
|
||||||
cmap.put(cRowId, new ArrayList<>());
|
cmap.put(zfbMaterialNo, new ArrayList<>());
|
||||||
LOGGER.debug("{} 直发包 rowId:{},编号:{},描述:{}", TAG, cRowId, zfc.getMaterialNo(), zfc.getMaterialDesc());
|
LOGGER.debug("{} 直发包 编号:{},子物料编号:{},描述:{}", TAG, zfbMaterialNo, zfc.getMaterialNo(), zfc.getMaterialDesc());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!ignore && cp.getUserRootIs() == 1) {
|
if (!ignore && cp.getUserRootIs() == 1) {
|
||||||
ignore = true;
|
ignore = true;
|
||||||
}
|
}
|
||||||
boolean b = buildChildrenForSap(cRowId, cp, it, ignore);
|
buildChildrenForSap(zfbMaterialNo, cp, 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));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return isEmpty;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void saveSapErrorMsg(Long rootBomRowId, List<OperationErrorMsgVO> liErrMsg) {
|
private void saveSapErrorMsg(Long rootBomRowId, List<OperationErrorMsgVO> 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();
|
T1ExtDTO t = new T1ExtDTO();
|
||||||
t.setID(RandomUtil.randomNumbers(5));
|
t.setID(RandomUtil.randomNumbers(5));
|
||||||
t.setMATNR(parentMaterialNo);
|
t.setMATNR(parentMaterialNo);
|
||||||
|
|
@ -191,6 +178,7 @@ public class BomNewEbomExportToSAP {
|
||||||
t.setMEINS(child.getMaterialUnit());
|
t.setMEINS(child.getMaterialUnit());
|
||||||
t.setIDNRK(child.getMaterialNo());
|
t.setIDNRK(child.getMaterialNo());
|
||||||
t.setIgnore(ignore);
|
t.setIgnore(ignore);
|
||||||
|
t.setZFB(isZFB);
|
||||||
if (BomConstant.PROJECT_TYPE_TEMPORARY.equals(child.getProjectType())) {
|
if (BomConstant.PROJECT_TYPE_TEMPORARY.equals(child.getProjectType())) {
|
||||||
t.setIDNRK("");
|
t.setIDNRK("");
|
||||||
t.setPOTX1(child.getMaterialDesc());
|
t.setPOTX1(child.getMaterialDesc());
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue