各位同学要清楚一件事情,那就是请假归档分成两个步骤,首先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();
}
}