feat:角色用户关联--设置用户

This commit is contained in:
Zhujx
2025-08-29 16:35:20 +08:00
parent e320af73ea
commit dfa08559e5
9 changed files with 96 additions and 10 deletions

View File

@@ -6,7 +6,7 @@ import lombok.Getter;
@Getter @Getter
@AllArgsConstructor @AllArgsConstructor
public enum UserErrorCode implements BaseErrorCode { public enum Code01UserErrorCode implements BaseErrorCode {
USER_NOT_EXISTS("A1000101", "用户不存在"), USER_NOT_EXISTS("A1000101", "用户不存在"),
USER_EXISTS("A1000102", "用户已存在"), USER_EXISTS("A1000102", "用户已存在"),

View File

@@ -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;
}

View File

@@ -1,4 +1,23 @@
package com.xiang.xservice.auth.api.dto.req.role; 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 { public class RoleUserUpdateRequest {
/**
* 用户id集合
*/
private List<Long> userIds;
/**
* 角色id
*/
private Long roleId;
} }

View File

@@ -84,7 +84,15 @@ public class RoleController {
@PostMapping("/private/role/setUser") @PostMapping("/private/role/setUser")
public Result<Boolean> setUserRole(@RequestBody @Valid @NotNull(message = "请求参数不能为空") RoleUserUpdateRequest request) { public Result<Boolean> 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();
} }
} }

View File

@@ -1,6 +1,7 @@
package com.xiang.xservice.auth.service.repository.mapper; package com.xiang.xservice.auth.service.repository.mapper;
import com.xiang.xservice.auth.service.entity.XRole; 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.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
@@ -18,5 +19,5 @@ public interface XRoleMapper {
List<XRole> getRoleList(XRole record); List<XRole> getRoleList(XRole record);
XRole getRoleById(Long id); XRole getRoleById(Long id);
List<XRole> getRoleByIds(@Param("ids") List<Long> ids); List<XRole> getRoleByIds(@Param("ids") List<Long> ids);
int addBatch(List<XUserRole> list);
} }

View File

@@ -20,6 +20,6 @@ public interface RoleService {
Boolean delRole(List<Long> ids); Boolean delRole(List<Long> ids);
Boolean setUserDept(RoleUserUpdateRequest request); Boolean setUserRole(RoleUserUpdateRequest request);
} }

View File

@@ -1,6 +1,7 @@
package com.xiang.xservice.auth.service.service.impl; package com.xiang.xservice.auth.service.service.impl;
import com.google.common.collect.Lists; 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.RoleAddRequest;
import com.xiang.xservice.auth.api.dto.req.role.RoleQueryRequest; import com.xiang.xservice.auth.api.dto.req.role.RoleQueryRequest;
import com.xiang.xservice.auth.api.dto.req.role.RoleUpdateRequest; 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.api.dto.resp.RoleDTO;
import com.xiang.xservice.auth.service.convert.XRoleConvert; import com.xiang.xservice.auth.service.convert.XRoleConvert;
import com.xiang.xservice.auth.service.entity.XRole; 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.repository.mapper.XRoleMapper;
import com.xiang.xservice.auth.service.service.RoleService; import com.xiang.xservice.auth.service.service.RoleService;
import com.xiang.xservice.basic.exception.BusinessException;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import java.util.Objects;
@Slf4j
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
public class XRoleServiceImpl implements RoleService { public class XRoleServiceImpl implements RoleService {
private final static int BATCH_SIZE = 500;
private final XRoleMapper roleMapper; private final XRoleMapper roleMapper;
private final XRoleConvert roleConvert; private final XRoleConvert roleConvert;
@@ -60,7 +67,32 @@ public class XRoleServiceImpl implements RoleService {
} }
@Override @Override
public Boolean setUserDept(RoleUserUpdateRequest request) { public Boolean setUserRole(RoleUserUpdateRequest request) {
return null; XRole role = roleMapper.getRoleById(request.getRoleId());
if (Objects.isNull(role)) {
log.error("查询角色信息不存在角色id:{}", request.getRoleId());
throw new BusinessException(Code02RoleErrorCode.ROLE_NOT_EXISTS);
}
List<XUserRole> 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<List<XUserRole>> partition = Lists.partition(params, BATCH_SIZE);
for (List<XUserRole> list : partition) {
if (roleMapper.addBatch(list) <= 0) {
flag = false;
}
}
} else {
return roleMapper.addBatch(params) > 0;
}
}
return flag;
} }
} }

View File

@@ -1,7 +1,7 @@
package com.xiang.xservice.auth.service.service.impl; package com.xiang.xservice.auth.service.service.impl;
import com.google.common.collect.Lists; 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.LoginRequest;
import com.xiang.xservice.auth.api.dto.req.RegisterRequest; import com.xiang.xservice.auth.api.dto.req.RegisterRequest;
import com.xiang.xservice.auth.api.dto.req.user.UserAddRequest; import com.xiang.xservice.auth.api.dto.req.user.UserAddRequest;
@@ -91,7 +91,7 @@ public class XUserServiceImpl implements XUserService {
public UserResp getUserByUsername(String username) { public UserResp getUserByUsername(String username) {
XUser user = userMapper.selectByUsername(username); XUser user = userMapper.selectByUsername(username);
if (Objects.isNull(user)) { if (Objects.isNull(user)) {
throw new BusinessException(UserErrorCode.USER_NOT_EXISTS); throw new BusinessException(Code01UserErrorCode.USER_NOT_EXISTS);
} }
UserResp userResp = new UserResp(); UserResp userResp = new UserResp();
@@ -112,7 +112,7 @@ public class XUserServiceImpl implements XUserService {
// todo 手机号验证码校验 // todo 手机号验证码校验
XUser user = userMapper.selectByUsername(request.getUsername()); XUser user = userMapper.selectByUsername(request.getUsername());
if (Objects.nonNull(user)) { if (Objects.nonNull(user)) {
throw new BusinessException(UserErrorCode.USER_EXISTS); throw new BusinessException(Code01UserErrorCode.USER_EXISTS);
} }
user = new XUser(); user = new XUser();
user.setName(request.getName()); user.setName(request.getName());
@@ -190,7 +190,7 @@ public class XUserServiceImpl implements XUserService {
XUser user = userMapper.getUserById(request.getUserId()); XUser user = userMapper.getUserById(request.getUserId());
if (Objects.isNull(user)) { if (Objects.isNull(user)) {
log.error("查询用户信息不存在用户id:{}", request.getUserId()); log.error("查询用户信息不存在用户id:{}", request.getUserId());
throw new BusinessException(UserErrorCode.USER_NOT_EXISTS); throw new BusinessException(Code01UserErrorCode.USER_NOT_EXISTS);
} }
List<XUserRole> params = Lists.newArrayList(); List<XUserRole> params = Lists.newArrayList();
for (Long roleId : request.getRoleIds()) { for (Long roleId : request.getRoleIds()) {

View File

@@ -90,6 +90,12 @@
</if> </if>
</trim> </trim>
</insert> </insert>
<insert id="addBatch">
insert into x_role(user_id, role_id) values
<foreach collection="list" item="item" separator=",">
(#{item.userId}, #{item.roleId})
</foreach>
</insert>
<update id="delBatch" > <update id="delBatch" >
update x_role set del_flag = 0, update_time = #{time}, update_by = #{operator} where id in update x_role set del_flag = 0, update_time = #{time}, update_by = #{operator} where id in