springboot2.1.3+activiti7整合
1.actiBPM 下載
在 IDEA的 File 菜單中找到子菜單”Settings”,后面我們再選擇左側的“plugins”菜單,如下圖所示:
2.Activiti 服務架構圖
3.activiti 的引擎配置文件
activiti 的引擎配置文件:activiti.cfg.xml 放在resource目錄下
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/contex http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<property name="jdbcDriver" value="oracle.jdbc.driver.OracleDriver"></property>
<property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:xe"></property>
<property name="jdbcUsername" value="system"></property>
<property name="jdbcPassword" value="123456"></property>
<!-- 如果表不存在 自動創建 -->
<property name="databaseSchemaUpdate" value="true"></property>
</bean>
</beans>
4.新建bpmn文件
繪制流程圖:resource目錄下新建diagram文件夾,在文件夾中右擊新建bpmn文件
5.bpmn文件轉化為流程圖片
轉化流程圖(此步驟可跳過):選擇已完成的bpmn文件,rename后綴bpmn為xml,然后右擊選擇Diagrams/show bpmn 2.0 Designer...,新窗口中點擊Export to file按鈕,導出圖片;完成后將圖片放到與bpmn文件同目錄下,將.xml后綴改回.bpmn。
6.部署流程定義
代碼:
/**
* 流程部署
*/
@RequestMapping(value = "/send_to_BPM", method = RequestMethod.POST)
@ResponseBody
@PreAuthorize("hasRole('OPRMGT')")
public HashMap sendToBPM(@RequestBody HashMap<String, Object> data) {
HashMap<String, Object> ret = new HashMap<>();
// 檢測人員
SysUser user = authService.currentUser();
//1.獲取processEngine
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//2.獲取repositoryService對象
RepositoryService repositoryService = processEngine.getRepositoryService();
//3.部署
Deployment deploy = repositoryService.createDeployment()
.addClasspathResource("diagram/holiday4.bpmn")
.addClasspathResource("diagram/holiday4.png")
.name("holiday04流程")
.deploy();
System.out.println("流程部署id:" +deploy.getId());
System.out.println("流程部署名稱:" +deploy.getName());
ret.put("status", true);
return ret;
}
7.啟動流程實例
代碼:
/**
* 流程啟動
*/
@RequestMapping(value = "/BPM_start", method = RequestMethod.POST)
@ResponseBody
@PreAuthorize("hasRole('OPRMGT')")
public HashMap BPMStart(@RequestBody HashMap<String, Object> data) {
HashMap<String, Object> ret = new HashMap<>();
//1.獲取processEngine
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//2.獲取RunTimeService對象
RuntimeService runtimeService = processEngine.getRuntimeService();
//3.流程定義的Key,流程圖中的key myProcess_1
String key = "myProcess_1";
Map<String,Object> map = new HashMap<String,Object>();
//設置全局變量
holiday holiday = new holiday();
holiday.setNum(1F);
map.put("holiday",holiday);
//4.啟動流程實例,並設置流程變量的值 業務關聯Id businessKey:"202004090936"
ProcessInstance processInstance = runtimeService
.startProcessInstanceByKey(key, "202004090936",map);
System.out.println(processInstance.getName());
System.out.println(processInstance.getProcessInstanceId());
ret.put("status", true);
return ret;
}
8.個人任務查詢
代碼:
// 查詢當前個人待執行的任務
@Test
public void findPersonalTaskList() {
// 任務負責人
String assignee = "zhangsan";
// 創建TaskService
TaskService taskService = processEngine.getTaskService();
List<Task> list = taskService.createTaskQuery()//
.processDefinitionKey("myProcess_1")//
.taskAssignee(assignee)//只查詢該任務負責人的任務
.list();
for (Task task : list) {
System.out.println(" 流 程 實 例 id : " +task.getProcessInstanceId());
System.out.println("任務id:" + task.getId());
System.out.println("任務負責人:" + task.getAssignee());
System.out.println("任務名稱:" + task.getName());
}
}
9.流程完成
代碼:
/**
* 流程完成
*/
@RequestMapping(value = "/BPM_complete", method = RequestMethod.POST)
@ResponseBody
@PreAuthorize("hasRole('OPRMGT')")
public HashMap BPMComplete(@RequestBody HashMap<String, Object> data) {
HashMap<String, Object> ret = new HashMap<>();
//1.獲取processEngine
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//2.獲取TaskService對象
TaskService taskService = processEngine.getTaskService();
//3.查詢當前用戶是否有任務
String key = "myProcess_1";
//按順序執行
// Task task = taskService.createTaskQuery()
// .processDefinitionKey(key)
// .taskAssignee("zhangsan")
// .singleResult();
// Task task = taskService.createTaskQuery()
// .processDefinitionKey(key)
// .taskAssignee("lisi")
// .singleResult();
// Task task = taskService.createTaskQuery()
// .processDefinitionKey(key)
// .taskAssignee("zhaoliu")
// .singleResult();
Task task = taskService.createTaskQuery()
.processDefinitionKey(key)
.taskAssignee("zhaoliu")
.singleResult();
//4.判斷task !=null 說明當前有任務
if(task != null){
taskService.complete(task.getId());
System.out.println("任務執行完成");
}
ret.put("status", true);
return ret;
}
10.圖片中文亂碼解決
- 打開 IDEA安裝路徑,找到如下的安裝目錄
- 根據自己所安裝的版本來決定,我使用的是 64 位的 idea,所以在 idea64.exe.vmoptions 文件的最后
一行追加一條命令: -Dfile.encoding=UTF-8
- 一定注意,不要有空格,否則重啟 IDEA 時會打不開,然后 重啟 IDEA,把原來的 png 圖片刪掉,
再重新生成,即可解決亂碼問題