银企平台联动支付业务实现流程:
涉及代码实现流程:
1、收到业务系统联动支付请求
com.kingdee.bos.ebgateway.framework.method.LinkPayMethod.executeClientRequest(EBRequest, EBResponse, IRequestContext, MBTSInvokeLogger)
2、银企平台判断对应银行插件是否支持联动支付
if(stepOnePaymentInfo == null){//银行不支持联动支付的, 分步骤实现
3、查询该银行联动支付和同步付款状态(真同步)的定时任务,如果没有则自动添加5分钟一次
com.kingdee.bos.ebgateway.framework.method.LinkPayMethod.checkScheduleRule(List<ScheduleRuleKey>, String, String, StringBuffer)
4、是否支持联动支付
4.1、不支持,封装下拨支付数据:
stepOnePaymentInfo = InfoConvertUtils.convert4TransDown(linkPaymentInfo, body.getParentAcnt(), body.getChildAcnt1(), logger);
4.2、支持,封装联动支付数据:
nativeLinkPay = InfoConvertUtils.convert4NativeLinkPay(info, logger);
5、
打包付款数据(不支持联动支付则是4.1的下拨支付数据,支持则是4.2的联动支付数据)
PaymentUtils.pack2SubmitPay(paymentInfos);
并提交到付款请求银行
LinkPayUtils.wakeUpAllThePay(bankVersionId);
6、提交付款请求前判断是否存在未提交银行的付款,如果没有就唤醒同步付款状态线程,去同步付款状态(真同步)
com.kingdee.bos.ebgateway.bankservice.common.PayProcess.execute(String, IBankService, Map<String, Object>)
(if (paymentInfo2SubmitMap.isEmpty()) { if (batchPay.get() > 0) { logger.info("激活同步任务"); TaskManager.startOrWakeUp(bankVersionId, QueryPayProcess.class, impl, null); } batchPay.set(0); return false; })
7、与银行交互完成之后进入联动支付下一步,更新付款状态(仅将T_EBG_PAYMENTINFO中的数据同步到T_EBG_LINKPAYMENTINFO)(假同步)
LinkPayStepHelper.doNextStep(infos2Send, true);
com.kingdee.bos.ebgateway.utils.LinkPayStepHelper.LinkPayRequestClient.run()
updateLinkPayState(linkPaymentInfos, currPayment, bankMessageLogger);
10、判断该银行是否支持联动支付
10.1支持,则无需执行下一步
if(LinkPayUtils.LINKPAY_TYPE_NATIVE.equals(reservedFiled8)) {//其自身支持联动支付,无需进行下一步 bankMessageLogger.info("银行支持联动支付,无需执行下一步。流水号:" + currPayment.getBatchSeqId()); continue; }
10.2不支持,执行下一步,打包子账号付款给收款帐号的数据,并提交银行
PaymentUtils.pack2SubmitPay(paymentInfos);
LinkPayUtils.wakeUpAllThePay(bankVersionId);
11、手动同步联动支付单状态(仅将T_EBG_PAYMENTINFO中的数据同步到T_EBG_LINKPAYMENTINFO)(假同步)
com.kingdee.bos.ebgateway.framework.method.QueryLinkPayMethod.executeClientRequest(EBRequest, EBResponse, IRequestContext, MBTSInvokeLogger)
银企平台联动支付实现流程.rar(54.07KB)