重构请购单转换到采购订单的功能- 重新组织代码结构,提高可读性和可维护性
- 增加 processBatch 和 updatePrayBillVOs 方法,优化批量处理逻辑 - 改进错误处理,使用日志记录详细信息 - 移除未使用的导入和变量,简化代码
This commit is contained in:
parent
cd417c2c5f
commit
4f5d008934
|
@ -1,7 +1,6 @@
|
||||||
package nc.bs.pu.m21.plugin;
|
package nc.bs.pu.m21.plugin;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
import nc.bs.framework.common.NCLocator;
|
import nc.bs.framework.common.NCLocator;
|
||||||
import nc.bs.logging.Log;
|
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.VOQuery;
|
||||||
import nc.impl.pubapp.pattern.data.vo.VOUpdate;
|
import nc.impl.pubapp.pattern.data.vo.VOUpdate;
|
||||||
import nc.impl.pubapp.pattern.page.db.IDDBPage;
|
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.base.MMArrayUtil;
|
||||||
import nc.util.mmf.framework.db.MMSqlBuilder;
|
import nc.util.mmf.framework.db.MMSqlBuilder;
|
||||||
import nc.vo.pu.m20.entity.PraybillHeaderVO;
|
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.OrderItemVO;
|
||||||
import nc.vo.pu.m21.entity.OrderVO;
|
import nc.vo.pu.m21.entity.OrderVO;
|
||||||
import nc.vo.pub.BusinessException;
|
import nc.vo.pub.BusinessException;
|
||||||
|
import nc.vo.pub.VOStatus;
|
||||||
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
|
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
|
||||||
import nc.vo.pubapp.pattern.model.entity.bill.AbstractBill;
|
import nc.vo.pubapp.pattern.model.entity.bill.AbstractBill;
|
||||||
import nc.vo.scmpub.res.billtype.POBillType;
|
import nc.vo.scmpub.res.billtype.POBillType;
|
||||||
|
@ -184,8 +183,6 @@ public class BatchTransferToPurchaseOrder implements IBackgroundWorkPlugin {
|
||||||
logger.warn("单据转换未生成任何采购订单", this.getClass(), "processBatchTransfer");
|
logger.warn("单据转换未生成任何采购订单", this.getClass(), "processBatchTransfer");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// 调用订单保存动作脚本
|
|
||||||
logger.info("开始保存采购订单", this.getClass(), "processBatchTransfer");
|
|
||||||
for (OrderVO orderVO : orderVOs) {
|
for (OrderVO orderVO : orderVOs) {
|
||||||
// 对采购订单赋值行号
|
// 对采购订单赋值行号
|
||||||
OrderHeaderVO hvo = orderVO.getHVO();
|
OrderHeaderVO hvo = orderVO.getHVO();
|
||||||
|
@ -197,47 +194,76 @@ public class BatchTransferToPurchaseOrder implements IBackgroundWorkPlugin {
|
||||||
bvo[j].setCrowno(String.valueOf(rowNum));
|
bvo[j].setCrowno(String.valueOf(rowNum));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
CloudPFlowContext cloudContext = this.getCloudPFlowContext(orderVOs);
|
// 批量处理
|
||||||
SCMScriptResultDTO scriptResult = ((IBatchRunScriptService) NCLocator.getInstance().lookup(IBatchRunScriptService.class)).runBacth(cloudContext, OrderVO.class);
|
processBatch(vos, orderVOs);
|
||||||
AbstractBill[] sucessVOs = scriptResult.getSucessVOs();
|
|
||||||
// 要进行批量更新的数组
|
|
||||||
List<PraybillVO> hvoList = new ArrayList<>(vos.length - sucessVOs.length);
|
|
||||||
Map<Integer, String> 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<PraybillHeaderVO> headupsrv = new VOUpdate<>();
|
|
||||||
headupsrv.update(hvoBatchUpdatedList, headupname);
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.error("批量转换请购单到采购订单失败", e, this.getClass(), "processBatchTransfer");
|
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<PraybillVO> hvoList = new ArrayList<>(vos.length - sucessVOs.length);
|
||||||
|
Map<Integer, String> 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<PraybillVO> 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<PraybillHeaderVO> headupsrv = new VOUpdate<>();
|
||||||
|
headupsrv.update(hvoBatchUpdatedList, headupname);
|
||||||
|
}
|
||||||
|
|
||||||
private CloudPFlowContext getCloudPFlowContext(OrderVO[] vos) {
|
private CloudPFlowContext getCloudPFlowContext(OrderVO[] vos) {
|
||||||
CloudPFlowContext context = new CloudPFlowContext();
|
CloudPFlowContext context = new CloudPFlowContext();
|
||||||
context.setActionName("SAVEBASE");
|
context.setActionName("SAVEBASE");
|
||||||
|
|
Loading…
Reference in New Issue