diff --git a/xs-api/src/main/java/com/xiang/xservice/auth/api/code/UserErrorCode.java b/xs-api/src/main/java/com/xiang/xservice/auth/api/code/Code01UserErrorCode.java similarity index 89% rename from xs-api/src/main/java/com/xiang/xservice/auth/api/code/UserErrorCode.java rename to xs-api/src/main/java/com/xiang/xservice/auth/api/code/Code01UserErrorCode.java index 20af566..796fac0 100644 --- a/xs-api/src/main/java/com/xiang/xservice/auth/api/code/UserErrorCode.java +++ b/xs-api/src/main/java/com/xiang/xservice/auth/api/code/Code01UserErrorCode.java @@ -6,7 +6,7 @@ import lombok.Getter; @Getter @AllArgsConstructor -public enum UserErrorCode implements BaseErrorCode { +public enum Code01UserErrorCode implements BaseErrorCode { USER_NOT_EXISTS("A1000101", "用户不存在"), USER_EXISTS("A1000102", "用户已存在"), diff --git a/xs-api/src/main/java/com/xiang/xservice/auth/api/code/Code02RoleErrorCode.java b/xs-api/src/main/java/com/xiang/xservice/auth/api/code/Code02RoleErrorCode.java new file mode 100644 index 0000000..b6561a5 --- /dev/null +++ b/xs-api/src/main/java/com/xiang/xservice/auth/api/code/Code02RoleErrorCode.java @@ -0,0 +1,20 @@ +package com.xiang.xservice.auth.api.code; + +import com.xiang.xservice.basic.exception.code.BaseErrorCode; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @Author: xiang + * @Date: 2025-08-29 16:27 + */ +@Getter +@AllArgsConstructor +public enum Code02RoleErrorCode implements BaseErrorCode { + + ROLE_NOT_EXISTS("A1000201", "角色不存在"), + ; + + private final String code; + private final String message; +} diff --git a/xs-api/src/main/java/com/xiang/xservice/auth/api/dto/req/role/RoleUserUpdateRequest.java b/xs-api/src/main/java/com/xiang/xservice/auth/api/dto/req/role/RoleUserUpdateRequest.java index 80fbabe..abcd52d 100644 --- a/xs-api/src/main/java/com/xiang/xservice/auth/api/dto/req/role/RoleUserUpdateRequest.java +++ b/xs-api/src/main/java/com/xiang/xservice/auth/api/dto/req/role/RoleUserUpdateRequest.java @@ -1,4 +1,23 @@ package com.xiang.xservice.auth.api.dto.req.role; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor public class RoleUserUpdateRequest { + + /** + * 用户id集合 + */ + private List userIds; + + /** + * 角色id + */ + private Long roleId; } diff --git a/xs-server/src/main/java/com/xiang/xservice/auth/server/controller/RoleController.java b/xs-server/src/main/java/com/xiang/xservice/auth/server/controller/RoleController.java index 572454e..21d21d6 100644 --- a/xs-server/src/main/java/com/xiang/xservice/auth/server/controller/RoleController.java +++ b/xs-server/src/main/java/com/xiang/xservice/auth/server/controller/RoleController.java @@ -84,7 +84,15 @@ public class RoleController { @PostMapping("/private/role/setUser") public Result setUserRole(@RequestBody @Valid @NotNull(message = "请求参数不能为空") RoleUserUpdateRequest request) { - return Result.success(true); + try { + return Result.success(roleService.setUserRole(request)); + } catch (BusinessException e) { + log.error("角色用户关联异常,请求:{}", JSON.toJSONString(request), e); + return Result.error(e.getMessage()); + } catch (Exception e) { + log.error("角色用户关联异常,请求:{}", JSON.toJSONString(request), e); + } + return Result.error(); } } diff --git a/xs-service/src/main/java/com/xiang/xservice/auth/service/repository/mapper/XRoleMapper.java b/xs-service/src/main/java/com/xiang/xservice/auth/service/repository/mapper/XRoleMapper.java index a1dc582..55948ee 100644 --- a/xs-service/src/main/java/com/xiang/xservice/auth/service/repository/mapper/XRoleMapper.java +++ b/xs-service/src/main/java/com/xiang/xservice/auth/service/repository/mapper/XRoleMapper.java @@ -1,6 +1,7 @@ package com.xiang.xservice.auth.service.repository.mapper; import com.xiang.xservice.auth.service.entity.XRole; +import com.xiang.xservice.auth.service.entity.XUserRole; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; @@ -18,5 +19,5 @@ public interface XRoleMapper { List getRoleList(XRole record); XRole getRoleById(Long id); List getRoleByIds(@Param("ids") List ids); - + int addBatch(List list); } diff --git a/xs-service/src/main/java/com/xiang/xservice/auth/service/service/RoleService.java b/xs-service/src/main/java/com/xiang/xservice/auth/service/service/RoleService.java index af7c76f..5b500dd 100644 --- a/xs-service/src/main/java/com/xiang/xservice/auth/service/service/RoleService.java +++ b/xs-service/src/main/java/com/xiang/xservice/auth/service/service/RoleService.java @@ -20,6 +20,6 @@ public interface RoleService { Boolean delRole(List ids); - Boolean setUserDept(RoleUserUpdateRequest request); + Boolean setUserRole(RoleUserUpdateRequest request); } diff --git a/xs-service/src/main/java/com/xiang/xservice/auth/service/service/impl/XRoleServiceImpl.java b/xs-service/src/main/java/com/xiang/xservice/auth/service/service/impl/XRoleServiceImpl.java index 748e825..ac96e20 100644 --- a/xs-service/src/main/java/com/xiang/xservice/auth/service/service/impl/XRoleServiceImpl.java +++ b/xs-service/src/main/java/com/xiang/xservice/auth/service/service/impl/XRoleServiceImpl.java @@ -1,6 +1,7 @@ package com.xiang.xservice.auth.service.service.impl; import com.google.common.collect.Lists; +import com.xiang.xservice.auth.api.code.Code02RoleErrorCode; import com.xiang.xservice.auth.api.dto.req.role.RoleAddRequest; import com.xiang.xservice.auth.api.dto.req.role.RoleQueryRequest; import com.xiang.xservice.auth.api.dto.req.role.RoleUpdateRequest; @@ -8,18 +9,24 @@ import com.xiang.xservice.auth.api.dto.req.role.RoleUserUpdateRequest; import com.xiang.xservice.auth.api.dto.resp.RoleDTO; import com.xiang.xservice.auth.service.convert.XRoleConvert; import com.xiang.xservice.auth.service.entity.XRole; +import com.xiang.xservice.auth.service.entity.XUserRole; import com.xiang.xservice.auth.service.repository.mapper.XRoleMapper; import com.xiang.xservice.auth.service.service.RoleService; +import com.xiang.xservice.basic.exception.BusinessException; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Service; import java.time.LocalDateTime; import java.util.List; +import java.util.Objects; +@Slf4j @Service @RequiredArgsConstructor public class XRoleServiceImpl implements RoleService { + private final static int BATCH_SIZE = 500; private final XRoleMapper roleMapper; private final XRoleConvert roleConvert; @@ -60,7 +67,32 @@ public class XRoleServiceImpl implements RoleService { } @Override - public Boolean setUserDept(RoleUserUpdateRequest request) { - return null; + public Boolean setUserRole(RoleUserUpdateRequest request) { + XRole role = roleMapper.getRoleById(request.getRoleId()); + if (Objects.isNull(role)) { + log.error("查询角色信息不存在!角色id:{}", request.getRoleId()); + throw new BusinessException(Code02RoleErrorCode.ROLE_NOT_EXISTS); + } + List params = Lists.newArrayList(); + for (Long userId : request.getUserIds()) { + XUserRole xUserRole = new XUserRole(); + xUserRole.setRoleId(request.getRoleId()); + xUserRole.setUserId(userId); + params.add(xUserRole); + } + Boolean flag = Boolean.TRUE; + if (CollectionUtils.isNotEmpty(params)) { + if (params.size() > BATCH_SIZE) { + List> partition = Lists.partition(params, BATCH_SIZE); + for (List list : partition) { + if (roleMapper.addBatch(list) <= 0) { + flag = false; + } + } + } else { + return roleMapper.addBatch(params) > 0; + } + } + return flag; } } diff --git a/xs-service/src/main/java/com/xiang/xservice/auth/service/service/impl/XUserServiceImpl.java b/xs-service/src/main/java/com/xiang/xservice/auth/service/service/impl/XUserServiceImpl.java index b7a09d6..0ee4e14 100644 --- a/xs-service/src/main/java/com/xiang/xservice/auth/service/service/impl/XUserServiceImpl.java +++ b/xs-service/src/main/java/com/xiang/xservice/auth/service/service/impl/XUserServiceImpl.java @@ -1,7 +1,7 @@ package com.xiang.xservice.auth.service.service.impl; import com.google.common.collect.Lists; -import com.xiang.xservice.auth.api.code.UserErrorCode; +import com.xiang.xservice.auth.api.code.Code01UserErrorCode; import com.xiang.xservice.auth.api.dto.req.LoginRequest; import com.xiang.xservice.auth.api.dto.req.RegisterRequest; import com.xiang.xservice.auth.api.dto.req.user.UserAddRequest; @@ -91,7 +91,7 @@ public class XUserServiceImpl implements XUserService { public UserResp getUserByUsername(String username) { XUser user = userMapper.selectByUsername(username); if (Objects.isNull(user)) { - throw new BusinessException(UserErrorCode.USER_NOT_EXISTS); + throw new BusinessException(Code01UserErrorCode.USER_NOT_EXISTS); } UserResp userResp = new UserResp(); @@ -112,7 +112,7 @@ public class XUserServiceImpl implements XUserService { // todo 手机号验证码校验 XUser user = userMapper.selectByUsername(request.getUsername()); if (Objects.nonNull(user)) { - throw new BusinessException(UserErrorCode.USER_EXISTS); + throw new BusinessException(Code01UserErrorCode.USER_EXISTS); } user = new XUser(); user.setName(request.getName()); @@ -190,7 +190,7 @@ public class XUserServiceImpl implements XUserService { XUser user = userMapper.getUserById(request.getUserId()); if (Objects.isNull(user)) { log.error("查询用户信息不存在!用户id:{}", request.getUserId()); - throw new BusinessException(UserErrorCode.USER_NOT_EXISTS); + throw new BusinessException(Code01UserErrorCode.USER_NOT_EXISTS); } List params = Lists.newArrayList(); for (Long roleId : request.getRoleIds()) { diff --git a/xs-service/src/main/resources/mapper/user/XRoleMapper.xml b/xs-service/src/main/resources/mapper/user/XRoleMapper.xml index 49bb745..8c331e6 100644 --- a/xs-service/src/main/resources/mapper/user/XRoleMapper.xml +++ b/xs-service/src/main/resources/mapper/user/XRoleMapper.xml @@ -90,6 +90,12 @@ + + insert into x_role(user_id, role_id) values + + (#{item.userId}, #{item.roleId}) + + update x_role set del_flag = 0, update_time = #{time}, update_by = #{operator} where id in