简单的请假流程工作流 java
时间: 2023-09-12 20:00:24 浏览: 86
请假流程工作流是一种用来管理员工请假申请的流程,它能够统一规范请假的流程,提高请假审批效率和准确性。下面是一个简单的请假流程工作流的示例。
首先,在java中可以使用业务流程管理引擎如Activiti或JBPM来实现请假流程工作流。在开始请假流程之前,需要定义好请假的类型,如事假、病假、年假等。同时还需要设定请假的时间范围和具体天数。
当员工需要请假时,他可以通过系统或应用提交一个请假申请。该申请包含了请假类型和请假时间等信息。系统接收到请假申请后,会创建一个请假流程实例。
接下来,申请会进入到审批环节。请假流程中通常会设置多个审批节点,每个节点对应一位领导或者上级。每个节点会依次审批申请,审批的顺序可以是串行的,也可以是并行的。
审批者可以根据具体情况对请假申请进行审核,并提出意见或建议。审批者可以通过系统中的表单输入批准或驳回的意见,并提交给下一位审批者。在每个审批节点上,系统都会记录下每一位审批者的决策和意见。
如果所有的审批者都同意申请,流程会自动进入结束节点,该申请被批准,并通知员工请假成功。如果有一位或多位审批者驳回,请假流程会中止,并通知员工请假未通过。
请假流程工作流还可以加入其他的功能,如超时判断、催促通知等,以便提高请假流程的效率和及时性。
总结起来,简单的请假流程工作流包括请假申请、审批环节和结束节点。通过合理设置请假流程,可以提高请假审批的效率和准确性,让请假流程更加规范和便捷。
相关问题
java工作流执行流程, 代码示例
Java工作流的执行流程需要使用特定的工作流引擎,常见的工作流引擎有Activiti、JBPM、Flowable等。这里以Activiti为例,给出代码示例。
1. 流程定义
流程定义是指对业务流程进行抽象和描述,通常使用BPMN2.0标准进行描述。下面是一个简单的请假流程的BPMN2.0定义:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd"
id="Definition"
targetNamespace="http://www.activiti.org/processdef">
<process id="leaveProcess" name="请假流程">
<startEvent id="start" name="开始"/>
<userTask id="applyLeave" name="填写请假单" activiti:assignee="${applyUser}"/>
<userTask id="approveLeave" name="审批请假单" activiti:assignee="${approveUser}"/>
<endEvent id="end" name="结束"/>
<sequenceFlow id="flow1" sourceRef="start" targetRef="applyLeave"/>
<sequenceFlow id="flow2" sourceRef="applyLeave" targetRef="approveLeave"/>
<sequenceFlow id="flow3" sourceRef="approveLeave" targetRef="end"/>
</process>
</definitions>
```
2. 流程部署
将流程定义部署到Activiti引擎中,可以使用如下代码:
```java
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();
DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();
deploymentBuilder.addClasspathResource("leaveProcess.bpmn20.xml");
deploymentBuilder.deploy();
```
3. 流程实例化
根据流程定义创建流程实例,可以使用如下代码:
```java
RuntimeService runtimeService = processEngine.getRuntimeService();
Map<String, Object> variables = new HashMap<>();
variables.put("applyUser", "user1");
variables.put("approveUser", "user2");
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("leaveProcess", variables);
```
4. 任务分配和处理
根据任务定义,将任务分配给相应的处理人员,处理人员完成任务后,将任务提交给工作流引擎。可以使用如下代码:
```java
TaskService taskService = processEngine.getTaskService();
// 查询某个用户的待办任务
List<Task> tasks = taskService.createTaskQuery().taskAssignee("user1").list();
// 完成任务
for (Task task : tasks) {
Map<String, Object> taskVariables = new HashMap<>();
taskVariables.put("approved", true);
taskService.complete(task.getId(), taskVariables);
}
```
5. 流程监控
通过Activiti引擎提供的监控功能,可以查看流程的执行情况。可以使用如下代码:
```java
HistoryService historyService = processEngine.getHistoryService();
// 查询某个流程实例的历史记录
List<HistoricActivityInstance> activities = historyService.createHistoricActivityInstanceQuery()
.processInstanceId(processInstance.getId()).list();
// 查询某个任务的历史记录
List<HistoricTaskInstance> historicTaskInstances = historyService.createHistoricTaskInstanceQuery()
.processInstanceId(processInstance.getId()).list();
```
以上是Activiti引擎的基本使用方法,Java工作流的执行流程需要根据具体业务需求进行定制。
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获取任务关联的请假申请信息。