近日做了工單,然後將以前那套東西拿出來自己又做了改動
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
}
}