业务单据获取电子回单文件二开指导方案
一、业务场景
针对资金流入、流出业务链上的单据,系统预置了如下几类单据联查银行回单的功能:
(1)交易明细;
(2)资金收付单据:收款单、付款单、代发单、结算单、上划单、下拨单;
(3)资金收付款单据的直接上游业务单据:费用报销类单据;
(4)资金收、付款单据及其直接上游业务单据生成的凭证。
还有些客户想要在其他业务单据界面增加联查银行回单的功能,就需要二次开发电子回单联查接口获取关联的回单文件。
二、实践思路
业务单据联查电子回单,即在业务单据的序时簿界面、查看界面等放出【联查电子回单】按钮,实现可以从业务单据联查到电子回单的功能,如下图所示。
业务操作流程图
付款单的上游业务单据(凭证、对公费用报销单、借款单等)、收付款单、划拨单、代发单等业务类单据在联查回单时的业务链条关系图普,如下图所示。
业务单据联查电子回单业务链条关系图
三、详细设计
3.1 标准产品业务单据的注册类关系图
付款业务链条的类关系图
获取业务单据对应的电子回单数据集合接口方法
3.2 标准产品业务单据与电子回单关联的逻辑图
业务单据联查回单接口与收付款单联查回单接口关系图
收付款单联查到回单的充要条件关系图
3.3 标准产品业务单据的注册类关系图
根据上述关系图中,我们的二次开发方案可以分成两个部分:
3.3.1 方案一:基于现有联查回单的业务链条的逻辑实现
借助现有标品中已存在的业务链条来实现某种业务单据联查回单的功能,可以通过:1、调用com.kingdee.eas.fm.common.ERe
ceiptCommonHelper.getEreceiptIdListByBillIdList(Context, List)接口获取到业务单据对应的【电子回单结构化数据FID集合】;2、调用com.kingdee.eas.fm.erec.EreceiptServiceHelper.getPDFsByIdList(Context, List<String>, Map)接口根据【电子回单结构化数据FID集合】获取到【电子回单的二进制流文件】。
3.3.2 方案二:基于自身单据特定需求进行联查回单的逻辑实现
前提:如果客户的单据不属于当前标品支持的业务链条里面的内容,且满足以下条件之一即可实现联查电子回单功能:1、单据与付款单有(一对一、一对多或多对一)BOTP的上下游单向关联关系;2、单据与交易明细之间存在一一对应或者一对多的关联关系(BOTP关系或者标识符字段匹配关系)。
1、场景一:针对于单据与付款单有(一对一、一对多或多对一)BOTP的上下游单向关联关系的情况,凭证(总账) -> 结算记录(应收)-> 收/付款单(资金)->电子回单。
与收付款单有上下游关系的联查回单流程图示
需要新增实现类XXXXEreceiptBillService继承AbstractEreceiptBillService这个类,复写getErecIdMap方法。该接口的入参时业务单据的FID,返回的集合是电子回单FID集合。需要在对应的getErecIdMap方法中处理:
(1)根据结算记录获取到收付款集合;
(2)调用收付款RecEReceiptBillService/PayEReceiptBillService获取对应收、付款单对应电子回单的集合;
(3)将返回的集合进行合并;
(4)如果返回的集合为空,需要抛出明确异常提示,在哪个业务链条没有返回集合。
注意:目前产品中已经实现的单据接口类如下:付款单 ("40284E81","com.kingdee.eas.fm.erec.app.service.PayEreceiptBillService")和收款单("FA44FD5B", "com.kingdee.eas.fm.erec.app.service.RecEreceiptBillService")。
需要在com.kingdee.eas.fm.erec.app.service.VoucherEreceiptService凭证实现类的setList方法添加实例BOSTYPE和com.kingdee.eas.fm.erec.app.service.EreceiptBillServiceFactory工厂方法类添加注册类setMap的方法中添加自行实现的注册类。
完成上诉开发步骤后,再结合方案一中调用EReceiptCommonHelper.getEreceiptIdListByBillIdList(null,billIdList)接口和
EreceiptServiceHelper.getPDFsByIdList(null, idList, sortIemMap);接口获取到业务单据对应的电子回单文件流数据。
2、场景二:针对于单据交易明细有BOTP的上下游单向关联关系的情况,凭证(总账) -> 收款认领 -> 交易明细 ->电子回单。
与交易明细有上下游关系的联查回单流程图示
需要新增实现类XXXXEreceiptBillService继承AbstractEreceiptBillService这个类,复写getDetailIdMapByBillIdList(Context ctx, List<String> billIdList)方法。该接口的入参时业务单据的FID,返回的集合是交易明细FID集合。需要在对应的getDetailIdMapByBillIdList方法中处理逻辑为,根据认领处理单中的BOTP关系或者对账标识符(特定对应的标识码)获取到认领处理单对应的交易明细集合。
四、代码样例
4.1方案一代码示例:
1、根据付款单的业务单据ID获取到对应的电子回单ID集合:List idList= EReceiptCommonHelper.getEreceiptIdListBy
BillIdList(null,billIdList);
相关的接口类和方法:com.kingdee.eas.fm.common.EReceiptCommonHelper.getEreceiptIdListByBillIdList(Context, List)
2、根据电子回单ID集合获取到对应的电子回单文件流集合:List pdfList = EreceiptServiceHelper.getPDFsByIdList(nu
ll, idList, sortIemMap);
需要引用的类和方法:com.kingdee.eas.fm.erec.EreceiptServiceHelper.getPDFsByIdList(Context, List<String>, Map)
4.2方案二代码示例:
基于自身单据特定需求进行联查回单的逻辑实现,如附件所示:
五、注意事项
注意:尽量避免使用多线程,防止数据库资金竞争造成死锁。
业务单据获取电子回单文件二开指导方案
本文2024-09-22 19:26:21发表“eas cloud知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-eas-107198.html