收款定时任务优化

This commit is contained in:
yuxueliang0813 2025-04-25 12:03:06 +08:00
parent 04e8f52b53
commit 75fd1b206a
3 changed files with 45 additions and 44 deletions

View File

@ -14,12 +14,11 @@ import kd.bos.schedule.executor.AbstractTask;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.operation.OperationServiceHelper;
import kd.sdk.plugin.Plugin;
import shjh.jhzj7.fi.fi.utils.JhzjUtils;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;
/**
@ -30,31 +29,26 @@ public class RecBillToClearBillTask extends AbstractTask implements Plugin {
private static final Log logger = LogFactory.getLog(RecBillToClearBillTask.class);
private static final String srcEntityName = "cas_recbill";//源单 收款单
private static final String KEY_STATUS ="billstatus";//单据状态
private static final String KEY_ACT_RECT_AMOUNT ="actrecamt";//单据状态
private static final String KEY_VOUCHER_NUM ="shjh_vouchernum";//SAP凭证号
private static final String KEY_AUDIT_DATE ="auditdate";//审核日期
private static final String KEY_STATUS = "billstatus";//单据状态
private static final String KEY_ACT_RECT_AMOUNT = "actrecamt";//收款金额
private static final String KEY_VOUCHER_NUM = "shjh_vouchernum";//SAP凭证号
private static final String KEY_AUDIT_DATE = "auditdate";//审核日期
@Override
public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
// 单据状态=已收款 and
// SAP凭证号 and
// 收款金额>0 and
// 审核日期T+1日下推T及T之前收款单
QFilter qFilter = new QFilter(KEY_STATUS, QCP.equals, "A");
qFilter.and(KEY_VOUCHER_NUM, QCP.not_equals, "");
qFilter.and(KEY_ACT_RECT_AMOUNT, QCP.large_than, BigDecimal.ZERO);
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.DAY_OF_YEAR, -1); // 当前日期减1天
Date yesterday = cal.getTime();
//qFilter.and(KEY_AUDIT_DATE, QCP.less_than, yesterday);
qFilter.and("billno", QCP.equals, "SKZJ202412300006");
QFilter qFilter = new QFilter(KEY_STATUS, QCP.equals, "D");//单据状态=已收款 and
qFilter.and(KEY_VOUCHER_NUM, QCP.not_equals, "");//SAP凭证号 and
qFilter.and(KEY_ACT_RECT_AMOUNT, QCP.large_than, BigDecimal.ZERO);//收款金额>0 and
//获取昨天的日期字符串
LocalDate yesterday = LocalDate.now().minusDays(1);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String yesterdayStr = yesterday.format(formatter);
qFilter.and(KEY_AUDIT_DATE, QCP.less_than, yesterdayStr);//TODO 审核日期T+1日下推T及T之前收款单
DynamicObject[] collection = BusinessDataServiceHelper.load(srcEntityName, "id", qFilter.toArray());
if (collection.length!=0){
ArrayList<Long> ids = new ArrayList<>();
if (collection.length != 0){
ArrayList<Long> ids = new ArrayList<>(collection.length);
for (DynamicObject dynamicObject : collection) {
ids.add(dynamicObject.getLong("id"));
}
@ -68,16 +62,19 @@ public class RecBillToClearBillTask extends AbstractTask implements Plugin {
operateOption.setVariableValue(OperateOptionConst.STRICTVALIDATION, String.valueOf(true));
//同一个用户在多个界面操作同一张也不允许操作
operateOption.setVariableValue(OperateOptionConst.MUTEX_ISSTRICT, String.valueOf(true));
// 注意executeOperate 需要一个数组形式的 DynamicObject[]
DynamicObject[] billArray = new DynamicObject[recBillMap.values().size()];
int index = 0;
for (DynamicObject dynamicObject : recBillMap.values()) {
// 注意executeOperate 需要一个数组形式的 DynamicObject[]
DynamicObject[] billArray = new DynamicObject[]{dynamicObject};
OperationResult operationResult = OperationServiceHelper.executeOperate("pushclear", srcEntityName, billArray, operateOption);
// 可以根据需要处理 operationResult例如检查是否成功获取返回值等
if (operationResult.isSuccess()) {
logger.info("执行 push 成功,单据编号:" + dynamicObject.getPkValue());
} else {
logger.error(operationResult.getMessage());
}
billArray[index] = dynamicObject;
index++;
}
OperationResult operationResult = OperationServiceHelper.executeOperate("pushclear", srcEntityName, billArray, operateOption);
// 可以根据需要处理 operationResult例如检查是否成功获取返回值等
if (operationResult.isSuccess()) {
logger.info("执行pushclear成功本次处理收款单个数" + billArray.length);
} else {
logger.error(operationResult.getMessage());
}
}
}

View File

@ -35,6 +35,8 @@ public class RecPushFiTask extends AbstractTask implements Plugin {
private static final String KEY_IS_PUSH_FI = "shjh_ispushfc";//是否已推送费控
private static final String KEY_BILLSTATUS = "billstatus";//收款单状态
@Override
@ -46,6 +48,7 @@ public class RecPushFiTask extends AbstractTask implements Plugin {
QFilter qFilter = new QFilter(KEY_RECEIVING_TYPE, QCP.in, typeList);//只有这两类推送费控
qFilter.and(new QFilter(KEY_VOUCHER_NUM,QCP.not_equals,""));//sap凭证编号不为空
qFilter.and(new QFilter(KEY_IS_PUSH_FI,QCP.equals,"0"));//没有推过费控的
qFilter.and(new QFilter(KEY_BILLSTATUS, QCP.equals, "D"));//收款单已收款
DynamicObject[] recBillList = BusinessDataServiceHelper.load(KEY_REC_BILL, "id", qFilter.toArray());
if (recBillList.length != 0){
ArrayList<Long> ids = new ArrayList<>(recBillList.length);
@ -54,11 +57,11 @@ public class RecPushFiTask extends AbstractTask implements Plugin {
}
Map<Object, DynamicObject> recBillMap = BusinessDataServiceHelper.loadFromCache(ids.toArray(), KEY_REC_BILL);
OperateOption operateOption = OperateOption.create();
// 不执行警告级别校验器
//不执行警告级别校验器
operateOption.setVariableValue(OperateOptionConst.IGNOREWARN, String.valueOf(true));
// 不显示交互提示自动执行到底
//不显示交互提示自动执行到底
operateOption.setVariableValue(OperateOptionConst.IGNOREINTERACTION, String.valueOf(true));
// 全部校验通过才保存
//全部校验通过才保存
operateOption.setVariableValue(OperateOptionConst.STRICTVALIDATION, String.valueOf(true));
//同一个用户在多个界面操作同一张也不允许操作
operateOption.setVariableValue(OperateOptionConst.MUTEX_ISSTRICT, String.valueOf(true));

View File

@ -14,7 +14,6 @@ import kd.bos.schedule.executor.AbstractTask;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.operation.OperationServiceHelper;
import kd.sdk.plugin.Plugin;
import shjh.jhzj7.fi.fi.plugin.form.info.RecFieldsInfo;
import java.math.BigDecimal;
import java.util.ArrayList;
@ -30,24 +29,26 @@ public class RecPushSapTask extends AbstractTask implements Plugin {
private final static Log logger = LogFactory.getLog(RecPushSapTask.class);
private static final String KEY_REC_BILL = "cas_recbill";//收款单实体标识
@Override
public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
// 查询条件收款单已生成凭证未推送SAP金额0
//查询条件收款单已收款已生成金蝶凭证未推送SAP收款金额0
QFilter qFilter = new QFilter("billstatus", QCP.equals, "D")
.and(new QFilter("isvoucher", QCP.equals, true))
.and(new QFilter("shjh_ispushsap", QCP.equals, false))
.and(new QFilter("actrecamt", QCP.not_equals, BigDecimal.ZERO));
DynamicObject[] recBillList = BusinessDataServiceHelper.load("cas_recbill", "id,billno,actrecamt", qFilter.toArray());
DynamicObject[] recBillList = BusinessDataServiceHelper.load(KEY_REC_BILL, "id,billno,actrecamt", qFilter.toArray());
if (recBillList.length == 0) {
logger.info("未找到符合条件的收款单");
return;
}
// 按金额正负分组
List<DynamicObject> normalBills = new ArrayList<>(); // 正数单据
List<DynamicObject> redBills = new ArrayList<>(); // 负数单据红冲
//按金额正负分组
List<DynamicObject> normalBills = new ArrayList<>(); //正数单据
List<DynamicObject> redBills = new ArrayList<>(); //负数单据红冲
for (DynamicObject bill : recBillList) {
if (bill.getBigDecimal("actrecamt").compareTo(BigDecimal.ZERO) > 0) {
@ -71,10 +72,10 @@ public class RecPushSapTask extends AbstractTask implements Plugin {
// 创建严格的操作选项
private OperateOption createStrictOperateOption() {
OperateOption option = OperateOption.create();
option.setVariableValue(OperateOptionConst.IGNOREWARN, "true");
option.setVariableValue(OperateOptionConst.IGNOREINTERACTION, "true");
option.setVariableValue(OperateOptionConst.STRICTVALIDATION, "true");
option.setVariableValue(OperateOptionConst.MUTEX_ISSTRICT, "true");
option.setVariableValue(OperateOptionConst.IGNOREWARN, "true");//不执行警告级别校验器
option.setVariableValue(OperateOptionConst.IGNOREINTERACTION, "true");//不显示交互提示自动执行到底
option.setVariableValue(OperateOptionConst.STRICTVALIDATION, "true");//全部校验通过才保存
option.setVariableValue(OperateOptionConst.MUTEX_ISSTRICT, "true");//同一个用户在多个界面操作同一张也不允许操作
return option;
}