diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/task/RecBillToClearBillTask.java b/main/java/shjh/jhzj7/fi/fi/plugin/task/RecBillToClearBillTask.java index aac70cd..ebf8e43 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/task/RecBillToClearBillTask.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/task/RecBillToClearBillTask.java @@ -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 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 ids = new ArrayList<>(); + if (collection.length != 0){ + ArrayList 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()); } } } diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/task/RecPushFiTask.java b/main/java/shjh/jhzj7/fi/fi/plugin/task/RecPushFiTask.java index 633deaf..3eddfed 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/task/RecPushFiTask.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/task/RecPushFiTask.java @@ -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 ids = new ArrayList<>(recBillList.length); @@ -54,11 +57,11 @@ public class RecPushFiTask extends AbstractTask implements Plugin { } Map 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)); diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/task/RecPushSapTask.java b/main/java/shjh/jhzj7/fi/fi/plugin/task/RecPushSapTask.java index 1cb30d7..70d8a40 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/task/RecPushSapTask.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/task/RecPushSapTask.java @@ -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 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 normalBills = new ArrayList<>(); // 正数单据 - List redBills = new ArrayList<>(); // 负数单据(红冲) + //按金额正负分组 + List normalBills = new ArrayList<>(); //正数单据 + List 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; }