当前位置:   article > 正文

【尚庭公寓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;
        }
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
    • 响应的数据结构

      单个系统用户信息的结构可查看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;
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
  • 编写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);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 编写Service层逻辑

    • SystemUserService中增加如下内容

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

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

    • SystemUserMapper中增加如下内容

      IPage<SystemUserItemVo> pageSystemUserByQuery(IPage<SystemUser> page, SystemUserQueryVo queryVo);
      
      • 1
    • 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>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24

      知识点

      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);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 编写Service层逻辑

    • SystemUserServcie中增加如下内容

      SystemUserItemVo getSystemUserById(Long id);
      
      • 1
    • 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;
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12

      知识点

      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();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    知识点

    • 密码处理

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

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

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

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

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

      <dependency>
          <groupId>commons-codec</groupId>
          <artifactId>commons-codec</artifactId>
      </dependency>
      
      • 1
      • 2
      • 3
      • 4
    • Mybatis-Plus update strategy

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

      • 全局配置

        application.yml中配置如下参数

        mybatis-plus:
          global-config:
            db-config:
              update-strategy: <strategy>
        
        • 1
        • 2
        • 3
        • 4

        :上述<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;
        
        • 1
        • 2
        • 3
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);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
3.5、根据ID删除后台用户信息

查看接口

image-20240618122657979

代码开发

SystemUserController中增加如下内容

@DeleteMapping("deleteById")
@Operation(summary = "根据ID删除后台用户信息")
public Result removeById(@RequestParam Long id) {
    service.removeById(id);
    return Result.ok();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
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();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/758573
推荐阅读
相关标签
  

闽ICP备14008679号