今日指数day8实战补充用户管理模块(下)

news2024/11/25 14:56:47

ps : 由于前端将userId封装为BigInt类型 , 导致有精度损失, 传入的userId不正确 , 部分功能无法正确实现 , 但是代码已经完善

1.4 更新用户角色信息接口说明

1)原型效果

在这里插入图片描述

2)接口说明
功能描述:更新用户角色信息
服务路径:/user/roles
服务方法:Put

请求参数格式:

{
    "userId": 
    	1247078461865070592,
    "roleIds": [
        1237258113002901515,
        1245949043784421376
    ]
}

响应数据格式:

{
    "code": 1,
    "msg": "操作成功"
}

代码实现

1. 表现层
    /**
     * 更新用户角色信息
     * @param putRoleReqVo
     * @return
     */
    @PutMapping("/user/roles")
    public R<String> putRoles(@RequestBody PutRoleReqVo putRoleReqVo , HttpServletRequest request){
        return UserService.putRoleReqVo(putRoleReqVo,request);
    }
2. 服务层
    R<String> putRoleReqVo(PutRoleReqVo putRoleReqVo, HttpServletRequest request);
    @Override
    public R<String> putRoleReqVo(PutRoleReqVo putRoleReqVo, HttpServletRequest request) {

        // 获取该用户数据
        Long userId = Long.valueOf(putRoleReqVo.getUserId());
        List<Long> roleIds = putRoleReqVo.getRoleIds();

        // 查询该用户所拥有的角色信息
        List<Long> userRoleList =  sysUserRoleMapper.getRole(userId);



//        // 获取所有要删除的和要添加的
//        for (Long roleId : roleIds) {
//            // 如果数据存在
//            if (userRoleList.contains(roleId)){
//                continue;
//            }else {
//                delIDs.add(roleId);
//            }
//        }
//
//        for (Long roleID : userRoleList) {
//            if (roleIds.contains(roleID)){
//                continue;
//            }else {
//                addIDs.add(roleID);
//            }
//        }
        List<Long> delIDs = roleIds.stream().filter(item -> !userRoleList.contains(item)).collect(Collectors.toList());
        List<Long> addIDs = userRoleList.stream().filter(item -> !roleIds.contains(item)).collect(Collectors.toList());


        if (delIDs != null){
            // 执行删除操作
            for (Long delID : delIDs) {
                sysUserRoleMapper.deleteByRoleId(userId,delID);
            }
        }
        ArrayList<HashMap<String, Object>> data = new ArrayList<>();
        if (addIDs != null){
            // 执行添加操作
            for (Long addID : addIDs) {
                // 通过雪花算法创建id
                long id = idWorker.nextId();
                HashMap<String, Object> map = new HashMap<>();
                map.put("id",id);
                map.put("user_id" , userId);
                map.put("role_id",addID);
                data.add(map);
            }

            int res = sysUserRoleMapper.addByRoleId(data);
        }

        return null;
    }
3. Dao层
List<Long> getRole(@Param("id") Long id);
    <select id="getRole" resultType="java.lang.Long">
        select role_id from sys_user_role where user_id = #{id};
    </select>

1.5 批量删除用户信息接口说明

1)原型效果

在这里插入图片描述

2)接口说明
功能描述: 批量删除用户信息,delete请求可通过请求体携带数据
服务路径:/user
服务方法:Delete

请求数据格式:

 [
        1473296822679244800,
        1473296022544453632
 ]

接口提示:请求参数:@RequestBody List userIds

响应数据格式:

{
    "code": 1,
    "msg": "操作成功"
}

代码实现

1. 表现层
    /**
     * 删除用户
     */
    @DeleteMapping("/user")
    public R<String> delRoles(@PathVariable ArrayList rolesList){
        return UserService.delRoles(rolesList);
    }
2. 服务层
R<String> delRoles(ArrayList rolesList);
    @Override
    public R<String> delRoles(ArrayList rolesList) {

        // 执行删除操作
        int res = sysRoleMapper.delUser(rolesList);

        if (res > 0){
            log.info("删除成功");
        }else {
            log.error("删除失败");
            return R.error(ResponseCode.ERROR.getMessage());
        }

        return R.ok("操作成功");



    }
3. Dao层
int delUser(@Param("rolesList") ArrayList rolesList);
    <delete id="delUser">
        update sys_user
        set deleted = 0
        where sys_user.id =
              <foreach collection="rolesList" item="role" open="(" separator="," close=")">
                  #{role}
              </foreach>
    </delete>

1.6 根据用户id查询用户信息

1)原型效果

在这里插入图片描述

2)接口说明
功能描述: 根据用户id查询用户信息
服务路径:/api/user/info/{userId}
服务方法:Get
请求参数:String id

响应数据格式:

{
    "code": 1,
    "data": {
        "id": "1247515643591397376",
        "username": "admin123",
        "phone": "13699999999",
        "nickName": "admin测试",
        "realName": "admin测试",
        "sex": 1,
        "status": 1,
        "email": "admin123@qq.com"
    }
}

代码实现

1. 表现层
    /**
     * 根据用户id查询用户信息
     * @param userId
     * @return
     */
    @GetMapping("/user/info/{userId}")
    public R<HashMap<String,Object>> getUserMsg(@PathVariable String userId){
        return UserService.getUserMsg(userId);
    }
2. 服务层
R<HashMap<String, Object>> getUserMsg(String userId);
    @Override
    public R<HashMap<String, Object>> getUserMsg(String userId) {
        Long user_id = Long.valueOf(userId);

        // 查询用户数据
        HashMap<String,Object> user_data= sysUserMapper.getUserMsg(user_id);
        return R.ok(user_data);

    }
3. Dao层
HashMap<String, Object> getUserMsg(@Param("userId") Long userId);
    <select id="getUserMsg" resultType="java.util.HashMap">
        select id, username,  phone, real_name as realName, nick_name as nickName, email, status, sex
        from sys_user
        where id = #{userId}
    </select>

1.7 更新用户信息

1)原型效果

在这里插入图片描述

2)接口说明
功能描述: 根据id更新用户基本信息
服务路径:/api/user
服务方法:PUT

请求参数格式:

{
    id: 123456789
    username: 'zhangsan'
    phone: '18811023034'
    email: '345@163.com'
    nickName: '老王'
    realName: '王五'
    sex: '1'
    createWhere: '1'
    status: '1'
}

响应数据格式:

 {    
 	"code": 1,    
 	"msg": "操作成功"
 }

代码实现

1. 表现层
    /**
     * 更新用户信息
     * @param userDataDomain
     * @return
     */
    @PutMapping("/user")
    public R<String> updataUser(@RequestBody UserDataDomain userDataDomain){
        return UserService.updataUser(userDataDomain);
    }
2. 服务层
R<String> updataUser(UserDataDomain userDataDomain);
    @Override
    public R<String> updataUser(UserDataDomain userDataDomain) {
        // 更新数据
        int res = sysUserMapper.updataUser(userDataDomain);
        if (res > 0){
            log.info("删除成功");
        }else {
            log.error("删除失败");
            return R.error(ResponseCode.ERROR.getMessage());
        }
        return R.ok("操作成功");

    }
3. Dao层
int updataUser(@Param("userDataDomain") UserDataDomain userDataDomain);
    <update id="updataUser">
        update sys_user
        set username = #{userDataDomain.username},
            phone = #{userDataDomain.phone} ,
            email = #{userDataDomain.email} , nick_name = #{userDataDomain.nickName},
            real_name = #{userDataDomain.realName}, sex = #{userDataDomain.sex},
            create_where = #{userDataDomain.createWhere} , status = #{userDataDomain.status}
        where sys_user.id = #{userDataDomain.id};
    </update>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2195234.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于FPGA的ov5640摄像头图像采集(二)

之前讲过ov5640摄像头图像采集&#xff0c;但是只包了的摄像头驱动与数据对齐两部分&#xff0c;但是由于摄像头输入的像素时钟与HDMI输出的驱动时钟并不相同&#xff0c;所有需要利用DDR3来将像素数据进行缓存再将像素数据从DDR3中读出&#xff0c;对DDR3的读写参考米联客的IP…

别再为日期时间头疼了!Python datetime模块助你高效搞定一切时间问题,让你的代码从此与时间赛跑,快人一步!

博客主页&#xff1a;长风清留扬-CSDN博客系列专栏&#xff1a;Python基础专栏每天更新大数据相关方面的技术&#xff0c;分享自己的实战工作经验和学习总结&#xff0c;尽量帮助大家解决更多问题和学习更多新知识&#xff0c;欢迎评论区分享自己的看法感谢大家点赞&#x1f44…

花半小时用豆包Marscode 和 Supabase免费部署了一个远程工作的导航站

以下是「 豆包MarsCode 体验官」优秀文章&#xff0c;作者谦哥。 &#x1f680; 项目地址&#xff1a;remotejobs.justidea.cn/ &#x1f680; 项目截图&#xff1a; 数据处理 感谢开源项目&#xff1a;https://github.com/remoteintech/remote-jobs 网站信息获取&#xff1…

MyBatis 操作数据库入门

目录 前言 1.创建springboot⼯程 2.数据准备 3.配置Mybatis数据库连接信息 4.编写SQL语句&#xff0c;进行测试 前言 什么是MyBatis? MyBatis是⼀款优秀的 持久层 框架&#xff0c;⽤于简化JDBC的开发 Mybatis操作数据库的入门步骤&#xff1a; 1.创建springboot⼯程 2.数…

SOMEIP_ETS_171: SD_Unicast_FindService

测试目的&#xff1a; 验证DUT能够响应Tester发送的多个单播FindService消息&#xff0c;并至少回复一个单播OfferService消息。 描述 本测试用例旨在确保DUT能够正确处理单播FindService消息请求&#xff0c;并为请求的服务提供至少一个单播OfferService消息作为响应。 测…

SpringBootWeb快速入门!详解如何创建一个简单的SpringBoot项目?

在现代Web开发中&#xff0c;SpringBoot以其简化的配置和快速的开发效率而受到广大开发者的青睐。本篇文章将带领你从零开始&#xff0c;搭建一个基于SpringBoot的简单Web应用~ 一、前提准备 想要创建一个SpringBoot项目&#xff0c;需要做如下准备&#xff1a; idea集成开发…

亲身经历告诉你该如何自学编程

我2016年硕士毕业后&#xff0c;从一个纯机械学生开始转行做软件开发&#xff0c;其中少不了要自学编程&#xff0c;这其中经历的到现在看来还历历在目。 我曾经写过一些关于我转行做软件开发经历的文章&#xff0c;如果你感兴趣&#xff0c;可以点击这里的链接&#xff08;我…

国庆期间的问题,如何在老家访问杭州办公室的网络呢

背景&#xff1a;国庆期间的问题&#xff0c;如何在老家访问杭州办公室的网络呢 实现方案&#xff1a;异地组网 实现语言&#xff1a;Java 环境&#xff1a;三个网络&#xff0c;一台拥有公网IP的服务器、一台杭州本地机房内服务器、你老家所在网络中的一台电脑&#xff08;…

【Git】TortoiseGitPlink提示输入密码解决方法

问题 克隆仓库&#xff0c;TortoiseGitPlink提示输入密码 解法 1、打开TortoiseGit 下的puttygen工具 位置&#xff1a;C:\Program Files\TortoiseGit\bin\ 2、点击【Load】按钮&#xff0c;载入 C:\Users\Administrator\.ssh\ 文件夹下的id_rsa文件。 3、点击save private …

Python数据分析-远程办公与心理健康分析

一、研究背景 随着信息技术的飞速发展和全球化的推进&#xff0c;远程工作&#xff08;Remote Work&#xff09;成为越来越多企业和员工的选择。尤其是在2020年新冠疫情&#xff08;COVID-19&#xff09;爆发后&#xff0c;全球范围内的封锁措施使得远程工作模式迅速普及。根据…

Mysql数据库--JDBC编程

文章目录 1.JDBC编程基础2.驱动程序下载3.新建项目3.1导入java包3.2转换为库 4.开始创作4.1准备数据库4.2创建DataSource4.3和数据库建立连接4.4构造sql&#xff0c;准备发送到服务器4.5发送sql&#xff0c;执行sql4.6释放系统资源4.7自行输入的设置4.8插入数据完整源代码4.9查…

JavaEE之多线程进阶-面试问题

一.常见的锁策略 锁策略不是指某一个具体的锁&#xff0c;所有的锁都可以往这些锁策略中套 1.悲观锁与乐观锁 预测所冲突的概率是否高&#xff0c;悲观锁为预测锁冲突的概率较高&#xff0c;乐观锁为预测锁冲突的概率更低。 2.重量级锁和轻量级锁 从加锁的开销角度判断&am…

OJ在线评测系统 微服务 用分布式消息队列 RabbitMQ 解耦判题服务和题目服务 手搓交换机和队列 实现项目异步化

消息队列解耦 项目异步化 分布式消息队列 分布式消息队列是一种用于异步通信的系统&#xff0c;它允许不同的应用程序或服务之间传递消息。消息队列的核心理念是将消息存储在一个队列中&#xff0c;发送方可以将消息发送到队列&#xff0c;而接收方则可以在适当的时候从队列中…

Vue2电商平台(六)、注册登录,请求头配置token,token持久化存储;导航守卫(重点);组件内守卫、路由独享守卫

文章目录 一、注册1. 获取注册验证码2. 完成注册用户 二、登录1. 登录获取token2. Home首页携带token获取用户数据3. 持久化存储token4. 退出登录5. 导航守卫 (牛)6. 路由独享守卫beforeEnter7. 组件内守卫&#xff08;用的很少&#xff09; 一、注册 1. 获取注册验证码 本系…

基于SSM+小程序的线上教育商城管理系统(教育2)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 微信小程序线上教育商城有管理员&#xff0c;教师&#xff0c;学生三个角色。 1、管理员功能有个人中心&#xff0c;学生管理&#xff0c;教师管理&#xff0c;类型管理&#xff0c;课程…

diffusion model(1.1) 为什么前向传播和反向传播都遵循高斯分布?

DDPM的引用[53]为Deep Unsupervised Learning using Nonequilibrium Thermodynamics&#xff0c;它证明了当 β t \beta_t βt​ 较小时&#xff0c;前向传播和反向传播前向分布和后向分布拥有同样的分布形式。 所引论文的内容如下&#xff0c; 后者又引用了另一篇论文(Fell…

分层解耦-04.IOCDI-IOC详解

一.Bean的声明 springboot为了更好地标识web应用开发中bean对象到底归属于哪一层&#xff0c;在Component注解的基础上又衍生出了三个注解Controller、Service和Repository。分别应用于Controller层&#xff0c;Service层和Dao层。推荐使用衍生注解&#xff0c;当无法判断该be…

Java-数据结构-反射、枚举 |ू・ω・` )

目录 ❄️一、反射&#xff1a; 1、定义&#xff1a; 2、用途&#xff1a; 3、反射相关的类&#xff1a; 4、Class类&#xff1a; 1、Class类中相关的方法&#xff1a; 5、Class反射实例&#xff1a; 1、获得Class对象的三种方式&#xff1a; 2、反射的使用&#xff1a; 6、反…

网络基础擅长组建乐队

让我们荡起双桨 来说说网络吧 现有计算机要进行协作&#xff0c;网络的产生是必然的 局域网&#xff1a;计算机数量更多了, 通过交换机和路由器连接在一起 广域网&#xff1a;将远隔千里的计算机都连在一起 交换机路由器等设备就应运而生 计算机是人的工具&#xff0c;人要协…