当管理员设置了离职人员工作流程交接人员,点击弹窗页面确定按钮之后,需要发送Ajax请求给后端Java项目。Java项目会修改员工的状态,并且调用工作流项目,设置离职员工审批任务的替代人员。
一、编写emos-api
代码
1. 回顾SQL语句
在TbUserDao.xml
文件中,声明了修改员工信息的SQL语句,其中就包括了修改员工状态字段,所以我们就不需要再另写SQL语句了。
<update id="update" parameterType="HashMap">
UPDATE tb_user
SET
<if test="username!=null and password!=null">
username = #{username},
password = HEX(AES_ENCRYPT(#{password},#{username})),
</if>
<if test="name!=null">
name = #{name},
</if>
<if test="sex!=null">
sex = #{sex},
</if>
<if test="tel!=null">
tel = #{tel},
</if>
<if test="email!=null">
email = #{email},
</if>
<if test="hiredate!=null">
hiredate = #{hiredate},
</if>
<if test="role!=null">
role = #{role},
</if>
<if test="root!=null">
root = #{root},
</if>
<if test="deptId!=null">
dept_id = #{deptId},
</if>
<if test="status!=null">
status = #{status},
</if>
id=id
WHERE id=#{userId}
</update>
2. 定义异步任务类,调用工作流项目
在com.example.emos.api.task
包中创建UserWorkflowTask.java
异步任务类,调用工作流项目。
@Component
@Slf4j
public class UserWorkflowTask {
@Value("${emos.code}")
private String code;
@Value("${emos.tcode}")
private String tcode;
@Value("${workflow.url}")
private String workflow;
@Async("AsyncTaskExecutor")
public void turnTask(int userId, int assigneeId) {
HashMap param = new HashMap() {{
put("code", code);
put("tcode",tcode);
put("userId", userId);
put("assigneeId", assigneeId);
}};
String url = workflow + "/workflow/turnTask";
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("调用工作流失败");
}
}
}
3. 编写业务层代码
在com.example.emos.api.service
包UserService.java
接口中,声明抽象方法。
public interface UserService {
……
public int dimiss(int userId, int assigneeId);
}
在com.example.emos.api.service.impl
包UserServiceImpl.java
类中,实现抽象方法。
@Service
public class UserServiceImpl implements UserService {
……
@Override
public int dimiss(int userId, int assigneeId) {
//修改员工状态
HashMap param = new HashMap() {{
put("userId", userId);
put("status", 2);
}};
int rows = userDao.update(param);
if (rows != 1) {
throw new EmosException("设置员工离职状态失败");
}
//设置接管工作的代理人
userWorkflowTask.turnTask(userId, assigneeId);
return rows;
}
}
4. 编写Web层代码
在com.example.emos.api.controller.form
包创建DimissForm.java
类。
@Data
@Schema(description = "设置员工离职表单")
public class DimissForm {
@NotNull(message = "userId不能为空")
@Min(value = 1, message = "userId不能小于1")
private Integer userId;
@NotNull(message = "assigneeId不能为空")
@Min(value = 1, message = "assigneeId不能小于1")
private Integer assigneeId;
}
在com.example.emos.api.controller
包UserController.java
类中,声明Web方法。
@RestController
@RequestMapping("/user")
@Tag(name = "UserController", description = "用户Web接口")
public class UserController {
……
@PostMapping("/dimiss")
@Operation(summary = "员工辞职")
@SaCheckPermission(value = {"ROOT", "USER:UPDATE"}, mode = SaMode.OR)
public R dimiss(@Valid @RequestBody DimissForm dimissForm) {
if (dimissForm.getUserId().intValue() == dimissForm.getAssigneeId().intValue()) {
throw new EmosException("userId和assigneeId不能相等");
}
int rows = userService.dimiss(dimissForm.getUserId(), dimissForm.getAssigneeId());
return R.ok().put("rows", rows);
}
}
二、编写emos-vue
项目
在dimiss.vue
页面中确定按钮的标签声明如下:
<template #footer>
<span class="dialog-footer">
<el-button size="medium" @click="visible = false">取消</el-button>
<el-button type="primary" size="medium" @click="dataFormSubmit">确定</el-button>
</span>
</template>
确定按钮点击事件的回调函数我们来实现一下,提交Ajax请求给后端Web方法。
dataFormSubmit: function() {
let that = this;
let data = {
userId: that.dataForm.userId,
assigneeId: that.dataForm.assigneeId
};
this.$refs['dataForm'].validate(valid => {
if (valid) {
// console.log(data);
that.$http('user/dimiss', 'POST', data, true, function(resp) {
if (resp.rows == 1) {
that.visible = false;
that.$message({
message: '操作成功',
type: 'success',
duration: 1200
});
that.$emit('refreshDataList');
} else {
that.$message({
message: '操作失败',
type: 'error',
duration: 1200
});
}
});
}
});
}