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

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