package com.itheima11.activiti;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.impl.bpmn.behavior.UserTaskActivityBehavior;
import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
import org.activiti.engine.impl.pvm.process.ActivityImpl;
import org.activiti.engine.impl.task.TaskDefinition;
import org.activiti.engine.repository.ProcessDefinition;
import org.junit.Test;
/**
* @author lixgj
*
*/
public class MyPDTest {
private ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
private RepositoryService repositoryService = processEngine.getRepositoryService();
/**
* 如srm
*/
@Test
public void testProcessDefinitionByProcesskey() {
String key = "srm";
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();
List<ProcessDefinition> pdlist = repositoryService.createProcessDefinitionQuery().processDefinitionKey("srm")
.list();
/**
* 打印pd信息
*/
for (ProcessDefinition pd : pdlist) {
System.out.println("######################### start ########################");
System.out.println("流程定义ID:" + pd.getId());// 流程定义的key+版本+随机生成数
System.out.println("流程定义的名称:" + pd.getName());// 对应helloworld.bpmn文件中的name属性值
System.out.println("流程定义的key:" + pd.getKey());// 对应helloworld.bpmn文件中的id属性值
System.out.println("流程定义的版本:" + pd.getVersion());// 当流程定义的key值相同的相同下,版本升级,默认1
System.out.println("资源名称bpmn文件:" + pd.getResourceName());
System.out.println("资源名称png文件:" + pd.getDiagramResourceName());
System.out.println("部署对象ID:" + pd.getDeploymentId());
System.out.println("######################### end ########################");
}
}
/**
* 更具 srm 获取pd所有信息
*
* @param key
* @return
*/
public List<ProcessDefinition> ProcessDefinitionBykeyUtil(String key) {
return repositoryService.createProcessDefinitionQuery().processDefinitionKey(key).orderByDeploymentId().asc()
.list();
}
/**
* @author lixgj
* @param List
* <ProcessDefinition> pdInfoList
* @return
*/
public List<ProcessDefinitionEntity> getPDEntityListByPDList(List<ProcessDefinition> pdInfoList) {
ProcessDefinitionEntity PDEntity = null;
List<ProcessDefinitionEntity> PDEntityList = new ArrayList<ProcessDefinitionEntity>(0);
for (ProcessDefinition pd : pdInfoList) {
PDEntity = (ProcessDefinitionEntity) repositoryService.getProcessDefinition(pd.getId());
if (PDEntity != null) {
PDEntityList.add(PDEntity);
}
}
return PDEntityList;
}
/**
*
* @param pdInfoList
* @return
*/
public ProcessDefinitionEntity getPDEntityByPDId(String pdid) {
return (ProcessDefinitionEntity) repositoryService.getProcessDefinition(pdid);
}
/**
* 根据流程定义实体获取 流程活动
* @param pdEntity
* @return
*/
public List<ActivityImpl> getActivityImplListByPDEntity(ProcessDefinitionEntity pdEntity) {
return pdEntity.getActivities();
}
/**
* 根据流程活动
* 获取用户任务活动行为
* @param activityImplList
* @return
*/
public Map<String, String> getUserTaskActivityBehaviorFromActivityImplList(List<ActivityImpl> activityImplList) {
Map<String, String> taskIDAndName = new HashMap<String, String>(0);
for (ActivityImpl tempActivity : activityImplList) {
Object type = tempActivity.getProperty("type");
if ("userTask".equals(type)) {
UserTaskActivityBehavior userTaskActivityBehavior = (UserTaskActivityBehavior) tempActivity
.getActivityBehavior();
TaskDefinition taskDefinition = userTaskActivityBehavior.getTaskDefinition();
taskIDAndName.put(taskDefinition.getKey(), taskDefinition.getNameExpression().getExpressionText());
} else if ("subProcess".equals(type)) {
List<ActivityImpl> activityImpls = tempActivity.getActivities();
taskIDAndName.putAll(getUserTaskActivityBehaviorFromActivityImplList(activityImpls));
}
}
return taskIDAndName;
}
public static void main(String[] args) {
MyPDTest myPDTest = new MyPDTest();
List<ProcessDefinition> pdlist = myPDTest.ProcessDefinitionBykeyUtil("srm");
System.out.println("第一部分");
for (ProcessDefinition pd : pdlist) {
System.out.println("######################### start ########################");
System.out.println("流程定义ID:" + pd.getId());// 流程定义的key+版本+随机生成数
System.out.println("流程定义的名称:" + pd.getName());// 对应helloworld.bpmn文件中的name属性值
System.out.println("流程定义的key:" + pd.getKey());// 对应helloworld.bpmn文件中的id属性值
System.out.println("流程定义的版本:" + pd.getVersion());// 当流程定义的key值相同的相同下,版本升级,默认1
System.out.println("资源名称bpmn文件:" + pd.getResourceName());
System.out.println("资源名称png文件:" + pd.getDiagramResourceName());
System.out.println("部署对象ID:" + pd.getDeploymentId());
System.out.println("######################### end ########################");
}
System.out.println("第二部分");
System.out.println("------------------------------------------------------------------------");
List<ProcessDefinitionEntity> PDEntityList = myPDTest.getPDEntityListByPDList(pdlist);
for (ProcessDefinitionEntity PDEntity : PDEntityList) {
System.out.println(PDEntity.getId());
System.out.println(PDEntity.getDeploymentId());
System.out.println(PDEntity.getKey());
System.out.println(PDEntity.getName());
System.out.println();
}
System.out.println("---------------第三部分-----------------------------");
for (ProcessDefinitionEntity PDEntity : PDEntityList) {
List<ActivityImpl> activityImpls = myPDTest.getActivityImplListByPDEntity(PDEntity);
for (ActivityImpl tempActivity : activityImpls) {
Object type = tempActivity.getProperty("type");
if ("userTask".equals(type)) {
System.out.println("=2.start userTask=");
UserTaskActivityBehavior userTaskActivityBehavior = (UserTaskActivityBehavior) tempActivity
.getActivityBehavior();
TaskDefinition taskDefinition = userTaskActivityBehavior.getTaskDefinition();
System.out.print(taskDefinition.getKey() + "\t");
System.out.println(taskDefinition.getNameExpression().getExpressionText());
System.out.println("=2.end userTask=");
}else if ("subProcess".equals(type)) {
List<ActivityImpl> childTempActivity = tempActivity.getActivities();
}
}
System.out.println();
}
}
}