被动付款入账&&收款入账中心反写SAP调度

This commit is contained in:
李贵强 2025-08-12 14:04:46 +08:00
parent c0e28a9276
commit 58b879f9c5
2 changed files with 103 additions and 6 deletions

View File

@ -25,10 +25,7 @@ public class BeiIntelpayBillTask extends AbstractTask implements Plugin {
private static final String KEY_PAY="cas_paybill"; private static final String KEY_PAY="cas_paybill";
//下拨处理 //下拨处理
private static final String KEY_DOWN="fca_transdownbill"; private static final String KEY_DOWN="fca_transdownbill";
//收款处理
private static final String KEY_REC="cas_recbill";
//上划处理
private static final String KEY_UP="fca_transupbill";
@Override @Override
public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException { public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
@ -56,6 +53,17 @@ public class BeiIntelpayBillTask extends AbstractTask implements Plugin {
if (StringUtils.isNotEmpty(credentialNum)) { if (StringUtils.isNotEmpty(credentialNum)) {
beiIntelpay.set("shjh_credentialnums", credentialNum); beiIntelpay.set("shjh_credentialnums", credentialNum);
toSaveList.add(beiIntelpay); toSaveList.add(beiIntelpay);
}else {
//从付款单关联交易明细信息匹配
String billno = beiIntelpay.getString("billno");
DynamicObject paybill = BusinessDataServiceHelper.loadSingle("cas_paybill", new QFilter[]{new QFilter("bankcheckentity.edetailbillno", QCP.equals, billno)});
if (null !=paybill){
String credentialnum = paybill.getString("shjh_credentialnum");
if (null!=credentialnum){
beiIntelpay.set("shjh_credentialnums", credentialnum);
toSaveList.add(beiIntelpay);
}
}
} }
} }
@ -73,8 +81,7 @@ public class BeiIntelpayBillTask extends AbstractTask implements Plugin {
Map<String, String> keyToFieldMap = new LinkedHashMap<>(); Map<String, String> keyToFieldMap = new LinkedHashMap<>();
keyToFieldMap.put(KEY_PAY, "shjh_credentialnum"); keyToFieldMap.put(KEY_PAY, "shjh_credentialnum");
keyToFieldMap.put(KEY_DOWN, "shjh_sappzh"); keyToFieldMap.put(KEY_DOWN, "shjh_sappzh");
keyToFieldMap.put(KEY_REC, "shjh_vouchernum");
keyToFieldMap.put(KEY_UP, "shjh_sappzh");
// 按顺序查找 // 按顺序查找
for (Map.Entry<String, String> entry : keyToFieldMap.entrySet()) { for (Map.Entry<String, String> entry : keyToFieldMap.entrySet()) {

View File

@ -0,0 +1,90 @@
package shjh.jhzj7.fi.fi.plugin.task;
import kd.bos.context.RequestContext;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.exception.KDException;
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.botp.BFTrackerServiceHelper;
import kd.bos.servicehelper.operation.SaveServiceHelper;
import kd.bos.util.StringUtils;
import kd.sdk.plugin.Plugin;
import java.math.BigDecimal;
import java.util.*;
/**
* 定时从付款单携带SAP付凭证单号至收款入账中心
*/
public class BeiIntelrecBillTask extends AbstractTask implements Plugin {
//收款处理
private static final String KEY_REC="cas_recbill";
//上划处理
private static final String KEY_UP="fca_transupbill";
@Override
public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
// 查询条件收款金额大于0且凭证号为空
QFilter q1 = new QFilter("creditamount", QCP.large_than, BigDecimal.ZERO);
QFilter q2 = new QFilter("shjh_credentialnums", QCP.equals, "");
// 加载需要处理的智能付款单
DynamicObject[] beiIntelrecs = BusinessDataServiceHelper.load("bei_intelrec",
"id,billno,shjh_credentialnums",
new QFilter[]{q1, q2});
// 用于批量保存
List<DynamicObject> toSaveList = new ArrayList<>();
for (DynamicObject beiIntelrec : beiIntelrecs) {
// 下查关联单据
Map<String, HashSet<Long>> intelPayMap = BFTrackerServiceHelper.findTargetBills(
"bei_intelrec",
new Long[]{(Long) beiIntelrec.getPkValue()});
// 尝试从不同类型的关联单据中获取凭证号
String credentialNum = findCredentialNum(intelPayMap);
if (StringUtils.isNotEmpty(credentialNum)) {
beiIntelrec.set("shjh_credentialnums", credentialNum);
toSaveList.add(beiIntelrec);
}
}
// 批量保存
if (!toSaveList.isEmpty()) {
SaveServiceHelper.save(toSaveList.toArray(new DynamicObject[0]));
}
}
/**
* 从关联单据中查找凭证号
*/
private String findCredentialNum(Map<String, HashSet<Long>> intelPayMap) {
// 定义查找顺序和对应的字段名
Map<String, String> keyToFieldMap = new LinkedHashMap<>();
keyToFieldMap.put(KEY_REC, "shjh_vouchernum");
keyToFieldMap.put(KEY_UP, "shjh_sappzh");
// 按顺序查找
for (Map.Entry<String, String> entry : keyToFieldMap.entrySet()) {
String key = entry.getKey();
String fieldName = entry.getValue();
if (intelPayMap.containsKey(key)) {
for (Long billId : intelPayMap.get(key)) {
DynamicObject bill = BusinessDataServiceHelper.loadSingle(billId, key);
if (bill != null) {
String credentialNum = bill.getString(fieldName);
if (StringUtils.isNotEmpty(credentialNum)) {
return credentialNum;
}
}
}
}
}
return null;
}
}