若依框架的学习(六)用户的修改删除

用户信息的修改

在这里插入图片描述
在这里插入图片描述
这里和之前的新增用户一样,也要重置表单,和用户信息查询回滚参数信息过来

在这里插入图片描述

/**
     * 根据用户编号获取详细信息
     */
    @PreAuthorize("@ss.hasPermi('system:user:query')")
    @GetMapping(value = { "/", "/{userId}" })
    public AjaxResult getInfo(@PathVariable(value = "userId", required = false) Long userId)
    {
        userService.checkUserDataScope(userId);
        AjaxResult ajax = AjaxResult.success();
        List<SysRole> roles = roleService.selectRoleAll();
        ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
        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;
    }

和新增用户不一样,是这次有了userId的参数,所以这次也会走if判断。
这次不止把所有的角色信息和岗位信息拿到,还拿了要修改的用户的角色信息和岗位信息拿到,还有把用户实体类封装,(那为什么还要拿角色和岗位信息,我觉得应该这样封装方便前端来用),然后返回给前端。

在这里插入图片描述
然后就出现了这个页面。

修改用户数据

在这里插入图片描述
我们试下修改数据,看下后端怎么实现。
首先找到确定的前端方法
在这里插入图片描述
和新增用户页面的确定方法一样,只不过这次有userId,会走红框方法区。
顺藤摸瓜也找到updateUser的请求后台方法。
在这里插入图片描述
这次是个put请求,我们也很自然找到对应的controller方法

 /**
     * 修改用户
     */
    @PreAuthorize("@ss.hasPermi('system:user:edit')")
    @Log(title = "用户管理", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@Validated @RequestBody SysUser user)
    {
        userService.checkUserAllowed(user);
        if (StringUtils.isNotEmpty(user.getPhonenumber())
                && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user)))
        {
            return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
        }
        else if (StringUtils.isNotEmpty(user.getEmail())
                && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user)))
        {
            return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
        }
        user.setUpdateBy(getUsername());
        return toAjax(userService.updateUser(user));
    }

在这里插入图片描述
这里可以看出新用户名和旧用户名

在第一检查是否修改某个用户,如果要修改的用户是超级管理员则抛出异常。

/**
     * 校验用户是否允许操作
     * 
     * @param user 用户信息
     */
    @Override
    public void checkUserAllowed(SysUser user)
    {
        if (StringUtils.isNotNull(user.getUserId()) && user.isAdmin())
        {
            throw new ServiceException("不允许操作超级管理员用户");
        }
    }

在检验手机号是否重复的时候

/**
     * 校验手机号码是否唯一
     *
     * @param user 用户信息
     * @return
     */
    @Override
    public String checkPhoneUnique(SysUser user)
    {
        Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
        SysUser info = userMapper.checkPhoneUnique(user.getPhonenumber());
        //如果info为空,说明手机号肯定没重复,但如果是info不为空的,有可能是同一个用户,如果不是同一个用户则说明手机号重复。
        if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue())
        {
            return UserConstants.NOT_UNIQUE;
        }
        return UserConstants.UNIQUE;
    }

这里的info肯定不是null,但因为是同一个用户,所以不能认为手机号是重复的,返回0给controller。

最后是更新数据库了

/**
     * 修改保存用户信息
     * 
     * @param user 用户信息
     * @return 结果
     */
    @Override
    @Transactional
    public int updateUser(SysUser user)
    {
        Long userId = user.getUserId();
        // 删除用户与角色关联
        userRoleMapper.deleteUserRoleByUserId(userId);
        // 新增用户与角色管理
        insertUserRole(user);
        // 删除用户与岗位关联
        userPostMapper.deleteUserPostByUserId(userId);
        // 新增用户与岗位管理
        insertUserPost(user);
        return userMapper.updateUser(user);
    }

这里的更新策略是,用户信息有update方法,中间表通过先删除后新增的策略,感觉又学到了小tips
这个修改方法也用了@Transactional注解,运用了事务的特性。

删除用户

/**
     * 删除用户
     */
    @PreAuthorize("@ss.hasPermi('system:user:remove')")
    @Log(title = "用户管理", businessType = BusinessType.DELETE)
    @DeleteMapping("/{userIds}")
    public AjaxResult remove(@PathVariable Long[] userIds)
    {
        if (ArrayUtils.contains(userIds, getUserId()))
        {
            return error("当前用户不能删除");
        }
        return toAjax(userService.deleteUserByIds(userIds));
    }

这里传入了一个数组,说明可以把要删除的userId放入数组,然后批量删除。

这里面第一个if判断,是防止用户把自己给删除。
然后进入删除业务层

/**
     * 批量删除用户信息
     * 
     * @param userIds 需要删除的用户ID
     * @return 结果
     */
    @Override
    @Transactional
    public int deleteUserByIds(Long[] userIds)
    {
        for (Long userId : userIds)
        {
            checkUserAllowed(new SysUser(userId));
        }
        // 删除用户与角色关联
        userRoleMapper.deleteUserRole(userIds);
        // 删除用户与岗位关联
        userPostMapper.deleteUserPost(userIds);
        return userMapper.deleteUserByIds(userIds);
    }

foreach循环是查看,是否有超级管理员在这userIds,防止删除超级管理员。
接下来就是一个简单的通过数组参数来进行循环删除记录,把中间表的相关记录删除,而用户表则是设置一个删除标记。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HTML学生管理系统框架是为管理学生信息、教学进程、学生选课、成绩管理等方面而设计的系统,其框架涵盖了后台管理系统和前端用户系统两部分。前端系统为学生、教师和管理员提供轻松、便利的使用界面,后台系统则是管理员对学生信息进行管理所需要的工具。 框架首先需要根据教学管理中的流程来设计:学生信息、课程信息、选课信息、成绩信息存放在数据库中,管理员可以通过后台系统输入或导入学生信息,管理教师和课程,为学生分配选课权限,进行成绩统计和查询。同时,后台系统需要设计权限管理和角色分配机制,以便管理员可以分配不同的角色和权限给不同的用户前端用户系统则通过实现轻松浏览和操作,使学生、教师和管理员都能方便地使用该系统。教师可以在前端系统里发布教学公告和作业,管理学生作业和成绩,同时可以查看自己教授课程的人数与教学进程等信息。学生则可以浏览和选择自己想要学习的课程、查询自己该学期的选课情况、查看自己的成绩等信息。而管理员则可以在前端系统中操作一些常用的管理工具,如添加、删除修改学生信息和教师信息,管理课程信息和成绩信息。 在实现HTML学生管理框架时,需要考虑到易用性和可扩展性。框架应该易于维护和升级,同时实现良好的UI体验。通过实现这些目标,学校可以轻松优化教学管理和服务质量。可以简化教学流程,确保学生信息可靠、统一和标准化,以此减轻工作量,提高效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值