优化批量转换请购单到采购订单功能
- 添加阈值设置,限制每次查询的数量 - 增加是否过滤失败的配置选项- 重构 SQL 构建逻辑,提高查询效率 - 移除不必要的参数和异常处理
This commit is contained in:
parent
a82291870c
commit
7f4a704b36
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue