从零用java实现 小红书 springboot vue uniapp (8)个人资料修改 消息页优化

embedded/2025/1/11 18:33:13/

前言

移动端演示 http://8.146.211.120:8081/#/

前面的文章我们主要完成了点赞关注 im 聊天功能 下面我们将完善个人资料修改 和消息页优化 向产品迈进
个人资料修改
个人资料修改
自定义头像背景图 以及网名等等修改之后个人资料卡片也会随之改变
个人名片修改
这样看起来就美观多了
修改文字资料的话很简单 调用orm的update方法即可
主要难点是修改 头像和背景图 我们服务器的带宽很有限
这里我们就需要压缩图片上传

<dependency><groupId>net.coobird</groupId><artifactId>thumbnailator</artifactId><version>0.4.20</version></dependency>

添加依赖

            java.io.File newFile = null;try {// 先尝试压缩并保存图片Thumbnails.of(file.getInputStream()).scale(1).outputQuality(0.25f).toFile(sysUploadPath + newFileSavePath + finalName);newFile = new java.io.File(sysUploadPath + newFileSavePath + finalName);} catch (IOException e) {//保存文件到指定目录newFile = new java.io.File(sysUploadPath + newFileSavePath + finalName);file.transferTo(newFile);}

修改上传代码 outputQuality 是压缩比例 我们设置了0.25 经对比没有明显变糊
但是体积原来的2m优化到了600k 不会卡到半天都是白屏
贴一下完整的修改头像方法 由于上传时已经进行修改所以 不用和前台进行过多交互

    @ApiOperation(value = "修改头像")@ApiOperationSupport(order = 1)@PostMapping("/api/auth/updateAuthorAvatar")@OperLog(operModule = "修改头像",operType = OperType.EDIT,operDesc = "修改头像")public ResultBean<Author> updateAuthorAvatar(String fileId) {String followId = String.valueOf(request.getAttribute("authorId"));Author author = authorService.getById(followId);author.setAuthorId(followId);author.setAvatarId(fileId);File file = fileService.selectFileByFileId(fileId);String serverName = request.getServerName();author.setAvatarUrl("http://" + serverName + ":" + port + file.getFilePath());authorService.updateById(author);return ResultBean.success(author);};

消息页优化
消息页
消息页我们前民实现了未读消息列表
还有三个大功能没有实现

1.收到的赞和收藏

赞和收藏
因为在前期我们在数据库设计上已经做好基础
有作者和关注人 且点赞和收藏表的字段一致

  SELECTn.note_id,n.note_title,n.follow_id,n.follow_name,a.AVATAR_URL,n.create_time,b.FIRST_PICTURE, CASEWHEN n.AUTHOR_ID IN (SELECTAUTHOR_IDFROMbusiness_up_notes) THEN1WHEN n.AUTHOR_ID IN (SELECTAUTHOR_IDFROMbusiness_star_notes) THEN2END AS `type`FROM(SELECT*, 'business_up_notes' AS source_tableFROMbusiness_up_notesWHEREAUTHOR_ID = #{authorId}UNION ALLSELECT*, 'business_star_notes' AS source_tableFROMbusiness_star_notesWHEREAUTHOR_ID = #{authorId}) AS nLEFT JOIN business_author a ON n.follow_id = a.AUTHOR_IDLEFT JOIN business_note b ON n.note_id = b.note_idwhere n.follow_id != #{authorId}ORDER BYn.create_time DESC

我们还是一条sql搞定 因为页面需要关注人的头像和笔记的图片
我们进行一下连表查询 最后过滤我们自己给自己点赞的记录即可
点击再次进去文章详情

2.新增关注

在这里插入图片描述
我们直接可以复用前面文章的粉丝列表页即可

3.评论和回复

在这里插入图片描述
这个模块有两种展现形式
1.对我笔记的评论
2.对我评论的回复
这里我们前面的评论表没有完善 所以导致查询有问题

        //如果上级pid不为空 设置 上级作者名和idif(StringUtil.isNotEmpty(replyDto.getParentId())){Reply parentReply = replyService.getById(replyDto.getParentId());replyDto.setParentAuthorName(parentReply.getAuthorName());replyDto.setParentAuthorId(parentReply.getAuthorId());//如果top不为空 设置第二级回复的 上级作者名和id}else if(StringUtil.isNotEmpty(replyDto.getTopParentId())){Reply parentReply = replyService.getById(replyDto.getTopParentId());replyDto.setParentAuthorName(parentReply.getAuthorName());replyDto.setParentAuthorId(parentReply.getAuthorId());//如果评论没有上级id和顶级id则回复的是笔记的作者}else if(StringUtil.isEmpty(replyDto.getParentId())&&StringUtil.isEmpty(replyDto.getTopParentId())){replyDto.setParentAuthorName(note.getAuthorName());replyDto.setParentAuthorId(note.getAuthorId());}

分析一下代码 首先我们设置没有parentId和topid这种情况下评论的是笔记本身
所以我们设置他的上级作者是笔记的作何
在判断有没有topid有的话回复的是第一级评论
最后判断有没有parentId有的话是第二级评论
在这里插入图片描述
我们用012 分别表示这三种情况
有了上级parentId就比较好查询了

  SELECTr.reply_id,r.note_id,b.note_title,a.author_id,a.author_name,a.AVATAR_URL,r.create_time,r.REPLAY_CONTENT,b.FIRST_PICTURE,CASEWHEN r.TOP_PARENT_ID IS NULL THEN 1WHEN r.TOP_PARENT_ID IS NOT NULL THEN 2END AS type,r.PARENT_ID,(SELECTREPLAY_CONTENTFROMbusiness_replyWHEREREPLY_ID = r.PARENT_IDLIMIT 1) AS parentReplayContentFROMbusiness_reply rLEFT JOIN business_author a ON r.author_id = a.AUTHOR_IDLEFT JOIN business_note b ON r.note_id = b.note_idwhere PARENT_AUTHOR_ID = #{authorId} and r.author_id != #{authorId}ORDER BYr.create_time DESC

分析sql
首选我们查询所有给我们评论的 如果是笔记回复 设置类型1
如果是评论回复 设置类型2 如果是评论回复还需要查询你引用的回复
最后过滤自己的
在这里插入图片描述
这里我们实现了一个细节
当点击引用的回复时 我们希望进入到评论页面的相应位置
实现方法
1.进入笔记详情页传入回复的id;

在这里插入图片描述

2.给每个回复设置ref属性 这里不用dom查询因为有时获取不到

在这里插入图片描述
3.加载页面是滑动到制定位置并加一个时间的背景
在这里插入图片描述
在这里插入图片描述

4.其它优化项目

编辑删除笔记

在这里插入图片描述
笔记页判断作者是否当前用户 是的话可进行编辑
在这里插入图片描述
查询笔记和我们上传过的图片
修改时需要删除关联过的图片(不删除文件)重新建立关联关系
再次进入页面就显示编辑时间了
删除笔记则是逻辑删除
当再次进入页面是 显示笔记已删除并跳转主页

个人资料修改 消息页优化开发完毕 后续进行收到赞评论关注实时推送 之后就是后台相关管理

代码地址
https://gitee.com/ddeatrr/springboot_vue_xhs


http://www.ppmy.cn/embedded/153087.html

相关文章

uni-app持久化登录简单实现

想要实现持久化登录&#xff0c;原理就是在每次进入应用的时候获取上一次用户登录的信息。 那么就好办了&#xff0c;我们在每次登录成功后把用户的账号密码存储到本地&#xff0c;然后在进入应用的时候读取本地文件获取账号密码重新执行登录流程&#xff0c;在退出登录的时候删…

【LeetCode】每日一题 2024_1_10 统计重新排列后包含另一个字符串的子字符串数目 II(滑动窗口)

前言 每天和你一起刷 LeetCode 每日一题~ 拼尽全力无法战胜期末考试 寒假 . . . 堂堂复活&#xff01; 每日一题重出江湖&#xff01; 就用我最擅长的滑动窗口类型的每日一题作为我寒假回归的第一题&#xff01; LeetCode 启动&#xff01; 题目&#xff1a;统计重新排列…

【ArcGIS微课1000例】0137:色彩映射表转为RGB全彩模式

本文讲述ArcGIS中,将tif格式的影像数据从色彩映射表转为RGB全彩模式。 参考阅读:【GlobalMapper精品教程】093:将tif影像色彩映射表(调色板)转为RGB全彩模式 文章目录 一、色彩映射表预览二、色彩映射表转为RGB全彩模式一、色彩映射表预览 加载配套数据包中的0137.rar中的…

Spring-Cloud-Gateway-Samples,nacos为注册中心,负载均衡

背景&#xff1a;本想找个简单例子看下&#xff0c;无奈版本依赖太过复杂&#xff0c;花了点时间。记录下吧 使用Spring Cloud Gateway作为网关服务&#xff0c;Nacos作为注册中心&#xff0c;实现对子服务的负载均衡访问。简单例子。 一、gateway-main-nacos服务端&#xff…

OpenSeaOtter架构设计

OpenSeaOtter的初衷是提供一个易于部署和使用的镜像存储服务&#xff0c;并且把研发流程中的CI/CD连接起来。 OpenSeaOtter可以接收多个格式的镜像&#xff0c;支持docker和podman 的pull和push。在镜像发生变更后&#xff0c;可以触发对应的部署行为。 架构 代码地址 我们的项…

《探秘鸿蒙NEXT中的人工智能核心架构》

在当今科技飞速发展的时代&#xff0c;华为HarmonyOS NEXT的发布无疑是操作系统领域的一颗重磅炸弹&#xff0c;其将人工智能与操作系统深度融合&#xff0c;开启了智能新时代。那么&#xff0c;鸿蒙NEXT中人工智能的核心架构究竟是怎样的呢&#xff1f;让我们一同探秘。 基础…

探索ScriptEcho:前端开发的神奇助手

《探索ScriptEcho&#xff1a;前端开发的神奇助手》 在前端开发的世界里&#xff0c;效率和准确性一直是开发者们追求的目标。今天&#xff0c;我要向大家介绍一款令人惊艳的工具——ScriptEcho&#xff0c;它可能会彻底改变前端开发的工作流程。 一、ScriptEcho的神奇特性 …

内核链表 例题 C语言实现

问题&#xff1a; 将下面的数据节点信息转换为链表结构&#xff0c;并遍历输出。要求根据type的值来决定val的类型。 type为1代表bool类型&#xff0c;2代表整形&#xff0c;3代表浮点型。无需解析文本&#xff0c;直接赋值形成节点即可。 代码&#xff1a; list.c #includ…