package test.service;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.zip.ZipInputStream;
import org.activiti.engine.HistoryService;
import org.activiti.engine.IdentityService;
import org.activiti.engine.ManagementService;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.identity.Group;
import org.activiti.engine.identity.User;
import org.activiti.engine.impl.RepositoryServiceImpl;
import org.activiti.engine.impl.persistence.entity.ExecutionEntity;
import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
import org.activiti.engine.impl.pvm.process.ActivityImpl;
import org.activiti.engine.impl.pvm.process.ProcessDefinitionImpl;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
public class WorkFlowService {
//ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
private RepositoryService repositoryService;
private RuntimeService runtimeService;
private TaskService taskService;
private HistoryService historyService;
private ManagementService managementService;
private IdentityService identityService;
public void setRepositoryService(RepositoryService repositoryService) {
this.repositoryService = repositoryService;
}
public void setRuntimeService(RuntimeService runtimeService) {
this.runtimeService = runtimeService;
}
public void setTaskService(TaskService taskService) {
this.taskService = taskService;
}
public void setHistoryService(HistoryService historyService) {
this.historyService = historyService;
}
public void setManagementService(ManagementService managementService) {
this.managementService = managementService;
}
public void setIdentityService(IdentityService identityService) {
this.identityService = identityService;
}
/**
* 部署流程定义
*/
public void deploymentProcessDefinition_inputStream(){
InputStream inputStreamBpmn = this.getClass().getResourceAsStream("helloworld.bpmn");
InputStream inputStreamPng = this.getClass().getResourceAsStream("helloworld.png");
Deployment deployment =repositoryService
.createDeployment()
.name("请假流程")
.addInputStream("helloworld.bpmn", inputStreamBpmn)
.addInputStream("helloworld.png", inputStreamPng)
.deploy();
System.out.println("部署ID:"+deployment.getId());
System.out.println("部署名称"+deployment.getName());
}
/**启动流程*/
public ProcessInstance startProcessInstance(String processDefinitionKey ){
ProcessInstance pi = runtimeService
.startProcessInstanceByKey(processDefinitionKey);
System.out.println("流程实例ID"+pi.getId());//流程实例ID
System.out.println("流程定义ID:"+pi.getProcessDefinitionId());//流程定义ID
return pi;
}
/**
* 根据流程实例ID获取历史表的流程定义实体
* 当流程走完时,要查询流程定义图只能通过在历史表找到历史流程实例对象
* @param instanceId
* @return
*/
public HistoricProcessInstance getHistoricActivityInstanceByInstanceId(String instanceId){
return historyService.createHistoricProcessInstanceQuery().processInstanceId(instanceId).list().get(0);
}
/**查询个人任务*/
public List<Task> findMyPersonalTask(String assignee ){
List<Task> list = taskService
.createTaskQuery()//创建查询
.taskAssignee(assignee)//根据一个人来查询
//.taskCandidateGroup(assignee)根据组来查询
// .taskCandidateUser(candidateUser)//根据多个人来查询
// .processDefinitionId(processDefinitionId)
// .processInstanceId(processInstanceId)
// .executionId(executionId)
.orderByTaskCreateTime().asc()//根据任务时间升序排序
// .singleResult()//
// .count()//
// .listPage(firstResult, maxResults);//分页查询
.list();//
// if(list!=null && list.size()>0){
// for(Task task:list){
// System.out.println("任务ID:"+task.getId());
// System.out.println("任务名称:"+task.getName());
// System.out.println("任务创建时间:"+task.getCreateTime());
// System.out.println("任务当前执行人:"+task.getAssignee());
// System.out.println("任务所属的流程实例ID:"+task.getProcessInstanceId());
// System.out.println("任务当前执行人ID:"+task.getExecutionId());
// System.out.println("任务所属的流程定义ID:"+task.getProcessDefinitionId());
// System.out.println("########################################################");
// }
// }
return list;
}
/**
* 根据任务ID获取任务实体
* @param taskId
* @return
*/
public Task getTaskById(String taskId){
Task t= taskService
.createTaskQuery().taskId(taskId).singleResult();
return t;
}
/**
* 根据流程实例ID获取任务实体
* @param taskId
* @return
*/
public Task getTaskByProcessInstanceId(String processInstanceId){
Task t= taskService
.createTaskQuery().processInstanceId(processInstanceId).singleResult();
return t;
}
/**
* 获取流程定义图
* @param task
* @return
*/
public InputStream getProcessImgByProcessDefinitionId(String processDefinitionId){
ProcessDefinition procDef = repositoryService.createProcessDefinitionQuery().processDefinitionId(processDefinitionId).singleResult();
String diagramResourceName = procDef.getDiagramResourceName();
InputStream imageStream = repositoryService.getResourceAsStream(
procDef.getDeploymentId(), diagramResourceName);
return imageStream;
}
/**
* 获取当前活动节点
* @param task
* @return
*/
public ActivityImpl getActivityImpl(Task task){
ProcessDefinition processDefinition =repositoryService .createProcessDefinitionQuery().processDefinitionId(task.getProcessDefinitionId()).singleResult();
ProcessDefinitionImpl pdImpl = (ProcessDefinitionImpl) processDefinition;
String processDefinitionId = pdImpl.getId();// 流程定义ID
RepositoryServiceImpl repositoryServiceImpl = (RepositoryServiceImpl) repositoryService ;
ProcessDefinitionEntity def = (ProcessDefinitionEntity) repositoryServiceImpl.getDeployedProcessDefinition(processDefinitionId);
List<ActivityImpl> activitiList = def.getActivities();//获取当前活动节点
ActivityImpl actImpl = null;
ExecutionEntity execution =null ;
if(task.getExecutionId()!=null){
execution = (ExecutionEntity) runtimeService .createExecutionQuery().executionId(task.getExecutionId()).singleResult();//获取唯一记录
}
// endevent1
if(execution==null){
for (ActivityImpl activityImpl : activitiList) {
if(activityImpl.getId().equals("endevent1")){
actImpl = activityImpl;
break;
}
}
}else{
String activitiId = execution.getActivityId();//获取活动节点的ID
for (ActivityImpl activityImpl : activitiList) {
String id = activityImpl.getId();
if (id.equals(activitiId)) {//循环遍历流程定义图,如果活动节点的id==遍历节点的id,此节点就是活动节点,获取的相关的坐标等信息。
actImpl = activityImpl;
break;
}
}
}
return actImpl;
}
/**
* 获取结束节点
* @param task
*
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
这个是Activiti开发的请假流程实例,可以作为用Activiti开发工作流的参考;项目采用spring+hibernate+strus2+activity开发,可以运行;数据库采用oracle,其中 QingJia 和 QingJiaHis 是自己的业务表,分别表示 请假实体表和请假审批历史记录表,需要自己建。此项目还包含了拦截器的技术(未登录用户不给访问系统),实测可以启动流程,审批流程及查看流程图,还有历史审批查看等功能。
资源推荐
资源详情
资源评论















收起资源包目录





































































































共 210 条
- 1
- 2
- 3

sr1022
- 粉丝: 3
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 【Android应用源码】圆环菜单,只有你0想不到的,没有做不到的.zip
- 【Android应用源码】圆环菜单,只有你想不到的,没有做不到的.zip
- 【Android应用源码】原来PATH的菜单效果如此简单。布局+TranslateAnimation搞定.zip
- 【Android应用源码】圆形自定义进度条.zip
- 【Android应用源码】远程登录含有loading登录效.zip
- 【Android应用源码】源码下载工具.zip
- 【Android应用源码】远程登录含有loading登录效果~~完整代码和超级详细注释.zip
- 【Android应用源码】阅读器.zip
- 【Android应用源码】在物理世界中添加矩形).zip
- 【Android应用源码】在wifi下手机与电脑的socket通信.zip
- 【Android应用源码】在线词典源码.zip
- 【Android应用源码】在远程上传以及下载图片---XFire框架.zip
- COMSOL等离子体仿真技术在MPCVD装置与H2放电低气压环境中的应用研究
- 【Android应用源码】支持农历的精美日历项目源码.zip
- 【Android应用源码】支付宝控件接口示例.zip
- 【Android应用源码】支付宝_安卓苹果_快捷支付_文档_代码例子.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制

- 1
- 2
前往页