全部开发者教程

企业级在线办公系统

上节课我们写好了异步线程类里面的方法,专门用来关闭审批请假的工作流实例,那么这节课我们把后端其他的Java代码完成,既要删除请假记录,又要关闭工作流实例。

图片描述

一、编写持久层代码

TbLeaveDao.xml文件中,声明SQL语句。

<select id="searchInstanceIdById" parameterType="int" resultType="String">
    SELECT instance_id FROM tb_leave WHERE id = #{id}
</select>

<delete id="deleteLeaveById" parameterType="HashMap">
    DELETE FROM tb_leave
    WHERE id = #{id}
    AND user_id = #{userId}
    AND status IN(1,2)
</delete>

TbLeaveDao.java接口中,定义DAO方法。

public interface TbLeaveDao {
    ……
    public String searchInstanceIdById(int id);
    public int deleteLeaveById(HashMap param);
}

二、编写业务层代码

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

public interface LeaveService {
    ……
    public int deleteLeaveById(HashMap param);
}

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

public class LeaveServiceImpl implements LeaveService {
    ……
    @Override
    public int deleteLeaveById(HashMap param) {
        int id= MapUtil.getInt(param,"id");
        String instanceId = leaveDao.searchInstanceIdById(id);
        int rows = leaveDao.deleteLeaveById(param);
        if (rows == 1) {
            //删除工作流记录
            leaveWorkflowTask.deleteLeaveWorkflow(instanceId, "员工请假", "删除请假申请");
        } else {
            throw new EmosException("删除请假申请失败");
        }
        return rows;
    }
}

三、编写Web层代码

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

@Data
@Schema(description = "删除请假申请表单")
public class DeleteLeaveByIdForm {
    @NotNull(message = "id不能为空")
    @Min(value = 1, message = "id不能小于1")
    @Schema(description = "请假记录ID")
    private Integer id;
}

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

public class LeaveController {
    ……
    @PostMapping("/deleteLeaveById")
    @Operation(summary = "删除请假记录")
    @SaCheckLogin
    public R deleteLeaveById(@Valid @RequestBody DeleteLeaveByIdForm form) {
        HashMap param = new HashMap() {{
            put("id", form.getId());
            put("userId", StpUtil.getLoginIdAsInt());
        }};
        int rows = leaveService.deleteLeaveById(param);
        return R.ok().put("rows", rows);
    }
}