diff --git a/pigx-flow/pigx-flow-biz/src/main/java/com/pig4cloud/pigx/flow/service/IRemoteService.java b/pigx-flow/pigx-flow-biz/src/main/java/com/pig4cloud/pigx/flow/service/IRemoteService.java index 5b8b78192..fe615236c 100644 --- a/pigx-flow/pigx-flow-biz/src/main/java/com/pig4cloud/pigx/flow/service/IRemoteService.java +++ b/pigx-flow/pigx-flow-biz/src/main/java/com/pig4cloud/pigx/flow/service/IRemoteService.java @@ -79,6 +79,14 @@ public interface IRemoteService { */ R> queryUserIdListByDepIdList(List depIdList); + /** + * 根据岗位ID列表查询用户ID列表 + * + * @param postIdList 岗位ID列表,支持批量查询多个岗位 + * @return R> 响应结果,包含岗位下所有用户的ID列表(已去重) + */ + R> queryUserIdListByPostIdList(List postIdList); + /** * 检查用户是否为指定用户的所有下级 *

diff --git a/pigx-flow/pigx-flow-biz/src/main/java/com/pig4cloud/pigx/flow/service/impl/RemoteServiceImpl.java b/pigx-flow/pigx-flow-biz/src/main/java/com/pig4cloud/pigx/flow/service/impl/RemoteServiceImpl.java index bee635a9b..3eb226dad 100644 --- a/pigx-flow/pigx-flow-biz/src/main/java/com/pig4cloud/pigx/flow/service/impl/RemoteServiceImpl.java +++ b/pigx-flow/pigx-flow-biz/src/main/java/com/pig4cloud/pigx/flow/service/impl/RemoteServiceImpl.java @@ -172,6 +172,17 @@ public class RemoteServiceImpl implements IRemoteService { return R.ok(list); } + /** + * 根据岗位id集合查询用户id集合 + * + * @param postIdList 岗位ID列表 + * @return R> 拥有这些岗位的用户ID列表 + */ + @Override + public R> queryUserIdListByPostIdList(List postIdList) { + return userService.getUserIdListByPostIdList(postIdList); + } + /** * 检查是否是所有的子级 *

diff --git a/pigx-flow/pigx-flow-biz/src/main/java/com/pig4cloud/pigx/flow/support/tasks/CopyServiceTask.java b/pigx-flow/pigx-flow-biz/src/main/java/com/pig4cloud/pigx/flow/support/tasks/CopyServiceTask.java index 4ee0af968..9450bd681 100644 --- a/pigx-flow/pigx-flow-biz/src/main/java/com/pig4cloud/pigx/flow/support/tasks/CopyServiceTask.java +++ b/pigx-flow/pigx-flow-biz/src/main/java/com/pig4cloud/pigx/flow/support/tasks/CopyServiceTask.java @@ -30,8 +30,8 @@ import java.util.stream.Collectors; * 抄送任务会将流程信息发送给指定的用户或部门成员,供其查看但不需要审批。 *

* 主要功能: - * 1. 获取节点配置的抄送人员(支持用户和部门) - * 2. 将部门展开为具体的用户列表 + * 1. 获取节点配置的抄送人员(支持用户、部门、角色、岗位) + * 2. 将部门、角色、岗位展开为具体的用户列表 * 3. 为每个抄送人创建抄送记录 * 4. 记录流程快照信息供抄送人查看 *

@@ -79,18 +79,30 @@ public class CopyServiceTask implements JavaDelegate { .toList(); if (CollUtil.isNotEmpty(deptIdList)) { - R> r = remoteService.queryUserIdListByDepIdList(deptIdList); + addUserIds(userIdList, r.getData()); + } - List data = r.getData(); - if (CollUtil.isNotEmpty(data)) { - for (Long datum : data) { - String userIdStr = Convert.toStr(datum); - if (!userIdList.contains(userIdStr)) { - userIdList.add(userIdStr); - } - } - } + // 角色ID列表 + List roleIdList = userDtoList.stream() + .filter(w -> StrUtil.equals(w.getType(), NodeUserTypeEnum.ROLE.getKey())) + .map(NodeUser::getId) + .toList(); + + if (CollUtil.isNotEmpty(roleIdList)) { + R> r = remoteService.queryUserIdListByRoleIdList(roleIdList); + addUserIds(userIdList, r.getData()); + } + + // 岗位ID列表 + List postIdList = userDtoList.stream() + .filter(w -> StrUtil.equals(w.getType(), NodeUserTypeEnum.POST.getKey())) + .map(NodeUser::getId) + .toList(); + + if (CollUtil.isNotEmpty(postIdList)) { + R> r = remoteService.queryUserIdListByPostIdList(postIdList); + addUserIds(userIdList, r.getData()); } ObjectMapper objectMapper = SpringUtil.getBean(ObjectMapper.class); @@ -102,6 +114,7 @@ public class CopyServiceTask implements JavaDelegate { .get(0); Map variables = execution.getVariables(); + String formData = objectMapper.writeValueAsString(variables); for (String userIds : userIdList) { // 发送抄送任务 @@ -112,11 +125,28 @@ public class CopyServiceTask implements JavaDelegate { processCopyDto.setProcessInstanceId(execution.getProcessInstanceId()); processCopyDto.setNodeId(nodeId); processCopyDto.setNodeName(node.getName()); - processCopyDto.setFormData(objectMapper.writeValueAsString(variables)); + processCopyDto.setFormData(formData); processCopyDto.setUserId(Long.parseLong(userIds)); remoteService.saveCC(processCopyDto); } } + /** + * 将用户ID列表合并到目标列表中(去重) + * + * @param targetList 目标用户ID列表 + * @param sourceList 待合并的用户ID列表 + */ + private void addUserIds(List targetList, List sourceList) { + if (CollUtil.isNotEmpty(sourceList)) { + for (Long userId : sourceList) { + String userIdStr = Convert.toStr(userId); + if (!targetList.contains(userIdStr)) { + targetList.add(userIdStr); + } + } + } + } + } diff --git a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteUserService.java b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteUserService.java index b157e8775..975c969b1 100644 --- a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteUserService.java +++ b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteUserService.java @@ -91,6 +91,7 @@ public interface RemoteUserService { * @param roleIdList 角色ID列表 * @return 用户ID列表 */ + @NoToken @GetMapping("/user/getUserIdListByRoleIdList") R> getUserIdListByRoleIdList(@RequestParam("roleIdList") List roleIdList); @@ -100,6 +101,7 @@ public interface RemoteUserService { * @param deptIdList 部门ID列表 * @return 用户ID列表 */ + @NoToken @GetMapping("/user/getUserIdListByDeptIdList") R> getUserIdListByDeptIdList(@RequestParam("deptIdList") List deptIdList); @@ -109,6 +111,7 @@ public interface RemoteUserService { * @param postIdList 岗位ID列表 * @return 用户ID列表 */ + @NoToken @GetMapping("/user/getUserIdListByPostIdList") R> getUserIdListByPostIdList(@RequestParam("postIdList") List postIdList); @@ -118,6 +121,7 @@ public interface RemoteUserService { * @param userName 用户名 * @return 用户列表 */ + @NoToken @GetMapping("/user/getUserListByUserName") R> getUserListByUserName(@RequestParam("username") String userName); diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysUserController.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysUserController.java index fe4a82eb5..edf66b850 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysUserController.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysUserController.java @@ -297,6 +297,7 @@ public class SysUserController { * @param postIdList 岗位ID列表 * @return R 返回结果对象,包含根据岗位ID列表获取到的用户ID列表信息 */ + @Inner @GetMapping("/getUserIdListByPostIdList") public R> getUserIdListByPostIdList(Long[] postIdList) { return R.ok(userService.listUserIdByPostIds(CollUtil.toList(postIdList))); @@ -308,6 +309,7 @@ public class SysUserController { * @param username 用户名 * @return 用户列表 */ + @Inner @GetMapping("/getUserListByUserName") public R> getUserListByUserName(String username) { return R.ok(TenantBroker