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 14af5fd..7ec1f6f 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/task/BeiIntelpayBillTask.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/task/BeiIntelpayBillTask.java @@ -4,6 +4,8 @@ import kd.bos.context.RequestContext; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.exception.KDException; +import kd.bos.logging.Log; +import kd.bos.logging.LogFactory; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.schedule.executor.AbstractTask; @@ -21,86 +23,69 @@ import java.util.*; */ public class BeiIntelpayBillTask extends AbstractTask implements Plugin { + private final static Log logger = LogFactory.getLog(BeiIntelpayBillTask.class); + //付款处理 - 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"; @Override public void execute(RequestContext requestContext, Map map) throws KDException { + logger.info("========== 开始处理被动付款单凭证号回写任务 =========="); // 查询条件:借方金额大于0且凭证号为空 QFilter q1 = new QFilter("debitamount", QCP.large_than, BigDecimal.ZERO); QFilter q2 = new QFilter("shjh_credentialnums", QCP.equals, ""); - // 加载需要处理的智能付款单 - DynamicObject[] beiIntelpays = BusinessDataServiceHelper.load("bei_intelpay", - "id,billno,shjh_credentialnums,recedbillentry,recedbillentry.e_recedbillnumber", + DynamicObject[] beiIntelPays = BusinessDataServiceHelper.load("bei_intelpay", + "id,billno,shjh_credentialnums,recedbillentry,recedbillentry.e_recedbilltype,recedbillentry.e_recedbillnumber", new QFilter[]{q1, q2}); - - // 用于批量保存 - List toSaveList = new ArrayList<>(); - - for (DynamicObject beiIntelpay : beiIntelpays) { - // 下查关联单据 - Map> intelPayMap = BFTrackerServiceHelper.findTargetBills( - "bei_intelpay", - new Long[]{(Long) beiIntelpay.getPkValue()}); - - // 尝试从不同类型的关联单据中获取凭证号 - String credentialNum = findCredentialNum(intelPayMap); - - 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); + if (beiIntelPays != null) { + logger.info("共查询到 " + beiIntelPays.length + " 条需要处理的被动付款单"); + // 用于批量保存 + List toSaveList = new ArrayList<>(); + for (DynamicObject beiIntelPay : beiIntelPays) { + String number = beiIntelPay.getString("recedbillentry.e_recedbillnumber"); + if (number!=null && !"".equals(number)){ + String billType = beiIntelPay.getString("recedbillentry.e_recedbilltype"); + // 下查关联单据 + DynamicObject relevancyBill = BusinessDataServiceHelper.loadSingle(billType, new QFilter[]{new QFilter("billno", QCP.equals, number)}); + if (relevancyBill != null) { + // 尝试从不同类型的关联单据中获取凭证号 + String credentialNum = findCredentialNum(relevancyBill, billType); + logger.info(beiIntelPay.getString("billno")+"查询到 " + number + "关联到SAP号:"+credentialNum); + if (StringUtils.isNotEmpty(credentialNum)) { + beiIntelPay.set("shjh_credentialnums", credentialNum); + toSaveList.add(beiIntelPay); + } } } } - } - - // 批量保存 - if (!toSaveList.isEmpty()) { - SaveServiceHelper.save(toSaveList.toArray(new DynamicObject[0])); + // 批量保存 + if (!toSaveList.isEmpty()) { + SaveServiceHelper.save(toSaveList.toArray(new DynamicObject[0])); + } + logger.info("========== 被动付款单凭证号回写任务处理完成 =========="); } } /** * 从关联单据中查找凭证号 */ - private String findCredentialNum(Map> intelPayMap) { + private String findCredentialNum(DynamicObject relevancyBill, String billType) { // 定义查找顺序和对应的字段名 Map keyToFieldMap = new LinkedHashMap<>(); keyToFieldMap.put(KEY_PAY, "shjh_credentialnum"); keyToFieldMap.put(KEY_DOWN, "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; - } - } - } + if (billType.equals(key)) { + return relevancyBill.getString(fieldName); } } - return null; } } diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/task/BeiIntelrecBillTask.java b/main/java/shjh/jhzj7/fi/fi/plugin/task/BeiIntelrecBillTask.java index f355035..fffa4c7 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/task/BeiIntelrecBillTask.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/task/BeiIntelrecBillTask.java @@ -3,6 +3,8 @@ 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.logging.Log; +import kd.bos.logging.LogFactory; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.schedule.executor.AbstractTask; @@ -11,6 +13,7 @@ import kd.bos.servicehelper.botp.BFTrackerServiceHelper; import kd.bos.servicehelper.operation.SaveServiceHelper; import kd.bos.util.StringUtils; import kd.sdk.plugin.Plugin; +import shjh.jhzj7.fi.fi.plugin.convert.ClaimConvertPlugin; import java.math.BigDecimal; import java.util.*; @@ -19,72 +22,69 @@ import java.util.*; * 定时从付款单携带SAP付凭证单号至收款入账中心 */ public class BeiIntelrecBillTask extends AbstractTask implements Plugin { + + private final static Log logger = LogFactory.getLog(BeiIntelrecBillTask.class); + //收款处理 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 { + logger.info("========== 开始处理收款入账单凭证号回写任务 =========="); // 查询条件:收款金额大于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", + DynamicObject[] beiIntelRecs = BusinessDataServiceHelper.load("bei_intelrec", + "id,billno,shjh_credentialnums,recedbillentry,recedbillentry.e_recedbilltype,recedbillentry.e_recedbillnumber", 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 (beiIntelRecs != null) { + logger.info("共查询到 " + beiIntelRecs.length + " 条需要处理的收款入账单"); + // 用于批量保存 + List toSaveList = new ArrayList<>(); + for (DynamicObject beiIntelRec : beiIntelRecs) { + String number = beiIntelRec.getString("recedbillentry.e_recedbillnumber"); + if (number!=null && !"".equals(number)){ + String billType = beiIntelRec.getString("recedbillentry.e_recedbilltype"); + // 下查关联单据 + DynamicObject relevancyBill = BusinessDataServiceHelper.loadSingle(billType, new QFilter[]{new QFilter("billno", QCP.equals, number)}); + if (relevancyBill != null) { + // 尝试从不同类型的关联单据中获取凭证号 + String credentialNum = findCredentialNum(relevancyBill, billType); + logger.info(beiIntelRec.getString("billno")+"查询到 " + number + "关联到SAP号:"+credentialNum); + if (StringUtils.isNotEmpty(credentialNum)) { + beiIntelRec.set("shjh_credentialnums", credentialNum); + toSaveList.add(beiIntelRec); + } + } + } } - } - - // 批量保存 - if (!toSaveList.isEmpty()) { - SaveServiceHelper.save(toSaveList.toArray(new DynamicObject[0])); + // 批量保存 + if (!toSaveList.isEmpty()) { + SaveServiceHelper.save(toSaveList.toArray(new DynamicObject[0])); + } + logger.info("========== 收款入账单凭证号回写任务处理完成 =========="); } } /** * 从关联单据中查找凭证号 */ - private String findCredentialNum(Map> intelPayMap) { + private String findCredentialNum(DynamicObject relevancyBill, String billType) { // 定义查找顺序和对应的字段名 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; - } - } - } + if (billType.equals(key)) { + return relevancyBill.getString(fieldName); } } - return null; } } \ No newline at end of file