动吧项目(权限管理子系统)学习-用户管理

1.分析业务

1.1 业务分析图

在这里插入图片描述

1.2 数据逻辑图

在这里插入图片描述

1.3 原型设计图

在这里插入图片描述

1.4 分层架构图

在这里插入图片描述

2. 用户窗口数据呈现

2.1 页面呈现

说明: 在start.html中添加用户页面

<script type="text/javascript">
   $(function(){//jQuery中的函数,在页面加载完成之后执行
        doLoadUI("load-menu-id", "/menu/menu_list");
        doLoadUI("load-user-id", "/user/user_list");
    })
    //实现共性代码封装
    function doLoadUI(id,url){//创建点击事件
      $("#"+id).click(function(){
        //mainContentId指具体页面位置进行异步加载url对应的资源
        $("mainContentId").load(url);
      })
    }
</script>

2.2 数据呈现

2.2.1 时序图以及数据库数据

在这里插入图片描述
在这里插入图片描述

2.2.2 创建SysUserDept对象

说明:通过此对象除了可以封装从数据库查询的数据,还可以封装客户端请求数据,实现层与层之间数据的传递

package com.cy.pj.sys.pojo;

import lombok.Data;

import java.io.Serializable;
import java.util.Date;

@Data
public class SysUserDept implements Serializable {
    private static final long serialVersionUID = 3776304095517793129L;
    private Integer id;
    private String username;
    private String password;//md5
    private String salt;
    private String email;
    private String mobile;
    private Integer valid=1;
    private SysDept sysDept; //private Integer deptId;
    private Date createdTime;
    private Date modifiedTime;
    private String createdUser;
    private String modifiedUser;
}

2.2.3 编辑SysUserDao

/**
     * 基于条件查询总记录数
     * @param username
     * @return
     */
    //int getRowCount(String username);
    /**
     * 基于条件查询当前页记录
     * @param username
     * @param startIndex
     * @param pageSize
     * @return
     */
    // List<SysUserDept> findPageObjects(String username,Integer startIndex,Integer pageSize);
    //同时实现上述两个方法
List<SysUserDept> findPageObjects(String username);

2.2.4 编辑SysUserMapper.xml

<resultMap id="sysUserDept" type="com.cy.pj.sys.pojo.SysUserDept">
        <!--association 一般应用于many2one或者one2one这种查询场景-->
        <association property="sysDept"
                     column="deptId"
                     select="com.cy.pj.sys.dao.SysDeptDao.findById">
        </association>
    </resultMap>
    <select id="findPageObjects" resultMap="sysUserDept">
          select *
          from sys_users
          <where>
              <if test="username!=null and username!=''">
                  username like concat("%",#{username},"%")
              </if>
          </where>
          order by createdTime desc
    </select>

2.2.5 添加pagehelper依赖

说明:实现网页的分页查询,减少sql语句的书写

<dependency>
			<groupId>com.github.pagehelper</groupId>
			<artifactId>pagehelper-spring-boot-starter</artifactId>
			<version>1.3.0</version>
		</dependency>

2.2.6 编辑SysUserService

PageObject<SysUserDept> findPageObjects(String username,Integer pageCurrent);

2.2.6 编辑SysUserServiceImpl

    @Override
    public PageObject<SysUserDept> findPageObjects(String username, Integer pageCurrent) {
        String tName=Thread.currentThread().getName();
        System.out.println("SysUserServiceImpl.findPageObjects.thread.name="+tName);
        //1.参数校验
        if(pageCurrent==null||pageCurrent<1)
            throw new IllegalArgumentException("页码值不正确");
        //2.启动分页配置(底层会启动一个mybatis拦截器,拦截sql会话)
        int pageSize=3;
        Page<SysUserDept> page=PageHelper.startPage(pageCurrent, pageSize);//底层会计算起始位置
        //3.执行分页查询(底层会在查询时为sql语句添加limit 语句)
        List<SysUserDept> records=sysUserDao.findPageObjects(username);
        return new PageObject<>((int)page.getTotal(), records, pageSize, pageCurrent);
    }

2.2.7 编辑SysUserController

@GetMapping("doFindPageObjects")
    public JsonResult doFindPageObjects(String username,Integer pageCurrent){
        //long t1=System.currentTimeMillis();
        PageObject<SysUserDept> pageObject=
        sysUserService.findPageObjects(username, pageCurrent);
        //long t2=System.currentTimeMillis();
        //long time=t2-t1;
        return new JsonResult(pageObject);
    }

2.5 呈现效果

在这里插入图片描述

3. 禁用操作的实现

3.1 时序图

在这里插入图片描述

3.1 编辑SysUserDao

@Update("update sys_users set valid=#{valid},modifiedUser=#{modifiedUser},modifiedTime=now() where id=#{id}")
    int validById(Integer id,Integer valid,String modifiedUser);

3.2 编辑SysUserService

int validById(Integer id,Integer valid);

3.2 编辑SysUserServiceImpl

@Override
    public int validById(Integer id, Integer valid) {
        ///...............
        //1.参数校验
        if(id==null||id<1)
            throw new IllegalArgumentException("id值无效");
        if(valid==null||valid!=0&&valid!=1)
            throw new IllegalArgumentException("状态值不正确");
        //2.修改状态并校验结果
        int rows=sysUserDao.validById(id,valid,"admin");//这里admin代表登录用户
        if(rows==0)
            throw new ServiceException("记录可能已经不存在");
        return rows;
    }

3.3 编辑SysUserController

@PostMapping("doValidById")
    public JsonResult doValidById(Integer id,Integer valid){
        //long t1=System.currentTimeMillis();
        sysUserService.validById(id,valid);
        //long t2=System.currentTimeMillis();
        //long time=t2-t1;
        return new JsonResult("update ok");
    }

3.4 效果展现

在这里插入图片描述

4. 添加操作的实现

4.1 原型图

在这里插入图片描述
在这里插入图片描述

4.2 时序图

在这里插入图片描述

4.3 角色数据查询

4.3.1 创建CheckBox对象

说明:添加页面呈现用户拥有的角色信息,创建该POJO对象封装用户角色id和角色信息

package com.cy.pj.common.pojo;
import lombok.Data;
import java.io.Serializable;
@Data
public class CheckBox implements Serializable {
    private static final long serialVersionUID = -3930756932197466333L;
    private Integer id;
    private String name;
}

4.3.2 编辑SysRoleDao

/**
       * 查询角色id和名字,每个一行数据封装为一个Checkbox对象
       * @return
       */
      @Select("select id,name from sys_roles")
      List<CheckBox> findObjects();

4.3.3 编辑SysRoleService

List<CheckBox> findObjects();

4.3.4 编辑SysRoleServiceImpl

@Override
    public List<CheckBox> findObjects() {
        return sysRoleDao.findObjects();
    }

4.3.5 编辑SysRoleController

@GetMapping("doFindRoles")
    public JsonResult doFindObjects(){
        return new JsonResult(sysRoleService.findObjects());
    }

4.4 添加用户信息提交

4.4.1 时序图

在这里插入图片描述

4.4.2 编辑SysUser对象

package com.cy.pj.sys.pojo;

import lombok.Data;

import java.io.Serializable;
import java.util.Date;
@Data
public class SysUser implements Serializable {
    private static final long serialVersionUID = 8857453521738996113L;
    private Integer id;
    private String username;
    private String password;//md5
    private String salt;
    private String email;
    private String mobile;
    private Integer valid=1;
    private Integer deptId;
    private Date createdTime;
    private Date modifiedTime;
    private String createdUser;
    private String modifiedUser;
}

5. 更新操作的实现

5.1 修改页面数据呈现

5.1.1 时序图在这里插入图片描述

5.1.2 编辑SysUserRoleDao

/**
     * 基于用户id查找用户对应的角色id
     * @param userId
     * @return
     */
    @Select("select role_id from sys_user_roles where user_id=#{userId}")
    List<Integer> findRoleIdsByUserId(Integer userId);

5.1.3 编辑SysUserDao

/**
     * 基于用户id获取用户以及用户对应的部门信息
     * @param id
     * @return
     */
    SysUserDept findById(Integer id);

5.1.3 编辑SysUserMapper

<select id="findById" resultMap="sysUserDept">
        select *
        from sys_users
        where id=#{id}
    </select>

5.1.4 编辑SysUserServiceImpl

    @Override
    public Map<String, Object> findById(Integer id) {
        //1.参数校验
        //2.查询用户以及用户对应的部门信息
        SysUserDept user=sysUserDao.findById(id);
        if(user==null)
            throw new ServiceException("用户可能已经不存在");
        //3.查询用户对应的角色id
        List<Integer> roleIds=sysUserRoleDao.findRoleIdsByUserId(id);
        //4.封装结果并返回
        Map<String,Object> map=new HashMap<>();
        map.put("user", user);
        map.put("roleIds", roleIds);
        return map;
    }

5.1.5 编辑SysUserController

@GetMapping("doFindObjectById")
    public JsonResult doFindById(Integer id){
        return new JsonResult(sysUserService.findById(id));
    }

5.1.6 编辑页面呈现

在这里插入图片描述

5.2 修改页面数据更新

5.2.1 时序图

在这里插入图片描述

5.2.2 编辑SysUserDao

int updateObject(SysUser entity);

5.2.3 编辑SysUserMapper

<update id="updateObject">
        update sys_users
        set username=#{username},
            mobile=#{mobile},
            email=#{email},
            deptId=#{deptId},
            modifiedTime=now(),
            modifiedUser=#{modifiedUser}
       where id=#{id}
    </update>

5.2.3 编辑SysUserRoleDao

基于用户 id 删除用户角色关系数据

@Delete("delete from sys_user_roles where user_id=#{userId}")
    int deleteObjectsByUserId(Integer userId);

5.2.4 编辑SysUserServiceImpl

@Override
    public int updateObject(SysUser entity, Integer[] roleIds) {
        //1.参数校验
        if(entity==null)
            throw new IllegalArgumentException("保存对象不能为空");
        if(StringUtils.isEmpty(entity.getUsername()))
            throw new IllegalArgumentException("用户名不能为空");
        if(roleIds==null||roleIds.length==0)
            throw new IllegalArgumentException("必须要为用户分配角色");
        //.....
        //2.更新用户自身信息
        int rows=sysUserDao.updateObject(entity);
        if(rows==0)
            throw new ServiceException("用户可能已经不存在");
        //3.更新用户和角色关系数据
        sysUserRoleDao.deleteObjectsByUserId(entity.getId());
        sysUserRoleDao.insertObjects(entity.getId(),roleIds);
        return rows;
    }

5.2.5 编辑SysUserController

@PostMapping("doUpdateObject")
    public JsonResult doUpdateObject(SysUser entity,Integer[]roleIds){
        sysUserService.updateObject(entity, roleIds);
        return new JsonResult("update ok");
    }

5.2.6 测试

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

_Solider

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

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

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

打赏作者

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

抵扣说明:

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

余额充值