优化批量转换请购单到采购订单功能

- 添加阈值设置,限制每次查询的数量
- 增加是否过滤失败的配置选项- 重构 SQL 构建逻辑,提高查询效率
- 移除不必要的参数和异常处理
This commit is contained in:
张明 2025-06-04 10:04:37 +08:00
parent a82291870c
commit 7f4a704b36
1 changed files with 18 additions and 18 deletions

View File

@ -37,18 +37,24 @@ public class BatchTransferToPurchaseOrder implements IBackgroundWorkPlugin {
@Override @Override
public PreAlertObject executeTask(BgWorkingContext bgWorkingContext) throws BusinessException { public PreAlertObject executeTask(BgWorkingContext bgWorkingContext) throws BusinessException {
logger.info("开始执行批量转换请购单到采购订单任务", this.getClass(), "executeTask"); logger.info("开始执行批量转换请购单到采购订单任务", this.getClass(), "executeTask");
// 获取阈值 限制数量以及是否过滤失败
// 限制数量 每次查询的数量
String limitNum = (String) bgWorkingContext.getKeyMap().get("limitNum");
// 是否过滤失败 配置true的时候 过滤 过滤条件为 vdef31 != N 配置 false时 不过滤 查询全部数据
String filterFailed = (String) bgWorkingContext.getKeyMap().get("filterFailed");
String failed = filterFailed.equals("Y") ? "N" : "";
PreAlertObject retObj = new PreAlertObject(); PreAlertObject retObj = new PreAlertObject();
retObj.setReturnType(PreAlertReturnType.RETURNNOTHING); retObj.setReturnType(PreAlertReturnType.RETURNNOTHING);
try { try {
// 1. 查询满足条件的请购单聚合VO // 1. 查询满足条件的请购单聚合VO
PraybillVO[] purchaseRequestVOs = getQualifiedPurchaseRequests(bgWorkingContext); PraybillVO[] purchaseRequestVOs = getQualifiedPurchaseRequests(failed, limitNum);
logger.info("查询到满足条件的请购单数量: " + purchaseRequestVOs.length, this.getClass(), "executeTask"); logger.info("查询到满足条件的请购单数量: " + purchaseRequestVOs.length, this.getClass(), "executeTask");
if (purchaseRequestVOs.length == 0) { if (purchaseRequestVOs.length == 0) {
logger.info("未找到满足条件的请购单,任务结束", this.getClass(), "executeTask"); logger.info("未找到满足条件的请购单,任务结束", this.getClass(), "executeTask");
return null; return null;
} }
// 2. 批量转换处理 // 2. 批量转换处理
processBatchTransfer(purchaseRequestVOs, bgWorkingContext); processBatchTransfer(purchaseRequestVOs);
logger.info("批量转换请购单到采购订单完成", this.getClass(), "executeTask"); logger.info("批量转换请购单到采购订单完成", this.getClass(), "executeTask");
} catch (Exception e) { } catch (Exception e) {
logger.error("执行批量转换请购单到采购订单任务失败", e, this.getClass(), "executeTask"); logger.error("执行批量转换请购单到采购订单任务失败", e, this.getClass(), "executeTask");
@ -61,10 +67,10 @@ public class BatchTransferToPurchaseOrder implements IBackgroundWorkPlugin {
* 查询满足条件的请购单 * 查询满足条件的请购单
* 条件表体请购单主数量-累计订货主数量>0且没有行关闭 * 条件表体请购单主数量-累计订货主数量>0且没有行关闭
*/ */
private PraybillVO[] getQualifiedPurchaseRequests(BgWorkingContext bgWorkingContext) throws BusinessException { private PraybillVO[] getQualifiedPurchaseRequests(String isFilter, String limitNum) throws BusinessException {
logger.info("开始查询满足条件的请购单", this.getClass(), "getQualifiedPurchaseRequests"); logger.info("开始查询满足条件的请购单", this.getClass(), "getQualifiedPurchaseRequests");
try { try {
String sql = getSql(bgWorkingContext); String sql = getSql(isFilter, limitNum);
if (sql == null) { if (sql == null) {
logger.warn("生成的SQL为空返回空结果", this.getClass(), "getQualifiedPurchaseRequests"); logger.warn("生成的SQL为空返回空结果", this.getClass(), "getQualifiedPurchaseRequests");
return new PraybillVO[0]; return new PraybillVO[0];
@ -93,22 +99,16 @@ public class BatchTransferToPurchaseOrder implements IBackgroundWorkPlugin {
/** /**
* 构建查询SQL 查询视图 * 构建查询SQL 查询视图
*/ */
private String getSql(BgWorkingContext bgwc) throws BusinessException { private String getSql(String isFilter, String limitNum) {
logger.debug("开始构建查询SQL", this.getClass(), "getSql");
String[] pkorgs = bgwc.getPk_orgs();
String pkGroup = AppBsContext.getInstance().getPkGroup();
if (pkGroup == null) {
throw new BusinessException("请购单转换到采购订单任务时pkGroup为空");
}
if (MMArrayUtil.isNotEmpty(pkorgs)) {
throw new BusinessException("请购单转换到采购订单时组织为空");
}
MMSqlBuilder sb = new MMSqlBuilder(); MMSqlBuilder sb = new MMSqlBuilder();
sb.append(" SELECT PK_PRAYBILL_B"); sb.append(" SELECT PK_PRAYBILL_B");
sb.append(" FROM TRANS_PRAYBILL_PURCHASE"); sb.append(" FROM TRANS_PRAYBILL_PURCHASE");
sb.append(" WHERE PK_GROUP ", pkGroup); if (!isFilter.isEmpty()) {
sb.append(" AND"); sb.appendNotEqual(" WHERE vdef31 ", isFilter);
sb.append(" PK_ORG", pkorgs); }
if (!limitNum.equals("0")) {
sb.append(" AND ROWNUM ", "<", limitNum);
}
String finalSql = sb.toString(); String finalSql = sb.toString();
logger.debug("SQL构建完成", this.getClass(), "getSql"); logger.debug("SQL构建完成", this.getClass(), "getSql");
return finalSql; return finalSql;
@ -171,7 +171,7 @@ public class BatchTransferToPurchaseOrder implements IBackgroundWorkPlugin {
/** /**
* 批量转换请购单到采购订单 * 批量转换请购单到采购订单
*/ */
private void processBatchTransfer(PraybillVO[] vos, BgWorkingContext bgWorkingContext) { private void processBatchTransfer(PraybillVO[] vos) {
logger.info("开始批量转换请购单到采购订单,请购单数量: " + vos.length, this.getClass(), "processBatchTransfer"); logger.info("开始批量转换请购单到采购订单,请购单数量: " + vos.length, this.getClass(), "processBatchTransfer");
// 调用单据转换规则生成采购订单20->21 // 调用单据转换规则生成采购订单20->21
OrderVO[] orderVOs = PfServiceScmUtil.exeVOChangeByBillItfDef("20", "21", vos); OrderVO[] orderVOs = PfServiceScmUtil.exeVOChangeByBillItfDef("20", "21", vos);