全部开发者教程

企业级在线办公系统

当管理员设置了离职人员工作流程交接人员,点击弹窗页面确定按钮之后,需要发送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.serviceUserService.java接口中,声明抽象方法。

public interface UserService {
    ……
    public int dimiss(int userId, int assigneeId);
}

com.example.emos.api.service.implUserServiceImpl.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.controllerUserController.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
                    });
                }
            });
        }
    });
}