1、定任务 可视化工具弄出 .bpms。
2、数据库插入 人 组
3开始就是流程任务与业务逻辑关联代码
3、启动流程
/**
* 启动流程
*
* @param entity
*/
publicProcessInstance startWorkflow(Leave entity, Map<String, Object>variables) {
leaveManager.saveLeave(entity);
logger.debug("save entity: {}", entity);
String businessKey =entity.getId().toString();
ProcessInstance processInstance = null;
try {
// 用来设置启动流程的人员ID,引擎会自动把用户ID保存到activiti:initiator中
identityService.setAuthenticatedUserId(entity.getUserId());
processInstance = runtimeService.startProcessInstanceByKey("leave",businessKey, variables);
String processInstanceId =processInstance.getId();
entity.setProcessInstanceId(processInstanceId);
logger.debug("start process of {key={}, bkey={}, pid={}, variables={}}", newObject[]{"leave",businessKey, processInstanceId, variables});
} finally {
identityService.setAuthenticatedUserId(null);
}
return processInstance;
}
4、部门领导签收任务
/**
* 查询待办任务
*
* @param userId 用户ID
* @return
*/
@Transactional(readOnly= true)
publicList<Leave> findTodoTasks(String userId, Page<Leave> page, int[] pageParams) {
List<Leave> results = newArrayList<Leave>();
// 根据当前人的ID查询
TaskQuery taskQuery = taskService.createTaskQuery().taskCandidateOrAssigned(userId);
List<Task> tasks =taskQuery.list();
// 根据流程的业务ID查询实体并关联
for (Task task : tasks) {
String processInstanceId =task.getProcessInstanceId();
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).active().singleResult();
String businessKey =processInstance.getBusinessKey();
if (businessKey == null) {
continue;
}
Leave leave = leaveManager.getLeave(new Long(businessKey));
leave.setTask(task);
leave.setProcessInstance(processInstance);
leave.setProcessDefinition(getProcessDefinition(processInstance.getProcessDefinitionId()));
results.add(leave);
}
page.setTotalCount(taskQuery.count());
page.setResult(results);
return results;
}
5、完成任务
/**
* 完成任务
*
* @param id
* @return
*/
@RequestMapping(value= "complete/{id}", method = {RequestMethod.POST, RequestMethod.GET})
@ResponseBody
publicString complete(@PathVariable("id")String taskId, Variable var) {
try {
Map<String, Object> variables= var.getVariableMap();
taskService.complete(taskId, variables);
return "success";
} catch (Exception e) {
logger.error("error on complete task {}, variables={}", newObject[]{taskId, var.getVariableMap(), e});
return "error";
}
}