近日做了工单,然后将以前那套东西拿出来自己又做了改动
pom
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.activity</groupId>
<artifactId>activity</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>activity Maven Webapp</name>
<url>http://maven.apache.org</url>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.8.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- activiti -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-basic</artifactId>
<version>6.0.0</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>20.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.7</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>activity</finalName>
</build>
</project>
Main Method
application
package activity;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
@SpringBootApplication
@ServletComponentScan
public class ExternalFundlication {
public static void main(String[] args) {
SpringApplication.run(ExternalFundlication.class, args);
}
}
deployService
package activity.service;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
import org.activiti.engine.HistoryService;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.history.HistoricDetail;
import org.activiti.engine.history.HistoricIdentityLink;
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.history.ProcessInstanceHistoryLogQuery;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.activiti.engine.task.TaskQuery;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import activity.config.ApplicationContextService;
import activity.entity.Param;
@Component
public class DeplyProcessinst implements InitializingBean{
@Autowired
private RepositoryService repositoryService;
@Autowired
private RuntimeService runtimeService;
@Autowired
private TaskService taskService;
@Autowired
private HistoryService historyService;
@Autowired
private LocalServiceImp localService;
/**
* ljp 启动流程图
*
* @param BusinessKey
* 唯一标识符
* @param ProcessKey
* 流程图id
*/
public ProcessInstance createProcess(String ProcessKey, String BusinessKey) {
return runtimeService.startProcessInstanceByKey(ProcessKey, BusinessKey);
}
/**
* 通过processInstanceId找到流程任务
* @param creator
* @return
*/
public List<Task> queryByProcessInstanceId(String processInstanceId) {
List<Task> list = taskService.createTaskQuery().processInstanceId(processInstanceId).list();
return list;
}
/**
* 通过taskId找到流程实例 并行需要用到
* @param creator
* @return
*/
public List<Task> queryByTaskId(String taskId) {
List<Task> list = taskService.createTaskQuery().taskId(taskId).list();
return list;
}
/**
* 通过deploymentId找到流程实例 并行需要用到
* @param creator
* @return
*/
public List<Task> queryBydeploymentId(String deploymentId) {
taskService.createTaskQuery().deploymentId(deploymentId).list();
List<Task> list = taskService.createTaskQuery().deploymentId(deploymentId).list();
return list;
}
/**
* 通过processInstanceId找到流程实例 并行需要用到
* @param creator
* @return
*/
public List<HistoricTaskInstance> gethistory(String processInstanceId) {
return historyService.createHistoricTaskInstanceQuery().processInstanceId(processInstanceId).list();
}
public InputStream getProcessDiagram(String processInstanceId) {
return repositoryService.getProcessDiagram(processInstanceId);
}
public InputStream getResourceAsStream(String deployId,String name) {
return repositoryService.getResourceAsStream(deployId,name);
}
/**
* 通过 taskId 进行工作流流转
*
* @param
* @param map
*/
public void Working(String taskId) {
Working(taskId, null);
}
public void Working(String taskId, Map<String, Object> map) {
taskService.complete(taskId.toString(), map);
}
public LocalServiceImp getLocalService() {
if (this.localService == null) {
this.localService = (LocalServiceImp) ApplicationContextService.getBean("localService");
}
return localService;
}
public void setLocalService(LocalServiceImp localService) {
this.localService = localService;
}
public void afterPropertiesSet() throws Exception {
String process = "select * from sy_parameter where flag = 'true'";
List<Map<String, Object>> queryForList = getLocalService().queryForList(process);
for (Map<String, Object> map : queryForList) {
String jsonString = JSONObject.toJSONString(map);
Param parseObject = JSONObject.parseObject(jsonString, Param.class);
repositoryService.createDeployment().name(parseObject.getProcessDefinitionKey())// 添加部署的名称
.addClasspathResource("diagrams/" + parseObject.getResource() + ".bpmn")
.addClasspathResource("diagrams/" + parseObject.getResource() + ".png").deploy();
String update = "update sy_parameter set flag = 'false'";
getLocalService().updatesql(update);
}
}
}
ApplicationContextService
package activity.config;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class ApplicationContextService implements ApplicationContextAware{
public static ApplicationContext applicationContext;
public void setApplicationContext(ApplicationContext apCtx)
throws BeansException {
applicationContext = apCtx;
}
public static <T> T getBean(String name) throws BeansException {
return (T) applicationContext.getBean(name);
}
public static <T> T getBean(Class<T> clz) throws BeansException {
T result = (T) applicationContext.getBean(clz);
return result;
}
}
application.properties
server.port=17821
server.context-path=/bps
spring.datasource.url=jdbc:mysql://localhost:3306/activity
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#drop-create false true create-drop
spring.activiti.database-schema-update=false
#我的流程图不再prosess下,所以启动的时候避免check
spring.activiti.check-process-definitions=false
pring.activiti.history-level=full
项目结构
测试用的TestController
package activity.controller;
import java.io.InputStream;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.activiti.engine.history.HistoricDetail;
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import activity.service.DeplyProcessinst;
@Controller
public class TestController {
@Autowired
private DeplyProcessinst deplyProcessinst;
@RequestMapping("/createProcessinst/{channel}")
@ResponseBody
public Object createProcessinst(@RequestParam("businessKey") String businessKey,@PathVariable String channel) {
Map map = new HashMap();
ProcessInstance createProcess = deplyProcessinst.createProcess(channel, businessKey);
String processinitionId = createProcess.getId();
map.put("processinitionId",processinitionId);
return map;
}
@RequestMapping("/queryByProcessInstanceId")
@ResponseBody
public Object queryByProcessInstanceId(@RequestParam("processinitionId") String processinitionId) {
List<Map> lists = new LinkedList<Map>();
List<Task> list = deplyProcessinst.queryByProcessInstanceId( processinitionId);
for (Task task : list) {
Map map = new LinkedHashMap();
map.put("任务ID:",task.getId());
map.put("任务名称:",task.getName());
map.put("任务的创建时间:",task.getCreateTime());
map.put("任务的办理人:",task.getAssignee());
map.put("流程实例ID:",task.getProcessInstanceId());
map.put("执行对象ID:",task.getExecutionId());
map.put("流程定义ID:",task.getProcessDefinitionId());
lists.add(map);
}
return lists;
}
@RequestMapping("/gethistory")
@ResponseBody
public Object gethistory(@RequestParam("processinitionId") String processinitionId) {
List<Map> lists = new LinkedList<Map>();
List<HistoricTaskInstance> list = deplyProcessinst.gethistory( processinitionId);
for (HistoricTaskInstance task : list) {
Map map = new LinkedHashMap();
map.put("任务ID:",task.getId());
map.put("任务名称:",task.getName());
map.put("任务的办理人:",task.getAssignee());
map.put("任务决策id:",task.getExecutionId());
map.put("流程实例ID:",task.getProcessInstanceId());
lists.add(map);
}
return lists;
}
@RequestMapping("/getProcessDiagram")
public Object getProcessDiagram(@RequestParam("processDefinitionId") String processDefinitionId,Map map) {
InputStream processDiagram = deplyProcessinst.getProcessDiagram( processDefinitionId);
map.put("del",processDiagram);
return "test";
}
@RequestMapping("/getResourceAsStream")
@ResponseBody
public Object getResourceAsStream(@RequestParam("deployId") String deployId,@RequestParam("name") String name) {
List<Map> lists = new LinkedList<Map>();
return deplyProcessinst.getResourceAsStream( deployId,name);
}
@RequestMapping("/hello")
@ResponseBody
public Object hello() {
return "hellow";
}
}
至此项目结束。
附MVC版的东西
activiti.cfg.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<!--
/**
public static final String DB_SCHEMA_UPDATE_FALSE = "false";不能自动创建表,需要表存在
public static final String DB_SCHEMA_UPDATE_CREATE_DROP = "create-drop";先删除表再创建表
public static final String DB_SCHEMA_UPDATE_TRUE = "true";如果表不存在,自动创建表
*/
-->
<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<!-- 连接数据的配置 -->
<property name="jdbcDriver" value="com.mysql.jdbc.Driver"></property>
<!-- <property name="jdbcUrl" value="jdbc:oracle:thin:@20.4.2.3:1521:casdb"></property> -->
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activity?useUnicode=true&characterEncoding=utf8"></property>
<property name="jdbcUsername" value="root"></property>
<property name="jdbcPassword" value="root"></property>
<!-- 没有表创建表 -->
<property name="databaseSchemaUpdate" value="false"></property>
</bean>
</beans>
TestJunit
package com.bps.test;
import java.io.InputStream;
import java.lang.reflect.Method;
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.history.HistoricDetail;
import org.activiti.engine.history.HistoricIdentityLink;
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.history.HistoricTaskInstanceQuery;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.activiti.engine.task.TaskQuery;
import org.junit.Test;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
public class CreateProcess {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
@Test
public void init (){
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
}
@Test
public void deploymentProcessDefinition (){
Deployment deploy = processEngine.getRepositoryService()
.createDeployment()
.name("test1")//添加部署的名称
.addClasspathResource("diagrams/TranceV3.bpmn")
.addClasspathResource("diagrams/TranceV3.png")
.deploy();
System.out.println("部署ID:"+deploy.getId());//1
System.out.println("部署名称:"+deploy.getName());//helloworld入门程序
}
@Test
public void startProcessinst(){
ProcessInstance ProcessInstance = processEngine.getRuntimeService().startProcessInstanceByKey("ProcessV2_1","2");
System.out.println("流程实例ID:"+ProcessInstance.getId());//流程实例ID 301
System.out.println("流程定义ID:"+ProcessInstance.getProcessDefinitionId());//流程定义ID helloworld:1:4
}
@Test
public void queryByProcessInstanceId(){
List<Task> list = processEngine.getTaskService().createTaskQuery().processVariableValueEquals("renhang", "xiaoming").list();
//List<Task> list = processEngine.getTaskService().createTaskQuery().processInstanceId("42501").list();
// List<Task> list = processEngine.getTaskService().createTaskQuery().deploymentId("42501").list();
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("########################################################");
}
}
//获取所有的task
@Test
public void findMyPersonalTask() {
List<Task> list = processEngine.getTaskService().createTaskQuery().list();
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("########################################################");
}
}
//通过关键字获取对应 的task
@Test
public void queryByBusinessKey() {
List<Task> list = processEngine.getTaskService().createTaskQuery().processInstanceBusinessKey("2").list();
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("########################################################");
}
}
@Test
public void getByDeployId() {
InputStream processDissagram = processEngine.getRepositoryService().getProcessDiagram("ProcessV2_1:4:40004");
System.out.println(processDissagram);
InputStream processDiagram = processEngine.getRepositoryService().getResourceAsStream("40001", "diagrams/TranceV3.png");
System.out.println(processDiagram);
}
@Test
public void getBytaskId() {
List<Task> list = processEngine.getTaskService().createTaskQuery().taskId("5005").list();
for (Task task : list) {
task.setOwner("zhangsan"); }
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("########################################################");
}
}
//设置环节参数 并 流转
@Test
public void completeMyPersonalTask(){
Map<String,Object> m =new HashMap<String,Object>();
// m.put("shishi", "0");
m.put("renhang", "xiaoming");
m.put("spzt", "1");
processEngine.getTaskService().complete("17505",m);
}
@Test
public void completeMyPersonal(){
Map<String,Object> m =new HashMap<String,Object>();
m.put("spzt", 3);
// m.put("shishi", 1);
processEngine.getTaskService().complete("32505",m); //5005 2505
}
@Test
public void complete(){
Map<String,Object> m =new HashMap<String,Object>();
m.put("spzt", 3);
processEngine.getTaskService().complete("5208",m);
processEngine.getTaskService().complete("5210",m);
processEngine.getTaskService().complete("5212",m);
}
//删除 task 3810 3808
@Test
public void deleteTask(){
processEngine.getTaskService().deleteTask("12503", true);//7505 5005
}
}