上节课我们写好了异步线程类里面的方法,专门用来关闭审批请假的工作流实例,那么这节课我们把后端其他的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);
}
}