启动实例
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(码云)