我是靠谱客的博主 自然裙子,最近开发中收集的这篇文章主要介绍若依源码分析(3)——用户管理系统管理-用户管理 /system/user,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

系统管理-用户管理 /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') &gt;= 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') &lt;= 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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部