From cb296ef2cd5f00b5593e3691ff7681a1dcfbd9d4 Mon Sep 17 00:00:00 2001
From: 疯狂的狮子Li <15040126243@163.com>
Date: 星期四, 09 五月 2024 15:09:54 +0800
Subject: [PATCH] update 重构 workflow 模块与 system 模块解耦

---
 ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/UserService.java        |   19 +
 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActTaskController.java    |   21 +
 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/TestLeaveController.java  |    1 
 ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/RoleDTO.java         |    4 
 ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/UserDTO.java         |   73 ++++++
 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/AttachmentCmd.java      |   22 -
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java      |   20 +
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java     |   26 ++
 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java             |   47 ++--
 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java |   86 +++++++
 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActTaskService.java         |    4 
 /dev/null                                                                                            |  214 -------------------
 ruoyi-modules/ruoyi-workflow/pom.xml                                                                 |   35 ++
 ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/OssDTO.java          |   46 ++++
 ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/OssService.java         |   11 +
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysUserBo.java                 |    5 
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java |    1 
 17 files changed, 377 insertions(+), 258 deletions(-)

diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/OssDTO.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/OssDTO.java
new file mode 100644
index 0000000..463821c
--- /dev/null
+++ b/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;
+
+}
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/RoleDTO.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/RoleDTO.java
index 03d6166..aea8e7a 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/RoleDTO.java
+++ b/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
      */
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/UserDTO.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/UserDTO.java
new file mode 100644
index 0000000..cb5def9
--- /dev/null
+++ b/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;
+
+    /**
+     * 鐢ㄦ埛绫诲瀷锛坰ys_user绯荤粺鐢ㄦ埛锛�
+     */
+    private String userType;
+
+    /**
+     * 鐢ㄦ埛閭
+     */
+    private String email;
+
+    /**
+     * 鎵嬫満鍙风爜
+     */
+    private String phonenumber;
+
+    /**
+     * 鐢ㄦ埛鎬у埆锛�0鐢� 1濂� 2鏈煡锛�
+     */
+    private String sex;
+
+    /**
+     * 甯愬彿鐘舵�侊紙0姝e父 1鍋滅敤锛�
+     */
+    private String status;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    private Date createTime;
+
+}
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/OssService.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/OssService.java
index 43742b3..1a52de0 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/OssService.java
+++ b/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);
 }
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/UserService.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/UserService.java
index f8c7193..0f2878d 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/UserService.java
+++ b/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);
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java
index e0011d9..36104d6 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java
+++ b/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));
     }
+
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysUserBo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysUserBo.java
index 011254e..7ad2759 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysUserBo.java
+++ b/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;
     }
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java
index 1df221c..c901a2f 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java
+++ b/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();
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java
index ad73de4..93f1cc7 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java
+++ b/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);
+    }
+
 }
diff --git a/ruoyi-modules/ruoyi-workflow/pom.xml b/ruoyi-modules/ruoyi-workflow/pom.xml
index f0391e3..0217098 100644
--- a/ruoyi-modules/ruoyi-workflow/pom.xml
+++ b/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>
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActTaskController.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActTaskController.java
index aa29012..9073464 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActTaskController.java
+++ b/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));
+    }
+
 }
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/TestLeaveController.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/TestLeaveController.java
index 16d92ff..17b6755 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/TestLeaveController.java
+++ b/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;
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WorkflowUserController.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WorkflowUserController.java
deleted file mode 100644
index d553ad8..0000000
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WorkflowUserController.java
+++ /dev/null
@@ -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);
-    }
-}
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/AttachmentCmd.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/AttachmentCmd.java
index f011252..dd9849a 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/AttachmentCmd.java
+++ b/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);
                     }
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActTaskService.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActTaskService.java
index 45c3de2..d43828c 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActTaskService.java
+++ b/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);
 }
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWorkflowUserService.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWorkflowUserService.java
deleted file mode 100644
index 22639d5..0000000
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWorkflowUserService.java
+++ /dev/null
@@ -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);
-}
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java
index d5c7599..64cd9ae 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java
+++ b/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();
+    }
 }
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowUserServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowUserServiceImpl.java
deleted file mode 100644
index 23dd1b6..0000000
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowUserServiceImpl.java
+++ /dev/null
@@ -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));
-    }
-}
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java
index 6979671..f475f19 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java
+++ b/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 鐭俊鍙戦��

--
Gitblit v1.9.3