工作流activti使用簡單樣例
阿新 • • 發佈:2019-02-20
package test; import org.activiti.engine.*; import org.activiti.engine.identity.Group; import org.activiti.engine.identity.User; import org.activiti.engine.impl.persistence.entity.GroupEntity; import org.activiti.engine.impl.persistence.entity.UserEntity; import org.activiti.engine.task.Task; import java.util.HashMap; import java.util.Map; /** * Created by yan on 17-3-23. */ public class ActivtiSmilpeServer { public static ProcessEngine processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml").buildProcessEngine(); /** * 許可權操作service */ public static IdentityService identityService = processEngine.getIdentityService(); /** * 執行service */ private static RuntimeService runtimeService = processEngine.getRuntimeService(); /** * 任務執行service */ private static TaskService taskService = processEngine.getTaskService(); /** * 許可權操作 */ public void identity() { //這裡為做測試,設定了一些預設使用者,在實際使用時可以根據對接的系統進行初始話的設計,或者不設定直接交給對接的系統處理 Group group = new GroupEntity(); group.setId("1"); group.setName("稽核組"); group.setType("1"); identityService.saveGroup(group); User user1 = new UserEntity(); user1.setId("1"); user1.setFirstName("步驚雲"); identityService.saveUser(user1); User user2 = new UserEntity(); user2.setId("2"); user2.setFirstName("聶風"); identityService.saveUser(user2); //關聯使用者與組 identityService.createMembership("1", "1"); identityService.createMembership("2", "1"); } /** * 部署流程,每次部署在ACT_RE_PROCDEF表中會多一條記錄,該記錄版本為最新 * * @param path bpmn檔案地址 如:simple.bpmn */ public void deploy(String path) { processEngine.getRepositoryService().createDeployment().addClasspathResource(path).deploy(); } /** * 根據id釋出流程 * * @param id 表ACT_RE_PROCDEF的id * @param userId 使用者id */ public void startById(String id, String userId) { Map variables = new HashMap(); //為圖中的#{userId},賦值,指定釋出新聞的物件 variables.put("userId", userId); processEngine.getRuntimeService().startProcessInstanceById(id, variables); } /** * 根基key釋出流程,會發布對應key最新的版本,key值為 bpmn檔案的id * * @param key 表ACT_RE_PROCDEF的key * @param userId 使用者id */ public void startByKey(String key, String userId) { Map variables = new HashMap(); //為圖中的#{userId},賦值,指定釋出新聞的物件 variables.put("userId", userId); runtimeService.startProcessInstanceByKey(key, variables); } /** * 使用者釋出新聞 * * @param userId 使用者id * @param taskId 任務id */ public void userTask(String userId, String taskId) { //得到任務物件 Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); if (task.getAssignee().equals(userId)) {//判斷是否該任務的執行人 /** * 1.完成任務 * 2.這時如我在圖上的設定會觸發listener的notify事件,為下一個流程的候選組賦值 * 3.除了listener事件,也可以通過startById與startByKey中相同的手段為候選組或者候選人賦值,如果多個可以#{aaa},#{bbb} */ taskService.complete(taskId); } } /** * 候選組稽核流程 * * @param userId 使用者id * @param taskId 任務id */ public void groupTask(String userId,String taskId) { //候選組的人員認領任務,只有候選組裡的人可以認領 taskService.claim(taskId,userId); //設定條件,走符合設定條件的路線,這裡的排它閘道器可以不要,有排它閘道器的好處是可以在排它網管上設定預設值 Map variables = new HashMap(); //為圖中的${type==1}的type,賦值 variables.put("type", 1); //完成任務 taskService.complete(taskId); } }