概述
系统管理-用户管理 /system/user
/**
* @RequiresPermissions 是Shiro的注解
* 只有当用户拥有system:user:list这个字符串时才能访问此方法
*/
@RequiresPermissions("system:user:list")
@PostMapping("/list")
@ResponseBody
public TableDataInfo list(SysUser user)
{
//设置请求分页数据
startPage();
//调用service层的userService实现selectUserList
//根据条件分页查询用户列表
List<SysUser> list = userService.selectUserList(user);
//返回响应分页的数据
return getDataTable(list);
}
请求分页数据
/**
* 设置请求分页数据
*/
protected void startPage()
{
//设置分页数据对象,并建立连接
PageDomain pageDomain = TableSupport.buildPageRequest();
//获取页码及每页的数目
Integer pageNum = pageDomain.getPageNum();
Integer pageSize = pageDomain.getPageSize();
if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize))
{
//检查字符,防止SQL注入绕过
String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());
//使用分页插件开始分页
PageHelper.startPage(pageNum, pageSize, orderBy);
}
}
查询用户列表
/**
* 根据条件分页查询用户列表
*
* @param user 用户信息
* @return 用户信息集合信息
*/
@Override
@DataScope(deptAlias = "d", userAlias = "u")
public List<SysUser> selectUserList(SysUser user)
{
return userMapper.selectUserList(user);
}
UserMapper.xml
<select id="selectUserList" parameterType="SysUser" resultMap="SysUserResult">
select u.user_id, u.dept_id, u.login_name, u.user_name, u.user_type, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.salt, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from sys_user u
left join sys_dept d on u.dept_id = d.dept_id
where u.del_flag = '0'
<if test="loginName != null and loginName != ''">
AND u.login_name like concat('%', #{loginName}, '%')
</if>
<if test="status != null and status != ''">
AND u.status = #{status}
</if>
<if test="phonenumber != null and phonenumber != ''">
AND u.phonenumber like concat('%', #{phonenumber}, '%')
</if>
<if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
AND date_format(u.create_time,'%y%m%d') >= date_format(#{params.beginTime},'%y%m%d')
</if>
<if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
AND date_format(u.create_time,'%y%m%d') <= date_format(#{params.endTime},'%y%m%d')
</if>
<if test="deptId != null and deptId != 0">
AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE FIND_IN_SET (#{deptId},ancestors) ))
</if>
<!-- 数据范围过滤 -->
${params.dataScope}
</select>
编辑用户 /system/user/edit/{id}
回显信息
/**
* 修改用户(回显相关信息)
*/
@GetMapping("/edit/{userId}")
//@PathVariable用户获取url中的{userId}
public String edit(@PathVariable("userId") Long userId, ModelMap mmap)
{
//查询数据库,回显当前Id用户的相关信息
//用户信息
mmap.put("user", userService.selectUserById(userId));
//角色信息
mmap.put("roles", roleService.selectRolesByUserId(userId));
//岗位信息
mmap.put("posts", postService.selectPostsByUserId(userId));
return prefix + "/edit";
}
userService查询用户信息
/**
* 通过用户ID查询用户
*
* @param userId 用户ID
* @return 用户对象信息
*/
@Override
public SysUser selectUserById(Long userId)
{
return userMapper.selectUserById(userId);
}
userMapper.xml
<select id="selectUserById" parameterType="Long" resultMap="SysUserResult">
<include refid="selectUserVo"/>
where u.user_id = #{userId}
</select>
roleService查询角色信息
/**
* 根据用户ID查询角色
*
* @param userId 用户ID
* @return 角色列表
*/
@Override
public List<SysRole> selectRolesByUserId(Long userId)
{
List<SysRole> userRoles = roleMapper.selectRolesByUserId(userId);
List<SysRole> roles = selectRoleAll();
for (SysRole role : roles)
{
for (SysRole userRole : userRoles)
{
if (role.getRoleId().longValue() == userRole.getRoleId().longValue())
{
role.setFlag(true);
break;
}
}
}
return roles;
}
RoleMapper.xml
<sql id="selectRoleVo">
select 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
</sql>
<select id="selectRolesByUserId" parameterType="Long" resultMap="SysRoleResult">
<include refid="selectRoleContactVo"/>
WHERE r.del_flag = '0' and ur.user_id = #{userId}
</select>
postService查询岗位信息
/**
* 根据用户ID查询岗位
*
* @param userId 用户ID
* @return 岗位列表
*/
@Override
public List<SysPost> selectPostsByUserId(Long userId)
{
List<SysPost> userPosts = postMapper.selectPostsByUserId(userId);
List<SysPost> posts = postMapper.selectPostAll();
for (SysPost post : posts)
{
for (SysPost userRole : userPosts)
{
if (post.getPostId().longValue() == userRole.getPostId().longValue())
{
post.setFlag(true);
break;
}
}
}
return posts;
}
PostMapper.xml
<select id="selectPostList" parameterType="SysPost" resultMap="SysPostResult">
<include refid="selectPostVo"/>
<where>
<if test="postCode != null and postCode != ''">
AND post_code like concat('%', #{postCode}, '%')
</if>
<if test="status != null and status != ''">
AND status = #{status}
</if>
<if test="postName != null and postName != ''">
AND post_name like concat('%', #{postName}, '%')
</if>
</where>
</select>
保存提交 /system/user/edit
提交信息
/**
* 修改保存用户
* 用@validated来校验数据,如果数据异常则会统一抛出异常,方便异常中心统一处理
*/
@RequiresPermissions("system:user:edit")
@Log(title = "用户管理", businessType = BusinessType.UPDATE)
@PostMapping("/edit")
@ResponseBody
public AjaxResult editSave(@Validated SysUser user)
{
// 校验用户是否允许操作
userService.checkUserAllowed(user);
// 使用用户常量信息类(里面对各个字段做了一定限制)进行校验
// 转换成0和1
if (UserConstants.USER_PHONE_NOT_UNIQUE.equals(userService.checkPhoneUnique(user)))
{
//手机号不唯一
return error("修改用户'" + user.getLoginName() + "'失败,手机号码已存在");
}
else if (UserConstants.USER_EMAIL_NOT_UNIQUE.equals(userService.checkEmailUnique(user)))
{
return error("修改用户'" + user.getLoginName() + "'失败,邮箱账号已存在");
}
// 记录当前更新者的用户名
// Shiro可以直接获得当前登录用户的用户名
user.setUpdateBy(ShiroUtils.getLoginName());
// 保存更新的用户,并响应返回的ajax类型的结果
return toAjax(userService.updateUser(user));
}
重置密码 /system/user/resetPwd/{userId}
回显密码
/**
* 重置密码 - 信息回显
* @param userId
* @param mmap
* @return
*/
@RequiresPermissions("system:user:resetPwd")
@Log(title = "重置密码", businessType = BusinessType.UPDATE)
@GetMapping("/resetPwd/{userId}")
public String resetPwd(@PathVariable("userId") Long userId, ModelMap mmap)
{
//查询到用户信息,放入视图解析器中
mmap.put("user", userService.selectUserById(userId));
//System.out.println(mmap.get("user"));
//返回到修改密码界面
return prefix + "/resetPwd";
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SKNnYdLJ-1587282576676)(D:/Typora/images/若依/首页/1587276585475.png)]
修改密码
xml
<update id="updateUser" parameterType="SysUser">
update sys_user
<set>
<if test="deptId != null and deptId != 0">dept_id = #{deptId},</if>
<if test="loginName != null and loginName != ''">login_name = #{loginName},</if>
<if test="userName != null and userName != ''">user_name = #{userName},</if>
<if test="userType != null and userType != ''">user_type = #{userType},</if>
<if test="email != null and email != ''">email = #{email},</if>
<if test="phonenumber != null and phonenumber != ''">phonenumber = #{phonenumber},</if>
<if test="sex != null and sex != ''">sex = #{sex},</if>
<if test="avatar != null and avatar != ''">avatar = #{avatar},</if>
<if test="password != null and password != ''">password = #{password},</if>
<if test="salt != null and salt != ''">salt = #{salt},</if>
<if test="status != null and status != ''">status = #{status},</if>
<if test="loginIp != null and loginIp != ''">login_ip = #{loginIp},</if>
<if test="loginDate != null">login_date = #{loginDate},</if>
<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
<if test="remark != null">remark = #{remark},</if>
update_time = sysdate()
</set>
where user_id = #{userId}
</update>
新增用户 /system/user/add
界面显示 GET请求
/**
* 新增用户
*/
@GetMapping("/add")
public String add(ModelMap mmap)
{
//查询所有角色和岗位,便于在页面中响应下拉框中展示
mmap.put("roles", roleService.selectRoleAll());
mmap.put("posts", postService.selectPostAll());
return prefix + "/add";
}
表单提交 POST请求
/**
* 表单提交
* 新增保存用户
*/
@RequiresPermissions("system:user:add")
@Log(title = "用户管理", businessType = BusinessType.INSERT)
@PostMapping("/add")
@ResponseBody
public AjaxResult addSave(@Validated SysUser user) //验证
{
// 验证字段唯一性
if (UserConstants.USER_NAME_NOT_UNIQUE.equals(userService.checkLoginNameUnique(user.getLoginName())))
{
return error("新增用户'" + user.getLoginName() + "'失败,登录账号已存在");
}
else if (UserConstants.USER_PHONE_NOT_UNIQUE.equals(userService.checkPhoneUnique(user)))
{
return error("新增用户'" + user.getLoginName() + "'失败,手机号码已存在");
}
else if (UserConstants.USER_EMAIL_NOT_UNIQUE.equals(userService.checkEmailUnique(user)))
{
return error("新增用户'" + user.getLoginName() + "'失败,邮箱账号已存在");
}
//加盐加密
user.setSalt(ShiroUtils.randomSalt());
user.setPassword(passwordService.encryptPassword(user.getLoginName(), user.getPassword(), user.getSalt()));
//设置添加信息
user.setCreateBy(ShiroUtils.getLoginName());
// 返回添加成功或失败
return toAjax(userService.insertUser(user));
}
删除用户 /system/user/remove
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zpy5WgdW-1587282576679)(D:/Typora/images/若依/首页/1587279242503.png)]
/**
* 删除用户
* @param ids
* @return
*/
@RequiresPermissions("system:user:remove")
@Log(title = "用户管理", businessType = BusinessType.DELETE)
@PostMapping("/remove")
@ResponseBody
public AjaxResult remove(String ids)
{
try
{
return toAjax(userService.deleteUserByIds(ids));
}
catch (Exception e)
{
return error(e.getMessage());
}
}
分配用户角色 /system/user/authRole/{userId}
授权角色 /system/user/authRole/insertAuthRole
/**
* 用户授权角色
*/
@RequiresPermissions("system:user:add")
@Log(title = "用户管理", businessType = BusinessType.GRANT)
@PostMapping("/authRole/insertAuthRole")
@ResponseBody
public AjaxResult insertAuthRole(Long userId, Long[] roleIds) //不止一个角色
{
userService.insertUserAuth(userId, roleIds);
return success();
}
// service层
/**
* 用户授权角色
*
* @param userId 用户ID
* @param roleIds 角色组
*/
@Override
public void insertUserAuth(Long userId, Long[] roleIds)
{
// 先重置原有角色 删除用户与角色的关联
userRoleMapper.deleteUserRoleByUserId(userId);
// 添加角色
insertUserRole(userId, roleIds);
}
<!--删除用户和角色的关联-->
<delete id="deleteUserRoleByUserId" parameterType="Long">
delete from sys_user_role where user_id = #{userId}
</delete>
用户和角色是一对多的关系
/**
* 新增用户角色信息
* 一对多的关系
*
* @param user 用户对象
*/
public void insertUserRole(Long userId, Long[] roleIds)
{
if (StringUtils.isNotNull(roleIds))
{
// 新增用户与角色管理
List<SysUserRole> list = new ArrayList<SysUserRole>();
for (Long roleId : roleIds)
{
// 一个用户和一个角色对应sys_user_role表中的一行
// 所以如果一个用户有多个角色,就会对应多行数据,因此SysUserRole也会有多个
// 最后会形成一个list
SysUserRole ur = new SysUserRole();
ur.setUserId(userId);
ur.setRoleId(roleId);
list.add(ur);
}
if (list.size() > 0)
{
//批量添加角色信息
userRoleMapper.batchUserRole(list);
}
}
}
搜索用户(条件查询) /system/user/list
搜索框搜索
组织机构筛选
导出用户 /system/user/export
/**
* 导出用户信息
* @param user
* @return
*/
@Log(title = "用户管理", businessType = BusinessType.EXPORT)
@RequiresPermissions("system:user:export")
@PostMapping("/export")
@ResponseBody
public AjaxResult export(SysUser user)
{
//查询用户列表
List<SysUser> list = userService.selectUserList(user);
//利用Excel工具类进行相关信息的编写
//工具类在poi包下
//POI是Apache软件基金会用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能。
ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
//数据导入到excel
return util.exportExcel(list, "用户数据");
}
导入用户 /system/user/import
/**
* 导入用户
* @param file
* @param updateSupport
* @return
* @throws Exception
*/
@Log(title = "用户管理", businessType = BusinessType.IMPORT)
@RequiresPermissions("system:user:import")
@PostMapping("/importData")
@ResponseBody
public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
{
ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
List<SysUser> userList = util.importExcel(file.getInputStream());
String operName = ShiroUtils.getSysUser().getLoginName();
String message = userService.importUser(userList, updateSupport, operName);
return AjaxResult.success(message);
}
最后
以上就是自然裙子为你收集整理的若依源码分析(3)——用户管理系统管理-用户管理 /system/user的全部内容,希望文章能够帮你解决若依源码分析(3)——用户管理系统管理-用户管理 /system/user所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复