|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
详细解释下各系统作用:
-
单据系统: 财务报账,会提交很多信息(例如:报账事由、报账金额与明细)。同时也会生成财务凭证(不了解凭证也没关系,它就是给财务人员看的东西,对技术人员来说就是数据库的一堆数据) -
BPM系统:非常成熟的流程管理系统,以非常直观的方式来实现流程的搭配,不了解的可以自行百度扫盲。在此案例中,需要使用BPM的两个能力:1)调用API,审核通过 2)调用API,获取流程的待审人 -
SAP系统: 财务专用系统,不用过多了解,只要知道在财务审核完成后,会将单据系统生成的凭证数据通过API调用的方式发送给SAP即可
-
保存业务数据+记录审核日志 -
调用BPM接口,审核通过 -
调用BPM接口,获取最新待审人 -
如果没有待审人,说明已经审完,生成凭证并推送SAP

单据系统内,没有任何日志记录,用户操作的数据也没有保留下来,但BPM那边却已经审核通过了,这在任何正常流程中,都是不可能出现的状态。
-
小事务内,尽量只有一个远程写操作
-
该远程写操作放到方法最后,保证在其返回成功后就能立刻提交事务
-
小事务可能会因为某些原因失败,因此需要机制来进行重试

CREATETABLE`transaction_job` (
`id`bigint(20) NOTNULL AUTO_INCREMENT COMMENT'主键',
`type`varchar(255) NOTNULLCOMMENT'任务类型',
`data`varchar(255) NOTNULLCOMMENT'任务数据',
`error_message`varchar(255) DEFAULTNULLCOMMENT'错误信息',
`context`varchar(255) DEFAULTNULLCOMMENT'任务上下文(主要是保存当前操作人)',
`create_time`bigint(20) NOTNULLCOMMENT'创建时间',
`update_time`bigint(20) NOTNULLCOMMENT'更新时间',
`retry_times`int(11) NOTNULLDEFAULT'0'COMMENT'重试次数',
PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULTCHARSET=utf8mb4 COMMENT='事务任务表';
作用:保存小事务的关键数据到data字段中,以保证通过该字段,就能正确执行小事务。另外也需要保存当前操作人的信息context。
第二步,通过定时任务,查出transaction_job表中未完成的数据,并执行对应的操作,这里通过简单的策略模式,将框架代码和业务代码做了分离
扫描任务
第三步,改造业务代码,不再一次性把流程写完,而且是在第一个小事务中,顺便往 transaction_job中插入一条数据,以执行第二个小事务


往期推荐
让 SpringBoot 飞起来!15条性能优化秘籍,轻松应对百万并发
10个高级的SQL查询技巧
Cursor Pro Ai编程工具 永久激活 无限续杯白嫖最高模型
开启Cloudflare邮箱接管 详细流程
SpringBoot3+国产FolkMQ!5行代码搞定消息中间件
IntelliJ IDEA 2025.2 最新激活教程,一键激活2099

