一个学生请假老师审批的流程用activiti写,要求有请假理由,根据请假理由理由进行审批,可以查看审批记录,代码演示
时间: 2024-09-19 12:03:10 浏览: 27
在Activiti工作流引擎中,我们可以创建一个流程模型来模拟学生请假并由老师审批的过程。以下是使用Activiti的简单步骤和伪代码示例:
1. **定义流程**:
首先,我们需要定义一个流程图。这个流程通常包括以下几个状态:开始、提交申请、填写请假理由、审核中、审批通过、审批拒绝以及结束。
2. **用户任务**:
- 学生提交请假申请 -> 创建一个“提交请假”用户任务,输入字段包含学生的姓名、学号和请假理由。
- 老师审批 -> 创建一个“老师审批”用户任务,关联上上一步的任务完成事件,老师会看到请假理由进行决策。
3. **条件判断**:
使用业务规则引擎如Decisions或ScriptTask,在审批节点处,根据学生提供的请假理由设置相应的审批策略,比如健康原因、特殊情况等有不同的审批规则。
4. **历史记录存储**:
Activiti提供历史服务(HistoricActivityInstanceService),每次任务流转都会保存到历史表中,供查看审批记录。
5. **代码演示**:
```java
// 模拟流程定义
ProcessDefinition processDef = historyService.createProcessDefinitionByKey("studentLeaveApproval");
// 提交请假请求
HistoricProcessInstance historicProcessInstance = runtimeService.startProcessInstanceById(processDef.getId());
Map<String, Object> variables = new HashMap<>();
variables.put("reason", "病假");
taskService.createTaskQuery().processInstanceId(historicProcessInstance.getId()).singleResult().submit(variables);
// 审批任务处理
Task teacherTask = taskService.createTaskQuery().processInstanceId(historicProcessInstance.getId()).taskName("teacherApproval").singleResult();
if (teacherTask.getVariableValueMap().get("reason").equals("病假")) {
taskService.complete(teacherTask.getId(), new Variables());
} else {
taskService.setVariablesLocal(teacherTask.getId(), new Variables("decision", "拒绝"));
}
// 查看审批记录
List<HistoricActivityInstance> history = historyService.createHistoricActivityInstanceQuery().processInstanceId(historicProcessInstance.getId()).list();
```