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