全部开发者教程

企业级在线办公系统

各位同学要清楚一件事情,那就是请假归档分成两个步骤,首先HR要上传请假单和病志照片,这个是前端发出的第一个Ajax请求。文件上传成功之后,用户还要点击执行归档按钮,调用工作流项目完成归档任务,这是前端页面发起的第二个Ajax请求。

图片描述
上节课我们写的Web方法应对的是第一个Ajax请求,那么这节课我们要写的代码,应对的是第二个Ajax请求。

图片描述
大家需要注意,这次调用工作流项目Web方法并没有使用异步线程,而是直接同步调用。因为以前我们不仅要调用工作流项目,而且还要根据工作流返回的instance_id,修改数据表的记录,为了避免让用户等待时间过长,所以咱们用了异步线程技术。但是归档流程中不需要修改数据表记录,只是简单的调用一下工作流项目,所以咱们用同步调用也够用了。

一、请假归档Web接口

URI路径:/workflow/archiveTask

序号 参数 类型 含义
1 taskId String 任务ID
2 files String 归档文件的JSON数组
3 userId int 领取任务的userId
4 code String 慕课网授权码
5 tcode String 课程授权码

二、编写业务层代码

ApprovalService.java接口中,定义抽象方法。

public interface ApprovalService {
    ……
    public void archiveTask(HashMap param);
}

ApprovalServiceImpl.java类中,实现抽象方法。

public class ApprovalServiceImpl implements ApprovalService {
    ……
    @Override
    public void archiveTask(HashMap param) {
        param.put("code", code);
        param.put("tcode", tcode);
        
        String url = workflow + "/workflow/archiveTask";
        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层代码

创建ArchiveTaskForm.java类,封装Ajax提交的数据。

@Data
@Schema(description = "归档任务表单")
public class ArchiveTaskForm {
    @NotBlank(message = "taskId不能为空")
    @Schema(description = "任务ID")
    private String taskId;

    @NotBlank(message = "files不能为空")
    @Schema(description = "归档文件JSON数组")
    private String files;

}

ApprovalController.java类中,声明Web方法。

@Slf4j
public class ApprovalController {
    ……
    @PostMapping("/archiveTask")
    @Operation(summary = "归档任务")
    @SaCheckPermission(value = {"FILE:ARCHIVE"})
    public R archiveTask(@Valid @RequestBody ArchiveTaskForm form) {
        if (!JSONUtil.isJsonArray(form.getFiles())) {
            return R.error("files不是JSON数组");
        }
        HashMap param = new HashMap() {{
            put("taskId", form.getTaskId());
            put("files", form.getFiles());
            put("userId", StpUtil.getLoginIdAsInt());
        }};
        approvalService.archiveTask(param);
        return R.ok();
    }
}