activiti使用

启动实例

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(码云)


猜你喜欢

转载自blog.csdn.net/jd16manson/article/details/78711002