diff --git a/src/main/java/xyz/playedu/api/controller/backend/AdminUserController.java b/src/main/java/xyz/playedu/api/controller/backend/AdminUserController.java index 3930a1d..2c1c710 100644 --- a/src/main/java/xyz/playedu/api/controller/backend/AdminUserController.java +++ b/src/main/java/xyz/playedu/api/controller/backend/AdminUserController.java @@ -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 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 roles = roleService.list(); + HashMap 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 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 roleIds = adminUserService.getRoleIdsByUserId(adminUser.getId()); + + HashMap 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 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(); } diff --git a/src/main/java/xyz/playedu/api/request/backend/AdminUserRequest.java b/src/main/java/xyz/playedu/api/request/backend/AdminUserRequest.java index d62d4b4..10d3e3b 100644 --- a/src/main/java/xyz/playedu/api/request/backend/AdminUserRequest.java +++ b/src/main/java/xyz/playedu/api/request/backend/AdminUserRequest.java @@ -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") diff --git a/src/main/java/xyz/playedu/api/service/AdminUserRoleService.java b/src/main/java/xyz/playedu/api/service/AdminUserRoleService.java index 4987037..f1a2a65 100644 --- a/src/main/java/xyz/playedu/api/service/AdminUserRoleService.java +++ b/src/main/java/xyz/playedu/api/service/AdminUserRoleService.java @@ -12,7 +12,7 @@ import java.util.List; */ public interface AdminUserRoleService extends IService { - void removeUserRolesByUserId(Integer userId); + void removeByUserId(Integer userId); List getRoleIdsByUserId(Integer userId); diff --git a/src/main/java/xyz/playedu/api/service/AdminUserService.java b/src/main/java/xyz/playedu/api/service/AdminUserService.java index 3395028..c6e4413 100644 --- a/src/main/java/xyz/playedu/api/service/AdminUserService.java +++ b/src/main/java/xyz/playedu/api/service/AdminUserService.java @@ -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 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 getRoleIdsByUserId(Integer userId); + + void updateWithRoleIds(AdminUser user, String name, String email, String password, Integer isBanLogin, Integer[] roleIds) throws ServiceException; + + void removeWithRoleIds(Integer userId); } diff --git a/src/main/java/xyz/playedu/api/service/impl/AdminUserRoleServiceImpl.java b/src/main/java/xyz/playedu/api/service/impl/AdminUserRoleServiceImpl.java index 2b4ac2f..914831a 100644 --- a/src/main/java/xyz/playedu/api/service/impl/AdminUserRoleServiceImpl.java +++ b/src/main/java/xyz/playedu/api/service/impl/AdminUserRoleServiceImpl.java @@ -18,7 +18,7 @@ import java.util.List; public class AdminUserRoleServiceImpl extends ServiceImpl implements AdminUserRoleService { @Override - public void removeUserRolesByUserId(Integer userId) { + public void removeByUserId(Integer userId) { remove(query().getWrapper().eq("admin_id", userId)); } diff --git a/src/main/java/xyz/playedu/api/service/impl/AdminUserServiceImpl.java b/src/main/java/xyz/playedu/api/service/impl/AdminUserServiceImpl.java index 79ebdf1..e6bc50e 100644 --- a/src/main/java/xyz/playedu/api/service/impl/AdminUserServiceImpl.java +++ b/src/main/java/xyz/playedu/api/service/impl/AdminUserServiceImpl.java @@ -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 implements AdminUserService { + @Autowired + private AdminUserRoleService userRoleService; + public PaginationResult paginate(int page, int size, AdminUserPaginateFilter filter) { QueryWrapper 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 userPage = new Page<>(page, size); - userPage = this.getBaseMapper().selectPage(userPage, wrapper); + IPage pageObj = new Page<>(page, size); + pageObj = this.getBaseMapper().selectPage(pageObj, wrapper); PaginationResult 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 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 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); + } }