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 c647a4f..c764af9 100644 --- a/pu/src/private/nc/bs/pu/m21/plugin/BatchTransferToPurchaseOrder.java +++ b/pu/src/private/nc/bs/pu/m21/plugin/BatchTransferToPurchaseOrder.java @@ -1,8 +1,6 @@ package nc.bs.pu.m21.plugin; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.util.*; import nc.bs.framework.common.NCLocator; import nc.bs.logging.Log; @@ -20,10 +18,10 @@ import nc.util.mmf.framework.db.MMSqlBuilder; import nc.vo.pu.m20.entity.PraybillHeaderVO; import nc.vo.pu.m20.entity.PraybillItemVO; import nc.vo.pu.m20.entity.PraybillVO; +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.compiler.PfParameterVO; import nc.vo.pubapp.pattern.exception.ExceptionUtils; import nc.vo.pubapp.pattern.model.entity.bill.AbstractBill; import nc.vo.scmpub.res.billtype.POBillType; @@ -44,13 +42,13 @@ public class BatchTransferToPurchaseOrder implements IBackgroundWorkPlugin { // 1. 查询满足条件的请购单聚合VO PraybillVO[] purchaseRequestVOs = getQualifiedPurchaseRequests(bgWorkingContext); logger.info("查询到满足条件的请购单数量: " + purchaseRequestVOs.length, this.getClass(), "executeTask"); - if (purchaseRequestVOs.length > 0) { - // 2. 批量转换处理 - processBatchTransfer(purchaseRequestVOs, bgWorkingContext); - logger.info("批量转换请购单到采购订单完成", this.getClass(), "executeTask"); - } else { + if (purchaseRequestVOs.length <= 0) { logger.info("未找到满足条件的请购单,任务结束", this.getClass(), "executeTask"); + return null; } + // 2. 批量转换处理 + processBatchTransfer(purchaseRequestVOs, bgWorkingContext); + logger.info("批量转换请购单到采购订单完成", this.getClass(), "executeTask"); } catch (Exception e) { logger.error("执行批量转换请购单到采购订单任务失败", e, this.getClass(), "executeTask"); ExceptionUtils.marsh(e); @@ -72,9 +70,8 @@ public class BatchTransferToPurchaseOrder implements IBackgroundWorkPlugin { return new PraybillVO[0]; } List resultList = new ArrayList<>(); - int pageSize = 2048; + int pageSize = 100; IDDBPage page = new IDDBPage(sql, pageSize); - logger.info("开始分页查询,页大小: " + pageSize, this.getClass(), "getQualifiedPurchaseRequests"); int pageCount = 0; while (page.hasNext()) { pageCount++; @@ -121,9 +118,6 @@ public class BatchTransferToPurchaseOrder implements IBackgroundWorkPlugin { * 根据ID获取请购单聚合VO */ private PraybillVO[] getBGWorkInfo(String[] ids) { - if (logger.isDebugEnabled()) { - logger.debug("开始根据ID获取请购单聚合VO,ID数量: " + ids.length, this.getClass(), "getBGWorkInfo"); - } // 查询请购单表体 VOQuery itemQuery = new VOQuery<>(PraybillItemVO.class); PraybillItemVO[] itemVOs = itemQuery.query(ids); @@ -144,35 +138,25 @@ public class BatchTransferToPurchaseOrder implements IBackgroundWorkPlugin { VOQuery headerQuery = new VOQuery<>(PraybillHeaderVO.class); PraybillHeaderVO[] headerVOs = headerQuery.query(headerIds.toArray(new String[headerIds.size()])); logger.debug("查询到请购单表头数量: " + (headerVOs != null ? headerVOs.length : 0), this.getClass(), "getBGWorkInfo"); - return this.getAggvofromHeaderAndItem(headerVOs, - itemVOs); + return this.getAggvofromHeaderAndItem(headerVOs, itemVOs); } /** * 组装采购订单聚合VO */ private PraybillVO[] getAggvofromHeaderAndItem(PraybillHeaderVO[] headerVOs, PraybillItemVO[] itemVOs) { - if (logger.isDebugEnabled()) { - logger.debug("开始组装聚合VO,表头数量: " + (headerVOs != null ? headerVOs.length : 0) + - ", 表体数量: " + (itemVOs != null ? itemVOs.length : 0), this.getClass(), "getAggvofromHeaderAndItem"); - } - if (MMArrayUtil.isEmpty(headerVOs) || MMArrayUtil.isEmpty(itemVOs)) { logger.warn("表头或表体数据为空,无法组装聚合VO", this.getClass(), "getAggvofromHeaderAndItem"); return new PraybillVO[0]; } - List aggList = new ArrayList<>(); - for (PraybillHeaderVO headerVO : headerVOs) { List itemList = new ArrayList<>(); - for (PraybillItemVO itemVO : itemVOs) { if (headerVO.getPk_praybill().equals(itemVO.getPk_praybill())) { itemList.add(itemVO); } } - if (!itemList.isEmpty()) { PraybillVO aggVO = new PraybillVO(); aggVO.setParentVO(headerVO); @@ -180,7 +164,6 @@ public class BatchTransferToPurchaseOrder implements IBackgroundWorkPlugin { aggList.add(aggVO); } } - logger.debug("聚合VO组装完成,数量: " + aggList.size(), this.getClass(), "getAggvofromHeaderAndItem"); return aggList.toArray(new PraybillVO[aggList.size()]); } @@ -193,39 +176,43 @@ public class BatchTransferToPurchaseOrder implements IBackgroundWorkPlugin { try { // 调用单据转换规则生成采购订单(20->21) - logger.info("调用单据转换规则,从请购单(20)转换为采购订单(21)", this.getClass(), "processBatchTransfer"); OrderVO[] orderVOs = PfServiceScmUtil.exeVOChangeByBillItfDef("20", "21", vos); - - if (orderVOs != null && orderVOs.length > 0) { - logger.info("单据转换成功,生成采购订单数量: " + orderVOs.length, this.getClass(), "processBatchTransfer"); - // 调用订单保存动作脚本 - logger.info("开始保存采购订单", this.getClass(), "processBatchTransfer"); - for (OrderVO orderVO : orderVOs) { - // 对采购订单赋值行号 - OrderItemVO[] bvo = orderVO.getBVO(); - for (int j = 0; j < bvo.length; j++) { - int rowNum = (j + 1) * 10; - bvo[j].setCrowno(String.valueOf(rowNum)); - } - } - IPfExchangeService service = NCLocator.getInstance().lookup(IPfExchangeService.class); - OrderVO[] transVos = (OrderVO[]) service.runChangeDataAryNeedClassify("20", "21", orderVOs, null, 1); - CloudPFlowContext cloudContext = this.getCloudPFlowContext(transVos); - AppInfoContext.setBtnCode("Save"); - SCMScriptResultDTO scriptResult = ((IBatchRunScriptService) NCLocator.getInstance().lookup(IBatchRunScriptService.class)).runBacth(cloudContext, OrderVO.class); - AbstractBill[] sucessVOs = scriptResult.getSucessVOs(); - if (transVos == null || transVos.length <= 0) { - logger.info("转换时出现问题,传唤后VO对象数组为空", this.getClass(), "processBatchTransfer"); - } - logger.info("采购订单保存完成", this.getClass(), "processBatchTransfer"); - - } else { + if (orderVOs == null || orderVOs.length == 0) { logger.warn("单据转换未生成任何采购订单", this.getClass(), "processBatchTransfer"); + return; + } + // 调用订单保存动作脚本 + logger.info("开始保存采购订单", this.getClass(), "processBatchTransfer"); + for (OrderVO orderVO : orderVOs) { + // 对采购订单赋值行号 + OrderHeaderVO hvo = orderVO.getHVO(); + OrderItemVO[] bvo = orderVO.getBVO(); + for (int j = 0; j < bvo.length; j++) { + int rowNum = (j + 1) * 10; + // 设置pk_order + bvo[j].setPk_order(hvo.getPk_order()); + bvo[j].setCrowno(String.valueOf(rowNum)); + } + } + CloudPFlowContext cloudContext = this.getCloudPFlowContext(orderVOs); + AppInfoContext.setBtnCode("Save"); + SCMScriptResultDTO scriptResult = ((IBatchRunScriptService) NCLocator.getInstance().lookup(IBatchRunScriptService.class)).runBacth(cloudContext, OrderVO.class); + AbstractBill[] sucessVOs = scriptResult.getSucessVOs(); + Map errorMessageMap = scriptResult.getErrorMessageMap(); + if (!errorMessageMap.isEmpty()) { + errorMessageMap.keySet().forEach(key -> { + String errMsg = errorMessageMap.get(key); + if (errMsg.isEmpty()) return; + OrderVO orderVO = orderVOs[key]; + // 给单据设置错误信息 + orderVO.getHVO().setVdef30(errMsg); + orderVO.getHVO().setVdef31("N"); + logger.warn("单据转换生成采购订单时发生错误: " + scriptResult.getErrorMessage(), this.getClass(), "processBatchTransfer"); + }); } - } catch (Exception e) { logger.error("批量转换请购单到采购订单失败", e, this.getClass(), "processBatchTransfer"); - throw new BusinessException("批量转换请购单到采购订单失败: " + e.getMessage(), e); + ExceptionUtils.marsh(e); } }