Activiti实现会签功能程序Demo
Activiti會簽功能
1、會簽是什么?
會簽功能指多個人員針對同一個事務進行協商處理,共同簽署決定一件事情。
在工作流中會簽,是指多個人員在同一個環節進行處理,同一環節的有多個處理人并行處理,按照配置規則,固定比例的人員辦理完成后即可繼續流轉至下一環節。
2、會簽的種類
a) 按數量通過:達到一定數量的通過表決后,會簽通過。
b) 按比例通過:達到一定比例的通過表決后,會簽通過。
c) 一票否決:只要有一個表決時否定的,會簽通過。
d) 一票通過:只要有一個表決通過的,會簽通過。
3、Activiti實現會簽
Activiti實現會簽是基于多實例任務,將節點設置成多實例,主要通過在UserTask節點的屬性上配置
4、完整代碼
4.1流程圖xml代碼
(如需項目DEMO源碼同學可發送主題“springboot-activiti”至1829003685@qq.com)
4.2會簽監聽代碼
package cn.com.xu.applyHoliday;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;
import org.activiti.engine.task.Task;
/**
- 會簽監聽
- @author 1829003685@qq.com 2019年5月7日 上午11:12:42
*/
public class SignListener implements TaskListener {
}
4.3流程圖部署以及啟動
package cn.com.xu.applyHoliday;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.activiti.engine.IdentityService;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.repository.DeploymentBuilder;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import cn.com.xu.bean.Emp;
/**
- 流程部署以及啟動
- @author 1829003685@qq.com 2019年5月7日 上午11:07:36
/
public class ActivitiDeploy {
public static void main(String[] args) {
//獲取流程引擎
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
//獲取流程存儲服務組件
RepositoryService repositoryService = engine.getRepositoryService();
//部署流程描述文件
DeploymentBuilder builder = repositoryService.createDeployment();
builder.addClasspathResource(“bpmn/applyHoliday.bpmn”).deploy();
//獲取運行時服務組件
RuntimeService runtimeService = engine.getRuntimeService();
TaskService taskService = engine.getTaskService();
//啟動流程引擎
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(“applyHoliday2”);
//獲取身份服務組件
IdentityService identityService = engine.getIdentityService();
System.out.println(“啟動成功,流程id為:” + processInstance.getId());
//創建模擬用戶
createUser(identityService);
//啟動任務
startTask(taskService, processInstance.getId());
}
/*
* 設置會簽人員并啟動任務
* @param taskService
* @param proId
/
public static void startTask(TaskService taskService, String proId){
Task task = taskService.createTaskQuery().processInstanceId(proId).singleResult();
System.out.println(“當前任務編碼:” + task.getId() + “,當前任務名稱:” + task.getName());
//設置會簽人員
Map<String, Object> var = new HashMap<String, Object>();
List signList = new ArrayList();
signList.add(“zhangSan”);
signList.add(“liSi”);
var.put(“signList”, signList);
taskService.complete(task.getId(), var);
}
/*
* 新增員工,模擬流程
* @param identityService
*/
public static void createUser(IdentityService identityService){
Emp.createUser(identityService, “zhangSan”, “張”, “三”);
Emp.createUser(identityService, “liSi”, “李”, “四”);
Emp.createUser(identityService, “wangWu”, “王”, “五”);
System.out.println(“新建員工成功”);
}
}
4.4會簽人員任務處理代碼
package cn.com.xu.applyHoliday;
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.TaskService;
import org.activiti.engine.task.Task;
/**
- 會簽處理
- @author 1829003685@qq.com2019年5月7日 上午11:07:12
/
public class SignHandle {
public static void main(String[] args) {
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
TaskService taskService = engine.getTaskService();
handleWaitWork(taskService, “liSi”, true);
}
/*
* 處理代辦任務
* @param taskService
* @param empCode
* @param result 審批結果;true:同意;false:拒絕
*/
public static void handleWaitWork(TaskService taskService, String empCode, boolean result){
List tasks = taskService.createTaskQuery().taskAssignee(empCode).orderByTaskId().desc().list();
if(tasks != null && tasks.size() != 0){
for(Task tempTask : tasks){
//處理代辦
Map<String, Object> map = new HashMap<String, Object>();
map.put(“pass”, result);
taskService.complete(tempTask.getId(), map);
}
}else{
System.out.println(“沒有代辦任務”);
}
}
}
4.5 用戶實體類
package cn.com.xu.bean;
import java.util.ArrayList;
import java.util.List;
import org.activiti.engine.IdentityService;
import org.activiti.engine.identity.Group;
import org.activiti.engine.identity.User;
/**
- 創建用戶
- @author 1829003685@qq.com 2019年2月18日 下午3:32:15
/
public class Emp {
/*
* 創建用戶信息
* @param service 身份組件
* @param empCode 員工編碼
* @return
/
public static User createUser(IdentityService service, String empCode, String firstName, String lastName){
User user = service.newUser(empCode);
user.setFirstName(firstName);//姓
user.setLastName(lastName);//名
user.setPassword(“123456”);//密碼
service.saveUser(user);
return service.createUserQuery().userId(empCode).singleResult();
}
/*
* 根據用戶編碼查詢用戶信息
* @param service
* @param empCode
* @return
/
public static User getUserByUserCode(IdentityService service, String empCode){
return service.createUserQuery().userLastName(empCode).singleResult();
}
/*
* 根據用戶編碼查詢所屬角色
* @param service
* @param empCode
* @return
*/
public static List getGroupList(IdentityService service, String empCode){
List rstList = new ArrayList();
List groups = service.createGroupQuery().groupMember(getUserByUserCode(service, empCode).getId()).list();
if(groups != null && groups.size() != 0){
for(Group g : groups){
rstList.add(g.getType());
}
}
return rstList;
}
}
總結
以上是生活随笔為你收集整理的Activiti实现会签功能程序Demo的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 对话汇医慧影联合创始人郭娜:人工智能是分
- 下一篇: Atlas:手淘Native容器化框架和