责任链模式完成一个工作流审批

本文介绍了责任链模式的核心思想,通过一个请假审批流程的例子展示了如何运用此模式。在请假审批中,不同级别的角色(人事、组长、经理、CEO)按照顺序处理请求。通过设置状态来决定哪个角色有权进行审批,实现有序的操作。文章提到了权限控制,并提供了具体的人事同意和拒绝操作的示例。最后,作者提到实际项目中前端和后端代码的封装与优化仍有待进一步完善。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

责任链模式核心思想:多个角色配合处理一个事件,每个角色都只负责自己的职责,链表示处理的事件是要有序的,什么阶段该做什么,由什么人做。

本次处理案例:一个请假的审批,3天以下人事和组长审批,3~7天:人事、组长和经理审批,x>=7:人事、组长、经理和CEO审批。

分析:多个角色:人事,组长,经理,CEO,事件:请假流程审批,有序:人事<组长<经理<CEO,那么如何判断什么时候是人 事处理还是其他角色处理,这里我们使用状态,比如最开始员工提交申请我们设置的状态为新建,那么这个状态下表示只能先人事处理。

先给这个事件创建一个链,让他是有序的并按我们的流程进行有效操作(这里我自己写的一个项目,暂时没有解决英汉互译问 题,看起来有点逼死强迫症的感觉,请见谅!)

 public String getOperate(String state) {
         if("新建".equals(state))
            return "人事同意,人事拒绝";
        else if("人事已同意".equals(state))
            return "组长同意,组长拒绝";
        else if("组长已同意".equals(state))
            return "经理同意,经理拒绝";
        else if("经理已同意".equals(state))
            return "CEO同意,CEO拒绝";
        else
            return "";
    }

我们接收从前台传过来请假单的状态和对请假单的操作进行对比判断是否有效

public void checkOperate(String state,String operate) {
		if(getOperate(state).indexOf(operate)<0)
			getShowException("当前状态有误!");
	}

有序的事件写好了,什么状态下由什么人去做完成了,控制当前具体角色是否有操作权限(比如你组长登录了你不能有权限操作人事同意)自己进行权限控制吧。

我具体写的一个例子,人事同意和人事拒绝方法,参数:请假单号的json数组(对多个进行操作)reqNos,当前操作operate

public void personnelAgree(String reqNos,String operate) {
		Long[] reqNoArray=getReqNoArray(reqNos);
		for(Long reqNo:reqNoArray)
			checkOperateUpdateState( reqNo, operate) ;
	}
	
	public void personnelRefuse(String reqNos,String operate) {
		Long[] reqNoArray=getReqNoArray(reqNos);
		for(Long reqNo:reqNoArray)
			checkOperateUpdateState( reqNo, operate) ;
	}
public Long[] getReqNoArray(String reqNos) {
		JSONArray ja = JSONArray.fromObject(reqNos);
		int length = ja.size();
		Long[] reqNoArray = new Long[length];
		for (int i = 0; i < 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

3wtczs93点抗母

钱癌晚期

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值