flowable请假流程
时间: 2023-09-16 19:15:22 浏览: 66
请假流程可以使用Flowable进行建模和管理。以下是一个示例的请假流程:
1. 申请请假:员工填写请假申请表,包括请假类型、起始日期、结束日期、请假事由等信息,并提交申请。
2. 部门经理审批:流程开始后,流程引擎会将请假申请发送给部门经理进行审批。部门经理可以选择同意、驳回或者转交给其他人员处理。
3. 人力资源审批:如果部门经理同意请假申请,流程引擎会将请假申请发送给人力资源部门进行最终审批。人力资源部门可以选择同意、驳回或者修改请假信息。
4. 通知申请人:流程引擎会将最终审批结果通知给请假申请人,包括审批通过还是驳回,并提供相关说明。
5. 请假记录:流程引擎会将请假申请的相关信息记录在系统中,包括申请人、请假时间、审批意见等。
以上仅是一个简单的示例流程,实际的请假流程可能会根据具体的组织需求进行定制和调整。Flowable提供了一个强大的流程引擎,可以帮助组织实现灵活的请假流程管理。
相关问题
flowable 请假审批流程
Flowable请假审批流程是一个通过Flowable工作流引擎实现的请假流程。根据提供的引用内容,该程包括以下步骤:
1. 请假流程的申请:用户填写请假表单并提交申请。
2. 决策任务判断:根据请假天数,决策任务会自动将流程转给适当的审批人。在这个案例中,如果请假天数小于10天,则转给项目经理。
3. 项目经理审批:流程被转交给项目经理审批。项目经理可以查看请假申请的详细信息,并根据需要批准或拒绝请假请求。
4. 其他审批人审批:如果项目经理拒绝了请假请求,流程将结束。否则,流程将转到其他指定的审批人(如果有)进行进一步的审批。
5. 完成审批流程:当所有的审批人都完成了审批任务后,流程将结束并通知申请人审批结果。
请注意,以上仅为一种可能的Flowable请假审批流程示例,实际流程的设计可能会因组织和需求而有所不同。
flowable的请假工作流代码
以下是一个基于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获取任务关联的请假申请信息。