增加管理员模块的增删改查~
This commit is contained in:
parent
ffeb866b91
commit
36f62b2459
@ -6,27 +6,27 @@ import cn.iocoder.mall.admin.api.ResourceService;
|
|||||||
import cn.iocoder.mall.admin.api.bo.AdminPageBO;
|
import cn.iocoder.mall.admin.api.bo.AdminPageBO;
|
||||||
import cn.iocoder.mall.admin.api.bo.ResourceBO;
|
import cn.iocoder.mall.admin.api.bo.ResourceBO;
|
||||||
import cn.iocoder.mall.admin.api.constant.ResourceConstants;
|
import cn.iocoder.mall.admin.api.constant.ResourceConstants;
|
||||||
|
import cn.iocoder.mall.admin.api.dto.AdminAddDTO;
|
||||||
import cn.iocoder.mall.admin.api.dto.AdminPageDTO;
|
import cn.iocoder.mall.admin.api.dto.AdminPageDTO;
|
||||||
|
import cn.iocoder.mall.admin.api.dto.AdminUpdateDTO;
|
||||||
import cn.iocoder.mall.admin.application.convert.AdminConvert;
|
import cn.iocoder.mall.admin.application.convert.AdminConvert;
|
||||||
import cn.iocoder.mall.admin.application.convert.ResourceConvert;
|
import cn.iocoder.mall.admin.application.convert.ResourceConvert;
|
||||||
import cn.iocoder.mall.admin.application.vo.AdminMenuTreeNodeVO;
|
import cn.iocoder.mall.admin.application.vo.AdminMenuTreeNodeVO;
|
||||||
import cn.iocoder.mall.admin.application.vo.AdminPageVO;
|
import cn.iocoder.mall.admin.application.vo.AdminPageVO;
|
||||||
|
import cn.iocoder.mall.admin.application.vo.AdminVO;
|
||||||
import cn.iocoder.mall.admin.sdk.context.AdminSecurityContextHolder;
|
import cn.iocoder.mall.admin.sdk.context.AdminSecurityContextHolder;
|
||||||
import com.alibaba.dubbo.config.annotation.Reference;
|
import com.alibaba.dubbo.config.annotation.Reference;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiImplicitParam;
|
import io.swagger.annotations.ApiImplicitParam;
|
||||||
import io.swagger.annotations.ApiImplicitParams;
|
import io.swagger.annotations.ApiImplicitParams;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestParam;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("admin/admin")
|
@RequestMapping("admins/admin")
|
||||||
@Api("管理员模块")
|
@Api("管理员模块")
|
||||||
public class AdminController {
|
public class AdminController {
|
||||||
|
|
||||||
@ -88,4 +88,52 @@ public class AdminController {
|
|||||||
return AdminConvert.INSTANCE.convert(result);
|
return AdminConvert.INSTANCE.convert(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/add")
|
||||||
|
@ApiOperation(value = "创建管理员")
|
||||||
|
@ApiImplicitParams({
|
||||||
|
@ApiImplicitParam(name = "username", value = "账号", required = true, example = "15601691300"),
|
||||||
|
@ApiImplicitParam(name = "nickname", value = "昵称", required = true, example = "小王"),
|
||||||
|
@ApiImplicitParam(name = "password", value = "密码", required = true, example = "buzhidao"),
|
||||||
|
})
|
||||||
|
public CommonResult<AdminVO> add(@RequestParam("username") String username,
|
||||||
|
@RequestParam("nickname") String nickname,
|
||||||
|
@RequestParam("password") String password) {
|
||||||
|
AdminAddDTO adminAddDTO = new AdminAddDTO().setUsername(username).setNickname(nickname).setPassword(password);
|
||||||
|
return AdminConvert.INSTANCE.convert2(adminService.addAdmin(AdminSecurityContextHolder.getContext().getAdminId(), adminAddDTO));
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/update")
|
||||||
|
@ApiOperation(value = "更新管理员")
|
||||||
|
@ApiImplicitParams({
|
||||||
|
@ApiImplicitParam(name = "id", value = "管理员编号", required = true, example = "1"),
|
||||||
|
@ApiImplicitParam(name = "username", value = "账号", required = true, example = "15601691300"),
|
||||||
|
@ApiImplicitParam(name = "nickname", value = "昵称", required = true, example = "小王"),
|
||||||
|
@ApiImplicitParam(name = "password", value = "密码", required = true, example = "buzhidao"),
|
||||||
|
})
|
||||||
|
public CommonResult<Boolean> update(@RequestParam("id") Integer id,
|
||||||
|
@RequestParam("username") String username,
|
||||||
|
@RequestParam("nickname") String nickname,
|
||||||
|
@RequestParam("password") String password) {
|
||||||
|
AdminUpdateDTO adminUpdateDTO = new AdminUpdateDTO().setId(id).setUsername(username).setNickname(nickname).setPassword(password);
|
||||||
|
return adminService.updateAdmin(AdminSecurityContextHolder.getContext().getAdminId(), adminUpdateDTO);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/update_status")
|
||||||
|
@ApiOperation(value = "更新管理员状态")
|
||||||
|
@ApiImplicitParams({
|
||||||
|
@ApiImplicitParam(name = "id", value = "管理员编号", required = true, example = "1"),
|
||||||
|
@ApiImplicitParam(name = "status", value = "状态。1 - 开启;2 - 禁用", required = true, example = "1"),
|
||||||
|
})
|
||||||
|
public CommonResult<Boolean> updateStatus(@RequestParam("id") Integer id,
|
||||||
|
@RequestParam("status") Integer status) {
|
||||||
|
return adminService.updateAdminStatus(AdminSecurityContextHolder.getContext().getAdminId(), id, status);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/delete")
|
||||||
|
@ApiOperation(value = "删除管理员")
|
||||||
|
@ApiImplicitParam(name = "id", value = "管理员编号", required = true, example = "1")
|
||||||
|
public CommonResult<Boolean> delete(@RequestParam("id") Integer id) {
|
||||||
|
return adminService.deleteAdmin(AdminSecurityContextHolder.getContext().getAdminId(), id);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -16,7 +16,7 @@ import io.swagger.annotations.ApiOperation;
|
|||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("admin/passport")
|
@RequestMapping("admins/passport")
|
||||||
@Api("Admin Passport 模块")
|
@Api("Admin Passport 模块")
|
||||||
public class PassportController {
|
public class PassportController {
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ import java.util.Map;
|
|||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("admin/resource")
|
@RequestMapping("admins/resource")
|
||||||
@Api("资源模块")
|
@Api("资源模块")
|
||||||
public class ResourceController {
|
public class ResourceController {
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ import java.util.*;
|
|||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("admin/role")
|
@RequestMapping("admins/role")
|
||||||
public class RoleController {
|
public class RoleController {
|
||||||
|
|
||||||
@Reference(validation = "true")
|
@Reference(validation = "true")
|
||||||
|
@ -22,6 +22,9 @@ public interface AdminConvert {
|
|||||||
@Mappings({})
|
@Mappings({})
|
||||||
AdminVO convert(AdminBO adminBO);
|
AdminVO convert(AdminBO adminBO);
|
||||||
|
|
||||||
|
@Mappings({})
|
||||||
|
CommonResult<AdminVO> convert2(CommonResult<AdminBO> result);
|
||||||
|
|
||||||
@Mappings({})
|
@Mappings({})
|
||||||
CommonResult<AdminPageVO> convert(CommonResult<AdminPageBO> result);
|
CommonResult<AdminPageVO> convert(CommonResult<AdminPageBO> result);
|
||||||
|
|
||||||
|
@ -5,3 +5,5 @@ spring:
|
|||||||
# server
|
# server
|
||||||
server:
|
server:
|
||||||
port: 18083
|
port: 18083
|
||||||
|
servlet:
|
||||||
|
context-path: /admin-api/
|
@ -1,11 +1,22 @@
|
|||||||
package cn.iocoder.mall.admin.api;
|
package cn.iocoder.mall.admin.api;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.vo.CommonResult;
|
import cn.iocoder.common.framework.vo.CommonResult;
|
||||||
|
import cn.iocoder.mall.admin.api.bo.AdminBO;
|
||||||
import cn.iocoder.mall.admin.api.bo.AdminPageBO;
|
import cn.iocoder.mall.admin.api.bo.AdminPageBO;
|
||||||
|
import cn.iocoder.mall.admin.api.dto.AdminAddDTO;
|
||||||
import cn.iocoder.mall.admin.api.dto.AdminPageDTO;
|
import cn.iocoder.mall.admin.api.dto.AdminPageDTO;
|
||||||
|
import cn.iocoder.mall.admin.api.dto.AdminUpdateDTO;
|
||||||
|
|
||||||
public interface AdminService {
|
public interface AdminService {
|
||||||
|
|
||||||
CommonResult<AdminPageBO> getAdminPage(AdminPageDTO adminPageDTO);
|
CommonResult<AdminPageBO> getAdminPage(AdminPageDTO adminPageDTO);
|
||||||
|
|
||||||
|
CommonResult<AdminBO> addAdmin(Integer adminId, AdminAddDTO adminAddDTO);
|
||||||
|
|
||||||
|
CommonResult<Boolean> updateAdmin(Integer adminId, AdminUpdateDTO adminUpdateDTO);
|
||||||
|
|
||||||
|
CommonResult<Boolean> updateAdminStatus(Integer adminId, Integer updateAdminId, Integer status);
|
||||||
|
|
||||||
|
CommonResult<Boolean> deleteAdmin(Integer adminId, Integer updateAdminId);
|
||||||
|
|
||||||
}
|
}
|
@ -30,6 +30,4 @@ public interface OAuth2Service {
|
|||||||
|
|
||||||
// TODO @see 刷新 token
|
// TODO @see 刷新 token
|
||||||
|
|
||||||
// TODO @see 移除 token
|
|
||||||
|
|
||||||
}
|
}
|
@ -24,6 +24,9 @@ public enum AdminErrorCodeEnum {
|
|||||||
ADMIN_USERNAME_NOT_REGISTERED(1002002000, "账号不存在"),
|
ADMIN_USERNAME_NOT_REGISTERED(1002002000, "账号不存在"),
|
||||||
ADMIN_PASSWORD_ERROR(1002002001, "密码不正确"),
|
ADMIN_PASSWORD_ERROR(1002002001, "密码不正确"),
|
||||||
ADMIN_IS_DISABLE(1002002002, "账号被禁用"),
|
ADMIN_IS_DISABLE(1002002002, "账号被禁用"),
|
||||||
|
ADMIN_USERNAME_EXISTS(1002002002, "账号已经存在"),
|
||||||
|
ADMIN_STATUS_EQUALS(1002002003, "账号已经是该状态"),
|
||||||
|
ADMIN_DELETE_ONLY_DISABLE(1002002004, "只有关闭的账号才可以删除"),
|
||||||
|
|
||||||
// ========== 资源模块 1002003000 ==========
|
// ========== 资源模块 1002003000 ==========
|
||||||
RESOURCE_NAME_DUPLICATE(1002003000, "已经存在该名字的资源"),
|
RESOURCE_NAME_DUPLICATE(1002003000, "已经存在该名字的资源"),
|
||||||
|
@ -0,0 +1,52 @@
|
|||||||
|
package cn.iocoder.mall.admin.api.dto;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotEmpty;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 管理员添加 DTO
|
||||||
|
*/
|
||||||
|
public class AdminAddDTO {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 登陆账号
|
||||||
|
*/
|
||||||
|
@NotEmpty(message = "登陆账号不能为空")
|
||||||
|
private String username;
|
||||||
|
/**
|
||||||
|
* 昵称
|
||||||
|
*/
|
||||||
|
@NotEmpty(message = "昵称不能为空")
|
||||||
|
private String nickname;
|
||||||
|
/**
|
||||||
|
* 密码
|
||||||
|
*/
|
||||||
|
@NotEmpty(message = "密码不能为空")
|
||||||
|
private String password;
|
||||||
|
|
||||||
|
public String getUsername() {
|
||||||
|
return username;
|
||||||
|
}
|
||||||
|
|
||||||
|
public AdminAddDTO setUsername(String username) {
|
||||||
|
this.username = username;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNickname() {
|
||||||
|
return nickname;
|
||||||
|
}
|
||||||
|
|
||||||
|
public AdminAddDTO setNickname(String nickname) {
|
||||||
|
this.nickname = nickname;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPassword() {
|
||||||
|
return password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public AdminAddDTO setPassword(String password) {
|
||||||
|
this.password = password;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,67 @@
|
|||||||
|
package cn.iocoder.mall.admin.api.dto;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotEmpty;
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 管理员更新 DTO
|
||||||
|
*/
|
||||||
|
public class AdminUpdateDTO {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 管理员编号
|
||||||
|
*/
|
||||||
|
@NotNull(message = "管理员编号不能为空")
|
||||||
|
private Integer id;
|
||||||
|
/**
|
||||||
|
* 登陆账号
|
||||||
|
*/
|
||||||
|
@NotEmpty(message = "登陆账号不能为空")
|
||||||
|
private String username;
|
||||||
|
/**
|
||||||
|
* 昵称
|
||||||
|
*/
|
||||||
|
@NotEmpty(message = "昵称不能为空")
|
||||||
|
private String nickname;
|
||||||
|
/**
|
||||||
|
* 密码
|
||||||
|
*/
|
||||||
|
@NotEmpty(message = "密码不能为空")
|
||||||
|
private String password;
|
||||||
|
|
||||||
|
public String getUsername() {
|
||||||
|
return username;
|
||||||
|
}
|
||||||
|
|
||||||
|
public AdminUpdateDTO setUsername(String username) {
|
||||||
|
this.username = username;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNickname() {
|
||||||
|
return nickname;
|
||||||
|
}
|
||||||
|
|
||||||
|
public AdminUpdateDTO setNickname(String nickname) {
|
||||||
|
this.nickname = nickname;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPassword() {
|
||||||
|
return password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public AdminUpdateDTO setPassword(String password) {
|
||||||
|
this.password = password;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public AdminUpdateDTO setId(Integer id) {
|
||||||
|
this.id = id;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,8 @@
|
|||||||
package cn.iocoder.mall.admin.convert;
|
package cn.iocoder.mall.admin.convert;
|
||||||
|
|
||||||
import cn.iocoder.mall.admin.api.bo.AdminBO;
|
import cn.iocoder.mall.admin.api.bo.AdminBO;
|
||||||
|
import cn.iocoder.mall.admin.api.dto.AdminAddDTO;
|
||||||
|
import cn.iocoder.mall.admin.api.dto.AdminUpdateDTO;
|
||||||
import cn.iocoder.mall.admin.dataobject.AdminDO;
|
import cn.iocoder.mall.admin.dataobject.AdminDO;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.Mappings;
|
import org.mapstruct.Mappings;
|
||||||
@ -16,6 +18,12 @@ public interface AdminConvert {
|
|||||||
@Mappings({})
|
@Mappings({})
|
||||||
AdminBO convert(AdminDO adminDO);
|
AdminBO convert(AdminDO adminDO);
|
||||||
|
|
||||||
|
@Mappings({})
|
||||||
|
AdminDO convert(AdminAddDTO adminAddDTO);
|
||||||
|
|
||||||
|
@Mappings({})
|
||||||
|
AdminDO convert(AdminUpdateDTO adminUpdateDTO);
|
||||||
|
|
||||||
@Mappings({})
|
@Mappings({})
|
||||||
List<AdminBO> convert(List<AdminDO> adminBOs);
|
List<AdminBO> convert(List<AdminDO> adminBOs);
|
||||||
|
|
||||||
|
@ -9,6 +9,8 @@ import java.util.List;
|
|||||||
@Repository
|
@Repository
|
||||||
public interface AdminMapper {
|
public interface AdminMapper {
|
||||||
|
|
||||||
|
AdminDO selectById(@Param("id") Integer id);
|
||||||
|
|
||||||
AdminDO selectByUsername(@Param("username") String username);
|
AdminDO selectByUsername(@Param("username") String username);
|
||||||
|
|
||||||
List<AdminDO> selectListByNicknameLike(@Param("nickname") String nickname,
|
List<AdminDO> selectListByNicknameLike(@Param("nickname") String nickname,
|
||||||
@ -17,4 +19,8 @@ public interface AdminMapper {
|
|||||||
|
|
||||||
Integer selectCountByNicknameLike(@Param("nickname") String nickname);
|
Integer selectCountByNicknameLike(@Param("nickname") String nickname);
|
||||||
|
|
||||||
|
void insert(AdminDO admin);
|
||||||
|
|
||||||
|
int update(AdminDO admin);
|
||||||
|
|
||||||
}
|
}
|
@ -11,4 +11,8 @@ public interface AdminRoleMapper {
|
|||||||
|
|
||||||
List<AdminRoleDO> selectByAdminId(@Param("adminId") Integer adminId);
|
List<AdminRoleDO> selectByAdminId(@Param("adminId") Integer adminId);
|
||||||
|
|
||||||
|
int updateToDeletedByAdminId(@Param("adminId") Integer adminId);
|
||||||
|
|
||||||
|
int updateToDeletedByRoleId(@Param("roleId") Integer roleId);
|
||||||
|
|
||||||
}
|
}
|
@ -1,6 +1,7 @@
|
|||||||
package cn.iocoder.mall.admin.dao;
|
package cn.iocoder.mall.admin.dao;
|
||||||
|
|
||||||
import cn.iocoder.mall.admin.dataobject.OAuth2AccessTokenDO;
|
import cn.iocoder.mall.admin.dataobject.OAuth2AccessTokenDO;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
@ -8,6 +9,8 @@ public interface OAuth2AccessTokenMapper {
|
|||||||
|
|
||||||
void insert(OAuth2AccessTokenDO entity);
|
void insert(OAuth2AccessTokenDO entity);
|
||||||
|
|
||||||
OAuth2AccessTokenDO selectByTokenId(String tokenId);
|
OAuth2AccessTokenDO selectByTokenId(@Param("id") String id);
|
||||||
|
|
||||||
|
int updateToInvalidByAdminId(@Param("adminId") Integer adminId);
|
||||||
|
|
||||||
}
|
}
|
@ -1,6 +1,7 @@
|
|||||||
package cn.iocoder.mall.admin.dao;
|
package cn.iocoder.mall.admin.dao;
|
||||||
|
|
||||||
import cn.iocoder.mall.admin.dataobject.OAuth2RefreshTokenDO;
|
import cn.iocoder.mall.admin.dataobject.OAuth2RefreshTokenDO;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
@ -8,4 +9,6 @@ public interface OAuth2RefreshTokenMapper {
|
|||||||
|
|
||||||
void insert(OAuth2RefreshTokenDO entity);
|
void insert(OAuth2RefreshTokenDO entity);
|
||||||
|
|
||||||
|
int updateToInvalidByAdminId(@Param("adminId") Integer adminId);
|
||||||
|
|
||||||
}
|
}
|
@ -1,11 +1,11 @@
|
|||||||
package cn.iocoder.mall.admin.dataobject;
|
package cn.iocoder.mall.admin.dataobject;
|
||||||
|
|
||||||
import java.util.Date;
|
import cn.iocoder.common.framework.dataobject.BaseDO;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@link AdminDO} 和 {@link RoleDO} 的关联表
|
* {@link AdminDO} 和 {@link RoleDO} 的关联表
|
||||||
*/
|
*/
|
||||||
public class AdminRoleDO {
|
public class AdminRoleDO extends BaseDO {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 编号
|
* 编号
|
||||||
@ -19,12 +19,6 @@ public class AdminRoleDO {
|
|||||||
* 角色编号(外键:{@link RoleDO}
|
* 角色编号(外键:{@link RoleDO}
|
||||||
*/
|
*/
|
||||||
private Integer roleId;
|
private Integer roleId;
|
||||||
/**
|
|
||||||
* 创建时间
|
|
||||||
*/
|
|
||||||
private Date createTime;
|
|
||||||
|
|
||||||
// TODO 芋艿 删除状态
|
|
||||||
|
|
||||||
public Integer getId() {
|
public Integer getId() {
|
||||||
return id;
|
return id;
|
||||||
@ -53,13 +47,4 @@ public class AdminRoleDO {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Date getCreateTime() {
|
|
||||||
return createTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public AdminRoleDO setCreateTime(Date createTime) {
|
|
||||||
this.createTime = createTime;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
@ -1,20 +1,27 @@
|
|||||||
package cn.iocoder.mall.admin.service;
|
package cn.iocoder.mall.admin.service;
|
||||||
|
|
||||||
|
import cn.iocoder.common.framework.constant.SysErrorCodeEnum;
|
||||||
|
import cn.iocoder.common.framework.dataobject.BaseDO;
|
||||||
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
|
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
|
||||||
import cn.iocoder.common.framework.vo.CommonResult;
|
import cn.iocoder.common.framework.vo.CommonResult;
|
||||||
import cn.iocoder.mall.admin.api.AdminService;
|
import cn.iocoder.mall.admin.api.AdminService;
|
||||||
|
import cn.iocoder.mall.admin.api.bo.AdminBO;
|
||||||
import cn.iocoder.mall.admin.api.bo.AdminPageBO;
|
import cn.iocoder.mall.admin.api.bo.AdminPageBO;
|
||||||
import cn.iocoder.mall.admin.api.constant.AdminErrorCodeEnum;
|
import cn.iocoder.mall.admin.api.constant.AdminErrorCodeEnum;
|
||||||
|
import cn.iocoder.mall.admin.api.dto.AdminAddDTO;
|
||||||
import cn.iocoder.mall.admin.api.dto.AdminPageDTO;
|
import cn.iocoder.mall.admin.api.dto.AdminPageDTO;
|
||||||
|
import cn.iocoder.mall.admin.api.dto.AdminUpdateDTO;
|
||||||
import cn.iocoder.mall.admin.convert.AdminConvert;
|
import cn.iocoder.mall.admin.convert.AdminConvert;
|
||||||
import cn.iocoder.mall.admin.dataobject.AdminDO;
|
|
||||||
import cn.iocoder.mall.admin.dao.AdminMapper;
|
import cn.iocoder.mall.admin.dao.AdminMapper;
|
||||||
import cn.iocoder.mall.admin.dao.AdminRoleMapper;
|
import cn.iocoder.mall.admin.dao.AdminRoleMapper;
|
||||||
|
import cn.iocoder.mall.admin.dataobject.AdminDO;
|
||||||
import cn.iocoder.mall.admin.dataobject.AdminRoleDO;
|
import cn.iocoder.mall.admin.dataobject.AdminRoleDO;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.util.DigestUtils;
|
import org.springframework.util.DigestUtils;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@ -25,6 +32,8 @@ public class AdminServiceImpl implements AdminService {
|
|||||||
private AdminMapper adminMapper;
|
private AdminMapper adminMapper;
|
||||||
@Autowired
|
@Autowired
|
||||||
private AdminRoleMapper adminRoleMapper;
|
private AdminRoleMapper adminRoleMapper;
|
||||||
|
@Autowired
|
||||||
|
private OAuth2ServiceImpl oAuth2Service;
|
||||||
|
|
||||||
public CommonResult<AdminDO> validAdmin(String username, String password) {
|
public CommonResult<AdminDO> validAdmin(String username, String password) {
|
||||||
AdminDO admin = adminMapper.selectByUsername(username);
|
AdminDO admin = adminMapper.selectByUsername(username);
|
||||||
@ -33,7 +42,7 @@ public class AdminServiceImpl implements AdminService {
|
|||||||
return ServiceExceptionUtil.error(AdminErrorCodeEnum.ADMIN_USERNAME_NOT_REGISTERED.getCode());
|
return ServiceExceptionUtil.error(AdminErrorCodeEnum.ADMIN_USERNAME_NOT_REGISTERED.getCode());
|
||||||
}
|
}
|
||||||
// 密码不正确
|
// 密码不正确
|
||||||
if (DigestUtils.md5DigestAsHex(password.getBytes()).equals(admin.getPassword())) {
|
if (encodePassword(password).equals(admin.getPassword())) {
|
||||||
return ServiceExceptionUtil.error(AdminErrorCodeEnum.ADMIN_PASSWORD_ERROR.getCode());
|
return ServiceExceptionUtil.error(AdminErrorCodeEnum.ADMIN_PASSWORD_ERROR.getCode());
|
||||||
}
|
}
|
||||||
// 账号被禁用
|
// 账号被禁用
|
||||||
@ -62,4 +71,98 @@ public class AdminServiceImpl implements AdminService {
|
|||||||
return CommonResult.success(adminPage);
|
return CommonResult.success(adminPage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CommonResult<AdminBO> addAdmin(Integer adminId, AdminAddDTO adminAddDTO) {
|
||||||
|
// 校验账号唯一
|
||||||
|
if (adminMapper.selectByUsername(adminAddDTO.getUsername()) != null) {
|
||||||
|
return ServiceExceptionUtil.error(AdminErrorCodeEnum.ADMIN_USERNAME_EXISTS.getCode());
|
||||||
|
}
|
||||||
|
// 保存到数据库
|
||||||
|
AdminDO admin = AdminConvert.INSTANCE.convert(adminAddDTO)
|
||||||
|
.setPassword(encodePassword(adminAddDTO.getPassword())) // 加密密码
|
||||||
|
.setStatus(AdminDO.STATUS_ENABLE);
|
||||||
|
admin.setCreateTime(new Date()).setDeleted(BaseDO.DELETED_NO);
|
||||||
|
adminMapper.insert(admin);
|
||||||
|
// TODO 插入操作日志
|
||||||
|
// 返回成功
|
||||||
|
return CommonResult.success(AdminConvert.INSTANCE.convert(admin));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CommonResult<Boolean> updateAdmin(Integer adminId, AdminUpdateDTO adminUpdateDTO) {
|
||||||
|
// 校验账号存在
|
||||||
|
if (adminMapper.selectById(adminUpdateDTO.getId()) == null) {
|
||||||
|
return ServiceExceptionUtil.error(AdminErrorCodeEnum.ADMIN_USERNAME_NOT_REGISTERED.getCode());
|
||||||
|
}
|
||||||
|
// 校验账号唯一
|
||||||
|
AdminDO usernameAdmin = adminMapper.selectByUsername(adminUpdateDTO.getUsername());
|
||||||
|
if (usernameAdmin != null && !usernameAdmin.getId().equals(adminUpdateDTO.getId())) {
|
||||||
|
return ServiceExceptionUtil.error(AdminErrorCodeEnum.ADMIN_USERNAME_EXISTS.getCode());
|
||||||
|
}
|
||||||
|
// 更新到数据库
|
||||||
|
AdminDO updateAdmin = AdminConvert.INSTANCE.convert(adminUpdateDTO);
|
||||||
|
adminMapper.update(updateAdmin);
|
||||||
|
// TODO 插入操作日志
|
||||||
|
// 返回成功
|
||||||
|
return CommonResult.success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
public CommonResult<Boolean> updateAdminStatus(Integer adminId, Integer updateAdminId, Integer status) {
|
||||||
|
// 校验参数
|
||||||
|
if (!isValidStatus(status)) {
|
||||||
|
return CommonResult.error(SysErrorCodeEnum.VALIDATION_REQUEST_PARAM_ERROR.getCode(), "变更状态必须是开启(1)或关闭(2)"); // TODO 有点搓
|
||||||
|
}
|
||||||
|
// 校验账号存在
|
||||||
|
AdminDO admin = adminMapper.selectById(updateAdminId);
|
||||||
|
if (admin == null) {
|
||||||
|
return ServiceExceptionUtil.error(AdminErrorCodeEnum.ADMIN_USERNAME_NOT_REGISTERED.getCode());
|
||||||
|
}
|
||||||
|
// 如果状态相同,则返回错误
|
||||||
|
if (status.equals(admin.getStatus())) {
|
||||||
|
return ServiceExceptionUtil.error(AdminErrorCodeEnum.ADMIN_STATUS_EQUALS.getCode());
|
||||||
|
}
|
||||||
|
// 更新管理员状态
|
||||||
|
AdminDO updateAdmin = new AdminDO().setId(updateAdminId).setStatus(status);
|
||||||
|
adminMapper.update(updateAdmin);
|
||||||
|
// 如果是关闭管理员,则标记 token 失效。否则,管理员还可以继续蹦跶
|
||||||
|
if (AdminDO.STATUS_DISABLE.equals(status)) {
|
||||||
|
oAuth2Service.removeToken(updateAdminId);
|
||||||
|
}
|
||||||
|
// TODO 插入操作日志
|
||||||
|
// 返回成功
|
||||||
|
return CommonResult.success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
public CommonResult<Boolean> deleteAdmin(Integer adminId, Integer updateAdminId) {
|
||||||
|
// 校验账号存在
|
||||||
|
AdminDO admin = adminMapper.selectById(updateAdminId);
|
||||||
|
if (admin == null) {
|
||||||
|
return ServiceExceptionUtil.error(AdminErrorCodeEnum.ADMIN_USERNAME_NOT_REGISTERED.getCode());
|
||||||
|
}
|
||||||
|
if (AdminDO.STATUS_ENABLE.equals(admin.getStatus())) {
|
||||||
|
return ServiceExceptionUtil.error(AdminErrorCodeEnum.ADMIN_DELETE_ONLY_DISABLE.getCode());
|
||||||
|
}
|
||||||
|
// 只有禁用的账号才可以删除
|
||||||
|
AdminDO updateAdmin = new AdminDO().setId(updateAdminId);
|
||||||
|
updateAdmin.setDeleted(BaseDO.DELETED_YES);
|
||||||
|
adminMapper.update(updateAdmin);
|
||||||
|
// 标记删除 AdminRole
|
||||||
|
adminRoleMapper.updateToDeletedByAdminId(updateAdminId);
|
||||||
|
// TODO 插入操作日志
|
||||||
|
// 返回成功
|
||||||
|
return CommonResult.success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String encodePassword(String password) {
|
||||||
|
return DigestUtils.md5DigestAsHex(password.getBytes());
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isValidStatus(Integer status) {
|
||||||
|
return AdminDO.STATUS_ENABLE.equals(status)
|
||||||
|
|| AdminDO.STATUS_DISABLE.equals(status);
|
||||||
|
}
|
||||||
}
|
}
|
@ -13,6 +13,7 @@ import cn.iocoder.mall.admin.dataobject.*;
|
|||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -46,6 +47,7 @@ public class OAuth2ServiceImpl implements OAuth2Service {
|
|||||||
private ResourceServiceImpl resourceService;
|
private ResourceServiceImpl resourceService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Transactional
|
||||||
public CommonResult<OAuth2AccessTokenBO> getAccessToken(String username, String password) {
|
public CommonResult<OAuth2AccessTokenBO> getAccessToken(String username, String password) {
|
||||||
CommonResult<AdminDO> adminResult = adminService.validAdmin(username, password);
|
CommonResult<AdminDO> adminResult = adminService.validAdmin(username, password);
|
||||||
// 校验失败,返回错误结果
|
// 校验失败,返回错误结果
|
||||||
@ -79,6 +81,19 @@ public class OAuth2ServiceImpl implements OAuth2Service {
|
|||||||
return CommonResult.success(OAuth2Convert.INSTANCE.convertToAuthentication(accessTokenDO, adminRoleDOs));
|
return CommonResult.success(OAuth2Convert.INSTANCE.convertToAuthentication(accessTokenDO, adminRoleDOs));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 移除管理员对应的 Token
|
||||||
|
*
|
||||||
|
* @param adminId 管理员编号
|
||||||
|
*/
|
||||||
|
@Transactional
|
||||||
|
public void removeToken(Integer adminId) {
|
||||||
|
// 设置 access token 失效
|
||||||
|
oauth2AccessTokenMapper.updateToInvalidByAdminId(adminId);
|
||||||
|
// 设置 refresh token 失效
|
||||||
|
oauth2RefreshTokenMapper.updateToInvalidByAdminId(adminId);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommonResult<Boolean> checkPermission(Integer adminId, Set<Integer> roleIds, String url) {
|
public CommonResult<Boolean> checkPermission(Integer adminId, Set<Integer> roleIds, String url) {
|
||||||
// 如果未配置该资源,说明无需权限控制。
|
// 如果未配置该资源,说明无需权限控制。
|
||||||
|
@ -16,6 +16,7 @@ import cn.iocoder.mall.admin.dao.RoleResourceMapper;
|
|||||||
import cn.iocoder.mall.admin.dataobject.ResourceDO;
|
import cn.iocoder.mall.admin.dataobject.ResourceDO;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
@ -116,6 +117,7 @@ public class ResourceServiceImpl implements ResourceService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Transactional
|
||||||
public CommonResult<Boolean> deleteResource(Integer adminId, Integer resourceId) {
|
public CommonResult<Boolean> deleteResource(Integer adminId, Integer resourceId) {
|
||||||
// 校验更新的资源是否存在
|
// 校验更新的资源是否存在
|
||||||
if (resourceMapper.selectById(resourceId) == null) {
|
if (resourceMapper.selectById(resourceId) == null) {
|
||||||
|
@ -11,6 +11,7 @@ import cn.iocoder.mall.admin.api.dto.RoleAddDTO;
|
|||||||
import cn.iocoder.mall.admin.api.dto.RolePageDTO;
|
import cn.iocoder.mall.admin.api.dto.RolePageDTO;
|
||||||
import cn.iocoder.mall.admin.api.dto.RoleUpdateDTO;
|
import cn.iocoder.mall.admin.api.dto.RoleUpdateDTO;
|
||||||
import cn.iocoder.mall.admin.convert.RoleConvert;
|
import cn.iocoder.mall.admin.convert.RoleConvert;
|
||||||
|
import cn.iocoder.mall.admin.dao.AdminRoleMapper;
|
||||||
import cn.iocoder.mall.admin.dao.RoleMapper;
|
import cn.iocoder.mall.admin.dao.RoleMapper;
|
||||||
import cn.iocoder.mall.admin.dao.RoleResourceMapper;
|
import cn.iocoder.mall.admin.dao.RoleResourceMapper;
|
||||||
import cn.iocoder.mall.admin.dataobject.ResourceDO;
|
import cn.iocoder.mall.admin.dataobject.ResourceDO;
|
||||||
@ -18,6 +19,7 @@ import cn.iocoder.mall.admin.dataobject.RoleDO;
|
|||||||
import cn.iocoder.mall.admin.dataobject.RoleResourceDO;
|
import cn.iocoder.mall.admin.dataobject.RoleResourceDO;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -31,6 +33,8 @@ public class RoleServiceImpl implements RoleService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private RoleResourceMapper roleResourceMapper;
|
private RoleResourceMapper roleResourceMapper;
|
||||||
@Autowired
|
@Autowired
|
||||||
|
private AdminRoleMapper adminRoleMapper;
|
||||||
|
@Autowired
|
||||||
private RoleMapper roleMapper;
|
private RoleMapper roleMapper;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@ -84,6 +88,7 @@ public class RoleServiceImpl implements RoleService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Transactional
|
||||||
public CommonResult<Boolean> deleteRole(Integer adminId, Integer roleId) {
|
public CommonResult<Boolean> deleteRole(Integer adminId, Integer roleId) {
|
||||||
// 校验角色是否存在
|
// 校验角色是否存在
|
||||||
if (roleMapper.selectById(roleId) == null) {
|
if (roleMapper.selectById(roleId) == null) {
|
||||||
@ -93,12 +98,17 @@ public class RoleServiceImpl implements RoleService {
|
|||||||
RoleDO roleDO = new RoleDO().setId(roleId);
|
RoleDO roleDO = new RoleDO().setId(roleId);
|
||||||
roleDO.setDeleted(RoleDO.DELETED_YES);
|
roleDO.setDeleted(RoleDO.DELETED_YES);
|
||||||
roleMapper.update(roleDO);
|
roleMapper.update(roleDO);
|
||||||
|
// 标记删除 RoleResource
|
||||||
|
roleResourceMapper.updateToDeletedByRoleId(roleId);
|
||||||
|
// 标记删除 AdminRole
|
||||||
|
adminRoleMapper.updateToDeletedByRoleId(roleId);
|
||||||
// TODO 插入操作日志
|
// TODO 插入操作日志
|
||||||
// 返回成功
|
// 返回成功
|
||||||
return CommonResult.success(true);
|
return CommonResult.success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Transactional
|
||||||
public CommonResult<Boolean> assignResource(Integer adminId, Integer roleId, Set<Integer> resourceIds) {
|
public CommonResult<Boolean> assignResource(Integer adminId, Integer roleId, Set<Integer> resourceIds) {
|
||||||
// 校验角色是否存在
|
// 校验角色是否存在
|
||||||
if (roleMapper.selectById(roleId) == null) {
|
if (roleMapper.selectById(roleId) == null) {
|
||||||
|
@ -40,4 +40,44 @@
|
|||||||
</where>
|
</where>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<insert id="insert" parameterType="AdminDO" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
|
||||||
|
INSERT INTO admin (
|
||||||
|
username, nickname, password, status,
|
||||||
|
create_time, deleted
|
||||||
|
) VALUES (
|
||||||
|
#{username}, #{nickname}, #{password}, #{status},
|
||||||
|
#{createTime}, #{deleted}
|
||||||
|
)
|
||||||
|
</insert>
|
||||||
|
|
||||||
|
<select id="selectById" parameterType="Integer" resultType="AdminDO">
|
||||||
|
SELECT
|
||||||
|
<include refid="FIELDS" />
|
||||||
|
FROM admin
|
||||||
|
WHERE id = #{id}
|
||||||
|
AND deleted = 0
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<update id="update" parameterType="RoleDO">
|
||||||
|
UPDATE admin
|
||||||
|
<set>
|
||||||
|
<if test="username != null">
|
||||||
|
, username = #{username}
|
||||||
|
</if>
|
||||||
|
<if test="nickname != null">
|
||||||
|
, nickname = #{nickname}
|
||||||
|
</if>
|
||||||
|
<if test="password != null">
|
||||||
|
, password = #{password}
|
||||||
|
</if>
|
||||||
|
<if test="status != null">
|
||||||
|
, status = #{status}
|
||||||
|
</if>
|
||||||
|
<if test="deleted != null">
|
||||||
|
, deleted = #{deleted}
|
||||||
|
</if>
|
||||||
|
</set>
|
||||||
|
WHERE id = #{id}
|
||||||
|
</update>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
@ -18,4 +18,18 @@
|
|||||||
AND a.id = ar.admin_id
|
AND a.id = ar.admin_id
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<update id="updateToDeletedByAdminId" parameterType="Integer">
|
||||||
|
UPDATE admin_role
|
||||||
|
SET deleted = 1
|
||||||
|
WHERE admin_id = #{adminId}
|
||||||
|
AND deleted = 0
|
||||||
|
</update>
|
||||||
|
|
||||||
|
<update id="updateToDeletedByRoleId" parameterType="Integer">
|
||||||
|
UPDATE admin_role
|
||||||
|
SET deleted = 1
|
||||||
|
WHERE role_id = #{roleId}
|
||||||
|
AND deleted = 0
|
||||||
|
</update>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
@ -19,4 +19,11 @@
|
|||||||
WHERE id = #{id}
|
WHERE id = #{id}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<update id="updateToInvalidByAdminId" parameterType="Integer">
|
||||||
|
UPDATE oauth2_access_token
|
||||||
|
SET valid = 0
|
||||||
|
WHERE admin_id = #{adminId}
|
||||||
|
AND valid = 1
|
||||||
|
</update>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
@ -10,4 +10,11 @@
|
|||||||
)
|
)
|
||||||
</insert>
|
</insert>
|
||||||
|
|
||||||
|
<update id="updateToInvalidByAdminId" parameterType="Integer">
|
||||||
|
UPDATE oauth2_refresh_token
|
||||||
|
SET valid = 0
|
||||||
|
WHERE admin_id = #{adminId}
|
||||||
|
AND valid = 1
|
||||||
|
</update>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
Loading…
Reference in New Issue
Block a user