【尚庭公寓SpringBoot + Vue 项目实战】后台用户信息管理(十七)

【尚庭公寓SpringBoot + Vue 项目实战】后台用户信息管理(十七)


1、业务说明

后台用户信息管理共有六个接口

  1. 根据条件分页查询后台用户列表
  2. 根据id查询后台用户信息
  3. 保存或更新后台用户信息
  4. 判断后台用户是否可用
  5. 根据id删除后台用户信息
  6. 根据id修改后台用户状态

接口定义-后台-系统用户管理-用户列表

2、逻辑模型介绍

image-20240618121938150

通过岗位id从岗位信息表中查询岗位

3、接口开发
3.1、根据条件分页查询后台用户列表

查看接口

image-20240618122228702

代码开发

  • 查看请求和响应的数据结构

    • 请求的数据结构

      • currentsize为分页相关参数,分别表示当前所处页面每个页面的记录数

      • SystemUserQueryVo为房间的查询条件,详细结构如下:

        @Data
        @Schema(description = "员工查询实体")
        public class SystemUserQueryVo {
        
            @Schema(description= "员工姓名")
            private String name;
        
            @Schema(description= "手机号码")
            private String phone;
        }
        
    • 响应的数据结构

      单个系统用户信息的结构可查看web-admin模块下的com.atguigu.lease.web.admin.vo.system.user.SystemUserItemVo,具体内容如下:

      @Data
      @Schema(description = "后台管理系统用户基本信息实体")
      public class SystemUserItemVo extends SystemUser {
      
          @Schema(description = "岗位名称")
          @TableField(value = "post_name")
          private String postName;
      }
      
  • 编写Controller层逻辑

    SystemUserController中增加如下内容

    @Operation(summary = "根据条件分页查询后台用户列表")
    @GetMapping("page")
    public Result<IPage<SystemUserItemVo>> page(@RequestParam long current, @RequestParam long size, SystemUserQueryVo queryVo) {
        IPage<SystemUser> page = new Page<>(current, size);
        IPage<SystemUserItemVo> systemUserPage = service.pageSystemUserByQuery(page, queryVo);
        return Result.ok(systemUserPage);
    }
    
  • 编写Service层逻辑

    • SystemUserService中增加如下内容

      IPage<SystemUserItemVo> pageSystemUserByQuery(IPage<SystemUser> page, SystemUserQueryVo queryVo);
      
    • SystemUserServiceImpl中增加如下内容

      @Override
      public IPage<SystemUserItemVo> pageSystemUserByQuery(IPage<SystemUser> page, SystemUserQueryVo queryVo) {
          return systemUserMapper.pageSystemUserByQuery(page, queryVo);
      }
      
  • 编写Mapper层逻辑

    • SystemUserMapper中增加如下内容

      IPage<SystemUserItemVo> pageSystemUserByQuery(IPage<SystemUser> page, SystemUserQueryVo queryVo);
      
    • SystemUserMapper.xml中增加如下内容

      <select id="pageSystemUserByQuery"
              resultType="com.atguigu.lease.web.admin.vo.system.user.SystemUserItemVo">
          select su.id,
                 username,
                 su.name,
                 type,
                 phone,
                 avatar_url,
                 additional_info,
                 post_id,
      		   su.status,
                 sp.name post_name
          from system_user su
                   left join system_post sp on su.post_id = sp.id and sp.is_deleted = 0
          <where>
              su.is_deleted = 0
              <if test="queryVo.name != null and queryVo.name != ''">
                  and su.name like concat('%',#{queryVo.name},'%')
              </if>
              <if test="queryVo.phone !=null and queryVo.phone != ''">
                  and su.phone like concat('%',#{queryVo.phone},'%')
              </if>
          </where>
      </select>
      

      知识点

      password字段不要查询。

3.2、根据ID查询后台用户信息

查看接口

image-20240618122349161

代码开发

  • 编写Controller层逻辑

    SystemUserController中增加如下内容

    @Operation(summary = "根据ID查询后台用户信息")
    @GetMapping("getById")
    public Result<SystemUserItemVo> getById(@RequestParam Long id) {
    
        SystemUserItemVo systemUser = service.getSystemUserById(id);
        return Result.ok(systemUser);
    }
    
  • 编写Service层逻辑

    • SystemUserServcie中增加如下内容

      SystemUserItemVo getSystemUserById(Long id);
      
    • SystemUserServcieImpl中增加如下内容

      @Override
      public SystemUserItemVo getSystemUserById(Long id) {
          SystemUser systemUser = systemUserMapper.selectById(id);
      
          SystemPost systemPost = systemPostMapper.selectById(systemUser.getPostId());
      
          SystemUserItemVo systemUserItemVo = new SystemUserItemVo();
          BeanUtils.copyProperties(systemPost, systemUserItemVo);
          systemUserItemVo.setPostName(systemUserItemVo.getPostName());
      
          return systemUserItemVo;
      }
      

      知识点

      system_user表中的password字段不应查询,需要在SystemUserpassword字段的@TableField注解中增加select=false参数。

3.3、保存或更新后台用户信息

查看接口

image-20240618122519682

代码开发

  • 编写Controller层逻辑

    SystemUserController中增加如下内容

    @Operation(summary = "保存或更新后台用户信息")
    @PostMapping("saveOrUpdate")
    public Result saveOrUpdate(@RequestBody SystemUser systemUser) {
        if(systemUser.getPassword() != null){
            systemUser.setPassword(DigestUtils.md5Hex(systemUser.getPassword()));
        }
        service.saveOrUpdate(systemUser);
        return Result.ok();
    }
    

    知识点

    • 密码处理

      用户的密码通常不会直接以明文的形式保存到数据库中,而是会先经过处理,然后将处理之后得到的"密文"保存到数据库,这样能够降低数据库泄漏导致的用户账号安全问题。

      密码通常会使用一些单向函数进行处理,如下图所示

      常用于处理密码的单向函数(算法)有MD5、SHA-256等,Apache Commons提供了一个工具类DigestUtils,其中就包含上述算法的实现。

      Apache Commons是Apache软件基金会下的一个项目,其致力于提供可重用的开源软件,其中包含了很多易于使用的现成工具。

      使用该工具类需引入commons-codec依赖,在common模块的pom.xml中增加如下内容

      <dependency>
          <groupId>commons-codec</groupId>
          <artifactId>commons-codec</artifactId>
      </dependency>
      
    • Mybatis-Plus update strategy

      使用Mybatis-Plus提供的更新方法时,若实体中的字段为null,默认情况下,最终生成的update语句中,不会包含该字段。若想改变默认行为,可做以下配置。

      • 全局配置

        application.yml中配置如下参数

        mybatis-plus:
          global-config:
            db-config:
              update-strategy: <strategy>
        

        :上述<strategy>可选值有:ignorenot_nullnot_emptynever,默认值为not_null

        • ignore:忽略空值判断,不管字段是否为空,都会进行更新

        • not_null:进行非空判断,字段非空才会进行判断

        • not_empty:进行非空判断,并进行非空串(“”)判断,主要针对字符串类型

        • never:从不进行更新,不管该字段为何值,都不更新

      • 局部配置

        在实体类中的具体字段通过@TableField注解进行配置,如下:

        @Schema(description = "密码")
        @TableField(value = "password", updateStrategy = FieldStrategy.NOT_EMPTY)
        private String password;
        
3.4、判断后台用户名是否可用

查看接口

image-20240618122615593

代码开发

SystemUserController中增加如下内容

@Operation(summary = "判断后台用户名是否可用")
@GetMapping("isUserNameAvailable")
public Result<Boolean> isUsernameExists(@RequestParam String username) {
    LambdaQueryWrapper<SystemUser> queryWrapper = new LambdaQueryWrapper<>();
    queryWrapper.eq(SystemUser::getUsername, username);
    long count = service.count(queryWrapper);
    return Result.ok(count == 0);
}
3.5、根据ID删除后台用户信息

查看接口

image-20240618122657979

代码开发

SystemUserController中增加如下内容

@DeleteMapping("deleteById")
@Operation(summary = "根据ID删除后台用户信息")
public Result removeById(@RequestParam Long id) {
    service.removeById(id);
    return Result.ok();
}
3.6、根据ID修改后台用户状态

查看接口

image-20240618122747424

代码开发

SystemUserController中增加如下内容

@Operation(summary = "根据ID修改后台用户状态")
@PostMapping("updateStatusByUserId")
public Result updateStatusByUserId(@RequestParam Long id, @RequestParam BaseStatus status) {
    LambdaUpdateWrapper<SystemUser> updateWrapper = new LambdaUpdateWrapper<>();
    updateWrapper.eq(SystemUser::getId, id);
    updateWrapper.set(SystemUser::getStatus, status);
    service.update(updateWrapper);
    return Result.ok();
}
  • 22
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小林学习编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值