mirror of
https://github.com/dromara/RuoYi-Vue-Plus.git
synced 2025-09-24 07:19:46 +08:00
update 重构 workflow 模块与 system 模块解耦
This commit is contained in:
@ -271,4 +271,25 @@ public class ActTaskController extends BaseController {
|
||||
public R<List<WfTaskBackNode>> getNodeList(@PathVariable String processInstanceId) {
|
||||
return R.ok(CollUtil.reverse(iWfTaskBackNodeService.getListByInstanceId(processInstanceId)));
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询工作流任务用户选择加签人员
|
||||
*
|
||||
* @param taskId 任务id
|
||||
*/
|
||||
@GetMapping("/getTaskUserIdsByAddMultiInstance/{taskId}")
|
||||
public R<String> getTaskUserIdsByAddMultiInstance(@PathVariable String taskId) {
|
||||
return R.ok(actTaskService.getTaskUserIdsByAddMultiInstance(taskId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询工作流选择减签人员
|
||||
*
|
||||
* @param taskId 任务id
|
||||
*/
|
||||
@GetMapping("/getListByDeleteMultiInstance/{taskId}")
|
||||
public R<List<TaskVo>> getListByDeleteMultiInstance(@PathVariable String taskId) {
|
||||
return R.ok(actTaskService.getListByDeleteMultiInstance(taskId));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -15,7 +15,6 @@ import org.dromara.common.log.enums.BusinessType;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.web.core.BaseController;
|
||||
import org.dromara.workflow.domain.TestLeave;
|
||||
import org.dromara.workflow.domain.bo.TestLeaveBo;
|
||||
import org.dromara.workflow.domain.vo.TestLeaveVo;
|
||||
import org.dromara.workflow.service.ITestLeaveService;
|
||||
|
@ -1,72 +0,0 @@
|
||||
package org.dromara.workflow.controller;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.web.core.BaseController;
|
||||
import org.dromara.system.domain.bo.SysUserBo;
|
||||
import org.dromara.system.domain.vo.SysUserVo;
|
||||
import org.dromara.workflow.domain.bo.SysUserMultiBo;
|
||||
import org.dromara.workflow.domain.vo.TaskVo;
|
||||
import org.dromara.workflow.service.IWorkflowUserService;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* 工作流用户选人管理 控制层
|
||||
*
|
||||
* @author may
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/workflow/user")
|
||||
public class WorkflowUserController extends BaseController {
|
||||
|
||||
private final IWorkflowUserService workflowUserService;
|
||||
|
||||
/**
|
||||
* 分页查询工作流选择加签人员
|
||||
*
|
||||
* @param bo 参数
|
||||
*/
|
||||
@GetMapping("/getPageByAddMultiInstance")
|
||||
public TableDataInfo<SysUserVo> getPageByAddMultiInstance(SysUserMultiBo bo, PageQuery pageQuery) {
|
||||
return workflowUserService.getPageByAddMultiInstance(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询工作流选择减签人员
|
||||
*
|
||||
* @param taskId 任务id
|
||||
*/
|
||||
@GetMapping("/getListByDeleteMultiInstance/{taskId}")
|
||||
public R<List<TaskVo>> getListByDeleteMultiInstance(@PathVariable String taskId) {
|
||||
return R.ok(workflowUserService.getListByDeleteMultiInstance(taskId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 按照用户id查询用户
|
||||
*
|
||||
* @param userIds 用户id
|
||||
*/
|
||||
@GetMapping("/getUserListByIds/{userIds}")
|
||||
public R<List<SysUserVo>> getUserListByIds(@PathVariable List<Long> userIds) {
|
||||
return R.ok(workflowUserService.getUserListByIds(userIds));
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页查询用户
|
||||
*
|
||||
* @param sysUserBo 参数
|
||||
* @param pageQuery 分页
|
||||
*/
|
||||
@GetMapping("/getPageByUserList")
|
||||
public TableDataInfo<SysUserVo> getPageByUserList(SysUserBo sysUserBo, PageQuery pageQuery) {
|
||||
return workflowUserService.getPageByUserList(sysUserBo, pageQuery);
|
||||
}
|
||||
}
|
@ -1,20 +1,17 @@
|
||||
package org.dromara.workflow.flowable.cmd;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import org.dromara.common.core.domain.dto.OssDTO;
|
||||
import org.dromara.common.core.service.OssService;
|
||||
import org.dromara.common.core.utils.SpringUtils;
|
||||
import org.dromara.common.core.utils.StreamUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.dromara.system.domain.vo.SysOssVo;
|
||||
import org.dromara.system.service.ISysOssService;
|
||||
import org.flowable.common.engine.impl.interceptor.Command;
|
||||
import org.flowable.common.engine.impl.interceptor.CommandContext;
|
||||
import org.flowable.engine.impl.persistence.entity.AttachmentEntity;
|
||||
import org.flowable.engine.impl.persistence.entity.AttachmentEntityManager;
|
||||
import org.flowable.engine.impl.util.CommandContextUtil;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@ -41,20 +38,19 @@ public class AttachmentCmd implements Command<Boolean> {
|
||||
public Boolean execute(CommandContext commandContext) {
|
||||
try {
|
||||
if (StringUtils.isNotBlank(fileId)) {
|
||||
List<Long> fileIds = StreamUtils.toList(Arrays.asList(fileId.split(StrUtil.COMMA)), Long::valueOf);
|
||||
List<SysOssVo> sysOssVos = SpringUtils.getBean(ISysOssService.class).listByIds(fileIds);
|
||||
if (CollUtil.isNotEmpty(sysOssVos)) {
|
||||
for (SysOssVo sysOssVo : sysOssVos) {
|
||||
List<OssDTO> ossList = SpringUtils.getBean(OssService.class).selectByIds(fileId);
|
||||
if (CollUtil.isNotEmpty(ossList)) {
|
||||
for (OssDTO oss : ossList) {
|
||||
AttachmentEntityManager attachmentEntityManager = CommandContextUtil.getAttachmentEntityManager();
|
||||
AttachmentEntity attachmentEntity = attachmentEntityManager.create();
|
||||
attachmentEntity.setRevision(1);
|
||||
attachmentEntity.setUserId(LoginHelper.getUserId().toString());
|
||||
attachmentEntity.setName(sysOssVo.getOriginalName());
|
||||
attachmentEntity.setDescription(sysOssVo.getOriginalName());
|
||||
attachmentEntity.setType(sysOssVo.getFileSuffix());
|
||||
attachmentEntity.setName(oss.getOriginalName());
|
||||
attachmentEntity.setDescription(oss.getOriginalName());
|
||||
attachmentEntity.setType(oss.getFileSuffix());
|
||||
attachmentEntity.setTaskId(taskId);
|
||||
attachmentEntity.setProcessInstanceId(processInstanceId);
|
||||
attachmentEntity.setContentId(sysOssVo.getOssId().toString());
|
||||
attachmentEntity.setContentId(oss.getOssId().toString());
|
||||
attachmentEntity.setTime(new Date());
|
||||
attachmentEntityManager.insert(attachmentEntity);
|
||||
}
|
||||
|
@ -142,4 +142,8 @@ public interface IActTaskService {
|
||||
* @return 结果
|
||||
*/
|
||||
List<VariableVo> getInstanceVariable(String taskId);
|
||||
|
||||
String getTaskUserIdsByAddMultiInstance(String taskId);
|
||||
|
||||
List<TaskVo> getListByDeleteMultiInstance(String taskId);
|
||||
}
|
||||
|
@ -1,61 +0,0 @@
|
||||
package org.dromara.workflow.service;
|
||||
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.system.domain.SysUserRole;
|
||||
import org.dromara.system.domain.bo.SysUserBo;
|
||||
import org.dromara.system.domain.vo.SysUserVo;
|
||||
import org.dromara.workflow.domain.bo.SysUserMultiBo;
|
||||
import org.dromara.workflow.domain.vo.TaskVo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 工作流用户选人管理 服务层
|
||||
*
|
||||
* @author may
|
||||
*/
|
||||
public interface IWorkflowUserService {
|
||||
|
||||
/**
|
||||
* 分页查询工作流选择加签人员
|
||||
*
|
||||
* @param sysUserMultiBo 参数
|
||||
* @param pageQuery 分页
|
||||
* @return 结果
|
||||
*/
|
||||
TableDataInfo<SysUserVo> getPageByAddMultiInstance(SysUserMultiBo sysUserMultiBo, PageQuery pageQuery);
|
||||
|
||||
/**
|
||||
* 查询工作流选择减签人员
|
||||
*
|
||||
* @param taskId 任务id
|
||||
* @return 结果
|
||||
*/
|
||||
List<TaskVo> getListByDeleteMultiInstance(String taskId);
|
||||
|
||||
/**
|
||||
* 按照用户id查询用户
|
||||
*
|
||||
* @param userIds 用户id
|
||||
* @return 结果
|
||||
*/
|
||||
List<SysUserVo> getUserListByIds(List<Long> userIds);
|
||||
|
||||
/**
|
||||
* 按照角色id查询关联用户id
|
||||
*
|
||||
* @param roleIds 角色id
|
||||
* @return 结果
|
||||
*/
|
||||
List<SysUserRole> getUserRoleListByRoleIds(List<Long> roleIds);
|
||||
|
||||
/**
|
||||
* 分页查询用户
|
||||
*
|
||||
* @param sysUserBo 参数
|
||||
* @param pageQuery 分页
|
||||
* @return 结果
|
||||
*/
|
||||
TableDataInfo<SysUserVo> getPageByUserList(SysUserBo sysUserBo, PageQuery pageQuery);
|
||||
}
|
@ -8,7 +8,9 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.common.core.domain.dto.RoleDTO;
|
||||
import org.dromara.common.core.domain.dto.UserDTO;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.common.core.service.UserService;
|
||||
import org.dromara.common.core.utils.StreamUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
@ -79,6 +81,7 @@ public class ActTaskServiceImpl implements IActTaskService {
|
||||
private final ActHiTaskinstMapper actHiTaskinstMapper;
|
||||
private final IWfNodeConfigService iWfNodeConfigService;
|
||||
private final IWfDefinitionConfigService iWfDefinitionConfigService;
|
||||
private final UserService userService;
|
||||
|
||||
/**
|
||||
* 启动任务
|
||||
@ -777,4 +780,87 @@ public class ActTaskServiceImpl implements IActTaskService {
|
||||
}
|
||||
return variableVoList;
|
||||
}
|
||||
|
||||
@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();
|
||||
}
|
||||
}
|
||||
|
@ -1,214 +0,0 @@
|
||||
package org.dromara.workflow.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.common.core.enums.UserStatus;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.common.core.utils.StreamUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.system.domain.SysUser;
|
||||
import org.dromara.system.domain.SysUserRole;
|
||||
import org.dromara.system.domain.bo.SysUserBo;
|
||||
import org.dromara.system.domain.vo.SysUserVo;
|
||||
import org.dromara.system.mapper.SysUserMapper;
|
||||
import org.dromara.system.mapper.SysUserRoleMapper;
|
||||
import org.dromara.workflow.domain.bo.SysUserMultiBo;
|
||||
import org.dromara.workflow.domain.vo.MultiInstanceVo;
|
||||
import org.dromara.workflow.domain.vo.TaskVo;
|
||||
import org.dromara.workflow.service.IWorkflowUserService;
|
||||
import org.dromara.workflow.utils.QueryUtils;
|
||||
import org.dromara.workflow.utils.WorkflowUtils;
|
||||
import org.flowable.engine.RuntimeService;
|
||||
import org.flowable.engine.impl.bpmn.behavior.ParallelMultiInstanceBehavior;
|
||||
import org.flowable.engine.impl.bpmn.behavior.SequentialMultiInstanceBehavior;
|
||||
import org.flowable.task.api.Task;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 工作流用户选人管理 业务处理层
|
||||
*
|
||||
* @author may
|
||||
*/
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class WorkflowUserServiceImpl implements IWorkflowUserService {
|
||||
|
||||
private final SysUserMapper sysUserMapper;
|
||||
private final SysUserRoleMapper sysUserRoleMapper;
|
||||
private final RuntimeService runtimeService;
|
||||
|
||||
/**
|
||||
* 分页查询工作流选择加签人员
|
||||
*
|
||||
* @param bo 参数
|
||||
* @param pageQuery 分页
|
||||
*/
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public TableDataInfo<SysUserVo> getPageByAddMultiInstance(SysUserMultiBo bo, PageQuery pageQuery) {
|
||||
Task task = QueryUtils.taskQuery().taskId(bo.getTaskId()).singleResult();
|
||||
if (task == null) {
|
||||
throw new ServiceException("任务不存在");
|
||||
}
|
||||
MultiInstanceVo multiInstance = WorkflowUtils.isMultiInstance(task.getProcessDefinitionId(), task.getTaskDefinitionKey());
|
||||
if (multiInstance == null) {
|
||||
return TableDataInfo.build();
|
||||
}
|
||||
LambdaQueryWrapper<SysUser> queryWrapper = Wrappers.lambdaQuery();
|
||||
//检索条件
|
||||
queryWrapper.eq(StringUtils.isNotEmpty(bo.getDeptId()), SysUser::getDeptId, bo.getDeptId());
|
||||
queryWrapper.eq(SysUser::getStatus, UserStatus.OK.getCode());
|
||||
if (multiInstance.getType() instanceof SequentialMultiInstanceBehavior) {
|
||||
List<Long> assigneeList = (List<Long>) runtimeService.getVariable(task.getExecutionId(), multiInstance.getAssigneeList());
|
||||
queryWrapper.notIn(CollUtil.isNotEmpty(assigneeList), SysUser::getUserId, assigneeList);
|
||||
} else {
|
||||
List<Task> list = QueryUtils.taskQuery(task.getProcessInstanceId()).list();
|
||||
List<Long> userIds = StreamUtils.toList(list, e -> Long.valueOf(e.getAssignee()));
|
||||
queryWrapper.notIn(CollUtil.isNotEmpty(userIds), SysUser::getUserId, userIds);
|
||||
}
|
||||
queryWrapper.like(StringUtils.isNotEmpty(bo.getUserName()), SysUser::getUserName, bo.getUserName());
|
||||
queryWrapper.like(StringUtils.isNotEmpty(bo.getNickName()), SysUser::getNickName, bo.getNickName());
|
||||
Page<SysUser> page = new Page<>(pageQuery.getFirstNum(), pageQuery.getPageSize());
|
||||
Page<SysUserVo> userPage = sysUserMapper.selectVoPage(page, queryWrapper);
|
||||
return TableDataInfo.build(recordPage(userPage));
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询工作流选择减签人员
|
||||
*
|
||||
* @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 Collections.emptyList();
|
||||
}
|
||||
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<SysUserVo> sysUsers = null;
|
||||
if (CollUtil.isNotEmpty(userIds)) {
|
||||
sysUsers = sysUserMapper.selectVoBatchIds(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(sysUsers)) {
|
||||
sysUsers.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<SysUserVo> sysUsers = null;
|
||||
if (CollUtil.isNotEmpty(userIds)) {
|
||||
sysUsers = sysUserMapper.selectVoBatchIds(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(sysUsers)) {
|
||||
sysUsers.stream().filter(u -> u.getUserId().toString().equals(t.getAssignee())).findFirst().ifPresent(e -> taskVo.setAssigneeName(e.getNickName()));
|
||||
}
|
||||
taskListVo.add(taskVo);
|
||||
}
|
||||
return taskListVo;
|
||||
}
|
||||
}
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
/**
|
||||
* 翻译部门
|
||||
*
|
||||
* @param page 用户分页数据
|
||||
*/
|
||||
private Page<SysUserVo> recordPage(Page<SysUserVo> page) {
|
||||
List<SysUserVo> records = page.getRecords();
|
||||
if (CollUtil.isEmpty(records)) {
|
||||
return page;
|
||||
}
|
||||
List<Long> collectDeptId = StreamUtils.toList(records, SysUserVo::getDeptId);
|
||||
if (CollUtil.isEmpty(collectDeptId)) {
|
||||
return page;
|
||||
}
|
||||
page.setRecords(records);
|
||||
return page;
|
||||
}
|
||||
|
||||
/**
|
||||
* 按照用户id查询用户
|
||||
*
|
||||
* @param userIds 用户id
|
||||
*/
|
||||
@Override
|
||||
public List<SysUserVo> getUserListByIds(List<Long> userIds) {
|
||||
if (CollUtil.isEmpty(userIds)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
LambdaQueryWrapper<SysUser> queryWrapper = Wrappers.lambdaQuery();
|
||||
// 检索条件
|
||||
queryWrapper.eq(SysUser::getStatus, UserStatus.OK.getCode());
|
||||
queryWrapper.in(SysUser::getUserId, userIds);
|
||||
return sysUserMapper.selectVoList(queryWrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* 按照角色id查询关联用户id
|
||||
*
|
||||
* @param roleIds 角色id
|
||||
*/
|
||||
@Override
|
||||
public List<SysUserRole> getUserRoleListByRoleIds(List<Long> roleIds) {
|
||||
return sysUserRoleMapper.selectList(new LambdaQueryWrapper<SysUserRole>().in(SysUserRole::getRoleId, roleIds));
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页查询用户
|
||||
*
|
||||
* @param sysUserBo 参数
|
||||
* @param pageQuery 分页
|
||||
*/
|
||||
@Override
|
||||
public TableDataInfo<SysUserVo> getPageByUserList(SysUserBo sysUserBo, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<SysUser> queryWrapper = Wrappers.lambdaQuery();
|
||||
queryWrapper.eq(sysUserBo.getDeptId() != null, SysUser::getDeptId, sysUserBo.getDeptId());
|
||||
queryWrapper.eq(SysUser::getStatus, UserStatus.OK.getCode());
|
||||
queryWrapper.like(StringUtils.isNotEmpty(sysUserBo.getUserName()), SysUser::getUserName, sysUserBo.getUserName());
|
||||
queryWrapper.like(StringUtils.isNotEmpty(sysUserBo.getNickName()), SysUser::getNickName, sysUserBo.getNickName());
|
||||
Page<SysUserVo> userPage = sysUserMapper.selectVoPage(pageQuery.build(), queryWrapper);
|
||||
return TableDataInfo.build(recordPage(userPage));
|
||||
}
|
||||
}
|
@ -7,6 +7,8 @@ import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.dromara.common.core.domain.dto.UserDTO;
|
||||
import org.dromara.common.core.service.UserService;
|
||||
import org.dromara.common.core.utils.SpringUtils;
|
||||
import org.dromara.common.core.utils.StreamUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
@ -15,18 +17,18 @@ import org.dromara.common.mail.utils.MailUtils;
|
||||
import org.dromara.common.tenant.helper.TenantHelper;
|
||||
import org.dromara.common.websocket.dto.WebSocketMessageDto;
|
||||
import org.dromara.common.websocket.utils.WebSocketUtils;
|
||||
import org.dromara.system.domain.SysUserRole;
|
||||
import org.dromara.system.domain.vo.SysUserVo;
|
||||
import org.dromara.workflow.common.constant.FlowConstant;
|
||||
import org.dromara.workflow.common.enums.BusinessStatusEnum;
|
||||
import org.dromara.workflow.common.enums.MessageTypeEnum;
|
||||
import org.dromara.workflow.common.enums.TaskStatusEnum;
|
||||
import org.dromara.workflow.domain.ActHiProcinst;
|
||||
import org.dromara.workflow.domain.ActHiTaskinst;
|
||||
import org.dromara.workflow.domain.vo.*;
|
||||
import org.dromara.workflow.domain.vo.MultiInstanceVo;
|
||||
import org.dromara.workflow.domain.vo.ParticipantVo;
|
||||
import org.dromara.workflow.domain.vo.ProcessInstanceVo;
|
||||
import org.dromara.workflow.flowable.cmd.UpdateHiTaskInstCmd;
|
||||
import org.dromara.workflow.mapper.ActHiTaskinstMapper;
|
||||
import org.dromara.workflow.service.*;
|
||||
import org.dromara.workflow.service.IActHiProcinstService;
|
||||
import org.flowable.bpmn.model.BpmnModel;
|
||||
import org.flowable.bpmn.model.FlowNode;
|
||||
import org.flowable.common.engine.api.delegate.Expression;
|
||||
@ -41,7 +43,7 @@ import org.flowable.task.service.impl.persistence.entity.TaskEntity;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import static org.dromara.workflow.common.constant.FlowConstant.*;
|
||||
import static org.dromara.workflow.common.constant.FlowConstant.PROCESS_INSTANCE_VO;
|
||||
|
||||
/**
|
||||
* 工作流工具
|
||||
@ -52,7 +54,7 @@ import static org.dromara.workflow.common.constant.FlowConstant.*;
|
||||
public class WorkflowUtils {
|
||||
|
||||
private static final ProcessEngine PROCESS_ENGINE = SpringUtils.getBean(ProcessEngine.class);
|
||||
private static final IWorkflowUserService WORKFLOW_USER_SERVICE = SpringUtils.getBean(IWorkflowUserService.class);
|
||||
private static final UserService USER_SERVICE = SpringUtils.getBean(UserService.class);
|
||||
private static final IActHiProcinstService ACT_HI_PROCINST_SERVICE = SpringUtils.getBean(IActHiProcinstService.class);
|
||||
private static final ActHiTaskinstMapper ACT_HI_TASKINST_MAPPER = SpringUtils.getBean(ActHiTaskinstMapper.class);
|
||||
|
||||
@ -138,15 +140,14 @@ public class WorkflowUtils {
|
||||
List<HistoricIdentityLink> groupList = StreamUtils.filter(linksForTask, e -> StringUtils.isNotBlank(e.getGroupId()));
|
||||
if (CollUtil.isNotEmpty(groupList)) {
|
||||
List<Long> groupIds = StreamUtils.toList(groupList, e -> Long.valueOf(e.getGroupId()));
|
||||
List<SysUserRole> sysUserRoles = WORKFLOW_USER_SERVICE.getUserRoleListByRoleIds(groupIds);
|
||||
if (CollUtil.isNotEmpty(sysUserRoles)) {
|
||||
List<Long> userIds = USER_SERVICE.selectUserIdsByRoleIds(groupIds);
|
||||
if (CollUtil.isNotEmpty(userIds)) {
|
||||
participantVo.setGroupIds(groupIds);
|
||||
List<Long> userIdList = StreamUtils.toList(sysUserRoles, SysUserRole::getUserId);
|
||||
List<SysUserVo> sysUsers = WORKFLOW_USER_SERVICE.getUserListByIds(userIdList);
|
||||
if (CollUtil.isNotEmpty(sysUsers)) {
|
||||
List<Long> userIds = StreamUtils.toList(sysUsers, SysUserVo::getUserId);
|
||||
List<String> nickNames = StreamUtils.toList(sysUsers, SysUserVo::getNickName);
|
||||
participantVo.setCandidate(userIds);
|
||||
List<UserDTO> userList = USER_SERVICE.selectListByIds(userIds);
|
||||
if (CollUtil.isNotEmpty(userList)) {
|
||||
List<Long> userIdList = StreamUtils.toList(userList, UserDTO::getUserId);
|
||||
List<String> nickNames = StreamUtils.toList(userList, UserDTO::getNickName);
|
||||
participantVo.setCandidate(userIdList);
|
||||
participantVo.setCandidateName(nickNames);
|
||||
participantVo.setClaim(!StringUtils.isBlank(task.getAssignee()));
|
||||
}
|
||||
@ -161,10 +162,10 @@ public class WorkflowUtils {
|
||||
|
||||
}
|
||||
}
|
||||
List<SysUserVo> sysUsers = WORKFLOW_USER_SERVICE.getUserListByIds(userIdList);
|
||||
if (CollUtil.isNotEmpty(sysUsers)) {
|
||||
List<Long> userIds = StreamUtils.toList(sysUsers, SysUserVo::getUserId);
|
||||
List<String> nickNames = StreamUtils.toList(sysUsers, SysUserVo::getNickName);
|
||||
List<UserDTO> userList = USER_SERVICE.selectListByIds(userIdList);
|
||||
if (CollUtil.isNotEmpty(userList)) {
|
||||
List<Long> userIds = StreamUtils.toList(userList, UserDTO::getUserId);
|
||||
List<String> nickNames = StreamUtils.toList(userList, UserDTO::getNickName);
|
||||
participantVo.setCandidate(userIds);
|
||||
participantVo.setCandidateName(nickNames);
|
||||
// 判断当前任务是否具有多个办理人
|
||||
@ -306,9 +307,9 @@ public class WorkflowUtils {
|
||||
for (Task t : list) {
|
||||
ParticipantVo taskParticipant = WorkflowUtils.getCurrentTaskParticipant(t.getId());
|
||||
if (CollUtil.isNotEmpty(taskParticipant.getGroupIds())) {
|
||||
List<SysUserRole> sysUserRoles = WORKFLOW_USER_SERVICE.getUserRoleListByRoleIds(taskParticipant.getGroupIds());
|
||||
if (CollUtil.isNotEmpty(sysUserRoles)) {
|
||||
userIds.addAll(StreamUtils.toList(sysUserRoles, SysUserRole::getUserId));
|
||||
List<Long> userIdList = USER_SERVICE.selectUserIdsByRoleIds(taskParticipant.getGroupIds());
|
||||
if (CollUtil.isNotEmpty(userIdList)) {
|
||||
userIds.addAll(userIdList);
|
||||
}
|
||||
}
|
||||
List<Long> candidate = taskParticipant.getCandidate();
|
||||
@ -317,7 +318,7 @@ public class WorkflowUtils {
|
||||
}
|
||||
}
|
||||
if (CollUtil.isNotEmpty(userIds)) {
|
||||
List<SysUserVo> sysUserVoList = WORKFLOW_USER_SERVICE.getUserListByIds(new ArrayList<>(userIds));
|
||||
List<UserDTO> userList = USER_SERVICE.selectListByIds(new ArrayList<>(userIds));
|
||||
for (String code : messageType) {
|
||||
MessageTypeEnum messageTypeEnum = MessageTypeEnum.getByCode(code);
|
||||
if (ObjectUtil.isNotEmpty(messageTypeEnum)) {
|
||||
@ -329,7 +330,7 @@ public class WorkflowUtils {
|
||||
WebSocketUtils.publishMessage(dto);
|
||||
break;
|
||||
case EMAIL_MESSAGE:
|
||||
MailUtils.sendText(StreamUtils.join(sysUserVoList, SysUserVo::getEmail), "单据审批提醒", message);
|
||||
MailUtils.sendText(StreamUtils.join(userList, UserDTO::getEmail), "单据审批提醒", message);
|
||||
break;
|
||||
case SMS_MESSAGE:
|
||||
//todo 短信发送
|
||||
|
Reference in New Issue
Block a user