全部开发者教程

企业级在线办公系统

首页 慕课教程 企业级在线办公系统 企业级在线办公系统 8-4 查询审批任务详情信息(后端)

上个小节我们在页面上能看到审批任务的分页数据了,当用户点开审批记录的时候,可以看到审批任务的详情信息。左侧是无边框的表格,右侧是实时的审批进度图片。这节课咱们就把后端的代码写一下,给前台返回需要的信息。

图片描述

大家注意,左侧的文字详情信息,不需要我们写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);
    }
}