本次再模拟一个请假流程:这里我用tom启动一个请假流程实例,tom请2.5天假。 tom的部门主管有lucy和mary,这两个主管都可以审批,当请假天数大于3天,要总经理审批,人事记录是lili ,总经理是sillyming。
先画流程图:
先填写我们的流程id为:holiday
然后是填写申请表的任务人
接着部门主管审批
再到人事存档
最后总经理审批
最后设置两条分支线的条件
流程图就这样完成。
然后可以写代码了,先建一个实体类Holiday,实现Serializable接口
/* 这里我用tom启动一个请假流程实例,tom请2.5天假。
* tom的部门主管有lucy和mary。
* 人事记录是lili
* 总经理是sillyming
* */
public class ActivitiDeployment2 {
public static void main(String[] args){
//1.创建ProcessEngineConfiguration对象 第一个参数:配置文件名称 第二个参数是配置文件processEngineConfiguration的bean的id
ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml","processEngineConfiguration");
//创建ProcesEngine对象
ProcessEngine processEngine = configuration.buildProcessEngine();
//到这里activiti所需要的25张表自动生成
//流程部署
//processDeployment(processEngine);
//tom启动一个流程实例
//startProcess(processEngine);
//tom任务查询
//List tomTaskList=searchTask(processEngine,"tom");
//tom处理任务
//disposeTask(processEngine,tomTaskList);
//部门主管lucy领取任务
//pickupTask(processEngine,"lucy");
//部门主管lucy突然想去大便,为了不耽误,lucy把任务给了mary
//connectTask(processEngine,"lucy","mary");
//mary和tom有关系,就通过了审批
//completeTask(processEngine,"mary");
}
//流程部署
public static void processDeployment(ProcessEngine processEngine){
//部署流程定义就是要将上边绘制的图形即流程定义(.bpmn)部署在工作流程引擎 activiti 中
//2.得到RepositoryService实例
RepositoryService repositoryService = processEngine.getRepositoryService();
//3.进行部署
Deployment deployment=repositoryService.createDeployment()
.addClasspathResource("diagram/holiday2.bpmn")
.addClasspathResource("diagram/holiday2.png")
.name("请假申请流程")
.deploy();
//执行此操作后 activiti 会将上边代码中指定的 bpm 文件和图片文件保存在 activiti 数据库。
// 受影响的表有:
// act_re_deployment 部署信息
// act_re_procdef 流程定义的一些信息
// act_ge_bytearray 流程定义的bpmn文件及png文件
//4.输出部署的一些信息
System.out.println(deployment.getName());
System.out.println(deployment.getId());
}
//启动一个流程实例
public static void startProcess(ProcessEngine processEngine){
Holiday tomHoliday=new Holiday();
tomHoliday.setTotalDay(2.5F);
tomHoliday.setLeavePerson("tom");
tomHoliday.setDeptManager("lucy,mary");
tomHoliday.setPersonnel("lili");
tomHoliday.setGeneralManager("sillyming");
Map
map.put("holiday",tomHoliday);
RuntimeService runtimeService=processEngine.getRuntimeService();
ProcessInstance processInstance=runtimeService.startProcessInstanceByKey("holiday",map);
System.out.println(processInstance.getProcessInstanceId());
System.out.println(processInstance.getId());
System.out.println("tom开启了一个请假流程实例");
}
//任务查询
public static List
//流程启动后,各各任务的负责人就可以查询自己当前需要处理的任务,查询出来的任务都是该用户的待办任务。
TaskService taskService=processEngine.getTaskService();
List
.processDefinitionKey("holiday")//流程实例key
.taskAssignee(taskPerson)//查询谁的任务
.list();
List
for(Task task:list){
idList.add(task.getId());
System.out.println(task.getId());
System.out.println(task.getName());
System.out.println(task.getProcessInstanceId());
}
return idList;
}
//处理任务
public static void disposeTask(ProcessEngine processEngine,List
//任务负责人查询待办任务,选择任务进行处理,完成任务。
TaskService taskService=processEngine.getTaskService();
for(String id:list){
taskService.complete(id);//任务id
System.out.println("处理任务id:"+id);
}
}
public static void pickupTask(ProcessEngine processEngine,String taskPerson){
TaskService taskService=processEngine.getTaskService();
Task task=taskService.createTaskQuery()
.processDefinitionKey("holiday")//流程实例key
.singleResult();
if(task!=null){
taskService.claim(task.getId(),taskPerson);
System.out.println(taskPerson+"->领取任务:"+task.getId());
}
}
public static void connectTask(ProcessEngine processEngine,String taskPerson1,String taskPerson2){
TaskService taskService=processEngine.getTaskService();
Task task=taskService.createTaskQuery()
.processDefinitionKey("holiday")//流程实例key
.taskAssignee(taskPerson1)
.singleResult();
if(task!=null){
//这里如果 taskPerson2为null,则是把任务归还
taskService.setAssignee(task.getId(),taskPerson2);
System.out.println(taskPerson1+"->把任务:"+task.getId()+"->交给:"+taskPerson2);
}
}
public static void completeTask(ProcessEngine processEngine,String taskPerson){
TaskService taskService=processEngine.getTaskService();
Task task=taskService.createTaskQuery()
.processDefinitionKey("holiday")//流程实例key
.taskAssignee(taskPerson)
.singleResult();
if(task!=null){
taskService.complete(task.getId());
System.out.println(taskPerson+"->完成任务:"+task.getId());
}
}
}