diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/task/PayApplyFukuanTask.java b/main/java/shjh/jhzj7/fi/fi/plugin/task/PayApplyFukuanTask.java index b8f5ab3..7236faf 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/task/PayApplyFukuanTask.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/task/PayApplyFukuanTask.java @@ -13,6 +13,7 @@ import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.schedule.executor.AbstractTask; import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.QueryServiceHelper; import kd.bos.servicehelper.operation.OperationServiceHelper; import kd.sdk.plugin.Plugin; @@ -51,18 +52,20 @@ public class PayApplyFukuanTask extends AbstractTask implements Plugin { //同一个用户在多个界面操作同一张,也不允许操作 operateOption.setVariableValue(OperateOptionConst.MUTEX_ISSTRICT, String.valueOf(true)); - List qualifiedBills = new ArrayList<>(); - + List qualifiedBills = new ArrayList<>();//需要下推的付款申请单的集合 + DynamicObjectCollection entry; + boolean scheduleflag; for (DynamicObject dynamicObject : recBillMap.values()) { // 注意:executeOperate 需要一个数组形式的 DynamicObject[] - DynamicObjectCollection entry = dynamicObject.getDynamicObjectCollection("entry"); + entry = dynamicObject.getDynamicObjectCollection("entry"); if (entry!=null && entry.size()!=0){ //判断是否集团内-境内外供应商(外部系统单据类型=I,返回false) - DynamicObject entryObj = entry.get(0); - boolean supplierFilter = supplierFilter(dynamicObject,entryObj); + boolean supplierFilter = supplierFilter(dynamicObject,entry.get(0)); //判断是否存在数据在下推期间范围(到期日是当前月月底前) boolean expirationDateFilter = expirationDateFilter(entry); - if (!supplierFilter && expirationDateFilter){ + //如果付款申请单有下游排程单且排程单是已退单,则说明这个付款申请单不用再下推了 + scheduleflag = scheduleFilter(dynamicObject.getLong("id")); + if (!supplierFilter && expirationDateFilter && scheduleflag){ qualifiedBills.add(dynamicObject); } } @@ -86,6 +89,19 @@ public class PayApplyFukuanTask extends AbstractTask implements Plugin { } } + private boolean scheduleFilter(Long payrequestid){ + //如果付款申请单有下游排程单且排程单是已退单,则说明这个付款申请单不用再下推了,返回false + //否则返回true继续下推 + //付款申请单的id存于排程单的sourcebillid中 如果id无效果,则用sourcebillnumber 对应付款申请单的billno + QFilter sqfilter = new QFilter("sourcebillid", QCP.equals, payrequestid); + sqfilter.and("schedulstatus", QCP.equals, "yetchargeback");//排程状态已退单 + if (QueryServiceHelper.exists("psd_schedulebill", sqfilter.toArray())) { + return false; + } + return true; + } + + //entry为付款申请单的第一行 private boolean supplierFilter(DynamicObject dynamicObject,DynamicObject entry){ boolean isFilterSupplier = false; //如果外部系统单据类型=I,直接返回false