核销平台业务插件扩展介绍
核销平台基于苍穹平台的业务扩展功能提供扩展开发,供开发者自定义扩展核销、反核销执行的逻辑。(适用于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方法的逻辑对应。