目录
1、查询字典数据
2、查询参数配置(如初始化密码)
3、查询部门下拉树
4、查询用户信息
5、新增、修改和删除用户
前端 api:
// 根据字典类型查询字典数据信息
export function getDicts(dictType) {
return request({
url: '/system/dict/data/dictType/' + dictType,
method: 'get'
})
}
Controller 层:
package com.ruoyi.project.system.controller;
/**
* 数据字典信息
*
* @author ruoyi
*/
@RestController
@RequestMapping("/system/dict/data")
public class SysDictDataController extends BaseController {
@Resource
private ISysDictDataService dictDataService;
/**
* 根据字典类型查询字典数据信息
*/
@GetMapping(value = "/dictType/{dictType}")
public AjaxResult dictType(@PathVariable String dictType)
{
return AjaxResult.success(dictDataService.selectDictDataByType(dictType));
}
}
Service 接口层:
package com.ruoyi.project.system.service;
import com.ruoyi.project.system.domain.SysDictData;
import java.util.List;
/**
* 字典 业务层
*
* @author ruoyi
*/
public interface ISysDictDataService {
/**
* 根据字典类型查询字典数据
*
* @param dictType 字典类型
* @return 字典数据集合信息
*/
public List selectDictDataByType(String dictType);
}
Service 实现类层
package com.ruoyi.project.system.service.impl;
/**
* 字典 业务层处理
*
* @author ruoyi
*/
@Service
public class SysDictDataServiceImpl implements ISysDictDataService {
@Resource
private SysDictDataMapper dictDataMapper;
/**
* 根据字典类型查询字典数据
*
* @param dictType 字典类型
* @return 字典数据集合信息
*/
@Override
public List selectDictDataByType(String dictType) {
return dictDataMapper.selectDictDataByType(dictType);
}
}
Mapper 接口层:
package com.ruoyi.project.system.mapper;
/**
* 字典表 数据层
*
* @author ruoyi
*/
public interface SysDictDataMapper {
/**
* 根据字典类型查询字典数据
*
* @param dictType 字典类型
* @return 字典数据集合信息
*/
public List selectDictDataByType(String dictType);
}
Mapper 映射文件:
创建 resources / mybatis / system / SysDictDataMapper.xml 文件
select dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark
from sys_dict_data
前端 API :
// 根据参数键名查询参数值
export function getConfigKey(configKey) {
return request({
url: '/system/config/configKey/' + configKey,
method: 'get'
})
}
Controller 层:
package com.ruoyi.project.system.controller;
/**
* 参数配置 信息操作处理
*
* @author ruoyi
*/
@RestController
@RequestMapping("/system/config")
public class SysConfigController extends BaseController {
@Resource
private ISysConfigService configService;
/**
* 根据参数键名查询参数值
*/
@GetMapping(value = "/configKey/{configKey}")
public AjaxResult getConfigKey(@PathVariable String configKey) {
return AjaxResult.success(configService.selectConfigByKey(configKey));
}
}
Service 接口层:
package com.ruoyi.project.system.service;
/**
* 参数配置 服务层
*
* @author ruoyi
*/
public interface ISysConfigService {
/**
* 根据键名查询参数配置信息
*
* @param configKey 参数键名
* @return 参数键值
*/
public String selectConfigByKey(String configKey);
}
Service 接口实现类层:
package com.ruoyi.project.system.service.impl;
/**
* 参数配置 服务层实现
*
* @author ruoyi
*/
@Service
public class SysConfigServiceImpl implements ISysConfigService {
@Resource
private SysConfigMapper configMapper;
/**
* 根据键名查询参数配置信息
*
* @param configKey 参数key
* @return 参数键值
*/
@Override
public String selectConfigByKey(String configKey) {
SysConfig config = new SysConfig();
config.setConfigKey(configKey);
SysConfig retConfig = configMapper.selectConfig(config);
return StringUtils.isNotNull(retConfig) ? retConfig.getConfigValue() : "";
}
}
SysConfig 实体类:
package com.ruoyi.project.system.domain;
/**
* 参数配置表 sys_config
*
* @author ruoyi
*/
public class SysConfig extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 参数主键 */
private Long configId;
/** 参数名称 */
private String configName;
/** 参数键名 */
private String configKey;
/** 参数键值 */
private String configValue;
/** 系统内置(Y是 N否) */
private String configType;
public Long getConfigId()
{
return configId;
}
public void setConfigId(Long configId)
{
this.configId = configId;
}
public String getConfigName()
{
return configName;
}
public void setConfigName(String configName)
{
this.configName = configName;
}
public String getConfigKey()
{
return configKey;
}
public void setConfigKey(String configKey)
{
this.configKey = configKey;
}
public String getConfigValue()
{
return configValue;
}
public void setConfigValue(String configValue)
{
this.configValue = configValue;
}
public String getConfigType()
{
return configType;
}
public void setConfigType(String configType)
{
this.configType = configType;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("configId", getConfigId())
.append("configName", getConfigName())
.append("configKey", getConfigKey())
.append("configValue", getConfigValue())
.append("configType", getConfigType())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.append("remark", getRemark())
.toString();
}
}
Mapper接口层:
package com.ruoyi.project.system.mapper;
public interface SysConfigMapper {
/**
* 查询参数配置信息
*
* @param config 参数配置信息
* @return 参数配置信息
*/
public SysConfig selectConfig(SysConfig config);
}
Mapper 映射文件:
创建 resources / mybatis / system / SysConfigMapper.xml 文件
select config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark
from sys_config
and config_id = #{configId}
and config_key = #{configKey}
前端 API :
// 查询部门下拉树结构
export function treeselect() {
return request({
url: '/system/dept/treeselect',
method: 'get'
})
}
Controller 层:
package com.ruoyi.project.system.controller;
/**
* 部门信息
*
* @author ruoyi
*/
@RestController
@RequestMapping("/system/dept")
public class SysDeptController extends BaseController {
@Resource
private ISysDeptService deptService;
/**
* 获取部门下拉树列表
*/
@GetMapping("/treeselect")
public AjaxResult treeselect(SysDept dept) {
List depts = deptService.selectDeptList(dept);
return AjaxResult.success(deptService.buildDeptTreeSelect(depts));
}
}
Service 接口层:
package com.ruoyi.project.system.service;
/**
* 部门管理 服务层
*
* @author ruoyi
*/
public interface ISysDeptService {
/**
* 查询部门管理数据
*
* @param dept 部门信息
* @return 部门信息集合
*/
public List selectDeptList(SysDept dept);
/**
* 构建前端所需要下拉树结构
*
* @param depts 部门列表
* @return 下拉树结构列表
*/
public List buildDeptTreeSelect(List depts);
}
Service 实现类:
package com.ruoyi.project.system.service.impl;
/**
* 部门管理 服务实现
*
* @author ruoyi
*/
@Service
public class SysDeptServiceImpl implements ISysDeptService {
@Resource
private SysDeptMapper deptMapper;
/**
* 查询部门管理数据
*
* @param dept 部门信息
* @return 部门信息集合
*/
@Override
public List selectDeptList(SysDept dept) {
return deptMapper.selectDeptList(dept);
}
/**
* 构建前端所需要下拉树结构
*
* @param depts 部门列表
* @return 下拉树结构列表
*/
@Override
public List buildDeptTreeSelect(List depts) {
List deptTrees = buildDeptTree(depts);
return deptTrees.stream().map(TreeSelect::new).collect(Collectors.toList());
}
/**
* 构建前端所需要树结构
*
* @param depts 部门列表
* @return 树结构列表
*/
public List buildDeptTree(List depts) {
List returnList = new ArrayList();
List tempList = new ArrayList();
for (SysDept dept : depts) {
tempList.add(dept.getDeptId());
}
for (Iterator iterator = depts.iterator(); iterator.hasNext(); ) {
SysDept dept = (SysDept) iterator.next();
// 如果是顶级节点, 遍历该父节点的所有子节点
if (!tempList.contains(dept.getParentId())) {
recursionFn(depts, dept);
returnList.add(dept);
}
}
if (returnList.isEmpty()) {
returnList = depts;
}
return returnList;
}
/**
* 递归列表
*/
private void recursionFn(List list, SysDept t) {
// 得到子节点列表
List childList = getChildList(list, t);
t.setChildren(childList);
for (SysDept tChild : childList) {
if (hasChild(list, tChild)) {
// 判断是否有子节点
Iterator it = childList.iterator();
while (it.hasNext()) {
SysDept n = (SysDept) it.next();
recursionFn(list, n);
}
}
}
}
/**
* 得到子节点列表
*/
private List getChildList(List list, SysDept t) {
List tlist = new ArrayList();
Iterator it = list.iterator();
while (it.hasNext()) {
SysDept n = (SysDept) it.next();
if (StringUtils.isNotNull(n.getParentId()) && n.getParentId().longValue() == t.getDeptId().longValue()) {
tlist.add(n);
}
}
return tlist;
}
/**
* 判断是否有子节点
*/
private boolean hasChild(List list, SysDept t) {
return getChildList(list, t).size() > 0 ? true : false;
}
}
Mapper 接口:
package com.ruoyi.project.system.mapper;
import com.ruoyi.project.system.domain.SysDept;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 部门管理 数据层
*
* @author ruoyi
*/
public interface SysDeptMapper {
/**
* 查询部门管理数据
*
* @param dept 部门信息
* @return 部门信息集合
*/
public List selectDeptList(SysDept dept);
}
Mapper 映射文件:
创建 resources / mybatis / system / SysDeptMapper.xml 文件
select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status, d.del_flag, d.create_by, d.create_time
from sys_dept d
前端 API 接口:
// 查询用户详细
export function getUser(userId) {
return request({
url: '/system/user/' + praseStrEmpty(userId),
method: 'get'
})
}
Controller 层:
package com.ruoyi.project.system.controller;
/**
* 用户信息
*
* @author ruoyi
*/
@RestController
@RequestMapping("/system/user")
public class SysUserController extends BaseController {
@Resource
private ISysUserService userService;
@Resource
private ISysRoleService roleService;
@Resource
private ISysPostService postService;
/**
* 根据用户编号获取详细信息
*/
@GetMapping(value = {"/", "/{userId}"})
public AjaxResult getInfo(@PathVariable(value = "userId", required = false) Long userId) {
AjaxResult ajax = AjaxResult.success();
ajax.put("roles", roleService.selectRoleAll());
ajax.put("posts", postService.selectPostAll());
if (StringUtils.isNotNull(userId)) {
ajax.put(AjaxResult.DATA_TAG, userService.selectUserById(userId));
ajax.put("postIds", postService.selectPostListByUserId(userId));
ajax.put("roleIds", roleService.selectRoleListByUserId(userId));
}
return ajax;
}
}
其中: AjaxResult.DATA_TAG 的值为 "data"
Service 层:
ISysRoleService 接口:
package com.ruoyi.project.system.service;
/**
* 角色业务层
*
* @author ruoyi
*/
public interface ISysRoleService {
/**
* 查询所有角色
*
* @return 角色列表
*/
public List selectRoleAll();
/**
* 根据用户ID获取角色选择框列表
*
* @param userId 用户ID
* @return 选中角色ID列表
*/
public List selectRoleListByUserId(Long userId);
}
ISysRoleService 接口实现类:
package com.ruoyi.project.system.service.impl;
/**
* 角色 业务层处理
*
* @author ruoyi
*/
@Service
public class SysRoleServiceImpl implements ISysRoleService {
@Resource
private SysRoleMapper roleMapper;
/**
* 查询所有角色
*
* @return 角色列表
*/
public List selectRoleAll() {
return roleMapper.selectRoleAll();
}
/**
* 根据用户ID获取角色选择框列表
*
* @param userId 用户ID
* @return 选中角色ID列表
*/
public List selectRoleListByUserId(Long userId) {
return roleMapper.selectRoleListByUserId(userId);
}
}
SysRoleMapper 接口:
package com.ruoyi.project.system.mapper;
/**
* 角色表 数据层
*
* @author ruoyi
*/
public interface SysRoleMapper {
/**
* 查询所有角色
*
* @return 角色列表
*/
public List selectRoleAll();
/**
* 根据用户ID获取角色选择框列表
*
* @param userId 用户ID
* @return 选中角色ID列表
*/
public List selectRoleListByUserId(Long userId);
}
Mapper 映射文件:
创建 resources / mybatis / system / SysRoleMapper.xml 文件
select distinct r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope,
r.status, r.del_flag, r.create_time, r.remark
from sys_role r
left join sys_user_role ur on ur.role_id = r.role_id
left join sys_user u on u.user_id = ur.user_id
left join sys_dept d on u.dept_id = d.dept_id
ISysPostService 接口:
package com.ruoyi.project.system.service;
/**
* 岗位信息 服务层
*
* @author ruoyi
*/
public interface ISysPostService {
/**
* 查询所有岗位
*
* @return 岗位列表
*/
public List selectPostAll();
/**
* 根据用户ID获取岗位选择框列表
*
* @param userId 用户ID
* @return 选中岗位ID列表
*/
public List selectPostListByUserId(Long userId);
}
ISysPostService 接口实现类:
package com.ruoyi.project.system.service.impl;
/**
* 岗位信息 服务层处理
*
* @author ruoyi
*/
@Service
public class SysPostServiceImpl implements ISysPostService {
@Resource
private SysPostMapper postMapper;
/**
* 查询所有岗位
*
* @return 岗位列表
*/
@Override
public List selectPostAll() {
return postMapper.selectPostAll();
}
/**
* 根据用户ID获取岗位选择框列表
*
* @param userId 用户ID
* @return 选中岗位ID列表
*/
public List selectPostListByUserId(Long userId) {
return postMapper.selectPostListByUserId(userId);
}
}
SysPostMapper 接口
package com.ruoyi.project.system.mapper;
/**
* 岗位信息 数据层
*
* @author ruoyi
*/
public interface SysPostMapper {
/**
* 查询所有岗位
*
* @return 岗位列表
*/
public List selectPostAll();
/**
* 根据用户ID获取岗位选择框列表
*
* @param userId 用户ID
* @return 选中岗位ID列表
*/
public List selectPostListByUserId(Long userId);
}
Mapper 映射文件:
创建 resources / mybatis / system / SysPostMapper.xml 文件
select post_id, post_code, post_name, post_sort, status, create_by, create_time, remark
from sys_post
ISysUserService 接口:
package com.ruoyi.project.system.service;
import com.ruoyi.project.system.domain.SysUser;
import java.util.List;
/**
* 用户 业务层
*
* @author ruoyi
*/
public interface ISysUserService {
/**
* 通过用户ID查询用户
*
* @param userId 用户ID
* @return 用户对象信息
*/
public SysUser selectUserById(Long userId);
}
ISysUserService 接口实现类:
package com.ruoyi.project.system.service.impl;
/**
* 用户 业务层处理
*
* @author ruoyi
*/
@Service
public class SysUserServiceImpl implements ISysUserService {
@Resource
private SysUserMapper userMapper;
/**
* 通过用户ID查询用户
*
* @param userId 用户ID
* @return 用户对象信息
*/
@Override
public SysUser selectUserById(Long userId) {
return userMapper.selectUserById(userId);
}
}
SysUserMapper 接口:
package com.ruoyi.project.system.mapper;
public interface SysUserMapper {
/**
* 通过用户ID查询用户
*
* @param userId 用户ID
* @return 用户对象信息
*/
public SysUser selectUserById(Long userId);
}
Mapper 映射文件:
创建 resources / mybatis / system / SysUserMapper.xml 文件
select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,
d.dept_id, d.parent_id, d.dept_name, d.order_num, d.leader, d.status as dept_status,
r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status
from sys_user u
left join sys_dept d on u.dept_id = d.dept_id
left join sys_user_role ur on u.user_id = ur.user_id
left join sys_role r on r.role_id = ur.role_id
前端 API :
// 新增用户
export function addUser(data) {
return request({
url: '/system/user',
method: 'post',
data: data
})
}
// 修改用户
export function updateUser(data) {
return request({
url: '/system/user',
method: 'put',
data: data
})
}
// 删除用户
export function delUser(userId) {
return request({
url: '/system/user/' + userId,
method: 'delete'
})
}
Controller 层:
package com.ruoyi.project.system.controller;
/**
* 用户信息
*
* @author ruoyi
*/
@RestController
@RequestMapping("/system/user")
public class SysUserController extends BaseController {
@Resource
private ISysUserService userService;
/**
* 新增用户
*/
@PostMapping
public AjaxResult add(@Validated @RequestBody SysUser user) {
if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(user.getUserName()))) {
return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
} else if (UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) {
return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,手机号码已存在");
} else if (UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) {
return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,邮箱账号已存在");
}
user.setCreateBy(SecurityUtils.getUsername());
user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
return toAjax(userService.insertUser(user));
}
/**
* 修改用户
*/
@PutMapping
public AjaxResult edit(@Validated @RequestBody SysUser user) {
userService.checkUserAllowed(user);
if (UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) {
return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
} else if (UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) {
return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
}
user.setUpdateBy(SecurityUtils.getUsername());
return toAjax(userService.updateUser(user));
}
/**
* 删除用户
*/
@DeleteMapping("/{userIds}")
public AjaxResult remove(@PathVariable Long[] userIds) {
return toAjax(userService.deleteUserByIds(userIds));
}
}
由于篇幅原因,后面的部分也不需要弄出来了