From 58b879f9c5f196a00e1df94868db3f9a979cc9c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E8=B4=B5=E5=BC=BA?= Date: Tue, 12 Aug 2025 14:04:46 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A2=AB=E5=8A=A8=E4=BB=98=E6=AC=BE=E5=85=A5?= =?UTF-8?q?=E8=B4=A6&&=E6=94=B6=E6=AC=BE=E5=85=A5=E8=B4=A6=E4=B8=AD?= =?UTF-8?q?=E5=BF=83=E5=8F=8D=E5=86=99SAP=E8=B0=83=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fi/plugin/task/BeiIntelpayBillTask.java | 19 ++-- .../fi/plugin/task/BeiIntelrecBillTask.java | 90 +++++++++++++++++++ 2 files changed, 103 insertions(+), 6 deletions(-) create mode 100644 main/java/shjh/jhzj7/fi/fi/plugin/task/BeiIntelrecBillTask.java diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/task/BeiIntelpayBillTask.java b/main/java/shjh/jhzj7/fi/fi/plugin/task/BeiIntelpayBillTask.java index 40c115a..14af5fd 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/task/BeiIntelpayBillTask.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/task/BeiIntelpayBillTask.java @@ -25,10 +25,7 @@ public class BeiIntelpayBillTask extends AbstractTask implements Plugin { private static final String KEY_PAY="cas_paybill"; //下拨处理 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 public void execute(RequestContext requestContext, Map map) throws KDException { @@ -56,6 +53,17 @@ public class BeiIntelpayBillTask extends AbstractTask implements Plugin { if (StringUtils.isNotEmpty(credentialNum)) { beiIntelpay.set("shjh_credentialnums", credentialNum); 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 keyToFieldMap = new LinkedHashMap<>(); keyToFieldMap.put(KEY_PAY, "shjh_credentialnum"); keyToFieldMap.put(KEY_DOWN, "shjh_sappzh"); - keyToFieldMap.put(KEY_REC, "shjh_vouchernum"); - keyToFieldMap.put(KEY_UP, "shjh_sappzh"); + // 按顺序查找 for (Map.Entry entry : keyToFieldMap.entrySet()) { diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/task/BeiIntelrecBillTask.java b/main/java/shjh/jhzj7/fi/fi/plugin/task/BeiIntelrecBillTask.java new file mode 100644 index 0000000..f355035 --- /dev/null +++ b/main/java/shjh/jhzj7/fi/fi/plugin/task/BeiIntelrecBillTask.java @@ -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 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 toSaveList = new ArrayList<>(); + + for (DynamicObject beiIntelrec : beiIntelrecs) { + // 下查关联单据 + Map> 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> intelPayMap) { + // 定义查找顺序和对应的字段名 + Map keyToFieldMap = new LinkedHashMap<>(); + keyToFieldMap.put(KEY_REC, "shjh_vouchernum"); + keyToFieldMap.put(KEY_UP, "shjh_sappzh"); + + // 按顺序查找 + for (Map.Entry 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; + } +} \ No newline at end of file