flowable的请假工作流代码
时间: 2023-11-03 21:56:36 浏览: 171
以下是一个基于Flowable的请假工作流代码示例:
```java
@Service
public class LeaveProcessServiceImpl implements LeaveProcessService {
private final static Logger logger = LoggerFactory.getLogger(LeaveProcessServiceImpl.class);
@Autowired
private RuntimeService runtimeService;
@Autowired
private TaskService taskService;
@Autowired
private HistoryService historyService;
/**
* 发起请假申请
* @param leaveLeaveRequestDTO 请假信息
* @param assignee 处理人
* @return
*/
@Override
public String startLeaveProcess(LeaveRequestDTO leaveLeaveRequestDTO, String assignee) {
logger.info("开始发起请假申请");
// 通过指定流程定义的key启动流程实例
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("leaveProcess");
// 获取当前流程实例的任务
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
// 设置任务的处理人
taskService.setAssignee(task.getId(), assignee);
// 将请假申请信息与任务关联
taskService.setVariable(task.getId(), "leaveLeaveRequestDTO", leaveLeaveRequestDTO);
logger.info("请假申请发起成功,流程实例ID为:{}", processInstance.getId());
return processInstance.getId();
}
/**
* 处理请假申请
* @param taskId 任务ID
* @param approved 是否同意
* @return
*/
@Override
public String handleLeaveProcess(String taskId, boolean approved) {
logger.info("开始处理请假申请,任务ID为:{}", taskId);
// 获取当前任务
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
// 获取与任务关联的请假申请信息
LeaveRequestDTO leaveRequestDTO = (LeaveRequestDTO) taskService.getVariable(taskId, "leaveLeaveRequestDTO");
// 如果同意请假申请,更新请假信息并完成任务;否则直接完成任务
if (approved) {
leaveRequestDTO.setStatus(LeaveStatus.APPROVED);
logger.info("请假申请已通过");
} else {
leaveRequestDTO.setStatus(LeaveStatus.REJECTED);
logger.info("请假申请已驳回");
}
// 更新请假申请信息
taskService.setVariable(task.getId(), "leaveLeaveRequestDTO", leaveRequestDTO);
// 完成任务
taskService.complete(taskId);
logger.info("请假申请处理完成,任务ID为:{}", taskId);
return taskId;
}
/**
* 获取请假申请历史记录
* @param processInstanceId 流程实例ID
* @return
*/
@Override
public List<LeaveRequestDTO> getLeaveRequestHistory(String processInstanceId) {
logger.info("开始获取请假申请历史记录,流程实例ID为:{}", processInstanceId);
// 查询流程实例的历史记录
List<HistoricTaskInstance> historicTaskInstances = historyService.createHistoricTaskInstanceQuery()
.processInstanceId(processInstanceId).finished().list();
List<LeaveRequestDTO> leaveRequestDTOList = new ArrayList<>();
for (HistoricTaskInstance historicTaskInstance : historicTaskInstances) {
// 获取任务关联的请假申请信息
LeaveRequestDTO leaveRequestDTO = (LeaveRequestDTO) historyService.getVariable(historicTaskInstance.getId(), "leaveLeaveRequestDTO");
leaveRequestDTO.setApproved(historicTaskInstance.getEndTime() != null);
leaveRequestDTOList.add(leaveRequestDTO);
}
logger.info("请假申请历史记录获取成功,流程实例ID为:{}", processInstanceId);
return leaveRequestDTOList;
}
}
```
该代码示例中,通过`runtimeService.startProcessInstanceByKey`方法启动了一个key为`leaveProcess`的流程实例。在流程实例启动后,通过`taskService.createTaskQuery().processInstanceId`查询出该流程实例的任务,并设置任务处理人和任务关联的请假申请信息。在处理任务时,需要先查询任务关联的请假申请信息,然后根据是否同意请假申请更新请假信息。最后,通过`taskService.complete`方法完成任务。在获取请假申请历史记录时,通过`historyService.createHistoricTaskInstanceQuery()`查询出与该流程实例关联的历史任务,并根据任务ID获取任务关联的请假申请信息。
阅读全文