收款定时任务优化

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.BusinessDataServiceHelper;
import kd.bos.servicehelper.operation.OperationServiceHelper; import kd.bos.servicehelper.operation.OperationServiceHelper;
import kd.sdk.plugin.Plugin; import kd.sdk.plugin.Plugin;
import shjh.jhzj7.fi.fi.utils.JhzjUtils;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Map; 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 Log logger = LogFactory.getLog(RecBillToClearBillTask.class);
private static final String srcEntityName = "cas_recbill";//源单 收款单 private static final String srcEntityName = "cas_recbill";//源单 收款单
private static final String KEY_STATUS ="billstatus";//单据状态 private static final String KEY_STATUS = "billstatus";//单据状态
private static final String KEY_ACT_RECT_AMOUNT ="actrecamt";//单据状态 private static final String KEY_ACT_RECT_AMOUNT = "actrecamt";//收款金额
private static final String KEY_VOUCHER_NUM ="shjh_vouchernum";//SAP凭证号 private static final String KEY_VOUCHER_NUM = "shjh_vouchernum";//SAP凭证号
private static final String KEY_AUDIT_DATE ="auditdate";//审核日期 private static final String KEY_AUDIT_DATE = "auditdate";//审核日期
@Override @Override
public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException { public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
// 单据状态=已收款 and QFilter qFilter = new QFilter(KEY_STATUS, QCP.equals, "D");//单据状态=已收款 and
// SAP凭证号 and qFilter.and(KEY_VOUCHER_NUM, QCP.not_equals, "");//SAP凭证号 and
// 收款金额>0 and qFilter.and(KEY_ACT_RECT_AMOUNT, QCP.large_than, BigDecimal.ZERO);//收款金额>0 and
// 审核日期T+1日下推T及T之前收款单 //获取昨天的日期字符串
QFilter qFilter = new QFilter(KEY_STATUS, QCP.equals, "A"); LocalDate yesterday = LocalDate.now().minusDays(1);
qFilter.and(KEY_VOUCHER_NUM, QCP.not_equals, ""); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
qFilter.and(KEY_ACT_RECT_AMOUNT, QCP.large_than, BigDecimal.ZERO); String yesterdayStr = yesterday.format(formatter);
Calendar cal = Calendar.getInstance(); qFilter.and(KEY_AUDIT_DATE, QCP.less_than, yesterdayStr);//TODO 审核日期T+1日下推T及T之前收款单
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");
DynamicObject[] collection = BusinessDataServiceHelper.load(srcEntityName, "id", qFilter.toArray()); DynamicObject[] collection = BusinessDataServiceHelper.load(srcEntityName, "id", qFilter.toArray());
if (collection.length!=0){ if (collection.length != 0){
ArrayList<Long> ids = new ArrayList<>(); ArrayList<Long> ids = new ArrayList<>(collection.length);
for (DynamicObject dynamicObject : collection) { for (DynamicObject dynamicObject : collection) {
ids.add(dynamicObject.getLong("id")); 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.STRICTVALIDATION, String.valueOf(true));
//同一个用户在多个界面操作同一张也不允许操作 //同一个用户在多个界面操作同一张也不允许操作
operateOption.setVariableValue(OperateOptionConst.MUTEX_ISSTRICT, 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()) { for (DynamicObject dynamicObject : recBillMap.values()) {
// 注意executeOperate 需要一个数组形式的 DynamicObject[] billArray[index] = dynamicObject;
DynamicObject[] billArray = new DynamicObject[]{dynamicObject}; index++;
OperationResult operationResult = OperationServiceHelper.executeOperate("pushclear", srcEntityName, billArray, operateOption); }
// 可以根据需要处理 operationResult例如检查是否成功获取返回值等 OperationResult operationResult = OperationServiceHelper.executeOperate("pushclear", srcEntityName, billArray, operateOption);
if (operationResult.isSuccess()) { // 可以根据需要处理 operationResult例如检查是否成功获取返回值等
logger.info("执行 push 成功,单据编号:" + dynamicObject.getPkValue()); if (operationResult.isSuccess()) {
} else { logger.info("执行pushclear成功本次处理收款单个数" + billArray.length);
logger.error(operationResult.getMessage()); } 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_IS_PUSH_FI = "shjh_ispushfc";//是否已推送费控
private static final String KEY_BILLSTATUS = "billstatus";//收款单状态
@Override @Override
@ -46,6 +48,7 @@ public class RecPushFiTask extends AbstractTask implements Plugin {
QFilter qFilter = new QFilter(KEY_RECEIVING_TYPE, QCP.in, typeList);//只有这两类推送费控 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_VOUCHER_NUM,QCP.not_equals,""));//sap凭证编号不为空
qFilter.and(new QFilter(KEY_IS_PUSH_FI,QCP.equals,"0"));//没有推过费控的 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()); DynamicObject[] recBillList = BusinessDataServiceHelper.load(KEY_REC_BILL, "id", qFilter.toArray());
if (recBillList.length != 0){ if (recBillList.length != 0){
ArrayList<Long> ids = new ArrayList<>(recBillList.length); 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); Map<Object, DynamicObject> recBillMap = BusinessDataServiceHelper.loadFromCache(ids.toArray(), KEY_REC_BILL);
OperateOption operateOption = OperateOption.create(); OperateOption operateOption = OperateOption.create();
// 不执行警告级别校验器 //不执行警告级别校验器
operateOption.setVariableValue(OperateOptionConst.IGNOREWARN, String.valueOf(true)); operateOption.setVariableValue(OperateOptionConst.IGNOREWARN, String.valueOf(true));
// 不显示交互提示自动执行到底 //不显示交互提示自动执行到底
operateOption.setVariableValue(OperateOptionConst.IGNOREINTERACTION, String.valueOf(true)); operateOption.setVariableValue(OperateOptionConst.IGNOREINTERACTION, String.valueOf(true));
// 全部校验通过才保存 //全部校验通过才保存
operateOption.setVariableValue(OperateOptionConst.STRICTVALIDATION, String.valueOf(true)); operateOption.setVariableValue(OperateOptionConst.STRICTVALIDATION, String.valueOf(true));
//同一个用户在多个界面操作同一张也不允许操作 //同一个用户在多个界面操作同一张也不允许操作
operateOption.setVariableValue(OperateOptionConst.MUTEX_ISSTRICT, 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.BusinessDataServiceHelper;
import kd.bos.servicehelper.operation.OperationServiceHelper; import kd.bos.servicehelper.operation.OperationServiceHelper;
import kd.sdk.plugin.Plugin; import kd.sdk.plugin.Plugin;
import shjh.jhzj7.fi.fi.plugin.form.info.RecFieldsInfo;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; 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 final static Log logger = LogFactory.getLog(RecPushSapTask.class);
private static final String KEY_REC_BILL = "cas_recbill";//收款单实体标识
@Override @Override
public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException { public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
// 查询条件收款单已生成凭证未推送SAP金额0 //查询条件收款单已收款已生成金蝶凭证未推送SAP收款金额0
QFilter qFilter = new QFilter("billstatus", QCP.equals, "D") QFilter qFilter = new QFilter("billstatus", QCP.equals, "D")
.and(new QFilter("isvoucher", QCP.equals, true)) .and(new QFilter("isvoucher", QCP.equals, true))
.and(new QFilter("shjh_ispushsap", QCP.equals, false)) .and(new QFilter("shjh_ispushsap", QCP.equals, false))
.and(new QFilter("actrecamt", QCP.not_equals, BigDecimal.ZERO)); .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) { if (recBillList.length == 0) {
logger.info("未找到符合条件的收款单"); logger.info("未找到符合条件的收款单");
return; return;
} }
// 按金额正负分组 //按金额正负分组
List<DynamicObject> normalBills = new ArrayList<>(); // 正数单据 List<DynamicObject> normalBills = new ArrayList<>(); //正数单据
List<DynamicObject> redBills = new ArrayList<>(); // 负数单据红冲 List<DynamicObject> redBills = new ArrayList<>(); //负数单据红冲
for (DynamicObject bill : recBillList) { for (DynamicObject bill : recBillList) {
if (bill.getBigDecimal("actrecamt").compareTo(BigDecimal.ZERO) > 0) { if (bill.getBigDecimal("actrecamt").compareTo(BigDecimal.ZERO) > 0) {
@ -71,10 +72,10 @@ public class RecPushSapTask extends AbstractTask implements Plugin {
// 创建严格的操作选项 // 创建严格的操作选项
private OperateOption createStrictOperateOption() { private OperateOption createStrictOperateOption() {
OperateOption option = OperateOption.create(); OperateOption option = OperateOption.create();
option.setVariableValue(OperateOptionConst.IGNOREWARN, "true"); option.setVariableValue(OperateOptionConst.IGNOREWARN, "true");//不执行警告级别校验器
option.setVariableValue(OperateOptionConst.IGNOREINTERACTION, "true"); option.setVariableValue(OperateOptionConst.IGNOREINTERACTION, "true");//不显示交互提示自动执行到底
option.setVariableValue(OperateOptionConst.STRICTVALIDATION, "true"); option.setVariableValue(OperateOptionConst.STRICTVALIDATION, "true");//全部校验通过才保存
option.setVariableValue(OperateOptionConst.MUTEX_ISSTRICT, "true"); option.setVariableValue(OperateOptionConst.MUTEX_ISSTRICT, "true");//同一个用户在多个界面操作同一张也不允许操作
return option; return option;
} }