diff --git a/pu/src/private/nc/bs/pu/m21/plugin/BatchTransferToPurchaseOrder.java b/pu/src/private/nc/bs/pu/m21/plugin/BatchTransferToPurchaseOrder.java index a1f35f6..9f59ebe 100644 --- a/pu/src/private/nc/bs/pu/m21/plugin/BatchTransferToPurchaseOrder.java +++ b/pu/src/private/nc/bs/pu/m21/plugin/BatchTransferToPurchaseOrder.java @@ -1,7 +1,6 @@ package nc.bs.pu.m21.plugin; import java.util.*; -import java.util.stream.Collectors; import nc.bs.framework.common.NCLocator; import nc.bs.logging.Log; @@ -14,7 +13,6 @@ import nc.bs.pubapp.AppBsContext; import nc.impl.pubapp.pattern.data.vo.VOQuery; import nc.impl.pubapp.pattern.data.vo.VOUpdate; import nc.impl.pubapp.pattern.page.db.IDDBPage; -import nc.itf.uap.pf.IPfExchangeService; import nc.util.mmf.framework.base.MMArrayUtil; import nc.util.mmf.framework.db.MMSqlBuilder; import nc.vo.pu.m20.entity.PraybillHeaderVO; @@ -24,6 +22,7 @@ import nc.vo.pu.m21.entity.OrderHeaderVO; import nc.vo.pu.m21.entity.OrderItemVO; import nc.vo.pu.m21.entity.OrderVO; import nc.vo.pub.BusinessException; +import nc.vo.pub.VOStatus; import nc.vo.pubapp.pattern.exception.ExceptionUtils; import nc.vo.pubapp.pattern.model.entity.bill.AbstractBill; import nc.vo.scmpub.res.billtype.POBillType; @@ -184,8 +183,6 @@ public class BatchTransferToPurchaseOrder implements IBackgroundWorkPlugin { logger.warn("单据转换未生成任何采购订单", this.getClass(), "processBatchTransfer"); return; } - // 调用订单保存动作脚本 - logger.info("开始保存采购订单", this.getClass(), "processBatchTransfer"); for (OrderVO orderVO : orderVOs) { // 对采购订单赋值行号 OrderHeaderVO hvo = orderVO.getHVO(); @@ -197,47 +194,76 @@ public class BatchTransferToPurchaseOrder implements IBackgroundWorkPlugin { bvo[j].setCrowno(String.valueOf(rowNum)); } } - CloudPFlowContext cloudContext = this.getCloudPFlowContext(orderVOs); - SCMScriptResultDTO scriptResult = ((IBatchRunScriptService) NCLocator.getInstance().lookup(IBatchRunScriptService.class)).runBacth(cloudContext, OrderVO.class); - AbstractBill[] sucessVOs = scriptResult.getSucessVOs(); - // 要进行批量更新的数组 - List hvoList = new ArrayList<>(vos.length - sucessVOs.length); - Map errorMessageMap = scriptResult.getErrorMessageMap(); - if (!errorMessageMap.isEmpty()) { - errorMessageMap.keySet().forEach(key -> { - String errMsg = errorMessageMap.get(key); - if (errMsg.isEmpty()) { - return; - } - PraybillVO vo = vos[key]; - // TODO 后面需要把确定的字段长度扩充一下 errMsg也需要截取一下 - vo.getHVO().setVdef30(errMsg); - vo.getHVO().setVdef31("N"); - hvoList.add(vo); - logger.warn("单据转换生成采购订单时发生错误: " + scriptResult.getErrorMessage(), this.getClass(), "processBatchTransfer"); - }); - } - // 进行批量更新 - PraybillHeaderVO[] hvoBatchUpdatedList = {}; - if (hvoList.isEmpty()) { - logger.warn("批量更新请购单表头失败,获取表头数组长度为0", this.getClass(), "processBatchTransfer"); - return; - } - for (PraybillVO hvo : hvoList) { - hvoBatchUpdatedList = ArrayUtils.add(hvoBatchUpdatedList, hvo.getHVO()); - logger.info("循环更新请购单表头: " + hvo.getHVO().getPk_praybill(), this.getClass(), "processBatchTransfer"); - } - if (hvoBatchUpdatedList.length == 0) { - logger.warn("批量更新请购单表头失败,需要更新的数组为0", this.getClass(), "processBatchTransfer"); - } - String[] headupname = new String[]{"fbillstatus"}; - VOUpdate headupsrv = new VOUpdate<>(); - headupsrv.update(hvoBatchUpdatedList, headupname); + // 批量处理 + processBatch(vos, orderVOs); } catch (Exception e) { logger.error("批量转换请购单到采购订单失败", e, this.getClass(), "processBatchTransfer"); } } + private void processBatch(PraybillVO[] vos, OrderVO[] orderVOs) { + CloudPFlowContext cloudContext = this.getCloudPFlowContext(orderVOs); + if (orderVOs.length == 1) { + PraybillVO singleVO = vos[0]; + PraybillHeaderVO singleHVO = singleVO.getHVO(); + SCMScriptResultDTO scriptResult = null; + try { + scriptResult = ((IBatchRunScriptService) NCLocator.getInstance().lookup(IBatchRunScriptService.class)).runBacth(cloudContext, OrderVO.class); + if (scriptResult.getErrorMessageMap().isEmpty() && scriptResult.getSucessNum() > 0) { + singleHVO.setStatus(VOStatus.UPDATED); + } + } catch (Exception e) { + // TODO 后面需要确定的字段 + singleHVO.setVdef30(e.getMessage().substring(0, 300)); + singleHVO.setVdef31("N"); + logger.error("单个处理时失败", e, this.getClass(), "processBatch"); + } + updatePrayBillVOs(List.of(singleVO)); + return; + } + SCMScriptResultDTO scriptResult = ((IBatchRunScriptService) NCLocator.getInstance().lookup(IBatchRunScriptService.class)).runBacth(cloudContext, OrderVO.class); + AbstractBill[] sucessVOs = scriptResult.getSucessVOs(); + // 要进行批量更新的数组 + List hvoList = new ArrayList<>(vos.length - sucessVOs.length); + Map errorMessageMap = scriptResult.getErrorMessageMap(); + if (!errorMessageMap.isEmpty()) { + errorMessageMap.keySet().forEach(key -> { + String errMsg = errorMessageMap.get(key); + if (errMsg.isEmpty()) { + return; + } + PraybillVO vo = vos[key]; + PraybillHeaderVO hvo = vo.getHVO(); + // TODO 后面需要确定的字段 + hvo.setVdef30(errMsg.substring(0, 300)); + hvo.setVdef31("N"); + hvoList.add(vo); + logger.warn("单据转换生成采购订单时发生错误: " + scriptResult.getErrorMessage(), this.getClass(), "processBatchTransfer"); + }); + } + // 进行批量更新 目的是为了记录信息 + updatePrayBillVOs(hvoList); + } + + private void updatePrayBillVOs(List hvoList) { + PraybillHeaderVO[] hvoBatchUpdatedList = {}; + if (hvoList.isEmpty()) { + logger.warn("批量更新请购单表头失败,获取表头数组长度为0", this.getClass(), "processBatchTransfer"); + return; + } + for (PraybillVO hvo : hvoList) { + hvoBatchUpdatedList = ArrayUtils.add(hvoBatchUpdatedList, hvo.getHVO()); + logger.info("循环更新请购单表头: " + hvo.getHVO().getPk_praybill(), this.getClass(), "processBatchTransfer"); + } + if (hvoBatchUpdatedList.length == 0) { + logger.warn("批量更新请购单表头失败,需要更新的数组为0", this.getClass(), "processBatchTransfer"); + return; + } + String[] headupname = new String[]{"fbillstatus"}; + VOUpdate headupsrv = new VOUpdate<>(); + headupsrv.update(hvoBatchUpdatedList, headupname); + } + private CloudPFlowContext getCloudPFlowContext(OrderVO[] vos) { CloudPFlowContext context = new CloudPFlowContext(); context.setActionName("SAVEBASE");