人的知识就好比一个圆圈,圆圈里面是已知的,圆圈外面是未知的。你知道得越多,圆圈也就越大,你不知道的也就越多。

0%

ijz后端框架(十)审批扩展

整体流程

在审批操作前后,我们系统中都提供了相应的扩展接口,并且在弃审前,也会帮我们自动做数据引用校验,先看看目前的整体流程:
审批流程时序图(改造前)
整体流程没问题,只是有4个小地方我认为可以改进下:

  • bpm是从数据库中查找回调地址(/icopbpm/updateBillState)的,这就要求我们每创建个单据,都要去数据库添加一行几乎相同记录,很麻烦也没必要。
    我认为要么代码中固定为/icopbpm/updateBillState,要么这个回调地址是由前端通过参数传递为bpm(类似cas登陆验证)。
  • IBusinessService的查找是通过Spring监听器,可以改为使用InitializingBean和DisposableBean接口。
  • 弃审前和审批后扩展接口可以由2个合并成1个,另外提供弃审后扩展接口。
  • 扩展接口都是返回JsonBackData对象,以提示操作成功或失败,有点多余。成功继续执行,失败直接抛异常好了。

改造后的整体流程:
审批流程时序图(改造后)

弃审校验

目前的弃审校验流程:
弃审校验时序图(改造前)
我主要是认为没必要请求support,自定义配置可以配置到元数据或配置文件里,多一次请求意味着多一点时间开销,多一次意外情况。另外我们公有云之前有遇到按引用实体的创建时间大于被引用实体的审批时间来做弃审校验,对于这点我做了支持。
改造后的弃审校验流程:
弃审校验时序图(改造后)
还是请求了一次support,因为没有现成的接口可以直接获取元数据信息。

兼容性

在公有云合约系统中,像dr、billState字段都是在公共表里,但现在更新状态都是直接去更新合同表,所以我在各类合同表里也存了份字段。不过如果升级Hibernate到最新版本,又有新的问题:hibernate不会再自动同步更新公共表和实体表,
所以在改造后的实现中,我会依据属性ijz.bill.persistenceType的值(jpa|jdbc)来决定是使用EntityManager还是JdbcTemplate更新表字段。

小礼物走一走,来 Github 关注我