package com.highdatas.mdm.service.act.impl;
|
|
import com.highdatas.mdm.entity.TUser;
|
import com.highdatas.mdm.pojo.NextTaskUserInfo;
|
import com.highdatas.mdm.util.DbUtils;
|
import lombok.extern.slf4j.Slf4j;
|
import org.activiti.engine.*;
|
import org.activiti.engine.delegate.Expression;
|
import org.activiti.engine.identity.Group;
|
import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
|
import org.activiti.engine.impl.pvm.process.ActivityImpl;
|
import org.activiti.engine.impl.task.TaskDefinition;
|
import org.activiti.engine.task.Task;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
@Slf4j
|
@Service
|
public class TaskServiceImpl extends BaseServiceImpl implements com.highdatas.mdm.service.act.TaskService{
|
@Autowired
|
TaskService taskService;
|
@Autowired
|
RepositoryService repositoryService;
|
@Autowired
|
HistoryService historyService;
|
@Autowired
|
RuntimeService runtimeService;
|
@Autowired
|
IdentityService identityService;
|
/**
|
*
|
* @description: 检验节点是否已经被接收
|
* @param workflowId 流程id
|
* @return: 是否已被接收
|
*
|
*/
|
|
public boolean checkClaim(String workflowId) {
|
Task task = getTask(workflowId);
|
if (task == null) {
|
return true;
|
}
|
// 判断任务是否已经被签收
|
if (task.getAssignee() == null) {
|
return true;
|
} else {
|
return false;
|
}
|
}
|
/**
|
*
|
* @description: 接收任务
|
* @param workflowId 流程id
|
* @return: 任务id
|
*
|
*/
|
public String claimTask(String workflowId) {
|
Task task = getTask(workflowId);
|
if (task == null) {
|
return null;
|
}
|
TUser onlineUser = getOnlineUser();
|
//resultPool = serviceCaller.getResultPool();
|
if (onlineUser == null) {
|
return null;
|
}
|
try {
|
taskService.claim(task.getId(), onlineUser.getUserId());
|
//resultPool.setMessage("Task is claimed");
|
return task.getId();
|
}
|
catch (Exception e) {
|
e.printStackTrace();
|
return null;
|
}
|
}
|
|
/**
|
*
|
* @description: 完成节点任务
|
* @param taskId 任务id
|
* @param pass 是否通过 true,false
|
* @param reason 原因
|
* @param other 其他参数
|
* @return: 是否完成成功
|
*
|
*/
|
public boolean completeTask(String taskId, Object pass, String reason, Map<String,Object> other) {
|
Map<String, Object> variables = new LinkedHashMap<String, Object>();
|
if(other != null){
|
variables.putAll(other);
|
}
|
variables.put("pass", pass);
|
variables.put("reason", reason);
|
try {
|
taskService.setVariables(taskId, variables);
|
taskService.complete(taskId,variables);
|
|
return true;
|
}
|
catch (Exception e) {
|
e.printStackTrace();
|
log.debug("can not complete task(" + taskId + "): " + e.getMessage());
|
return false;
|
}
|
}
|
/**
|
*
|
* @description: 完成节点任务
|
* @param taskId 任务id
|
* @param pass 是否通过 true,false
|
* @param reason 原因
|
* @return: 是否完成成功
|
*
|
*/
|
public boolean completeTask(String taskId, Object pass, String reason) {
|
return completeTask(taskId,pass,reason,null);
|
}
|
/**
|
*
|
* @description: 获取待审批任务列表
|
* @return: 待审批任务列表
|
*
|
*/
|
public List<String> getTodoTask() {
|
TUser onlineUser = getOnlineUser();
|
Set<String> result = new HashSet<>();
|
//List<Task> list1 = TimeTaskService.createTaskQuery().active().list();
|
List<Task> list = taskService.createTaskQuery().taskAssignee(onlineUser.getUserId()).active().list();
|
|
result.addAll(list.stream().map(task -> task.getProcessInstanceId()).collect(Collectors.toList()));
|
|
List<Task> toClaimList = taskService.createTaskQuery().taskCandidateUser(onlineUser.getUserId()).active().list();
|
|
result.addAll(toClaimList.stream().map(task -> task.getProcessInstanceId()).collect(Collectors.toList()));
|
|
|
List<Group> groups = identityService.createGroupQuery().groupMember(onlineUser.getUserId()).list();
|
if (groups.size() == 0) {
|
return new ArrayList<>(result);
|
}
|
List<String> groupIds = groups.stream().map(Group::getId).collect(Collectors.toList());
|
toClaimList = taskService.createTaskQuery().taskCandidateGroupIn(groupIds).active().list();
|
|
result.addAll(toClaimList.stream().map(task -> task.getProcessInstanceId()).collect(Collectors.toList()));
|
|
return new ArrayList<>(result);
|
}
|
/**
|
*
|
* @description: 通过流程获取当前任务节点
|
* @param processId 流程id
|
* @return: 当前任务节点
|
*
|
*/
|
public Task geTask(String processId) {
|
Task task = taskService.createTaskQuery().processInstanceId(processId).singleResult();
|
return task;
|
}
|
|
@Override
|
public NextTaskUserInfo getNestTaskAssignee(String workflowId) {
|
NextTaskUserInfo nextTaskUserInfo = new NextTaskUserInfo();
|
Task nextTask = geTask(workflowId);
|
if (nextTask == null) {
|
return null;
|
}
|
String nextTaskAssignee = nextTask.getAssignee();
|
if (!StringUtils.isEmpty(nextTaskAssignee)) {
|
nextTaskUserInfo.addOneUser(nextTaskAssignee);
|
return nextTaskUserInfo;
|
}
|
|
String processDefinitionId=nextTask.getProcessDefinitionId(); // 获取流程定义id
|
|
ProcessDefinitionEntity processDefinitionEntity= (ProcessDefinitionEntity) repositoryService.getProcessDefinition(processDefinitionId);
|
|
ActivityImpl activityImpl=processDefinitionEntity.findActivity(nextTask.getTaskDefinitionKey()); // 根据活动id获取活动实例
|
TaskDefinition taskDef = (TaskDefinition)activityImpl.getProperties().get("taskDefinition");
|
Set<Expression> userCodes = taskDef.getCandidateUserIdExpressions();//候选人
|
Set<Expression> roleCodes = taskDef.getCandidateGroupIdExpressions();//候选组
|
if (roleCodes != null) {
|
Set<String> roleList = roleCodes.stream().map(expression -> expression.getExpressionText()).collect(Collectors.toSet());
|
nextTaskUserInfo.addRoleList(roleList);
|
}
|
Set<String> userList = new HashSet<>();
|
if (userCodes != null) {
|
Set userSet = userCodes.stream().map(expression -> expression.getExpressionText()).collect(Collectors.toSet());
|
userList.addAll(userSet);
|
}
|
List<String> roleIdList = nextTaskUserInfo.getRoleIdList();
|
if (roleIdList == null || roleIdList.isEmpty()) {
|
nextTaskUserInfo.addUserList(userList);
|
return nextTaskUserInfo;
|
}
|
for (String roleId : roleIdList) {
|
Set<String> userByRole = DbUtils.getUserByRole(roleId);
|
userList.addAll(userByRole);
|
}
|
nextTaskUserInfo.addUserList(userList);
|
return nextTaskUserInfo;
|
|
}
|
|
}
|