Procházet zdrojové kódy

feat: 把原来的员工改为角色,方便理解

wuwenyi před 2 týdny
rodič
revize
ca2a969323

+ 8 - 0
src/main/java/com/qqflow/engine/domain/system/controller/SysUserController.java

@@ -6,6 +6,7 @@ import com.qqflow.engine.common.Result;
 import com.qqflow.engine.domain.system.assembler.UserAssembler;
 import com.qqflow.engine.domain.system.dto.BindWeComDTO;
 import com.qqflow.engine.domain.system.dto.UserDTO;
+import com.qqflow.engine.domain.system.dto.UserRoleAssignDTO;
 import com.qqflow.engine.domain.system.entity.SysUser;
 import com.qqflow.engine.domain.system.service.SysUserService;
 import io.swagger.v3.oas.annotations.Operation;
@@ -87,6 +88,13 @@ public class SysUserController {
      * TODO: 实际企微消息推送由外部对接系统完成,本接口仅保存用户与企微账号的映射关系。
      * </p>
      */
+    @Operation(summary = "分配用户角色")
+    @PutMapping("/{id}/roles")
+    public Result<Void> assignRoles(@PathVariable Long id, @RequestBody UserRoleAssignDTO dto) {
+        sysUserService.assignRoles(id, dto.getRoleIds());
+        return Result.ok();
+    }
+
     @Operation(summary = "绑定/解绑企业微信账号")
     @PutMapping("/{id}/wecom")
     @PreAuthorize("hasRole('super_admin')")

+ 3 - 0
src/main/java/com/qqflow/engine/domain/system/dto/UserDTO.java

@@ -50,6 +50,9 @@ public class UserDTO {
     @Schema(description = "角色列表")
     private List<String> roles;
 
+    @Schema(description = "关联的角色ID列表")
+    private List<Long> roleIds;
+
     @Schema(description = "用户类型:SYSTEM-系统用户 ROLE-角色用户")
     private String userType;
 

+ 3 - 0
src/main/java/com/qqflow/engine/domain/system/service/SysUserService.java

@@ -32,6 +32,9 @@ public interface SysUserService extends IService<SysUser> {
 
     void changePassword(Long userId, String oldPassword, String newPassword);
 
+    /** 分配用户角色 */
+    void assignRoles(Long userId, List<Long> roleIds);
+
     /**
      * 绑定/解绑员工企业微信账号
      *

+ 27 - 3
src/main/java/com/qqflow/engine/domain/system/service/impl/SysUserServiceImpl.java

@@ -32,9 +32,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
 
 import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
@@ -170,6 +168,17 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser>
         List<SysDept> allDepts = sysDeptMapper.selectDeptList(null);
         Map<Long, String> deptNameMap = allDepts.stream()
                 .collect(Collectors.toMap(SysDept::getId, SysDept::getDeptName, (a, b) -> a));
+        // 批量查询用户关联的角色 ID
+        List<Long> userIds = users.stream().map(SysUser::getId).collect(Collectors.toList());
+        Map<Long, List<Long>> userRoleIdMap = new HashMap<>();
+        if (!userIds.isEmpty()) {
+            List<SysUserRole> userRoles = sysUserRoleMapper.selectList(
+                    new LambdaQueryWrapper<SysUserRole>().in(SysUserRole::getUserId, userIds));
+            for (SysUserRole ur : userRoles) {
+                userRoleIdMap.computeIfAbsent(ur.getUserId(), k -> new ArrayList<>()).add(ur.getRoleId());
+            }
+        }
+
         List<UserDTO> dtoList = users.stream().map(user -> {
             UserDTO dto = new UserDTO();
             dto.setId(user.getId());
@@ -184,6 +193,8 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser>
             dto.setWecomUserId(user.getWecomUserId());
             dto.setWecomRemindEnabled(user.getWecomRemindEnabled());
             dto.setCreateTime(user.getCreateTime());
+            List<Long> roleIds = userRoleIdMap.getOrDefault(user.getId(), Collections.emptyList());
+            dto.setRoleIds(roleIds);
             return dto;
         }).collect(Collectors.toList());
         Page<UserDTO> resultPage = new Page<>(userPage.getCurrent(), userPage.getSize(), userPage.getTotal());
@@ -300,6 +311,19 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser>
 
     @Override
     @Transactional(rollbackFor = Exception.class)
+    public void assignRoles(Long userId, List<Long> roleIds) {
+        sysUserRoleMapper.delete(
+                new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getUserId, userId));
+        if (roleIds != null && !roleIds.isEmpty()) {
+            for (Long roleId : roleIds) {
+                SysUserRole userRole = new SysUserRole();
+                userRole.setUserId(userId);
+                userRole.setRoleId(roleId);
+                sysUserRoleMapper.insert(userRole);
+            }
+        }
+    }
+
     public void changePassword(Long userId, String oldPassword, String newPassword) {
         if (userId == null) {
             throw new BusinessException("用户ID不能为空");