|
|
@@ -6,9 +6,10 @@ import cn.hutool.core.util.ObjectUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
-import lombok.RequiredArgsConstructor;
|
|
|
import com.vber.common.core.domain.dto.RoleDTO;
|
|
|
+import com.vber.common.core.domain.dto.UserDTO;
|
|
|
import com.vber.common.core.exception.ServiceException;
|
|
|
+import com.vber.common.core.service.UserService;
|
|
|
import com.vber.common.core.utils.StreamUtils;
|
|
|
import com.vber.common.core.utils.StringUtils;
|
|
|
import com.vber.common.mybatis.core.page.PageQuery;
|
|
|
@@ -35,6 +36,7 @@ import com.vber.workflow.service.IWfTaskBackNodeService;
|
|
|
import com.vber.workflow.utils.ModelUtils;
|
|
|
import com.vber.workflow.utils.QueryUtils;
|
|
|
import com.vber.workflow.utils.WorkflowUtils;
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
import org.flowable.common.engine.api.FlowableObjectNotFoundException;
|
|
|
import org.flowable.common.engine.impl.identity.Authentication;
|
|
|
import org.flowable.engine.*;
|
|
|
@@ -74,11 +76,14 @@ public class ActTaskServiceImpl implements IActTaskService {
|
|
|
private final IdentityService identityService;
|
|
|
private final ManagementService managementService;
|
|
|
private final FlowEventStrategy flowEventStrategy;
|
|
|
+ private final IWfTaskBackNodeService wfTaskBackNodeService;
|
|
|
+ private final IWfNodeConfigService wfNodeConfigService;
|
|
|
+ private final IWfDefinitionConfigService wfDefinitionConfigService;
|
|
|
+ private final UserService userService;
|
|
|
+
|
|
|
private final ActTaskMapper actTaskMapper;
|
|
|
- private final IWfTaskBackNodeService iWfTaskBackNodeService;
|
|
|
private final ActHiTaskinstMapper actHiTaskinstMapper;
|
|
|
- private final IWfNodeConfigService iWfNodeConfigService;
|
|
|
- private final IWfDefinitionConfigService iWfDefinitionConfigService;
|
|
|
+
|
|
|
|
|
|
/**
|
|
|
* 启动任务
|
|
|
@@ -107,7 +112,7 @@ public class ActTaskServiceImpl implements IActTaskService {
|
|
|
map.put("taskId", taskResult.get(0).getId());
|
|
|
return map;
|
|
|
}
|
|
|
- WfDefinitionConfigVo wfDefinitionConfigVo = iWfDefinitionConfigService.getByTableNameLastVersion(startProcessBo.getTableName());
|
|
|
+ WfDefinitionConfigVo wfDefinitionConfigVo = wfDefinitionConfigService.getByTableNameLastVersion(startProcessBo.getTableName());
|
|
|
if (wfDefinitionConfigVo == null) {
|
|
|
throw new ServiceException("请到流程定义绑定业务表名与流程KEY!");
|
|
|
}
|
|
|
@@ -206,7 +211,7 @@ public class ActTaskServiceImpl implements IActTaskService {
|
|
|
taskService.complete(completeTaskBo.getTaskId());
|
|
|
}
|
|
|
//记录执行过的流程任务节点
|
|
|
- iWfTaskBackNodeService.recordExecuteNode(task);
|
|
|
+ wfTaskBackNodeService.recordExecuteNode(task);
|
|
|
ProcessInstance pi = QueryUtils.instanceQuery(task.getProcessInstanceId()).singleResult();
|
|
|
if (pi == null) {
|
|
|
UpdateBusinessStatusCmd updateBusinessStatusCmd = new UpdateBusinessStatusCmd(task.getProcessInstanceId(), BusinessStatusEnum.FINISH.getStatus());
|
|
|
@@ -281,7 +286,7 @@ public class ActTaskServiceImpl implements IActTaskService {
|
|
|
List<TaskVo> taskList = page.getRecords();
|
|
|
if (CollUtil.isNotEmpty(taskList)) {
|
|
|
List<String> processDefinitionIds = StreamUtils.toList(taskList, TaskVo::getProcessDefinitionId);
|
|
|
- List<WfNodeConfigVo> wfNodeConfigVoList = iWfNodeConfigService.selectByDefIds(processDefinitionIds);
|
|
|
+ List<WfNodeConfigVo> wfNodeConfigVoList = wfNodeConfigService.selectByDefIds(processDefinitionIds);
|
|
|
for (TaskVo task : taskList) {
|
|
|
task.setBusinessStatusName(BusinessStatusEnum.findByStatus(task.getBusinessStatus()));
|
|
|
task.setParticipantVo(WorkflowUtils.getCurrentTaskParticipant(task.getId()));
|
|
|
@@ -335,7 +340,7 @@ public class ActTaskServiceImpl implements IActTaskService {
|
|
|
List<TaskVo> list = new ArrayList<>();
|
|
|
if (CollUtil.isNotEmpty(taskList)) {
|
|
|
List<String> processDefinitionIds = StreamUtils.toList(taskList, Task::getProcessDefinitionId);
|
|
|
- List<WfNodeConfigVo> wfNodeConfigVoList = iWfNodeConfigService.selectByDefIds(processDefinitionIds);
|
|
|
+ List<WfNodeConfigVo> wfNodeConfigVoList = wfNodeConfigService.selectByDefIds(processDefinitionIds);
|
|
|
for (Task task : taskList) {
|
|
|
TaskVo taskVo = BeanUtil.toBean(task, TaskVo.class);
|
|
|
if (CollUtil.isNotEmpty(processInstanceList)) {
|
|
|
@@ -383,7 +388,7 @@ public class ActTaskServiceImpl implements IActTaskService {
|
|
|
List<TaskVo> taskList = page.getRecords();
|
|
|
if (CollUtil.isNotEmpty(taskList)) {
|
|
|
List<String> processDefinitionIds = StreamUtils.toList(taskList, TaskVo::getProcessDefinitionId);
|
|
|
- List<WfNodeConfigVo> wfNodeConfigVoList = iWfNodeConfigService.selectByDefIds(processDefinitionIds);
|
|
|
+ List<WfNodeConfigVo> wfNodeConfigVoList = wfNodeConfigService.selectByDefIds(processDefinitionIds);
|
|
|
for (TaskVo task : taskList) {
|
|
|
task.setBusinessStatusName(BusinessStatusEnum.findByStatus(task.getBusinessStatus()));
|
|
|
if (CollUtil.isNotEmpty(wfNodeConfigVoList)) {
|
|
|
@@ -419,7 +424,7 @@ public class ActTaskServiceImpl implements IActTaskService {
|
|
|
List<TaskVo> taskList = page.getRecords();
|
|
|
if (CollUtil.isNotEmpty(taskList)) {
|
|
|
List<String> processDefinitionIds = StreamUtils.toList(taskList, TaskVo::getProcessDefinitionId);
|
|
|
- List<WfNodeConfigVo> wfNodeConfigVoList = iWfNodeConfigService.selectByDefIds(processDefinitionIds);
|
|
|
+ List<WfNodeConfigVo> wfNodeConfigVoList = wfNodeConfigService.selectByDefIds(processDefinitionIds);
|
|
|
for (TaskVo task : taskList) {
|
|
|
task.setBusinessStatusName(BusinessStatusEnum.findByStatus(task.getBusinessStatus()));
|
|
|
if (CollUtil.isNotEmpty(wfNodeConfigVoList)) {
|
|
|
@@ -447,7 +452,7 @@ public class ActTaskServiceImpl implements IActTaskService {
|
|
|
List<TaskVo> taskList = page.getRecords();
|
|
|
if (CollUtil.isNotEmpty(taskList)) {
|
|
|
List<String> processDefinitionIds = StreamUtils.toList(taskList, TaskVo::getProcessDefinitionId);
|
|
|
- List<WfNodeConfigVo> wfNodeConfigVoList = iWfNodeConfigService.selectByDefIds(processDefinitionIds);
|
|
|
+ List<WfNodeConfigVo> wfNodeConfigVoList = wfNodeConfigService.selectByDefIds(processDefinitionIds);
|
|
|
for (TaskVo task : taskList) {
|
|
|
task.setBusinessStatusName(BusinessStatusEnum.findByStatus(task.getBusinessStatus()));
|
|
|
if (CollUtil.isNotEmpty(wfNodeConfigVoList)) {
|
|
|
@@ -722,7 +727,7 @@ public class ActTaskServiceImpl implements IActTaskService {
|
|
|
managementService.executeCommand(deleteExecutionCmd);
|
|
|
}
|
|
|
|
|
|
- WfTaskBackNode wfTaskBackNode = iWfTaskBackNodeService.getListByInstanceIdAndNodeId(task.getProcessInstanceId(), backProcessBo.getTargetActivityId());
|
|
|
+ WfTaskBackNode wfTaskBackNode = wfTaskBackNodeService.getListByInstanceIdAndNodeId(task.getProcessInstanceId(), backProcessBo.getTargetActivityId());
|
|
|
if (ObjectUtil.isNotNull(wfTaskBackNode) && wfTaskBackNode.getOrderNo() == 0) {
|
|
|
runtimeService.updateBusinessStatus(processInstanceId, BusinessStatusEnum.BACK.getStatus());
|
|
|
FlowProcessEventHandler processHandler = flowEventStrategy.getProcessHandler(processInstance.getProcessDefinitionKey());
|
|
|
@@ -731,7 +736,7 @@ public class ActTaskServiceImpl implements IActTaskService {
|
|
|
}
|
|
|
}
|
|
|
//删除驳回后的流程节点
|
|
|
- iWfTaskBackNodeService.deleteBackTaskNode(processInstanceId, backProcessBo.getTargetActivityId());
|
|
|
+ wfTaskBackNodeService.deleteBackTaskNode(processInstanceId, backProcessBo.getTargetActivityId());
|
|
|
} catch (Exception e) {
|
|
|
throw new ServiceException(e.getMessage());
|
|
|
}
|
|
|
@@ -777,4 +782,93 @@ public class ActTaskServiceImpl implements IActTaskService {
|
|
|
}
|
|
|
return variableVoList;
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询工作流任务用户选择加签人员
|
|
|
+ *
|
|
|
+ * @param taskId 任务id
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
+ public String getTaskUserIdsByAddMultiInstance(String taskId) {
|
|
|
+ Task task = QueryUtils.taskQuery().taskId(taskId).singleResult();
|
|
|
+ if (task == null) {
|
|
|
+ throw new ServiceException("任务不存在");
|
|
|
+ }
|
|
|
+ MultiInstanceVo multiInstance = WorkflowUtils.isMultiInstance(task.getProcessDefinitionId(), task.getTaskDefinitionKey());
|
|
|
+ if (multiInstance == null) {
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+ List<Long> userIds;
|
|
|
+ if (multiInstance.getType() instanceof SequentialMultiInstanceBehavior) {
|
|
|
+ userIds = (List<Long>) runtimeService.getVariable(task.getExecutionId(), multiInstance.getAssigneeList());
|
|
|
+ } else {
|
|
|
+ List<Task> list = QueryUtils.taskQuery(task.getProcessInstanceId()).list();
|
|
|
+ userIds = StreamUtils.toList(list, e -> Long.valueOf(e.getAssignee()));
|
|
|
+ }
|
|
|
+ return StringUtils.join(userIds, StringUtils.SEPARATOR);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询工作流选择减签人员
|
|
|
+ *
|
|
|
+ * @param taskId 任务id 任务id
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
+ public List<TaskVo> getListByDeleteMultiInstance(String taskId) {
|
|
|
+ Task task = QueryUtils.taskQuery().taskId(taskId).singleResult();
|
|
|
+ List<Task> taskList = QueryUtils.taskQuery(task.getProcessInstanceId()).list();
|
|
|
+ MultiInstanceVo multiInstance = WorkflowUtils.isMultiInstance(task.getProcessDefinitionId(), task.getTaskDefinitionKey());
|
|
|
+ List<TaskVo> taskListVo = new ArrayList<>();
|
|
|
+ if (multiInstance == null) {
|
|
|
+ return List.of();
|
|
|
+ }
|
|
|
+ List<Long> assigneeList = new ArrayList<>();
|
|
|
+ if (multiInstance.getType() instanceof SequentialMultiInstanceBehavior) {
|
|
|
+ List<Object> variable = (List<Object>) runtimeService.getVariable(task.getExecutionId(), multiInstance.getAssigneeList());
|
|
|
+ for (Object o : variable) {
|
|
|
+ assigneeList.add(Long.valueOf(o.toString()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (multiInstance.getType() instanceof SequentialMultiInstanceBehavior) {
|
|
|
+ List<Long> userIds = StreamUtils.filter(assigneeList, e -> !String.valueOf(e).equals(task.getAssignee()));
|
|
|
+ List<UserDTO> userList = userService.selectListByIds(userIds);
|
|
|
+ for (Long userId : userIds) {
|
|
|
+ TaskVo taskVo = new TaskVo();
|
|
|
+ taskVo.setId("串行会签");
|
|
|
+ taskVo.setExecutionId("串行会签");
|
|
|
+ taskVo.setProcessInstanceId(task.getProcessInstanceId());
|
|
|
+ taskVo.setName(task.getName());
|
|
|
+ taskVo.setAssignee(userId);
|
|
|
+ if (CollUtil.isNotEmpty(userList)) {
|
|
|
+ userList.stream().filter(u -> u.getUserId().toString().equals(userId.toString())).findFirst().ifPresent(u -> taskVo.setAssigneeName(u.getNickName()));
|
|
|
+ }
|
|
|
+ taskListVo.add(taskVo);
|
|
|
+ }
|
|
|
+ return taskListVo;
|
|
|
+ } else if (multiInstance.getType() instanceof ParallelMultiInstanceBehavior) {
|
|
|
+ List<Task> tasks = StreamUtils.filter(taskList, e -> StringUtils.isBlank(e.getParentTaskId()) && !e.getExecutionId().equals(task.getExecutionId()) && e.getTaskDefinitionKey().equals(task.getTaskDefinitionKey()));
|
|
|
+ if (CollUtil.isNotEmpty(tasks)) {
|
|
|
+ List<Long> userIds = StreamUtils.toList(tasks, e -> Long.valueOf(e.getAssignee()));
|
|
|
+ List<UserDTO> userList = userService.selectListByIds(userIds);
|
|
|
+ for (Task t : tasks) {
|
|
|
+ TaskVo taskVo = new TaskVo();
|
|
|
+ taskVo.setId(t.getId());
|
|
|
+ taskVo.setExecutionId(t.getExecutionId());
|
|
|
+ taskVo.setProcessInstanceId(t.getProcessInstanceId());
|
|
|
+ taskVo.setName(t.getName());
|
|
|
+ taskVo.setAssignee(Long.valueOf(t.getAssignee()));
|
|
|
+ if (CollUtil.isNotEmpty(userList)) {
|
|
|
+ userList.stream().filter(u -> u.getUserId().toString().equals(t.getAssignee())).findFirst().ifPresent(e -> taskVo.setAssigneeName(e.getNickName()));
|
|
|
+ }
|
|
|
+ taskListVo.add(taskVo);
|
|
|
+ }
|
|
|
+ return taskListVo;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return List.of();
|
|
|
+ }
|
|
|
}
|