上个小节我们在页面上能看到审批任务的分页数据了,当用户点开审批记录的时候,可以看到审批任务的详情信息。左侧是无边框的表格,右侧是实时的审批进度图片。这节课咱们就把后端的代码写一下,给前台返回需要的信息。
大家注意,左侧的文字详情信息,不需要我们写SQL语句去查询数据。因为创建工作流实例的时候,我们已经把详情信息绑定在工作流实例上面了,所以我们只需要调用工作流项目的Web方法即可。
我相信肯定有同学想问:把详情信息绑定在工作流实例上面有什么好处吗?当然有好处,可以减少复杂的SQL语句查询。比如说会议申请的详情信息里面有参会人姓名,如果我们自己用SQL语句查询,肯定少不了用复杂的表连接语句。然而我们是创建工作流实例的时候就把详情信息查询出来然后绑定,这样我们以后想要看详情信息,只需要查询工作流实例即可,不需要执行复杂的SQL语句。将来你还会看到报销申请、请假申请等审批任务,那里面的详情信息用SQL语句查询也挺复杂,倒不如把详情绑定在工作流实例上面,用起来也简单方便。
一、工作流项目Web接口
我们想要查询审批详情信息,那就必须先了解调用的工作流项目Web接口到底需要我们传入什么参数。
接口URI:/workflow/searchApprovalContent
序号 | 参数 | 类型 | 说明 |
---|---|---|---|
1 | instanceId | String | 工作流实例ID |
2 | userId | int | 用户ID |
3 | role | String[] | 用户角色 |
4 | type | String | 员工请假 |
5 | status | int | 待审批 |
6 | code | String | 慕课网授权字符串 |
7 | tcode | String | 课程授权字符串 |
二、编写业务层代码
在ApprovalService.java
接口中,定义抽象方法。
public interface ApprovalService {
……
public HashMap searchApprovalContent(HashMap param);
}
在ApprovalServiceImpl.java
类中,实现抽象方法。
public class ApprovalServiceImpl implements ApprovalService {
……
@Override
public HashMap searchApprovalContent(HashMap param) {
param.put("code", code);
param.put("tcode", tcode);
String url = workflow + "/workflow/searchApprovalContent";
HttpResponse resp = HttpRequest.post(url).header("Content-Type", "application/json")
.body(JSONUtil.toJsonStr(param)).execute();
if (resp.getStatus() == 200) {
JSONObject json = JSONUtil.parseObj(resp.body());
HashMap content = json.get("content", HashMap.class);
return content;
} else {
log.error(resp.body());
throw new EmosException("获取工作流数据异常");
}
}
}
三、编写Web层代码
创建SearchApprovalContentForm.java
类,封装Ajax提交的数据。
@Data
public class SearchApprovalContentForm {
@NotBlank(message = "instanceId不能为空")
@Pattern(regexp = "^[0-9A-Za-z\\-]{36}$", message = "instanceId内容不正确")
private String instanceId;
@NotBlank(message = "type不能为空")
@Pattern(regexp = "^员工请假$|^会议申请$|^报销申请$", message = "type内容不正确")
private String type;
@NotBlank(message = "status不能为空")
@Pattern(regexp = "^待审批$|^已审批$|^已结束$", message = "status内容不正确")
private String status;
}
在ApprovalController.java
类中,定义Web方法。
public class ApprovalController {
……
@PostMapping("/searchApprovalContent")
@Operation(summary = "查询任务详情")
@SaCheckPermission(value = {"WORKFLOW:APPROVAL", "FILE:ARCHIVE"}, mode = SaMode.OR)
public R searchApprovalContent(@Valid @RequestBody SearchApprovalContentForm form) {
HashMap param = JSONUtil.parse(form).toBean(HashMap.class);
int userId = StpUtil.getLoginIdAsInt();
param.put("userId", userId);
param.put("role", userService.searchUserRoles(userId));
HashMap content = approvalService.searchApprovalContent(param);
return R.ok().put("content", content);
}
}