springboot2.1.3+activiti7整合


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.圖片中文亂碼解決

  1. 打開 IDEA安裝路徑,找到如下的安裝目錄

  1. 根據自己所安裝的版本來決定,我使用的是 64 位的 idea,所以在 idea64.exe.vmoptions 文件的最后
    一行追加一條命令: -Dfile.encoding=UTF-8

  1. 一定注意,不要有空格,否則重啟 IDEA 時會打不開,然后 重啟 IDEA,把原來的 png 圖片刪掉,
    再重新生成,即可解決亂碼問題


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM