OA系统请假,出差等流程审批解析

最近带领两个实习生一起开发公司OA系统,其中对流程审批这一块的开发感触还挺大的。下面来说说流程审批。

流程审批无非就是你提交申请之后,就会有第一个负责人去审批,第一个负责人审批通过之后,就再由第二个负责人审批,再之后就由第三个负责人去审批.....。现在是怎么去找第一个负责人,第一个负责人审批通过之后怎么去找到第二个负责人。然后我们这时候可以想到链,节点就是审批负责人,然后每个节点由指针连在一起,要是我知道第一个负责人指向第二个负责人的指针,那我就可以由第一个负责人找到第二个负责人了,指针可以设计为第一负责人的节点的后指针数是第二负责人的节点的编号,第二负责人的后节点指针是第三个负责人的节点编号,然后节点指向就是一条线,把各个节点连起来了。所以我们下面来看看表设计。

流程表flow:

流程表就是对各个流程进行分类吧,比如有请假流程、出差流程、报销流程等。表字段分别有:

num就是每个流程对应的号。

节点表flow_node:

节点表就是审批人信息,如第一个审批人,第二个审批人等。表设计如下:

这里的flow_num对应流程表的num,node_role对应审批人的id。

节点线表flow_fine:

节点线表就是把各个节点连接起来,就是指明该节点的前一个节点是哪个,后一个节点是哪个就可以连接了,然后就可以根据各个节点找到前一个或是后一个节点。表设计如下:

这里的flow_num和节点表的flow_num、流程表的num对应;next_node_no、pre_node_no就是后节点号和前节点号,对应节点表的node_no。

然后现在我来个请假的申请,首先得有请假申请表oa_leave:

         

其中current_node对应节点表的node_no,flow_num对应节点表的flow_num,state就是流程状态,有审批中,审批结束,audit_state是审批状态,有审批通过,审批不通过。

最后就是审批表oa_audit

其中employee_id是审批人的id,employee_name审批人的姓名,num对应各申请表的id。

下来来看看逻辑。

现在提交一个请假申请表。

这时候是save一个请假申请表,然后还设置当前节点current_node,就是flow_node表的node_no,,对应第一个审批人,设置state为1,状态为审批中,flow_num设置为A07,对应请假申请。

所以现在的请假申请表是:

           setFlowNum("A07");
           setState(1); // 审批状态
            flowNode = flowNodeRepository.findByflowNumOrderByNodeNoAsc("A07");
            flowLine = flowLineRepository.findByflowNumAndNextNodeNo("A07"), flowNode.getNodeNo());
            setCurrentNode(flowLine.getNextNodeNo()); // 一级审批节点

因为现在的current_node是1,state是1,意思就是当前审批节点是1,然后状态是审批中,然后flow_num是A07,所以根据flow_num和current_node可以在流程节点表中找到该审批节点了,之后可以得出审批人node_role,所以判断登录人是等于node_role就可以得出该职工是否是审批人了。

然后是进行审批,当一级审批人审批通过时,就设置current_node为该审批节点的下一个审批节点。然后请假表就变成:

flowLine = flowLineRepository.findByflowNumAndPreNodeNo(leave.getFlowNum(),  leave.getCurrentNode());

setCurrentNode(flowLine.getNextNodeNo());

然后审批表的数据有:

当审批不通过时,就设置current_node为0啦,不对应任何审批节点,然后申请状态是结束状态。

                  setCurrentNode(0);
                  setState(2);

所以这就是审批流程,最主要的是表设计好,流程表,节点表,流程线表。节点表是相当于审批人信息,流程线表相当于审批人相互连起来便于找到下一个审批人。

  • 7
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值