本文共 7397 字,大约阅读时间需要 24 分钟。
百度网盘:密码请关注。情感宣泄馆。回复668899
org.activiti activiti-spring-boot-starter 7.1.0.M1
spring: activiti: database-schema-update: true #是否每次都更新数据库(会自动建表) # 自动部署验证设置:true-开启(默认)、false-关闭 check-process-definitions: false # activti是否自动部署 process-definition-location-prefix: classpath:/processes/ #process-definition-location-suffixes: .bpmn history-level: full db-history-used: true db-identity-used: true
启动后会建立25张表。如果少建了。请确定 配置文件中这三项history-level=full和db-history-used= true,database-schema-update=true。
ACT_RE_*: 'RE'表示repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。
ACT_RU_*: 'RU'表示runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。
ACT_ID_*: 'ID'表示identity。 这些表包含身份信息,比如用户,组等等。
ACT_HI_*: 'HI'表示history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。
ACT_GE_*: 'GE'表示general。通用数据, 用于不同场景下,如存放资源文件。
@Servicepublic class MyTaskListener1 implements ExecutionListener { @Override public void notify(DelegateExecution execution) { ProcessEngine services = ProcessEngines.getDefaultProcessEngine(); ExecutionEntity entity = (ExecutionEntity) execution; String processInstId=entity.getProcessInstanceId(); //流程实例Id//根据审批传入的参数判断是否打回 Object value = execution.getVariableInstance("isSuccess").getValue(); if(ObjectUtils.isEmpty(value)){ value = execution.getParent().getVariableInstance("isSuccess").getValue(); } ; if(!ObjectUtils.isEmpty(value)&&(boolean)(value)==true){ return; } Listlist=services.getHistoryService().createHistoricTaskInstanceQuery().orderByTaskCreateTime().asc() .processInstanceId(processInstId) .list(); if(list!=null){ String user=list.get(0).getAssignee(); //获取最新的一个责任人信息回退给他 execution.setVariable("inputUser", user); } }}
@Controller@RequestMapping("/app")public class TestController { @Autowired private RepositoryService repositoryService; @Autowired private TaskService taskService; /* @Autowired private IdentitySer identityService;*/ @Autowired private ModelRollBack modelRollBack; /** * 流程部署。部署一次就可以了。 * @return */ @RequestMapping("/t") @ResponseBody public Object get(){ //第一步 DeploymentBuilder builder= repositoryService.createDeployment(); builder.addClasspathResource("processes/le.bpmn"); String id = builder.deploy().getId(); repositoryService.setDeploymentKey(id,"nnffnn4d"); System.out.println(id); return null; } /** * 人员重新申请 * @return */ @RequestMapping("/rePack") @ResponseBody public Object rePack(){ Authentication.setAuthenticatedUserId("wwz"); Mapvariables = new HashMap<>(); //根据流程id获取属于自己的待办。 List list = taskService.createTaskQuery().taskAssignee("wwz").processInstanceId("60dbc3ce-9f1b-11ea-bbc3-16fd52790d6f").list(); if(!ObjectUtils.isEmpty(list)){ for(Task item:list){ taskService.complete(item.getId(),variables); } } return list; } /** * 人员提交申请 * @return */ @RequestMapping("/app1") @ResponseBody public Object ff(){ Authentication.setAuthenticatedUserId("wwz"); Map variables = new HashMap<>(); //inputUser就是在bpmn中Assignee配置的参数 variables.put("inputUser", "wwz"); //开启流程。myProcess_2为流程名称。获取方式把bpmn改为xml文件就可以看到流程名 ProcessInstance processInstance = ProcessEngines.getDefaultProcessEngine().getRuntimeService().startProcessInstanceByKey("myProcess_2",variables); Task tmp = taskService.createTaskQuery().processInstanceId(processInstance.getProcessInstanceId()) .singleResult(); tmp.setAssignee("wwz"); //完成此节点。由下一节点审批。完成后act_ru_task会创建一条由下节点审批的数据 taskService.complete(tmp.getId(),variables); return null; } /** * 人事经理审批 * @return */ @RequestMapping("/app2") @ResponseBody public Object ff2(){ //根据角色信息获取自己的待办 List T = taskService.createTaskQuery().taskAssignee("rs").list(); if(!ObjectUtils.isEmpty(T)) { for (Task item : T) { Map variables = new HashMap<>(); variables.put("inputUser", "wwz1"); variables.put("isSuccess", true); item.setAssignee("rs"); //设置本地参数。在myListener1监听中获取。防止审核通过进行驳回 taskService.setVariableLocal(item.getId(),"isSuccess",true); //增加审批备注 taskService.addComment(item.getId(),item.getProcessInstanceId(),"人事经理同意"); //完成此次审批。由下节点审批 taskService.complete(item.getId(), variables); } } return null; } /** * 总经理审批 * @return */ @RequestMapping("/app3") @ResponseBody public Object app3(){ //根据角色信息获取自己的待办 List T = taskService.createTaskQuery().taskAssignee("zj").list(); if(!ObjectUtils.isEmpty(T)) { for (Task item : T) { Map variables = new HashMap<>(); variables.put("inputUser", "wwz2"); item.setAssignee("zj"); variables.put("isSuccess", true); //设置本地参数。在myListener1监听中获取。防止审核通过进行驳回 taskService.setVariableLocal(item.getId(),"isSuccess",true); //增加审批备注 taskService.addComment(item.getId(),item.getProcessInstanceId(),"总经理同意"); //完成此次审批。如果下节点为endEvent。结束流程 taskService.complete(item.getId(), variables); } } return null; } /** * 查询wwz未完成的历史记录 * @return */ @RequestMapping("/unfinish") @ResponseBody public Object app4(){ return ProcessEngines.getDefaultProcessEngine().getHistoryService().createHistoricProcessInstanceQuery().startedBy("wwz").unfinished().list(); } /** * 查询wwz完成的历史记录 * @return */ @RequestMapping("/finish") @ResponseBody public Object finish(){ return ProcessEngines.getDefaultProcessEngine().getHistoryService().createHistoricProcessInstanceQuery().startedBy("wwz").finished().list(); } /** * 总经理审核不通过(不通过打回到发起人。发起人可以根据流程id。重新提交)rePack * @return */ @RequestMapping("/reject") @ResponseBody public Object reject(){ List T = taskService.createTaskQuery().taskAssignee("zj").list(); if(!ObjectUtils.isEmpty(T)) { for (Task item : T) { Map variables = new HashMap<>(); //isSuccess来决定流程走向。具体看bpmn图 variables.put("isSuccess", false); item.setAssignee("zj"); taskService.setVariableLocal(item.getId(),"isSuccess",false); taskService.complete(item.getId(), variables); // modelRollBack.init(item.getId()); } } return null; } /** * 人事经理审核不通过。(不通过打回到发起人。发起人可以根据流程id。重新提交)。rePack * @return */ @RequestMapping("/reject1") @ResponseBody public Object reject1(){ List T = taskService.createTaskQuery().taskAssignee("rs").list(); if(!ObjectUtils.isEmpty(T)) { for (Task item : T) { Map variables = new HashMap<>(); variables.put("isSuccess", false); item.setAssignee("rs"); taskService.setVariableLocal(item.getId(),"isSuccess",false); taskService.complete(item.getId(), variables); // modelRollBack.init(item.getId()); } } return null; }}
转载地址:http://vlvbi.baihongyu.com/