核销平台业务插件扩展介绍原创
金蝶云社区-arsense
arsense
10人赞赏了该文章 371次浏览 未经作者许可,禁止转载编辑于2023年12月07日 10:44:55

核销平台基于苍穹平台的业务扩展功能提供扩展开发,供开发者自定义扩展核销、反核销执行的逻辑。(适用于6.0版本)

业务扩展场景

位于开发服务云 – 扩展平台 – 业务扩展点

核销平台在核销、反核销等逻辑中提供了12个场景供开发者使用,便于开发核销逻辑。开发者可根据其对应扩展要求实现对应场景开发插件,并通过配置业务扩展插件,实现核销平台扩展开发。


注意:核销平台的插件均需要实现getWriteOffTypeIds方法,在该方法里面返回当前插件使用的核销类别ID。范例如下:

核销插件

核销插件扩展点一览

IWriteOffPlugin 核销通用执行插件

业务场景编码

SCMC_WRITEOFF_COMMON_PLUGIN

简述

用于对核销逻辑执行进行开发扩展,包括对核销记录进行扩展赋值、自动生成单逻辑处理等。


beforeWfRecordGenerate

void beforeWfRecordGenerate(DynamicObject recordBill)

传入参数:核销记录对象

返回参数:

调用时点:核销平台生成核销记录并构造完反写语句后,保存核销记录前,调用此方法。

可以在此方法修改核销记录对象,实现无法通过核销记录映射赋值的业务场景。例如核销记录上的金额计算场景等。


注意:请勿在该方法中修改核销数量等反写规则关联字段,可能会导致实际反写数量与核销记录上数量不同。


buildBackSql

Map<String,Map<String,List<Object[]>>> buildBackSql(List<DynamicObject> records)

传入参数:核销记录对象 数组

返回参数:SQL语句Map,结构为 DBRouteKey SQL语句– SQL参数。

调用时点:超额校验成功后,核销记录保存前,调用此方法。


可以在此方法构造SQL语句,实现无法通过反写规则配置的数据更新场景。例如更新核销标识、尾差调整等场景。

核销平台根据返回的SQL语句,根据DBRouteKey通过“分布式事务”分发到不同事务执行SQL语句,保证数据一致性。


注意:该方法应与IUnWriteOffPlugin.buildBackSql方法的逻辑相反。如实现该方法,执行反核销时也要注意把对应数据进行反向处理(例如IWriteOffPlugin中增加数量,则IUnWriteOffPlugin中应减少数量),否则可能会导致数据异常。


afterWfRecordStrategy

void afterWfRecordStrategy(List<DynamicObject> records)

传入参数:核销记录对象 数组

返回参数:

调用时点:核销记录保存后,核销主事务执行完后,分布式事务中调用。

在分布式事务中处理,与核销主体事务独立。可以在此方法中根据核销记录进行其他逻辑处理。例如调用其他应用微服务接口等场景。


afterWfAutoGenerate

void afterWfAutoGenerate(List<DynamicObject> generateBills)

传入参数:生成的单据对象数组

返回参数:

调用时点:单据保存后,核销主事务执行完后,分布式事务中调用。

在分布式事务中处理,与核销主体事务独立。可以在此方法中对已经保存的生成单据进行进一步处理。例如调用提交、审核等操作。


viewWfLog

void viewWfLog(List<DynamicObject> logs)

传入参数:核销执行日志对象 数组

返回参数:

调用时点:核销主事务执行完成后,核销执行日志保存后,调用此方法。

可以在此方法中根据核销执行日志进行其他业务处理,例如通知对应人员核销执行情况。


注意:请勿在此修改核销执行日志。核销执行日志为监控核销执行的重要数据信息,禁止修改核销执行日志,否则可能会导致某些场景下自动补偿出错。


IKdtxWfPlugin 核销分布式事务处理插件

业务场景编码

SCMC_WRITEOFF_KDTX

简述

用于核销过程中后置逻辑处理,用于处理与核销主事务独立,业务执行逻辑不影响核销的业务场景。


getKdtxWfPluginParam

Map<String,Object> getKdtxWfPluginParam(List<Map<String, Object>> recordMapping)


传入参数:核销数据Map

部分参数说明如下:

参数标识说明ismanual布尔值,是否为手工核销recordList<DynamicObject>,核销记录对象writeoffObjects核销对象

返回参数:参数map

调用时点:超额校验成功后,核销主事务内调用。

可以在此方法中根据传入的参数(核销记录、核销对象等)构造需要后续分布式事务中执行的业务逻辑所需参数。核销平台会将返回的参数map传入分布式事务,作为kdtxWfPlugin方法参数。


注意:此处构造返回的参数map请勿使用DynamicObject等复杂对象或自定义对象,否则可能导致序列化错误或失败,从而影响后续kdtxWfPlugin方法执行。


kdtxWfPlugin

void kdtxWfPlugin(List<DynamicObject> records, Map<String, Object> param)

传入参数:核销执行日志对象 数组、kdtxWfPlugin返回的map

返回参数:

调用时点:核销主事务执行完后,分布式事务中调用。

可以在此方法中根据核销记录、构造的参数进行各种业务逻辑处理。例如调用其他应用微服务等。


IMatchPlugin 核销匹配插件

业务场景编码

SCMC_WRITEOFF_MATCH

简述

用于对核销匹配单据进行开发扩展,包括对数据分组进行维度追加,增加匹配条件等。


matchCondition

List<MatchPluginResult> matchCondition(WriteOffObjectArgs writeOffObject)

传入参数:核销对象

返回参数:匹配对象

调用时点:执行匹配前

可以在此方法为发起方添加匹配维度信息。例如添加分录id维度(与botpTrackRelation方法联用实现分录按关联关系匹配)。


botpTrackRelation

String botpTrackRelation(DynamicObject srcConfigObj , DynamicObject tgtConfigObj)

传入参数:发起方核销单据对象,匹配方核销单据对象

返回参数:关联关系("trackNone"-无关联,"trackup"-发起方找匹配方为上查关系,"trackdown"-发起方找匹配方为下查关系。

调用时点:核销数据分组后,执行匹配前,调用此方法。

用于启用添加botp关联关系过滤并表示发起方单据与匹配方单据上下查关系。


注意:核销单据对象为核销平台定义的单据类型(为了区分主辅方相同单据对象,例如红蓝核销),如需获取单据对象,可参考如下代码:



IFilterPlugin 核销过滤插件

业务场景编码

SCMC_WRITEOFF_FILTER

简述

用于对参与核销的数据进行过滤扩展,包括发起方、匹配方的数据过滤等。


filterCondition

void filterCondition(List<WriteOffObjectArgs> writeOffObjects)

传入参数:核销数据对象

返回参数:

调用时点:

发起方:数据分组后,匹配数据前,调用此方法。

匹配方:匹配数据后,核销执行前,调用此方法。

可以在此方法中对发起方、匹配方的数据进行二次过滤,实现核销平台无法配置的过滤场景。

IWriteOffCheckPlugin 核销检查插件

业务场景编码

SCMC_WRITEOFF_CHECK

简述

对于生成的核销记录进行校验,返回校验结果。若校验失败,则停止整个核销流程。


check

boolean check(DynamicObject recordBill)

传入参数:核销记录

返回参数:校验结果

调用时点:核销记录保存前

可在此方法中校验核销平台生成的核销记录是否符合业务需求


IWfEndWriteBackPlugin 核销反写后处理插件

业务场景编码

SCMC_WRITEOFF_CHECK

简述

用于核销对反写单据执行完成后进行扩展开发处理,例如更新其他单据信息等。


endWriteBack

void endWriteBack(String DBRouteKey, List<DynamicObject> records)

传入参数:路由标识,核销记录

返回参数:无

调用时点:反写完成后,分布式子事务中

可以在此调用微服务通知核销反写数量执行完并进行其他数据更新处理。



反核销插件

反核销插件一览


IUnWriteOffPlugin 反核销通用执行插件

业务场景编码

SCMC_UNWRITEOFF_COMMON

简述

用于对反核销逻辑执行进行开发扩展,包括对自动生成单反向逻辑处理、核销记录删除前通知其他系统、构建反核销的反写SQL等。


buildBackSql

Map<String, Map<String, List<Object[]>>> buildBackSql(List<DynamicObject> records)

传入参数:核销记录对象

返回参数:SQL语句Map,结构为 DBRouteKey SQL语句– SQL参数。

调用时点:核销平台查询到核销记录并构造完反写语句后,删除核销记录前,调用此方法。

可以在此方法构造SQL语句,实现无法通过反写规则配置的数据更新场景的反向处理。

核销平台根据返回的SQL语句,根据DBRouteKey通过“分布式事务”分发到不同事务执行SQL语句,保证数据一致性。


注意:该方法应与IWriteOffPlugin.buildBackSql方法的逻辑相反。如IWriteOffPlugin实现buildBackSql方法,执行则该插件在执行时也要注意把对应数据进行反向处理(例如IWriteOffPlugin中增加数量,则IUnWriteOffPlugin中应减少数量),否则可能会导致数据异常。


beforeWfRecordDelete

void beforeWfRecordDelete(List<DynamicObject> records)

传入参数:核销记录对象

返回参数:

调用时点:分布式子事务中,删除核销记录前,调用此方法。

可以在此方法中根据核销记录信息更新反核销信息到其他单据上。


autoBillDelete

void autoBillDelete(String billType, List<Long> idList)

传入参数:自动生成单单据标识,自动生成单单据id集合

返回参数:

调用时点:分布式子事务中,删除自动生成单据前,调用此方法。

可以在此方法中对单据进行反审核等反写操作处理,将自动生成单设置为暂存状态。该方法与IWriteOffPlugin. beforeWfRecordGenerated方法的逻辑相对应。


注意:该方法后会调用单据的删除操作,因此需要在该方法内将单据处理可删除的状态,避免后续单据删除失败。例如调用反向操作到暂存态等。


IKdtxUnWfPlugin 反核销分布式事务处理插件

业务场景编码

SCMC_UNWRITEOFF_KDTX

简述

用于反核销过程中后置逻辑处理,用于处理与反核销主事务独立,业务执行逻辑不影响核销的业务场景。


kdtxBackWfPlugin

void kdtxBackWfPlugin(List<DynamicObject> records)

传入参数:核销记录对象

返回参数:

调用时点:核销平台删除生成核销记录子事务前,分布式子事务里调用此方法。

可以在此调用微服务通知当前核销记录进行反核销。该方法IKdtxWfPlugin.kdtxWfPlugin方法的逻辑相对应

IUnWriteOffCheckPlugin反核销检查插件

业务场景编码

SCMC_UNWRITEOFF_CHECK

简述

对于反核销的核销记录进行校验,返回校验结果。若校验失败,则停止整个反核销流程。

check

boolean check(DynamicObject record)

传入参数:核销记录

返回参数:校验结果

调用时点:核销记录删除前

可在此方法验证当前核销记录是否可以进行反核销操作。


IUnWfEndWriteBackPlugin 反核销反写后处理插件

业务场景编码

SCMC_UNWRITEOFF_END_BACK

简述

用于对反核销反写单据执行完成后进行扩展开发处理,例如反向更新其他单据信息等。

endWriteBack

void endWriteBack(String DBRouteKey, List<DynamicObject> records)

传入参数:路由标识,核销记录

返回参数:

调用时点:写完成后,分布式子事务中

可以在此调用微服务通知反核销反写数量执行完并进行其他数据更新处理。该方法应IWfEndWriteBackPlugin. endWriteBack方法的逻辑对应


赞 10