• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
你的小铃铛呀
博客园    首页    新随笔    联系   管理    订阅  订阅

针对一套增删改查涉及到流程的解决方案(干货)

1.第一步流程节点要确保是活的,可以在数据库里面的配置字典表里面去写记录,到时候查这张表的对应的是哪个节点即可,如果没有配置字典表的话,也可以去建一个流程节点表

这样的好处是方便以后的扩展性,可以随时增加新的流程节点,以及流程。可以采用-去拼接

例:1-2-3-4-5代表这个流程完整走完需要经过这五个节点,1,2,3,4,5可以在库里配出说明是什么节点,如果需要增加节点,可以加个节点6,然后配上一个新的流程1-2-3-4-5-6.

2.对于这种流程的通常都会有一个统一的审核页面入口,里面会展示不同流程的信息,然后点击不同的流程时会去不同的页面,这里就需要我们在审核列表里面增加一个页面标识,告诉前端应该去哪个页面,

然后那个页面的数据是通过什么样的接口去查,即这个标识告诉前端去走哪个页面和掉哪个接口

3.审核列表也是需要进行控制的,在不同节点会去展示不同的审核流程,即到该节点的流程,这个就需要用到我们在审核记录表里面里面的下一个节点的字段,这个下一个节点就代表这个流程走到哪个节点,可以用这个条件去查即可,

那么问题来了,这个下一个节点的条件怎么加,这个时候就需要一个叫岗位的东西了,因为审核列表肯定是和岗位关联的,不同的岗位展示不同的审核信息,所以我们可以根据岗位去判断能查出哪个,比如A岗位能查1节点,我们可以根据他的

A岗位去拼上这个条件,sql用下一个节点in就行了,我们可以写一个map,里面key用岗位,值就是节点,这样就很方便去查了。

4.后续扩展上,岗位可能会变成一人多岗的角色,这个时候我们可以用2进制的方式去做处理,比如00,然后第一个0代表A岗位,第二个0代表B岗位,那么11就代表即是A岗位又是B岗位,然后存库的会可以存11也可以存3,这个看你们自己怎么定好了,

然后你的map集合就需要新增一个keyvalue了,个人觉得二进制的方便一点

5.流程上基本上查询的审核列表查出来控制了,跳转的页面也控制了,这时候就到了中间节点了,中间节点基本上下面的操作都是一个的,同意,拒绝,或者退回啥的,我们可以定义一个操作类型,告诉我们是什么操作,我们需要判断的时候要注意是不是最后

一个节点,最后一个节点的话就代表要入库了,中间的节点的话,只需要审核表里面变更下一个节点这个字段即可,至于怎么变更,我们可以查到这个审核表里面的一个审核流程的字段,这个字段告诉我们是什么样的流程,然后我们用我们当前的节点去看

在这个流程中的是哪个索引,然后根据索引+2就是下一个节点的位置的,比如流程1-2-3-4,现在是2节点,我们对应的索引是3,我们只需要取索引下标是5的值,也就是3即可,然后更新审核记录表就行了

6.如果是最后一个节点的话,也就是要入库了,这个时候我们需要的操作就是调用不同的实现类即可,我们可以定义一个公用的接口

public interface BaseSubService<T extends BaseSubInfo>{
        //同意增加
        public void doAddApprove(String pkid) throws Exception;
        //同意更新
	public void doUpdateApprove(String pkid) throws Exception;
        //同意删除
	public void doDeleteApprove(String pkid) throws Exception;

}

  然后用不同的实现类去实现即可,这个xxx要继承BaseSubInfo这个类的

public class XXXServiceImpl implements BaseSubService<XXX> {
    @Override
    public void doAddApprove(String pkid) throws Exception {
           //实现审核同意增加类型的业务处理
         }

       @Override
    public void doUpdateApprove(String pkid) throws Exception {
       //实现审核同意增加类型的业务处理
         }

       @Override
    public void doDeleteApprove(String pkid) throws Exception {
         //实现审核同意增加类型的业务处理
         }
}

这样我们就可以根据不同的业务去做对应的业务处理了,还有就是入口那里要确定好,这个非常重要,入口的话,我们可以在审核表里面有个操作类型的字段,用来我们最后通过什么样的接口方法去处理,还有就是表名,这个一定要按照规则来,否则找不到

对应的实现类

     //写一段代码查审核表的相关信息
     //定义一个字段获取表名
     //最关键的一步,创建出这个表对应的bean对象
     BaseSubService<BaseSubInfo> info = (BaseSubService<BaseSubInfo>) SpringContextUtil.getBean(表名 + "ServiceImpl");
        int operateType = tbRmmsAuditRecord.getOperateType();
        if (0 == operateType) {
            //新增
            info.doAddApprove(pkid);
        } else if (1 == operateType) {
            //修改
            info.doUpdateApprove(pkid);
        } else if (2 == operateType) {
            //删除
            info.doDeleteApprove(pkid);
        }

这样我们就可以做到统一的入库,统一的最后解决方法,根据不同的业务做不同的处理操作

7.核心表及其字段

’   审核表:有个流程编号pkid,操作类型字段,用来区分最后走接口里面的哪个方法,审核流程步骤字段,用于记录这个流程的所有节点,方便我们流程中的退回同意等操作完跳的对应节点

   下一个节点字段,用来审核列表查询用的,审核状态字段,用来进行校验用的,比如存在审核流程,无法再次发起,然后就是主表字段和附表字段,用来生成对应的service的bean对象的,页面标识字段,用来区分 跳转页面和调用不同接口用的,还有就是时间

    一般用来倒序查询使用的,至于其他字段可以根据自己业务需要增加

   业务附表:一般用来存更改的信息的,用来审核流程展示,和最后替换掉主表的信息使用的,里面核心字段审核流程编号关联审核表的pkid用的,主表的主键,用来关联我们需改变更的是主表的哪条记录使用的,其他字段基本上和主表保持一致,有需要的话

   可以根据业务新增

  主表,这个基本上就是业务需求定字段了,没什么好说的

  最后像什么更新删除等其他操作,基本上先查一下主表数据,然后替换掉对应的字段的值,然后去插入到附表

  如果有什么缺漏考虑不全的地方,欢迎评论补充

 

posted @ 2023-04-21 10:05  你的小铃铛呀  阅读(166)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3