package com.fzybh.test; import com.sun.corba.se.impl.ior.OldJIDLObjectKeyTemplate; import org.flowable.engine.*; import org.flowable.engine.impl.cfg.StandaloneProcessEngineConfiguration; import org.flowable.engine.repository.Deployment; import org.flowable.engine.repository.ProcessDefinition; import org.flowable.engine.repository.ProcessDefinitionQuery; import org.flowable.engine.runtime.ProcessInstance; import org.flowable.task.api.Task; import org.junit.Before; import org.junit.jupiter.api.Test; import sun.awt.geom.AreaOp; import java.util.HashMap; import java.util.List; import java.util.Map; public class test01 { ProcessEngineConfiguration configuration = null; @Before public void before(){ //獲取信息 configuration = new StandaloneProcessEngineConfiguration(); //配置相關數據庫的連接信息 configuration.setJdbcDriver("com.mysql.cj.jdbc.Driver"); configuration.setJdbcUsername("root"); configuration.setJdbcPassword("123456"); configuration.setJdbcUrl("jdbc:mysql://localhost:3306/flowable-learn?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8"); configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE); //通過ProessEngineConfiguration 構建我們需求的processEngine // ProcessEngine processEngine = configuration.buildProcessEngine(); //System.out.println("processEngine:"+processEngine); } @Test public void testProcessEngine(){ //獲取信息 before(); //通過ProessEngineConfiguration 構建我們需求的processEngine ProcessEngine processEngine = configuration.buildProcessEngine(); System.out.println("processEngine:"+processEngine); } /** * 佈置流程 */ @Test public void testDeploy(){ //1.獲取 processEngine 對象 ProcessEngineConfiguration configuration = new StandaloneProcessEngineConfiguration(); //配置相關數據庫的連接信息 configuration.setJdbcDriver("com.mysql.cj.jdbc.Driver"); configuration.setJdbcUsername("root"); configuration.setJdbcPassword("123456"); configuration.setJdbcUrl("jdbc:mysql://localhost:3306/flowable-learn?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8"); configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE); ProcessEngine processEngine = configuration.buildProcessEngine(); //2.獲取RepositoryService 服務 processEngine對象下面服務(RepositoryService,RuntimeService,TaskService,HistoryService) RepositoryService repositoryService =processEngine.getRepositoryService(); //3.完成流程的部署操作 Deployment deployment = repositoryService.createDeployment() .addClasspathResource("holiday-request.bpmn20.xml") .name("請假流程") .deploy(); System.out.println("deployment getID()"+deployment.getId()); System.out.println("deployment getName()"+deployment.getName()); } /** * 查詢流程定義的信息 */ @Test public void testDeployQuery(){ before(); ProcessEngine processEngine = configuration.buildProcessEngine(); System.out.println("processEngine:"+processEngine); RepositoryService repositoryService = processEngine.getRepositoryService(); //1.方法一 //ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery(); //ProcessDefinition processDefinition = processDefinitionQuery.deploymentId("1").singleResult(); //2.方法二 ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery() .deploymentId("1").singleResult(); System.out.println("processDefinition.getDeploymentId():"+processDefinition.getDeploymentId()); System.out.println("processDefinition.getName():"+processDefinition.getName()); System.out.println("processDefinition.getDescription():"+processDefinition.getDescription()); System.out.println("processDefinition.getId():"+processDefinition.getId()); } /** * 刪除流程實例 */ @Test public void testDelDeploy(){ before(); ProcessEngine processEngine = configuration.buildProcessEngine(); RepositoryService repositoryService = processEngine.getRepositoryService(); //刪除部署的流程 第一個參數是ID,如果部署的流程啓動了就不允許刪除了 //repositoryService.deleteDeployment("1"); //第二個參數是級聯刪除,如果流程啓動了,相關的任務一併刪除掉(act_re_deployment id=2501) repositoryService.deleteDeployment("2501",true); } /** * 啓動一個流程實例 */ @Test public void testRunProcess(){ before(); ProcessEngine processEngine = configuration.buildProcessEngine(); RuntimeService runtimeService = processEngine.getRuntimeService(); //構建流程實例變量 Map<String,Object> varivale = new HashMap<>(); varivale.put("employee","張三"); varivale.put("nrOfHolidays",3); varivale.put("deciption","工作累了,出去玩玩"); //啓動流程實例 ProcessInstance holidaysRequest = runtimeService.startProcessInstanceByKey("holidayRequest",varivale); System.out.println("holidayRequest holidaysRequest.getProcessDefinitionId():"+holidaysRequest.getProcessDefinitionId()); System.out.println("holidayRequest holidaysRequest.getActivityId():"+holidaysRequest.getActivityId()); System.out.println("holidayRequest holidaysRequest.getId()任務id:"+holidaysRequest.getId()); } /** * 測試,張三:任務查詢 */ @Test public void testQueryTask(){ before(); ProcessEngine processEngine = configuration.buildProcessEngine(); TaskService taskService = processEngine.getTaskService(); List<Task> list=taskService.createTaskQuery() .processDefinitionKey("holidayRequest")//指定查詢流程編程 .taskAssignee("zhangsan") .list(); for(Task task:list){ System.out.println("任務id :"+ task.getProcessDefinitionId()); System.out.println("任務task.getName() :"+ task.getName()); System.out.println("任務getAssignee() :"+ task.getAssignee()); System.out.println("task.getDescription() = " + task.getDescription()); System.out.println("task.getId() = " + task.getId()); } } /** * 完成當任務(不同,) */ @Test public void testCompleteTask(){ before(); ProcessEngine processEngine = configuration.buildProcessEngine(); TaskService taskService = processEngine.getTaskService(); //找到任務 Task task = taskService.createTaskQuery() .processDefinitionKey("holidayRequest") .taskAssignee("zhangsan") .singleResult(); //創建流程變量 Map<String, Object> map = new HashMap(); map.put("approved",false); taskService.complete(task.getId(), map); } }