启动实例
public ProcessInstance startProcessInstanceByKey(String key,String businessKey,Map<String, Object> variables) { try { ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(key, businessKey, variables); return processInstance; } catch (Exception e) { throw new ExceptionUtil(e.getMessage(),e.getCause()); } }
完成任务
/** * 完成任务 * @param taskId */ public boolean completeTask(String taskId,Variable variable){ try { Map<String, Object> variables = variable.getVariableMap(); taskService.complete(taskId,variables); return true; } catch (Exception e) { throw new ExceptionUtil(e.getMessage(),e.getCause()); } }
驳回
public void backProcess(String taskId, String activityId,Map<String, Object> variables) throws Exception { if (StringUtils.isEmpty(activityId)) { throw new Exception("驳回目标节点ID为空!"); } // 查找所有并行任务节点,同时驳回 List<Task> taskList = findTaskListByKey(findProcessInstanceByTaskId(taskId).getId(), findTaskById(taskId).getTaskDefinitionKey()); for (Task task : taskList) { commitProcess(task.getId(), variables, activityId); } }
查询
当最后一人审核时,isended为true编写activiti类
/** * 判断流程实例是否已经结束 * @param processInstanceId * @return */ public boolean isEnded(String processInstanceId) { ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); //说明流程实例结束了 if(processInstance==null){ return true; } return processInstance.isEnded(); }
逻辑
/** * 审批 * @param id * @param request */ @ResponseBody @RequestMapping(value="/approvalLoan",method={RequestMethod.POST,RequestMethod.GET}) public String approval(String task_id,String task_status,String remark,HttpServletRequest request){ int i = 0; if(null != task_id && !"".equals(task_id)){ Map<String, Object> taskData = activitiUtil.getTask(task_id); Variable variables = new Variable(); ZxLoanBill zxLoanBill = zxLoanBillService.getZxLoanBillById(taskData.get("businessKey").toString()); String vals = task_status; variables.setKeys("status"); variables.setTypes("S"); variables.setValues(vals); if(activitiUtil.completeTask(task_id, variables)){ LcApproval lc_approval = new LcApproval(); Map<String, Object> condition = new HashMap<String, Object>(); condition.put("processInstance_id", ((Task) taskData.get("task")).getProcessInstanceId()); List<LcApply> list = lcApplyService.getLcApplyListByCondition(condition); if(!list.isEmpty()){ lc_approval.setLc_apply_id(list.get(0).getLc_apply_id()); } lc_approval.setLc_approval_id(UUID.toUUID()); lc_approval.setLc_approval_remark(remark); lc_approval.setLc_approval_time(CommonUtils.getSimpleDateFormat()); lc_approval.setLc_status_id(task_status); if(task_status.equals("yes")){ lc_approval.setLc_status_name("审批通过"); boolean isEnd = activitiUtil.isEnded(((Task) taskData.get("task")).getProcessInstanceId()); if(isEnd){ zxLoanBill.setStatus("3"); zxLoanBill.setApprove_time(DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss")); zxLoanBillService.updateZxLoanBill(zxLoanBill); } }else{ lc_approval.setLc_status_name("审批不通过"); zxLoanBill.setStatus("4"); zxLoanBillService.updateZxLoanBill(zxLoanBill); } lc_approval.setTaskId(task_id); lc_approval.setXt_userinfo_id(CommonUtils.getXtUid()); lc_ApprovalService.addLcApproval(lc_approval); i = 1; }else{ i = 0; }; } if(i>0){ return outAudStr(true); }else{ return outAudStr(false); } } }
/** * 添加审批(发起申请)并设置第一个节点发起人并完成第一个节点 * @param id流程发布历史编号 * @param businessKey业务编号(可选) * @param variables变量(可选) * @return */ public boolean addApplySetAssignee(String id,String businessKey,Map<String, Object> variables,LcApply lc_Apply){ try { XtConstantService xt_ConstantService = (XtConstantService)SpringUtil.getBean("xtConstantService"); LcDeploymentHisService lc_Deployment_HisService = (LcDeploymentHisService)SpringUtil.getBean("lcDeploymentHisService"); LcDeploymentHis lc_Deployment_His = lc_Deployment_HisService.getLcDeploymentHisById(id); XtConstant xtConstant = xt_ConstantService.getXtConstantById(lc_Deployment_His.getXt_constant_id()); LcApplyService lc_ApplyService = (LcApplyService)SpringUtil.getBean("lcApplyService"); ProcessDefinition processDefinition = getProcessDefinition(lc_Deployment_His.getLc_deployment_his_id()); ProcessInstance procesInstance = startProcessInstanceByKey(processDefinition.getKey(), businessKey, variables); /**Activiti发起实例模块(即提交发起申请)开始**/ /**调用审批工作流**/ if(null != procesInstance){ if(StringUtil.isEmpty(lc_Apply.getLc_apply_id())){ lc_Apply.setLc_apply_id(UUID.toUUID()); } lc_Apply.setLc_apply_model_id(xtConstant.getXt_constant_id()); lc_Apply.setXt_userinfo_id(CommonUtils.getXtUid()); lc_Apply.setLc_apply_time(CommonUtils.getSimpleDateFormat()); lc_Apply.setProcessdefinitions_id(processDefinition.getId()); lc_Apply.setLc_apply_model_biz_id(businessKey); lc_Apply.setProcessInstance_id(procesInstance.getId()); lc_ApplyService.addLcApply(lc_Apply); ///////////根据当前实例编号查找第一个节点并设置发起人////////////// List<Task> tasks = taskService.createTaskQuery().processInstanceId(procesInstance.getId()).orderByTaskCreateTime().asc().list(); if(null != tasks &&!tasks.isEmpty()){ //设置当前任务为处理人即发起人 setAssignee(tasks.get(0).getId(), CommonUtils.getXtUid()); //完成第一个任务即发起人 completeTask(tasks.get(0).getId()); } System.out.println("-------调用工作流审批信息模块成功-------"); return true; }else{ System.out.println("-------调用工作流审批信息模块失败-------"); return false; } /**Activiti发起实例模块(即提交发起申请)结束**/ } catch (Exception e) { throw new ExceptionUtil(e.getMessage(),e.getCause()); } }
同意或者驳回,操作数据库状态字段
1.申请-添加审批,状态设置
(1) 获取平台常量,平台常量放入condition
根据常量查询对象,lc_process中查询
(2)流程申请model添加变量
(3)发起节点addApplySetAssignee,修改相应的状态
2.bmpn生成器基于jehc(码云)