SpringBoot + Activity6.0 -簡化的項目

近日做了工單,然後將以前那套東西拿出來自己又做了改動

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&amp;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

	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章