ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/OssDTO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,46 @@ package org.dromara.common.core.domain.dto; import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serial; import java.io.Serializable; /** * OSS对象 * * @author Lion Li */ @Data @NoArgsConstructor public class OssDTO implements Serializable { @Serial private static final long serialVersionUID = 1L; /** * 对象åå¨ä¸»é® */ private Long ossId; /** * æä»¶å */ private String fileName; /** * åå */ private String originalName; /** * æä»¶åç¼å */ private String fileSuffix; /** * URLå°å */ private String url; } ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/RoleDTO.java
@@ -3,6 +3,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serial; import java.io.Serializable; /** @@ -15,6 +16,9 @@ @NoArgsConstructor public class RoleDTO implements Serializable { @Serial private static final long serialVersionUID = 1L; /** * è§è²ID */ ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/UserDTO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,73 @@ package org.dromara.common.core.domain.dto; import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serial; import java.io.Serializable; import java.util.Date; /** * ç¨æ· * * @author Michelle.Chung */ @Data @NoArgsConstructor public class UserDTO implements Serializable { @Serial private static final long serialVersionUID = 1L; /** * ç¨æ·ID */ private Long userId; /** * é¨é¨ID */ private Long deptId; /** * ç¨æ·è´¦å· */ private String userName; /** * ç¨æ·æµç§° */ private String nickName; /** * ç¨æ·ç±»åï¼sys_userç³»ç»ç¨æ·ï¼ */ private String userType; /** * ç¨æ·é®ç®± */ private String email; /** * ææºå·ç */ private String phonenumber; /** * ç¨æ·æ§å«ï¼0ç· 1女 2æªç¥ï¼ */ private String sex; /** * å¸å·ç¶æï¼0æ£å¸¸ 1åç¨ï¼ */ private String status; /** * å建æ¶é´ */ private Date createTime; } ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/OssService.java
@@ -1,5 +1,9 @@ package org.dromara.common.core.service; import org.dromara.common.core.domain.dto.OssDTO; import java.util.List; /** * éç¨ OSSæå¡ * @@ -15,4 +19,11 @@ */ String selectUrlByIds(String ossIds); /** * éè¿ossIdæ¥è¯¢å表 * * @param ossIds ossId串éå·åé * @return å表 */ List<OssDTO> selectByIds(String ossIds); } ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/UserService.java
@@ -1,5 +1,9 @@ package org.dromara.common.core.service; import org.dromara.common.core.domain.dto.UserDTO; import java.util.List; /** * éç¨ ç¨æ·æå¡ * @@ -47,4 +51,19 @@ */ String selectEmailById(Long userId); /** * éè¿ç¨æ·IDæ¥è¯¢ç¨æ·å表 * * @param userIds ç¨æ·ids * @return ç¨æ·å表 */ List<UserDTO> selectListByIds(List<Long> userIds); /** * éè¿è§è²IDæ¥è¯¢ç¨æ·ID * * @param roleIds è§è²ids * @return ç¨æ·ids */ List<Long> selectUserIdsByRoleIds(List<Long> roleIds); } ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java
@@ -296,4 +296,5 @@ public R<List<SysUserVo>> listByDept(@PathVariable @NotNull Long deptId) { return R.ok(userService.selectUserListByDept(deptId)); } } ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysUserBo.java
@@ -103,6 +103,11 @@ */ private Long roleId; /** * æé¤ä¸æ¥è¯¢çç¨æ·(工使µç¨) */ private String excludeUserIds; public SysUserBo(Long userId) { this.userId = userId; } ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java
@@ -1,5 +1,6 @@ package org.dromara.system.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.ObjectUtil; @@ -9,6 +10,7 @@ import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import org.dromara.common.core.constant.CacheNames; import org.dromara.common.core.domain.dto.OssDTO; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.service.OssService; import org.dromara.common.core.utils.MapstructUtils; @@ -114,6 +116,24 @@ return String.join(StringUtils.SEPARATOR, list); } @Override public List<OssDTO> selectByIds(String ossIds) { List<OssDTO> list = new ArrayList<>(); for (Long id : StringUtils.splitTo(ossIds, Convert::toLong)) { SysOssVo vo = SpringUtils.getAopProxy(this).getById(id); if (ObjectUtil.isNotNull(vo)) { try { vo.setUrl(this.matchingUrl(vo).getUrl()); list.add(BeanUtil.toBean(vo, OssDTO.class)); } catch (Exception ignored) { // 妿osså¼å¸¸æ æ³è¿æ¥åå°æ°æ®ç´æ¥è¿å list.add(BeanUtil.toBean(vo, OssDTO.class)); } } } return list; } private LambdaQueryWrapper<SysOss> buildQueryWrapper(SysOssBo bo) { Map<String, Object> params = bo.getParams(); LambdaQueryWrapper<SysOss> lqw = Wrappers.lambdaQuery(); ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java
@@ -1,5 +1,6 @@ package org.dromara.system.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ArrayUtil; @@ -14,6 +15,7 @@ import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.constant.CacheNames; import org.dromara.common.core.constant.UserConstants; 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.MapstructUtils; @@ -29,7 +31,10 @@ import org.dromara.system.domain.SysUserPost; import org.dromara.system.domain.SysUserRole; import org.dromara.system.domain.bo.SysUserBo; import org.dromara.system.domain.vo.*; import org.dromara.system.domain.vo.SysPostVo; import org.dromara.system.domain.vo.SysRoleVo; import org.dromara.system.domain.vo.SysUserExportVo; import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.mapper.*; import org.dromara.system.service.ISysUserService; import org.springframework.cache.annotation.Cacheable; @@ -92,6 +97,9 @@ ids.add(user.getDeptId()); w.in("u.dept_id", ids); }).orderByAsc("u.user_id"); if (StringUtils.isNotBlank(user.getExcludeUserIds())) { wrapper.notIn("u.user_id", StringUtils.splitList(user.getExcludeUserIds())); } return wrapper; } @@ -623,4 +631,20 @@ return ObjectUtil.isNull(sysUser) ? null : sysUser.getEmail(); } @Override public List<UserDTO> selectListByIds(List<Long> userIds) { if (CollUtil.isEmpty(userIds)) { return List.of(); } List<SysUserVo> list = this.selectUserByIds(userIds, null); return BeanUtil.copyToList(list, UserDTO.class); } @Override public List<Long> selectUserIdsByRoleIds(List<Long> roleIds) { List<SysUserRole> userRoles = userRoleMapper.selectList( new LambdaQueryWrapper<SysUserRole>().in(SysUserRole::getRoleId, roleIds)); return StreamUtils.toList(userRoles, SysUserRole::getUserId); } } ruoyi-modules/ruoyi-workflow/pom.xml
@@ -66,12 +66,6 @@ </exclusions> </dependency> <!--ç³»ç»æ¨¡å--> <dependency> <groupId>org.dromara</groupId> <artifactId>ruoyi-system</artifactId> </dependency> <dependency> <groupId>org.dromara</groupId> <artifactId>ruoyi-common-websocket</artifactId> @@ -87,6 +81,35 @@ <artifactId>ruoyi-common-sms</artifactId> </dependency> <dependency> <groupId>org.dromara</groupId> <artifactId>ruoyi-common-mybatis</artifactId> </dependency> <dependency> <groupId>org.dromara</groupId> <artifactId>ruoyi-common-web</artifactId> </dependency> <dependency> <groupId>org.dromara</groupId> <artifactId>ruoyi-common-log</artifactId> </dependency> <dependency> <groupId>org.dromara</groupId> <artifactId>ruoyi-common-idempotent</artifactId> </dependency> <dependency> <groupId>org.dromara</groupId> <artifactId>ruoyi-common-excel</artifactId> </dependency> <dependency> <groupId>org.dromara</groupId> <artifactId>ruoyi-common-translation</artifactId> </dependency> <dependency> <groupId>org.dromara</groupId> <artifactId>ruoyi-common-tenant</artifactId> </dependency> </dependencies> </project> ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActTaskController.java
@@ -271,4 +271,25 @@ 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)); } } ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/TestLeaveController.java
@@ -15,7 +15,6 @@ 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; ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WorkflowUserController.java
ÎļþÒÑɾ³ý ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/AttachmentCmd.java
@@ -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 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); } ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActTaskService.java
@@ -142,4 +142,8 @@ * @return ç»æ */ List<VariableVo> getInstanceVariable(String taskId); String getTaskUserIdsByAddMultiInstance(String taskId); List<TaskVo> getListByDeleteMultiInstance(String taskId); } ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWorkflowUserService.java
ÎļþÒÑɾ³ý ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java
@@ -8,7 +8,9 @@ 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 @@ private final ActHiTaskinstMapper actHiTaskinstMapper; private final IWfNodeConfigService iWfNodeConfigService; private final IWfDefinitionConfigService iWfDefinitionConfigService; private final UserService userService; /** * å¯å¨ä»»å¡ @@ -777,4 +780,87 @@ } 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(); } } ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowUserServiceImpl.java
ÎļþÒÑɾ³ý ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java
@@ -7,6 +7,8 @@ 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.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 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 @@ 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 @@ 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 @@ } } 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 @@ 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 @@ } } 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 @@ 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 çä¿¡åé