目前在线审批页面技能显示审批任务记录,又能显示具体的审批详情信息,我们接下来应该把审批功能给实现一下。其实与工作流相关的操作,我们只需要调用工作流项目的Web方法即可,并不复杂。
一、会议申请BPMN流程
因为每种工作流程都不一样,所以我们先来看看会议申请的流程是什么?等到测试的时候,我们用不同身份的帐户登陆系统,执行会议申请的审批。
- 如果是总经理创建的会议申请,不需要审批,直接通过。
- 如果是非总经理创建的会议申请,需要由申请人的部门经理审批。
- 如果参会人是相同部门,部门经理审批是终审,不需要总经理审批。
- 如果参会人是不同部门的,部门经理审批之后,还需要总经理审批。
我们创建工作流实例的时候,向工作流项目传递了recieveNotify参数,这个URL地址是接收工作流发送过来的通知结果。所以无论会议审批通过还是没通过,工作流项目都会想recieveNotify这个URL地址发送HTTP请求,把审批结果发给我们。
二、调用工作流Web接口,执行审批
我们想要审批工作流程中的任务,只需要调用工作流项目的Web接口即可。下面的表格是我们调用Web方法需要传递的参数。
URI地址:/workflow/approvalTask
返回值:void
序号 | 参数 | 类型 | 说明 |
---|---|---|---|
1 | taskId | String | 审批任务ID |
2 | approval | String | 同意 |
3 | code | String | 慕课网授权码 |
4 | tcode | String | 课程授权码 |
三、编写业务层代码
在ApprovalService.java
接口中,声明抽象方法。
public interface ApprovalService {
……
public void approvalTask(HashMap param);
}
在ApprovalServiceImpl.java
类中,实现抽象方法。
public class ApprovalServiceImpl implements ApprovalService {
……
@Override
public void approvalTask(HashMap param) {
param.put("code", code);
param.put("tcode", tcode);
String url = workflow + "/workflow/approvalTask";
HttpResponse resp = HttpRequest.post(url).header("Content-Type", "application/json")
.body(JSONUtil.toJsonStr(param)).execute();
if (resp.getStatus() != 200) {
log.error(resp.body());
throw new EmosException("调用工作流审批异常");
}
}
}
四、编写Web层代码
创建ApprovalTaskForm.java
类,封装Ajax提交的数据。
@Data
@Schema(description = "审批任务表单")
public class ApprovalTaskForm {
@NotBlank(message = "taskId不能为空")
@Schema(description = "任务ID")
private String taskId;
@NotBlank(message = "approval不能为空")
@Pattern(regexp = "^同意$|^不同意$", message = "approval内容不正确")
@Schema(description = "审批意见")
private String approval;
}
在ApprovalController.java
类,定义Web方法,然后调用Swagger测试一下。
public class ApprovalController {
@PostMapping("/approvalTask")
@Operation(summary = "审批任务")
@SaCheckPermission(value = {"WORKFLOW:APPROVAL"}, mode = SaMode.OR)
public R approvalTask(@Valid @RequestBody ApprovalTaskForm form) {
HashMap param = JSONUtil.parse(form).toBean(HashMap.class);
approvalService.approvalTask(param);
return R.ok();
}
}
注意:会议申请工作里实例创建的时候,工作流项目会创建一个定时器,用于检测到了会议开始的时间,这个会议申请有没有审批通过。如果工作流没有审批完成,定时器会自动关闭工作流实例。所以我们之前创建的会议申请,为什么有的时候就消失了呢,就是到会议开始的时刻,这个申请还没有人审批,工作流实例就被关闭了。遇到这种问题很简单,再创建一个会议申请,把会议开始的日期尽量设置的靠后一些。