mirror of
https://github.com/PlayEdu/PlayEdu
synced 2025-06-23 04:22:43 +08:00
user代码优化
This commit is contained in:
parent
de0279f250
commit
75fa2abb32
@ -1,26 +1,23 @@
|
||||
package xyz.playedu.api.controller.backend;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.MapUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import xyz.playedu.api.constant.BPermissionConstant;
|
||||
import xyz.playedu.api.domain.AdminRole;
|
||||
import xyz.playedu.api.domain.AdminUser;
|
||||
import xyz.playedu.api.domain.AdminUserRole;
|
||||
import xyz.playedu.api.exception.NotFoundException;
|
||||
import xyz.playedu.api.exception.ServiceException;
|
||||
import xyz.playedu.api.middleware.BackendPermissionMiddleware;
|
||||
import xyz.playedu.api.request.backend.AdminUserRequest;
|
||||
import xyz.playedu.api.service.AdminRoleService;
|
||||
import xyz.playedu.api.service.AdminUserRoleService;
|
||||
import xyz.playedu.api.service.AdminUserService;
|
||||
import xyz.playedu.api.types.paginate.AdminUserPaginateFilter;
|
||||
import xyz.playedu.api.types.paginate.PaginationResult;
|
||||
import xyz.playedu.api.types.JsonResponse;
|
||||
import xyz.playedu.api.util.HelperUtil;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
@ -35,16 +32,13 @@ public class AdminUserController {
|
||||
@Autowired
|
||||
private AdminRoleService roleService;
|
||||
|
||||
@Autowired
|
||||
private AdminUserRoleService userRoleService;
|
||||
|
||||
@BackendPermissionMiddleware(slug = BPermissionConstant.ADMIN_USER_INDEX)
|
||||
@GetMapping("/index")
|
||||
public JsonResponse Index(
|
||||
@RequestParam(name = "page", defaultValue = "1") Integer page,
|
||||
@RequestParam(name = "size", defaultValue = "10") Integer size,
|
||||
@RequestParam(name = "name", required = false) String name
|
||||
) {
|
||||
public JsonResponse Index(@RequestParam HashMap<String, Object> params) {
|
||||
Integer page = MapUtils.getInteger(params, "page", 1);
|
||||
Integer size = MapUtils.getInteger(params, "size", 10);
|
||||
String name = MapUtils.getString(params, "name");
|
||||
|
||||
AdminUserPaginateFilter filter = new AdminUserPaginateFilter();
|
||||
if (name != null && name.length() > 0) {
|
||||
filter.setName(name);
|
||||
@ -59,122 +53,50 @@ public class AdminUserController {
|
||||
@GetMapping("/create")
|
||||
public JsonResponse create() {
|
||||
List<AdminRole> roles = roleService.list();
|
||||
|
||||
HashMap<String, Object> data = new HashMap<>();
|
||||
data.put("roles", roles);
|
||||
|
||||
return JsonResponse.data(data);
|
||||
}
|
||||
|
||||
@BackendPermissionMiddleware(slug = BPermissionConstant.ADMIN_USER_STORE)
|
||||
@PostMapping("/create")
|
||||
@Transactional
|
||||
public JsonResponse store(@RequestBody @Validated AdminUserRequest request) {
|
||||
if (request.getPassword() == null || request.getPassword().length() == 0) {
|
||||
public JsonResponse store(@RequestBody @Validated AdminUserRequest req) throws ServiceException {
|
||||
if (req.getPassword() == null || req.getPassword().length() == 0) {
|
||||
return JsonResponse.error("请输入密码");
|
||||
}
|
||||
|
||||
if (adminUserService.findByEmail(request.getEmail()) != null) {
|
||||
return JsonResponse.error("邮箱已存在");
|
||||
}
|
||||
|
||||
String salt = HelperUtil.randomString(6);
|
||||
|
||||
AdminUser adminUser = new AdminUser();
|
||||
adminUser.setName(request.getName());
|
||||
adminUser.setEmail(request.getEmail());
|
||||
adminUser.setSalt(salt);
|
||||
adminUser.setPassword(HelperUtil.MD5(request.getPassword() + salt));
|
||||
adminUser.setIsBanLogin(request.getIsBanLogin());
|
||||
adminUser.setCreatedAt(new Date());
|
||||
adminUser.setUpdatedAt(new Date());
|
||||
|
||||
if (!adminUserService.save(adminUser)) {
|
||||
return JsonResponse.error("添加管理员失败");
|
||||
}
|
||||
|
||||
if (request.getRoleIds().length > 0) {
|
||||
List<AdminUserRole> userRoles = new ArrayList<>();
|
||||
for (int i = 0; i < request.getRoleIds().length; i++) {
|
||||
AdminUserRole userRole = new AdminUserRole();
|
||||
userRole.setAdminId(adminUser.getId());
|
||||
userRole.setRoleId(request.getRoleIds()[i]);
|
||||
userRoles.add(userRole);
|
||||
}
|
||||
userRoleService.saveBatch(userRoles);
|
||||
}
|
||||
|
||||
adminUserService.createWithRoleIds(req.getName(), req.getEmail(), req.getPassword(), req.getIsBanLogin(), req.getRoleIds());
|
||||
|
||||
return JsonResponse.success();
|
||||
}
|
||||
|
||||
@BackendPermissionMiddleware(slug = BPermissionConstant.ADMIN_USER_UPDATE)
|
||||
@GetMapping("/{id}")
|
||||
public JsonResponse edit(@PathVariable Integer id) {
|
||||
AdminUser adminUser = adminUserService.findById(id);
|
||||
if (adminUser == null) {
|
||||
return JsonResponse.error("管理员不存在");
|
||||
}
|
||||
adminUser.setPassword(null);
|
||||
adminUser.setSalt(null);
|
||||
return JsonResponse.data(adminUser);
|
||||
public JsonResponse edit(@PathVariable Integer id) throws NotFoundException {
|
||||
AdminUser adminUser = adminUserService.findOrFail(id);
|
||||
List<Integer> roleIds = adminUserService.getRoleIdsByUserId(adminUser.getId());
|
||||
|
||||
HashMap<String, Object> data = new HashMap<>();
|
||||
data.put("user", adminUser);
|
||||
data.put("role_ids", roleIds);
|
||||
|
||||
return JsonResponse.data(data);
|
||||
}
|
||||
|
||||
@BackendPermissionMiddleware(slug = BPermissionConstant.ADMIN_USER_UPDATE)
|
||||
@PutMapping("/{id}")
|
||||
@Transactional
|
||||
public JsonResponse update(@PathVariable Integer id, @RequestBody @Validated AdminUserRequest request) {
|
||||
AdminUser adminUser = adminUserService.findById(id);
|
||||
if (adminUser == null) {
|
||||
return JsonResponse.error("管理员不存在");
|
||||
}
|
||||
|
||||
AdminUser updateAdminUser = new AdminUser();
|
||||
updateAdminUser.setId(adminUser.getId());
|
||||
|
||||
if (!adminUser.getEmail().equals(request.getEmail())) {//更换了邮箱
|
||||
if (adminUserService.findByEmail(request.getEmail()) != null) {
|
||||
return JsonResponse.error("邮箱已存在");
|
||||
}
|
||||
updateAdminUser.setEmail(request.getEmail());
|
||||
}
|
||||
|
||||
if (request.getPassword() != null && request.getPassword().length() > 0) {//更换了密码
|
||||
updateAdminUser.setPassword(HelperUtil.MD5(request.getPassword() + adminUser.getSalt()));
|
||||
}
|
||||
|
||||
if (!request.getName().equals(adminUser.getName())) {//更换了姓名
|
||||
updateAdminUser.setName(request.getName());
|
||||
}
|
||||
|
||||
if (!adminUserService.updateById(updateAdminUser)) {
|
||||
return JsonResponse.error("更新管理员资料失败");
|
||||
}
|
||||
|
||||
// 先删除管理员与权限的已有关联关系
|
||||
userRoleService.removeUserRolesByUserId(adminUser.getId());
|
||||
|
||||
if (request.getRoleIds().length > 0) {
|
||||
// 重新绑定关联关系
|
||||
List<AdminUserRole> userRoles = new ArrayList<>();
|
||||
for (int i = 0; i < request.getRoleIds().length; i++) {
|
||||
AdminUserRole userRole = new AdminUserRole();
|
||||
userRole.setAdminId(adminUser.getId());
|
||||
userRole.setRoleId(request.getRoleIds()[i]);
|
||||
userRoles.add(userRole);
|
||||
}
|
||||
userRoleService.saveBatch(userRoles);
|
||||
}
|
||||
|
||||
public JsonResponse update(@PathVariable Integer id, @RequestBody @Validated AdminUserRequest req) throws NotFoundException, ServiceException {
|
||||
AdminUser adminUser = adminUserService.findOrFail(id);
|
||||
adminUserService.updateWithRoleIds(adminUser, req.getName(), req.getEmail(), req.getPassword(), req.getIsBanLogin(), req.getRoleIds());
|
||||
return JsonResponse.success();
|
||||
}
|
||||
|
||||
@BackendPermissionMiddleware(slug = BPermissionConstant.ADMIN_USER_DESTROY)
|
||||
@DeleteMapping("/{id}")
|
||||
@Transactional
|
||||
public JsonResponse destroy(@PathVariable Integer id) {
|
||||
if (!adminUserService.removeById(id)) {
|
||||
return JsonResponse.error("删除管理员失败");
|
||||
}
|
||||
userRoleService.removeUserRolesByUserId(id);
|
||||
adminUserService.removeWithRoleIds(id);
|
||||
return JsonResponse.success();
|
||||
}
|
||||
|
||||
|
@ -2,6 +2,7 @@ package xyz.playedu.api.request.backend;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import jakarta.validation.constraints.Email;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
import org.hibernate.validator.constraints.Length;
|
||||
@ -19,14 +20,17 @@ public class AdminUserRequest implements Serializable {
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@NotNull(message = "请输入管理员姓名")
|
||||
@NotNull(message = "name参数不存在")
|
||||
@NotBlank(message = "请输入管理员姓名")
|
||||
@Length(min = 1, max = 12, message = "管理员姓名长度在1-12个字符之间")
|
||||
private String name;
|
||||
|
||||
@NotNull(message = "请输入管理员邮箱")
|
||||
@NotNull(message = "email参数不存在")
|
||||
@NotBlank(message = "请输入管理员邮箱")
|
||||
@Email(message = "请输入合法邮箱")
|
||||
private String email;
|
||||
|
||||
@NotNull(message = "password参数不存在")
|
||||
private String password;
|
||||
|
||||
@JsonProperty("is_ban_login")
|
||||
|
@ -12,7 +12,7 @@ import java.util.List;
|
||||
*/
|
||||
public interface AdminUserRoleService extends IService<AdminUserRole> {
|
||||
|
||||
void removeUserRolesByUserId(Integer userId);
|
||||
void removeByUserId(Integer userId);
|
||||
|
||||
List<Integer> getRoleIdsByUserId(Integer userId);
|
||||
|
||||
|
@ -2,9 +2,13 @@ package xyz.playedu.api.service;
|
||||
|
||||
import xyz.playedu.api.domain.AdminUser;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import xyz.playedu.api.exception.NotFoundException;
|
||||
import xyz.playedu.api.exception.ServiceException;
|
||||
import xyz.playedu.api.types.paginate.AdminUserPaginateFilter;
|
||||
import xyz.playedu.api.types.paginate.PaginationResult;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author tengteng
|
||||
* @description 针对表【admin_users】的数据库操作Service
|
||||
@ -15,5 +19,21 @@ public interface AdminUserService extends IService<AdminUser> {
|
||||
|
||||
AdminUser findByEmail(String email);
|
||||
|
||||
Boolean emailExists(String email);
|
||||
|
||||
AdminUser findById(Integer id);
|
||||
|
||||
AdminUser findOrFail(Integer id) throws NotFoundException;
|
||||
|
||||
void createWithRoleIds(String name, String email, String password, Integer isBanLogin, Integer[] roleIds) throws ServiceException;
|
||||
|
||||
void relateRoles(AdminUser user, Integer[] roleIds);
|
||||
|
||||
void resetRelateRoles(AdminUser user, Integer[] roleIds);
|
||||
|
||||
List<Integer> getRoleIdsByUserId(Integer userId);
|
||||
|
||||
void updateWithRoleIds(AdminUser user, String name, String email, String password, Integer isBanLogin, Integer[] roleIds) throws ServiceException;
|
||||
|
||||
void removeWithRoleIds(Integer userId);
|
||||
}
|
||||
|
@ -18,7 +18,7 @@ import java.util.List;
|
||||
public class AdminUserRoleServiceImpl extends ServiceImpl<AdminUserRoleMapper, AdminUserRole> implements AdminUserRoleService {
|
||||
|
||||
@Override
|
||||
public void removeUserRolesByUserId(Integer userId) {
|
||||
public void removeByUserId(Integer userId) {
|
||||
remove(query().getWrapper().eq("admin_id", userId));
|
||||
}
|
||||
|
||||
|
@ -4,34 +4,49 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import xyz.playedu.api.domain.AdminUser;
|
||||
import xyz.playedu.api.domain.AdminUserRole;
|
||||
import xyz.playedu.api.exception.NotFoundException;
|
||||
import xyz.playedu.api.exception.ServiceException;
|
||||
import xyz.playedu.api.service.AdminUserRoleService;
|
||||
import xyz.playedu.api.service.AdminUserService;
|
||||
import xyz.playedu.api.mapper.AdminUserMapper;
|
||||
import org.springframework.stereotype.Service;
|
||||
import xyz.playedu.api.types.JsonResponse;
|
||||
import xyz.playedu.api.types.paginate.AdminUserPaginateFilter;
|
||||
import xyz.playedu.api.types.paginate.PaginationResult;
|
||||
import xyz.playedu.api.util.HelperUtil;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser> implements AdminUserService {
|
||||
|
||||
@Autowired
|
||||
private AdminUserRoleService userRoleService;
|
||||
|
||||
public PaginationResult<AdminUser> paginate(int page, int size, AdminUserPaginateFilter filter) {
|
||||
QueryWrapper<AdminUser> wrapper = query().getWrapper().eq("1", "1");
|
||||
if (filter != null) {
|
||||
if (filter.getName() != null) {
|
||||
wrapper.like("name", "%" + filter.getName() + "%");
|
||||
}
|
||||
|
||||
if (filter.getName() != null) {
|
||||
wrapper.like("name", "%" + filter.getName() + "%");
|
||||
}
|
||||
|
||||
IPage<AdminUser> userPage = new Page<>(page, size);
|
||||
userPage = this.getBaseMapper().selectPage(userPage, wrapper);
|
||||
IPage<AdminUser> pageObj = new Page<>(page, size);
|
||||
pageObj = this.getBaseMapper().selectPage(pageObj, wrapper);
|
||||
|
||||
PaginationResult<AdminUser> pageResult = new PaginationResult<>();
|
||||
pageResult.setData(userPage.getRecords());
|
||||
pageResult.setTotal(userPage.getTotal());
|
||||
pageResult.setData(pageObj.getRecords());
|
||||
pageResult.setTotal(pageObj.getTotal());
|
||||
|
||||
return pageResult;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AdminUser findByEmail(String email) {
|
||||
return getOne(query().getWrapper().eq("email", email));
|
||||
}
|
||||
@ -40,6 +55,107 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser
|
||||
public AdminUser findById(Integer id) {
|
||||
return getOne((query().getWrapper().eq("id", id)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public AdminUser findOrFail(Integer id) throws NotFoundException {
|
||||
AdminUser user = getOne(query().getWrapper().eq("id", id));
|
||||
if (user == null) {
|
||||
throw new NotFoundException("管理员不存在");
|
||||
}
|
||||
return user;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean emailExists(String email) {
|
||||
AdminUser user = findByEmail(email);
|
||||
return user != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void createWithRoleIds(String name, String email, String password, Integer isBanLogin, Integer[] roleIds) throws ServiceException {
|
||||
if (emailExists(email)) {
|
||||
throw new ServiceException("邮箱已存在");
|
||||
}
|
||||
|
||||
String salt = HelperUtil.randomString(6);
|
||||
|
||||
AdminUser adminUser = new AdminUser();
|
||||
adminUser.setName(name);
|
||||
adminUser.setEmail(email);
|
||||
adminUser.setSalt(salt);
|
||||
adminUser.setPassword(HelperUtil.MD5(password + salt));
|
||||
adminUser.setIsBanLogin(isBanLogin);
|
||||
adminUser.setCreatedAt(new Date());
|
||||
adminUser.setUpdatedAt(new Date());
|
||||
|
||||
save(adminUser);
|
||||
|
||||
relateRoles(adminUser, roleIds);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void relateRoles(AdminUser user, Integer[] roleIds) {
|
||||
if (roleIds == null || roleIds.length == 0) {
|
||||
return;
|
||||
}
|
||||
List<AdminUserRole> userRoles = new ArrayList<>();
|
||||
for (int i = 0; i < roleIds.length; i++) {
|
||||
AdminUserRole userRole = new AdminUserRole();
|
||||
userRole.setAdminId(user.getId());
|
||||
userRole.setRoleId(roleIds[i]);
|
||||
userRoles.add(userRole);
|
||||
}
|
||||
userRoleService.saveBatch(userRoles);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resetRelateRoles(AdminUser user, Integer[] roleIds) {
|
||||
userRoleService.removeByUserId(user.getId());
|
||||
relateRoles(user, roleIds);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Integer> getRoleIdsByUserId(Integer userId) {
|
||||
return userRoleService.getRoleIdsByUserId(userId);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void updateWithRoleIds(AdminUser user, String name, String email, String password, Integer isBanLogin, Integer[] roleIds) throws ServiceException {
|
||||
AdminUser updateAdminUser = new AdminUser();
|
||||
updateAdminUser.setId(user.getId());
|
||||
|
||||
if (!user.getEmail().equals(email)) {//更换了邮箱
|
||||
if (emailExists(email)) {
|
||||
throw new ServiceException("邮箱已存在");
|
||||
}
|
||||
updateAdminUser.setEmail(email);
|
||||
}
|
||||
|
||||
if (password != null && password.length() > 0) {//更换了密码
|
||||
updateAdminUser.setPassword(HelperUtil.MD5(password + user.getSalt()));
|
||||
}
|
||||
|
||||
if (!user.getName().equals(name)) {//更换了姓名
|
||||
updateAdminUser.setName(name);
|
||||
}
|
||||
|
||||
if (!user.getIsBanLogin().equals(isBanLogin)) {
|
||||
updateAdminUser.setIsBanLogin(isBanLogin);
|
||||
}
|
||||
|
||||
updateById(updateAdminUser);
|
||||
|
||||
resetRelateRoles(user, roleIds);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void removeWithRoleIds(Integer userId) {
|
||||
userRoleService.removeByUserId(userId);
|
||||
removeById(userId);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user