目录:
(1)存储过程介绍
(2)获取所有部门
(3)添加部门
(4)删除部门
(5)获取所有操作员
(6)操作员更新及删除操作
(7)操作员功能实现(更新操作员角色)
(1)存储过程介绍
部门管理:
部门表:t_department
往这个表里插入一条数据非常的麻烦,可以用到存储过程,在这个表中插入一条正确的语句需要5条sql语句,可以把这些sql语句写入存储过程,相当于一个脚本,把这5条存储语句写进去,在代码离去执行的或只是调用了这个存储过程,再执行sql语句,执行完之后把对应的结果返回给你
简单创建
在存储过程中使用用户变量,在存的时候把变量放进去了
在存储过程中去使用全局范围的变量
部门添加存储过程:
部门删除存储过程:
(2)获取所有部门
在pojo Department类添加:
DepartmentController:编写接口
package com.xxxx.server.controller;
import com.xxxx.server.pojo.Department;
import com.xxxx.server.service.IDepartmentService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* <p>
* 前端控制器
* </p>
*
* @author zhanglishen
* @since 2022-08-05
*/
@RestController
@RequestMapping("/system/basic/department")
public class DepartmentController {
@Autowired
private IDepartmentService departmentService;
@ApiOperation(value = "获取所有部门")
@GetMapping("/")
public List<Department> getAllDepartments(){
return departmentService.getAllDepartments();
}
}
IDepartmentService:
package com.xxxx.server.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.xxxx.server.pojo.Department;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author zhanglishen
* @since 2022-08-05
*/
public interface IDepartmentService extends IService<Department> {
//获取所有部门
List<Department> getAllDepartments();
}
实现类:
package com.xxxx.server.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xxxx.server.mapper.DepartmentMapper;
import com.xxxx.server.pojo.Department;
import com.xxxx.server.service.IDepartmentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <p>
* 服务实现类
* </p>
*
* @author zhanglishen
* @since 2022-08-05
*/
@Service
public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Department> implements IDepartmentService {
//注入DepartmentMapper接口
@Autowired
private DepartmentMapper departmentMapper;
//获取所有部门
@Override
public List<Department> getAllDepartments() {
return departmentMapper.getAllDepartments(-1);
}
}
DepartmentMapper 接口:
package com.xxxx.server.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.xxxx.server.pojo.Department;
import java.util.List;
/**
* <p>
* Mapper 接口
* </p>
*
* @author zhanglishen
* @since 2022-08-05
*/
public interface DepartmentMapper extends BaseMapper<Department> {
//获取所有部门
List<Department> getAllDepartments(Integer parentId);
}
使用类似递归的方法,不是java代码的递归,使用xml,用sql语句进行递归,这是MyBatis提供的
当第一次查询拿到id=1,再次去调用这个方法拿到id=2,依次递归去获取菜单
DepartmentMapper.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxxx.server.mapper.DepartmentMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.xxxx.server.pojo.Department">
<id column="id" property="id" />
<result column="name" property="name" />
<result column="parentId" property="parentId" />
<result column="depPath" property="depPath" />
<result column="enabled" property="enabled" />
<result column="isParent" property="isParent" />
</resultMap>
<resultMap id="DepartmentWithChildren" type="com.xxxx.server.pojo.Department" extends="BaseResultMap">
<collection property="children" ofType="com.xxxx.server.pojo.Department" select="com.xxxx.server.mapper.DepartmentMapper.getAllDepartments" column="id">
</collection>
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id, name, parentId, depPath, enabled, isParent
</sql>
<!--获取所有部门-->
<select id="getAllDepartments" resultMap="DepartmentWithChildren">
select
<include refid="Base_Column_List"/>
from t_department
where parentId=#{parentId}
</select>
</mapper>
(3)添加部门
调用存储过程,完成添加部门
DepartmentController:
package com.xxxx.server.controller;
import com.xxxx.server.pojo.Department;
import com.xxxx.server.pojo.RespBean;
import com.xxxx.server.service.IDepartmentService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* <p>
* 前端控制器
* </p>
*
* @author zhanglishen
* @since 2022-08-05
*/
@RestController
@RequestMapping("/system/basic/department")
public class DepartmentController {
@Autowired
private IDepartmentService departmentService;
@ApiOperation(value = "获取所有部门")
@GetMapping("/")
public List<Department> getAllDepartments(){
return departmentService.getAllDepartments();
}
@ApiOperation(value = "添加部门")
@PostMapping("/")
public RespBean addDep(@RequestBody Department department){
return departmentService.addDep(department);
}
}
IDepartmentServcice:
package com.xxxx.server.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.xxxx.server.pojo.Department;
import com.xxxx.server.pojo.RespBean;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author zhanglishen
* @since 2022-08-05
*/
public interface IDepartmentService extends IService<Department> {
//获取所有部门
List<Department> getAllDepartments();
//添加部门
RespBean addDep(Department department);
}
实现类:
package com.xxxx.server.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xxxx.server.mapper.DepartmentMapper;
import com.xxxx.server.pojo.Department;
import com.xxxx.server.pojo.RespBean;
import com.xxxx.server.service.IDepartmentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <p>
* 服务实现类
* </p>
*
* @author zhanglishen
* @since 2022-08-05
*/
@Service
public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Department> implements IDepartmentService {
//注入DepartmentMapper接口
@Autowired
private DepartmentMapper departmentMapper;
//获取所有部门
@Override
public List<Department> getAllDepartments() {
return departmentMapper.getAllDepartments(-1);
}
//添加部门
@Override
public RespBean addDep(Department department) {
department.setEnabled(true);
//调用存储过程
departmentMapper.addDep(department);
if (1==department.getResult()){
return RespBean.success("添加成功",department);
}
return RespBean.error("添加失败");
}
}
DepartmentMapper接口:
package com.xxxx.server.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.xxxx.server.pojo.Department;
import java.util.List;
/**
* <p>
* Mapper 接口
* </p>
*
* @author zhanglishen
* @since 2022-08-05
*/
public interface DepartmentMapper extends BaseMapper<Department> {
//获取所有部门
List<Department> getAllDepartments(Integer parentId);
//添加部门
void addDep(Department department);
}
DepartmentMapper.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxxx.server.mapper.DepartmentMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.xxxx.server.pojo.Department">
<id column="id" property="id" />
<result column="name" property="name" />
<result column="parentId" property="parentId" />
<result column="depPath" property="depPath" />
<result column="enabled" property="enabled" />
<result column="isParent" property="isParent" />
</resultMap>
<resultMap id="DepartmentWithChildren" type="com.xxxx.server.pojo.Department" extends="BaseResultMap">
<collection property="children" ofType="com.xxxx.server.pojo.Department" select="com.xxxx.server.mapper.DepartmentMapper.getAllDepartments" column="id">
</collection>
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id, name, parentId, depPath, enabled, isParent
</sql>
<!--获取所有部门-->
<select id="getAllDepartments" resultMap="DepartmentWithChildren">
select
<include refid="Base_Column_List"/>
from t_department
where parentId=#{parentId}
</select>
<!--添加部门 调用存储过程-->
<select id="addDep" statementType="CALLABLE">
call addDep(#{name,mode=IN,jdbcType=VARCHAR},#{parentId,mode=IN,jdbcType=INTEGER},
#{enabled,mode=IN,jdbcType=BOOLEAN},#{result,mode=OUT,jdbcType=INTEGER},#{id,mode=OUT,jdbcType=INTEGER})
</select>
</mapper>
添加成功后,父id13的isPartment成功变成了1,添加的内容depPath也正确
(4)删除部门
package com.xxxx.server.controller;
import com.xxxx.server.pojo.Department;
import com.xxxx.server.pojo.RespBean;
import com.xxxx.server.service.IDepartmentService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* <p>
* 前端控制器
* </p>
*
* @author zhanglishen
* @since 2022-08-05
*/
@RestController
@RequestMapping("/system/basic/department")
public class DepartmentController {
@Autowired
private IDepartmentService departmentService;
@ApiOperation(value = "获取所有部门")
@GetMapping("/")
public List<Department> getAllDepartments(){
return departmentService.getAllDepartments();
}
@ApiOperation(value = "添加部门")
@PostMapping("/")
public RespBean addDep(@RequestBody Department department){
return departmentService.addDep(department);
}
@ApiOperation(value = "删除部门")
@DeleteMapping("/{id}")
public RespBean deleteDep(@PathVariable Integer id){
return departmentService.deleteDep(id);
}
}
IDeparmentService接口:
package com.xxxx.server.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.xxxx.server.pojo.Department;
import com.xxxx.server.pojo.RespBean;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author zhanglishen
* @since 2022-08-05
*/
public interface IDepartmentService extends IService<Department> {
//获取所有部门
List<Department> getAllDepartments();
//添加部门
RespBean addDep(Department department);
//删除部门
RespBean deleteDep(Integer id);
}
实现类:
package com.xxxx.server.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xxxx.server.mapper.DepartmentMapper;
import com.xxxx.server.pojo.Department;
import com.xxxx.server.pojo.RespBean;
import com.xxxx.server.service.IDepartmentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <p>
* 服务实现类
* </p>
*
* @author zhanglishen
* @since 2022-08-05
*/
@Service
public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Department> implements IDepartmentService {
//注入DepartmentMapper接口
@Autowired
private DepartmentMapper departmentMapper;
//获取所有部门
@Override
public List<Department> getAllDepartments() {
return departmentMapper.getAllDepartments(-1);
}
//添加部门
@Override
public RespBean addDep(Department department) {
department.setEnabled(true);
//调用存储过程
departmentMapper.addDep(department);
if (1==department.getResult()){
return RespBean.success("添加成功",department);
}
return RespBean.error("添加失败");
}
//删除部门
@Override
public RespBean deleteDep(Integer id) {
Department dep=new Department();
dep.setId(id);
departmentMapper.deleteDep(dep);
if (-2==dep.getResult()){
return RespBean.error("该部门还有子部门,删除失败");
}
if (-1==dep.getResult()){
return RespBean.error("该部门还有员工,删除失败");
}
if (1==dep.getResult()){
return RespBean.error("删除成功");
}
return RespBean.error("删除失败");
}
}
DepartmentMapper接口:
package com.xxxx.server.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.xxxx.server.pojo.Department;
import java.util.List;
/**
* <p>
* Mapper 接口
* </p>
*
* @author zhanglishen
* @since 2022-08-05
*/
public interface DepartmentMapper extends BaseMapper<Department> {
//获取所有部门
List<Department> getAllDepartments(Integer parentId);
//添加部门
void addDep(Department department);
//删除部门
void deleteDep(Department dep);
}
DepartmentMapper.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxxx.server.mapper.DepartmentMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.xxxx.server.pojo.Department">
<id column="id" property="id" />
<result column="name" property="name" />
<result column="parentId" property="parentId" />
<result column="depPath" property="depPath" />
<result column="enabled" property="enabled" />
<result column="isParent" property="isParent" />
</resultMap>
<resultMap id="DepartmentWithChildren" type="com.xxxx.server.pojo.Department" extends="BaseResultMap">
<collection property="children" ofType="com.xxxx.server.pojo.Department" select="com.xxxx.server.mapper.DepartmentMapper.getAllDepartments" column="id">
</collection>
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id, name, parentId, depPath, enabled, isParent
</sql>
<!--获取所有部门-->
<select id="getAllDepartments" resultMap="DepartmentWithChildren">
select
<include refid="Base_Column_List"/>
from t_department
where parentId=#{parentId}
</select>
<!--添加部门 调用存储过程-->
<select id="addDep" statementType="CALLABLE">
call addDep(#{name,mode=IN,jdbcType=VARCHAR},#{parentId,mode=IN,jdbcType=INTEGER},
#{enabled,mode=IN,jdbcType=BOOLEAN},#{result,mode=OUT,jdbcType=INTEGER},#{id,mode=OUT,jdbcType=INTEGER})
</select>
<!--删除部门-->
<select id="deleteDep" statementType="CALLABLE">
call deleteDep(#{id,mode=IN,jdbcType=INTEGER},#{result,mode=OUT,jdbcType=INTEGER})
</select>
</mapper>
删除id=13,会删除失败,因为下面还有子部门
删除id=12,删除失败,因为该部门下有员工
删除id=14:会删除成功
(5)获取所有操作员
AdminController:
package com.xxxx.server.controller;
import com.xxxx.server.pojo.Admin;
import com.xxxx.server.service.IAdminService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* <p>
* 前端控制器
* </p>
*
* @author zhanglishen
* @since 2022-08-05
*/
@RestController
@RequestMapping("/system/admin")
public class AdminController {
@Autowired
private IAdminService adminService;
@ApiOperation(value = "获取所有操作员")
@GetMapping("/")
public List<Admin> getAllAdmins(String keywords){
return adminService.getAllAdmins(keywords);
}
}
IAdminService:
package com.xxxx.server.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.xxxx.server.pojo.Admin;
import com.xxxx.server.pojo.Menu;
import com.xxxx.server.pojo.RespBean;
import com.xxxx.server.pojo.Role;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author zhanglishen
* @since 2022-08-05
*/
public interface IAdminService extends IService<Admin> {
//登录方法 登录之后返回token
RespBean login(String username, String password, String code, HttpServletRequest request);
//根据用户名获取用户
Admin getAdminByUserName(String username);
//根据用户id查询角色列表
List<Role> getRoles(Integer adminId);
//获取所有操作员
List<Admin> getAllAdmins(String keywords);
}
工具类:获取当前登录的操作员:
package com.xxxx.server;
//操作员工具类
import com.xxxx.server.pojo.Admin;
import org.springframework.security.core.context.SecurityContextHolder;
public class AdminUtils {
//获取当前登录的操作员
public static Admin getCurrentAdmin(){
return (Admin) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
}
}
实现类:
package com.xxxx.server.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xxxx.server.AdminUtils;
import com.xxxx.server.config.security.component.JwtTokenUtil;
import com.xxxx.server.mapper.AdminMapper;
import com.xxxx.server.mapper.RoleMapper;
import com.xxxx.server.pojo.Admin;
import com.xxxx.server.pojo.RespBean;
import com.xxxx.server.pojo.Role;
import com.xxxx.server.service.IAdminService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import javax.servlet.http.HttpServletRequest;
import javax.swing.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* <p>
* 服务实现类
* </p>
*
* @author zhanglishen
* @since 2022-08-05
*/
@Service
public class AdminServiceImpl extends ServiceImpl<AdminMapper, Admin> implements IAdminService {
//用到查数据库需要注入
@Autowired
private AdminMapper adminMapper;
@Autowired
private UserDetailsService userDetailsService;
@Autowired
private PasswordEncoder passwordEncoder;
//注入工具类
@Autowired
private JwtTokenUtil jwtTokenUtil;
@Autowired
private RoleMapper roleMapper;
//通过注解去拿头部信息
@Value("${jwt.tokenHead}")
private String tokenHead;
//登录之后返回token
@Override
public RespBean login(String username, String password, String code, HttpServletRequest request) {
//获取验证码
String captcha =(String) request.getSession().getAttribute("captcha");
//判断 如果输入验证码为空或者输入的验证码不正确
if (StringUtils.isEmpty(code)||!captcha.equalsIgnoreCase(code)){
return RespBean.error("验证码输入错误,请重新输入!");
}
//登录
//获取到userDetaiils
UserDetails userDetails = userDetailsService.loadUserByUsername(username);
if (null==userDetails||!passwordEncoder.matches(password,userDetails.getPassword())){
return RespBean.error("用户名或密码不正确");
}
if (!userDetails.isEnabled()){
return RespBean.error("账号被禁用!请联系管理员");
}
//更新security登录用户对象,把userDetails对象放到security全文中
UsernamePasswordAuthenticationToken authenticationToken=new UsernamePasswordAuthenticationToken(userDetails,null,userDetails.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(authenticationToken);
//生成token
//调用工具类的方法拿到token
String token = jwtTokenUtil.generateToken(userDetails);
Map<String,String> tokenMap=new HashMap<>();
tokenMap.put("token",token);
tokenMap.put("tokenHead",tokenHead);
return RespBean.success("登录成功",tokenMap);//把token返回给前端
}
//根据用户名获取
@Override
public Admin getAdminByUserName(String username) {
//使用MyBatis-plus查询
return adminMapper.selectOne(new QueryWrapper<Admin>().eq("username",username).eq("enabled",true));
}
//根据用户id查询角色列表
@Override
public List<Role> getRoles(Integer adminId) {
return roleMapper.getRoles(adminId);
}
//获取所有操作员
@Override
public List<Admin> getAllAdmins(String keywords) {
return adminMapper.getAllAdmins(AdminUtils.getCurrentAdmin().getId(), keywords);
}
}
AdminMapper接口:
package com.xxxx.server.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.xxxx.server.pojo.Admin;
import com.xxxx.server.pojo.Menu;
import java.util.List;
/**
* <p>
* Mapper 接口
* </p>
*
* @author zhanglishen
* @since 2022-08-05
*/
public interface AdminMapper extends BaseMapper<Admin> {
//获取所有操作员
List<Admin> getAllAdmins(Integer id, String keywords);
}
AdminMapper.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxxx.server.mapper.AdminMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.xxxx.server.pojo.Admin">
<id column="id" property="id" />
<result column="name" property="name" />
<result column="phone" property="phone" />
<result column="telephone" property="telephone" />
<result column="address" property="address" />
<result column="enabled" property="enabled" />
<result column="username" property="username" />
<result column="password" property="password" />
<result column="userFace" property="userFace" />
<result column="remark" property="remark" />
</resultMap>
<resultMap id="AdminWithRole" type="com.xxxx.server.pojo.Admin" extends="BaseResultMap">
<collection property="roles" ofType="com.xxxx.server.pojo.Role">
<id column="rid" property="id" />
<result column="rname" property="name" />
<result column="rnameZh" property="nameZh" />
</collection>
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id, name, phone, telephone, address, enabled, username, password, userFace, remark
</sql>
<!--获取所有操作员-->
<select id="getAllAdmins" resultMap="AdminWithRole">
select
a.id,
a.enabled,
a.name,
a.address,
a.phone,
a.remark,
a.telephone,
a.userFace,
a.username,
r.id as rid,
r.name as rname,
r.nameZh as rnameZh
from
t_admin as a
LEFT JOIN t_admin_role as ar on a.id = ar.adminId
LEFT JOIN t_role as r on ar.rid = r.id
where a.id != #{id}
<if test="null != keywords and '' != keywords">
and a.name like concat('%',#{keywords},'%')
</if>
order by
a.id
</select>
</mapper>
(6)操作员更新及删除操作
package com.xxxx.server.controller;
import com.xxxx.server.pojo.Admin;
import com.xxxx.server.pojo.RespBean;
import com.xxxx.server.service.IAdminService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* <p>
* 前端控制器
* </p>
*
* @author zhanglishen
* @since 2022-08-05
*/
@RestController
@RequestMapping("/system/admin")
public class AdminController {
@Autowired
private IAdminService adminService;
@ApiOperation(value = "获取所有操作员")
@GetMapping("/")
public List<Admin> getAllAdmins(String keywords){
return adminService.getAllAdmins(keywords);
}
@ApiOperation(value = "更新操作员")
@PutMapping("/")
public RespBean updateAdmin(@RequestBody Admin admin){
if (adminService.updateById(admin)){
return RespBean.success("更新成功");
}
return RespBean.error("更新失败");
}
@ApiOperation(value = "删除操作员")
@DeleteMapping("/{id}")
public RespBean deleteAdmin(@PathVariable Integer id){
if (adminService.removeById(id)){
return RespBean.success("删除成功");
}
return RespBean.error("删除失败");
}
}
更改一下:Admin类中:
删除:添加一条添加的id=6
(7)操作员功能实现(更新操作员角色)
AdminController:
package com.xxxx.server.controller;
import com.xxxx.server.pojo.Admin;
import com.xxxx.server.pojo.RespBean;
import com.xxxx.server.pojo.Role;
import com.xxxx.server.service.IAdminService;
import com.xxxx.server.service.IRoleService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* <p>
* 前端控制器
* </p>
*
* @author zhanglishen
* @since 2022-08-05
*/
@RestController
@RequestMapping("/system/admin")
public class AdminController {
@Autowired
private IAdminService adminService;
@Autowired
private IRoleService roleService;
@ApiOperation(value = "获取所有操作员")
@GetMapping("/")
public List<Admin> getAllAdmins(String keywords){
return adminService.getAllAdmins(keywords);
}
@ApiOperation(value = "更新操作员")
@PutMapping("/")
public RespBean updateAdmin(@RequestBody Admin admin){
if (adminService.updateById(admin)){
return RespBean.success("更新成功");
}
return RespBean.error("更新失败");
}
@ApiOperation(value = "删除操作员")
@DeleteMapping("/{id}")
public RespBean deleteAdmin(@PathVariable Integer id){
if (adminService.removeById(id)){
return RespBean.success("删除成功");
}
return RespBean.error("删除失败");
}
@ApiOperation(value = "获取所有角色")
@GetMapping("/roles")
public List<Role> getAllRoles(){
return roleService.list();
}
@ApiOperation(value = "更新操作员角色")
@PutMapping("/role")
public RespBean updateAdminRole(Integer adminId,Integer[] rids){
return adminService.updateAdminRole(adminId,rids);
}
}
IAdminService:
package com.xxxx.server.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.xxxx.server.pojo.Admin;
import com.xxxx.server.pojo.Menu;
import com.xxxx.server.pojo.RespBean;
import com.xxxx.server.pojo.Role;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author zhanglishen
* @since 2022-08-05
*/
public interface IAdminService extends IService<Admin> {
//登录方法 登录之后返回token
RespBean login(String username, String password, String code, HttpServletRequest request);
//根据用户名获取用户
Admin getAdminByUserName(String username);
//根据用户id查询角色列表
List<Role> getRoles(Integer adminId);
//获取所有操作员
List<Admin> getAllAdmins(String keywords);
//更新操作员角色
RespBean updateAdminRole(Integer adminId, Integer[] rids);
}
实现类:
package com.xxxx.server.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xxxx.server.AdminUtils;
import com.xxxx.server.config.security.component.JwtTokenUtil;
import com.xxxx.server.mapper.AdminMapper;
import com.xxxx.server.mapper.AdminRoleMapper;
import com.xxxx.server.mapper.RoleMapper;
import com.xxxx.server.pojo.Admin;
import com.xxxx.server.pojo.AdminRole;
import com.xxxx.server.pojo.RespBean;
import com.xxxx.server.pojo.Role;
import com.xxxx.server.service.IAdminService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import javax.servlet.http.HttpServletRequest;
import javax.swing.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* <p>
* 服务实现类
* </p>
*
* @author zhanglishen
* @since 2022-08-05
*/
@Service
public class AdminServiceImpl extends ServiceImpl<AdminMapper, Admin> implements IAdminService {
//用到查数据库需要注入
@Autowired
private AdminMapper adminMapper;
@Autowired
private UserDetailsService userDetailsService;
@Autowired
private PasswordEncoder passwordEncoder;
//注入工具类
@Autowired
private JwtTokenUtil jwtTokenUtil;
@Autowired
private RoleMapper roleMapper;
@Autowired
private AdminRoleMapper adminRoleMapper;
//通过注解去拿头部信息
@Value("${jwt.tokenHead}")
private String tokenHead;
//登录之后返回token
@Override
public RespBean login(String username, String password, String code, HttpServletRequest request) {
//获取验证码
String captcha =(String) request.getSession().getAttribute("captcha");
//判断 如果输入验证码为空或者输入的验证码不正确
if (StringUtils.isEmpty(code)||!captcha.equalsIgnoreCase(code)){
return RespBean.error("验证码输入错误,请重新输入!");
}
//登录
//获取到userDetaiils
UserDetails userDetails = userDetailsService.loadUserByUsername(username);
if (null==userDetails||!passwordEncoder.matches(password,userDetails.getPassword())){
return RespBean.error("用户名或密码不正确");
}
if (!userDetails.isEnabled()){
return RespBean.error("账号被禁用!请联系管理员");
}
//更新security登录用户对象,把userDetails对象放到security全文中
UsernamePasswordAuthenticationToken authenticationToken=new UsernamePasswordAuthenticationToken(userDetails,null,userDetails.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(authenticationToken);
//生成token
//调用工具类的方法拿到token
String token = jwtTokenUtil.generateToken(userDetails);
Map<String,String> tokenMap=new HashMap<>();
tokenMap.put("token",token);
tokenMap.put("tokenHead",tokenHead);
return RespBean.success("登录成功",tokenMap);//把token返回给前端
}
//根据用户名获取
@Override
public Admin getAdminByUserName(String username) {
//使用MyBatis-plus查询
return adminMapper.selectOne(new QueryWrapper<Admin>().eq("username",username).eq("enabled",true));
}
//根据用户id查询角色列表
@Override
public List<Role> getRoles(Integer adminId) {
return roleMapper.getRoles(adminId);
}
//获取所有操作员
@Override
public List<Admin> getAllAdmins(String keywords) {
return adminMapper.getAllAdmins(AdminUtils.getCurrentAdmin().getId(), keywords);
}
//更新操作员角色
@Override
public RespBean updateAdminRole(Integer adminId, Integer[] rids) {
//先删除角色
adminRoleMapper.delete(new QueryWrapper<AdminRole>().eq("adminId",adminId));
//再添加角色
Integer result=adminRoleMapper.addAdminRole(adminId,rids);
if (rids.length==result){
return RespBean.success("更新成功!");
}
return RespBean.error("更新失败!");
}
}
AdminRoleMapper接口:
package com.xxxx.server.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.xxxx.server.pojo.AdminRole;
import com.xxxx.server.pojo.RespBean;
import org.apache.ibatis.annotations.Param;
/**
* <p>
* Mapper 接口
* </p>
*
* @author zhanglishen
* @since 2022-08-05
*/
public interface AdminRoleMapper extends BaseMapper<AdminRole> {
//更新操作员角色
Integer addAdminRole(@Param("adminId") Integer adminId,@Param("rids") Integer[] rids);
}
AdminRoleMapper.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxxx.server.mapper.AdminRoleMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.xxxx.server.pojo.AdminRole">
<id column="id" property="id" />
<result column="adminId" property="adminId" />
<result column="rid" property="rid" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id, adminId, rid
</sql>
<!--更新操作原角色-->
<update id="addAdminRole">
insert into t_admin_role(adminId,rid) values
<foreach collection="rids" item="rid" separator=",">
(#{adminId},#{rid})
</foreach>
</update>
</mapper>
在修改回来: