From b6c6855842f41febf4c79576ff115b225e61f117 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E4=BD=B3=E8=B1=AA?= <18505142974@163.com> Date: Fri, 15 Aug 2025 16:51:03 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9bug+=E8=BF=81=E7=A7=BBapp?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/dromara/app/AppCommentController.java | 130 +++++++++++ .../org/dromara/app/AppVlogController.java | 219 ++++++++++++++++++ .../content/controller/VlogController.java | 175 +------------- .../controller/admin/CommentController.java | 94 -------- .../admin/VlogUploadController.java | 92 +++++++- .../soopin/content/domain/bo/IndexListBO.java | 8 +- .../wzj/soopin/content/domain/po/Comment.java | 4 +- .../wzj/soopin/content/domain/po/Vlog.java | 4 +- .../soopin/content/mapper/CommentMapper.java | 4 +- .../content/mapper/MyLikedVlogMapper.java | 2 +- .../service/impl/CommentServiceImpl.java | 28 ++- .../content/service/impl/VlogServiceImpl.java | 40 ++-- .../mapper/content/CommentMapper.xml | 2 +- .../mapper/content/CommentMapperCustom.xml | 20 +- .../mapper/content/FansMapperCustom.xml | 22 +- .../resources/mapper/content/VlogMapper.xml | 50 ++-- .../mapper/content/VlogMapperCustom.xml | 56 ++--- 17 files changed, 562 insertions(+), 388 deletions(-) create mode 100644 ruoyi-admin/src/main/java/org/dromara/app/AppCommentController.java create mode 100644 ruoyi-admin/src/main/java/org/dromara/app/AppVlogController.java diff --git a/ruoyi-admin/src/main/java/org/dromara/app/AppCommentController.java b/ruoyi-admin/src/main/java/org/dromara/app/AppCommentController.java new file mode 100644 index 000000000..d8e32d6dd --- /dev/null +++ b/ruoyi-admin/src/main/java/org/dromara/app/AppCommentController.java @@ -0,0 +1,130 @@ +package org.dromara.app; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.wzj.soopin.content.domain.base.BaseInfoProperties; +import com.wzj.soopin.content.domain.bo.CommentBO; +import com.wzj.soopin.content.domain.po.Comment; +import com.wzj.soopin.content.domain.vo.CommentVO; +import com.wzj.soopin.content.enums.MessageEnum; +import com.wzj.soopin.content.service.CommentService; +import com.wzj.soopin.content.service.MsgService; +import com.wzj.soopin.content.utils.RedisOperator; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.domain.R; +import org.dromara.common.satoken.utils.LoginHelper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +@Slf4j +@Api(tags = "管理端-评论管理接口") +@RequestMapping("/app/comment") +@RestController +public class AppCommentController { + @Autowired + private CommentService commentService; + @Autowired + private RedisOperator redis; + @Autowired + private MsgService msgService; + @ApiOperation("查询视频评论列表") + @PostMapping("/vlogComments") + public R> queryVlogComments( + @RequestBody CommentBO bo, + @RequestBody Page page) { + try { + Page commentPage = commentService.pageComment(page, bo); + return R.ok(commentPage); + } catch (Exception e) { + log.error("查询视频评论列表失败", e); + return R.fail("查询视频评论列表失败: " + e.getMessage()); + } + } + + @ApiOperation("发布评论") + @PostMapping("/publish") + public R publishComment(@RequestBody CommentBO bo) { + try { + // 鉴权:评论人从登录上下文获取,覆盖入参 + Long loginUserId = LoginHelper.getUserId(); + if (loginUserId == null) { + return R.fail("未登录或登录已过期"); + } + bo.setCommentUserId(String.valueOf(loginUserId)); + + // 父评论为空时,按根评论处理(约定使用"0"作为无父评论标记) + if (bo.getFatherCommentId() == null || bo.getFatherCommentId().isEmpty()) { + bo.setFatherCommentId("0"); + } + + // 1) 创建评论 + commentService.createComment(bo); + + // 2) 短视频评论总数 +1(Redis 优先) + redis.increment(BaseInfoProperties.REDIS_VLOG_COMMENT_COUNTS + ":" + bo.getVlogId(), 1); + + // 3) 发送站内消息:根评论 -> 通知视频作者;回复评论 -> 通知被回复用户 + if ("0".equals(bo.getFatherCommentId())) { + // 评论视频,通知视频作者 + if (bo.getVlogerId() != null && !bo.getVlogerId().isEmpty() + && !String.valueOf(loginUserId).equals(bo.getVlogerId())) { + msgService.createMsg(String.valueOf(loginUserId), bo.getVlogerId(), MessageEnum.COMMENT_VLOG.type, null); + } + } else { + // 回复评论,通知父评论作者 + Comment father = commentService.getCommentDetail(bo.getFatherCommentId()); + if (father != null && father.getCommentUserId() != null + && !String.valueOf(loginUserId).equals(father.getCommentUserId())) { + msgService.createMsg(String.valueOf(loginUserId), father.getCommentUserId(), MessageEnum.REPLY_YOU.type, null); + } + } + + return R.ok(); + } catch (Exception e) { + log.error("发布评论失败", e); + return R.fail("发布评论失败: " + e.getMessage()); + } + } + + @ApiOperation("删除评论") + @PostMapping("/delete") + public R deleteComment( + @ApiParam(value = "评论ID") @RequestParam String commentId) { + try { + String username = LoginHelper.getUsername(); + commentService.deleteComment(commentId, username); + return R.ok(); + } catch (Exception e) { + log.error("删除评论失败", e); + return R.fail("删除评论失败: " + e.getMessage()); + } + } + + @ApiOperation("获取评论详情") + @GetMapping("/detail") + public R> getCommentDetail(@ApiParam(value = "评论ID") @RequestParam String commentId) { + try { + Comment comment = commentService.getCommentDetail(commentId); + if (comment == null) { + return R.fail("评论不存在"); + } + + // 获取子评论 + List childComments = commentService.getChildComments(commentId); + + Map result = new HashMap<>(); + result.put("comment", comment); + result.put("childComments", childComments); + + return R.ok(result); + } catch (Exception e) { + log.error("获取评论详情失败", e); + return R.fail("获取评论详情失败: " + e.getMessage()); + } + } +} diff --git a/ruoyi-admin/src/main/java/org/dromara/app/AppVlogController.java b/ruoyi-admin/src/main/java/org/dromara/app/AppVlogController.java new file mode 100644 index 000000000..e1f9d35f2 --- /dev/null +++ b/ruoyi-admin/src/main/java/org/dromara/app/AppVlogController.java @@ -0,0 +1,219 @@ +package org.dromara.app; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.wzj.soopin.content.domain.bo.IndexListBO; +import com.wzj.soopin.content.domain.bo.MyListBO; +import com.wzj.soopin.content.domain.bo.SimpleListBO; +import com.wzj.soopin.content.domain.bo.VlogBO; +import com.wzj.soopin.content.service.VlogService; +import com.wzj.soopin.content.service.VlogUploadService; +import com.wzj.soopin.content.utils.PagedGridResult; +import com.wzj.soopin.content.utils.QcCloud; +import com.wzj.soopin.content.utils.RedisOperator; +import io.swagger.annotations.Api; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.dromara.common.core.domain.R; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import static com.wzj.soopin.content.domain.base.BaseInfoProperties.*; + +@Slf4j +@Api(tags = "VlogController 短视频相关业务功能的接口") +@RequestMapping("/app/vlog") +@RestController +public class AppVlogController { + @Autowired + private VlogService vlogService; + @Autowired + private QcCloud qcCloud; + @Autowired + private VlogUploadService vlogUploadService; + @Autowired + + public RedisOperator redis; + @Tag(name = "首页视频列表") + @PostMapping("/indexList") + public R indexList(@RequestBody IndexListBO bo, @RequestBody Page page) { + PagedGridResult pages = vlogService.getIndexVlogList(bo, page); + return R.ok(pages); + } + @GetMapping("detail") + public R detail(@RequestParam(defaultValue = "") String userId, + @RequestParam String vlogId) { + return R.ok(vlogService.getVlogDetailById(userId, vlogId)); + } + @Tag(name = "我的私密视频列表") + @PostMapping("/myPrivateList") + public R myPrivateList(@RequestBody MyListBO bo, @RequestBody Page page) { + PagedGridResult pages = vlogService.queryMyVlogList(bo, page); + return R.ok(pages); + } + + @Tag(name = "我点赞的视频列表") + @PostMapping("/myLikedList") + public R myLikedList(@RequestBody MyListBO bo, @RequestBody Page page) { + PagedGridResult pages = vlogService.getMyLikedVlogList(bo, page); + return R.ok(pages); + } + + @Tag(name = "我关注的视频列表") + @PostMapping("/followList") + public R followList(@RequestBody SimpleListBO bo, @RequestBody Page page) { + PagedGridResult pages = vlogService.getMyFollowVlogList(bo, page); + return R.ok(pages); + } + + @Tag(name = "好友视频列表") + @PostMapping("/friendList") + public R friendList(@RequestBody SimpleListBO bo, @RequestBody Page page) { + PagedGridResult pages = vlogService.getMyFriendVlogList(bo, page); + return R.ok(pages); + } + @PostMapping("publish") + public R publish(@RequestBody VlogBO vlogBO) throws Exception { + String url = vlogBO.getUrl(); + log.info("未审核视频地址:"+url); + String fileName = url.substring(url.lastIndexOf("/") + 1); + log.info("视频文件名称:"+fileName); + log.info("开始上传腾讯云点播:"+fileName); + String fileId = qcCloud.uploadViaTempFile(fileName); + log.info("视频发布ID:"+fileId); + vlogBO.setFileId(fileId); + // 删除minio文件 +// MinIOUtils.removeFile(minIOConfig.getBucketName(),fileName); +// log.info("删除minio文件:"+fileName); + + // FIXME 校验VlogBO + vlogService.createVlog(vlogBO); + + return R.ok(); + } + @Tag(name = "我的公开视频列表") + @PostMapping("/myPublicList") + public R myPublicList(@RequestBody MyListBO bo, @RequestBody Page page) { + PagedGridResult pages = vlogService.queryMyVlogList(bo, page); + return R.ok(pages); + } + + + + private Integer nacosConuts=0; + + + @PostMapping("like") + public R like(@RequestParam String userId, + @RequestParam String vlogerId, + @RequestParam String vlogId) { + + // 我点赞的视频,关联关系保存到数据库 + vlogService.userLikeVlog(userId, vlogId); + + // 点赞后,视频和视频发布者的获赞都会 +1 + redis.increment(REDIS_VLOGER_BE_LIKED_COUNTS + ":" + vlogerId, 1); + redis.increment(REDIS_VLOG_BE_LIKED_COUNTS + ":" + vlogId, 1); + + // 我点赞的视频,需要在redis中保存关联关系 + redis.set(REDIS_USER_LIKE_VLOG + ":" + userId + ":" + vlogId, "1"); + + log.info("nacosConuts="+nacosConuts); + + String countsStr = redis.get(REDIS_VLOG_BE_LIKED_COUNTS + ":" + vlogId); + Integer counts=0; + if (StringUtils.isNotBlank(countsStr)){ + + counts=Integer.valueOf(countsStr); + if (counts>=nacosConuts){ + + vlogService.flushCounts(vlogId, counts); + } + } + + return R.ok(); + } + + + @PostMapping("unlike") + public R unlike(@RequestParam String userId, + @RequestParam String vlogerId, + @RequestParam String vlogId) { + + // 我取消点赞的视频,关联关系删除 + vlogService.userUnLikeVlog(userId, vlogId); + + redis.decrement(REDIS_VLOGER_BE_LIKED_COUNTS + ":" + vlogerId, 1); + redis.decrement(REDIS_VLOG_BE_LIKED_COUNTS + ":" + vlogId, 1); + redis.del(REDIS_USER_LIKE_VLOG + ":" + userId + ":" + vlogId); + + return R.ok(); + } + @Tag(name = "手动触发缓存点赞最多视频") + @PostMapping("/cacheTopLikedVlogs") + public R cacheTopLikedVlogs(@RequestParam(defaultValue = "100") int limit) { + try { + vlogService.cacheTopLikedVlogs(limit); + return R.ok(); + } catch (Exception e) { + log.error("手动触发缓存点赞最多视频失败", e); + return R.fail("缓存失败: " + e.getMessage()); + } + } + + @Tag(name = "获取缓存中的点赞最多视频") + @GetMapping("/getTopLikedVlogs") + public R getTopLikedVlogs(@RequestParam(defaultValue = "") String date, + @RequestParam(defaultValue = "10") int pageSize, + @RequestParam(defaultValue = "0") int pageNum) { + try { + String redisKey; + if (StringUtils.isBlank(date)) { + // 如果没有指定日期,使用今天的日期 + redisKey = "top_liked_vlogs:" + java.time.LocalDateTime.now().format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd")); + } else { + redisKey = "top_liked_vlogs:" + date; + } + + String cachedData = redis.get(redisKey); + List> resultList = new ArrayList<>(); + + if (StringUtils.isNotBlank(cachedData)) { + // 解析JSON数据 + ObjectMapper objectMapper = new ObjectMapper(); + List> vlogList = objectMapper.readValue(cachedData, new com.fasterxml.jackson.core.type.TypeReference>>() {}); + + // 计算分页 + int startIndex = pageNum * pageSize; + int endIndex = Math.min(startIndex + pageSize, vlogList.size()); + + if (startIndex < vlogList.size()) { + // 从Redis缓存中获取指定页的数据 + resultList = vlogList.subList(startIndex, endIndex); + log.info("从Redis缓存中获取了{}条视频数据", resultList.size()); + } + } + + // 如果Redis中的数据不足,从数据库随机查询补充 + if (resultList.size() < pageSize) { + int needMore = pageSize - resultList.size(); + log.info("Redis缓存数据不足,需要从数据库随机查询{}条视频", needMore); + + // 从数据库随机查询视频 + List> randomVlogs = vlogService.getRandomVlogs(needMore); + resultList.addAll(randomVlogs); + log.info("从数据库随机查询了{}条视频", randomVlogs.size()); + } + + return R.ok(resultList); + } catch (Exception e) { + log.error("获取缓存中的点赞最多视频失败", e); + return R.fail("获取缓存失败: " + e.getMessage()); + } + } +} diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/VlogController.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/VlogController.java index 47dc0f16d..aba847e2c 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/VlogController.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/VlogController.java @@ -33,7 +33,7 @@ import java.util.ArrayList; @Slf4j @Api(tags = "VlogController 短视频相关业务功能的接口") -@RequestMapping("vlog") +@RequestMapping("/vlog") @RestController public class VlogController extends BaseInfoProperties { @@ -155,38 +155,11 @@ public class VlogController extends BaseInfoProperties { } } - @PostMapping("publish") - public R publish(@RequestBody VlogBO vlogBO) throws Exception { - String url = vlogBO.getUrl(); - log.info("未审核视频地址:"+url); - String fileName = url.substring(url.lastIndexOf("/") + 1); - log.info("视频文件名称:"+fileName); - log.info("开始上传腾讯云点播:"+fileName); - String fileId = qcCloud.uploadViaTempFile(fileName); - log.info("视频发布ID:"+fileId); - vlogBO.setFileId(fileId); - // 删除minio文件 -// MinIOUtils.removeFile(minIOConfig.getBucketName(),fileName); -// log.info("删除minio文件:"+fileName); - // FIXME 校验VlogBO - vlogService.createVlog(vlogBO); - return R.ok(); - } - @Tag(name = "首页视频列表") - @PostMapping("/indexList") - public R indexList(@RequestBody IndexListBO bo, @RequestBody Page page) { - PagedGridResult pages = vlogService.getIndexVlogList(bo, page); - return R.ok(pages); - } - @GetMapping("detail") - public R detail(@RequestParam(defaultValue = "") String userId, - @RequestParam String vlogId) { - return R.ok(vlogService.getVlogDetailById(userId, vlogId)); - } + @PostMapping("changeVlogStatus") public R changeVlogStatus(@RequestParam String userId, @RequestParam String vlogId, @@ -215,157 +188,13 @@ public class VlogController extends BaseInfoProperties { - @Tag(name = "我的公开视频列表") - @PostMapping("/myPublicList") - public R myPublicList(@RequestBody MyListBO bo, @RequestBody Page page) { - PagedGridResult pages = vlogService.queryMyVlogList(bo, page); - return R.ok(pages); - } - @Tag(name = "我的私密视频列表") - @PostMapping("/myPrivateList") - public R myPrivateList(@RequestBody MyListBO bo, @RequestBody Page page) { - PagedGridResult pages = vlogService.queryMyVlogList(bo, page); - return R.ok(pages); - } - - @Tag(name = "我点赞的视频列表") - @PostMapping("/myLikedList") - public R myLikedList(@RequestBody MyListBO bo, @RequestBody Page page) { - PagedGridResult pages = vlogService.getMyLikedVlogList(bo, page); - return R.ok(pages); - } - - @Tag(name = "我关注的视频列表") - @PostMapping("/followList") - public R followList(@RequestBody SimpleListBO bo, @RequestBody Page page) { - PagedGridResult pages = vlogService.getMyFollowVlogList(bo, page); - return R.ok(pages); - } - - @Tag(name = "好友视频列表") - @PostMapping("/friendList") - public R friendList(@RequestBody SimpleListBO bo, @RequestBody Page page) { - PagedGridResult pages = vlogService.getMyFriendVlogList(bo, page); - return R.ok(pages); - } - - private Integer nacosConuts=0; - - - @PostMapping("like") - public R like(@RequestParam String userId, - @RequestParam String vlogerId, - @RequestParam String vlogId) { - - // 我点赞的视频,关联关系保存到数据库 - vlogService.userLikeVlog(userId, vlogId); - - // 点赞后,视频和视频发布者的获赞都会 +1 - redis.increment(REDIS_VLOGER_BE_LIKED_COUNTS + ":" + vlogerId, 1); - redis.increment(REDIS_VLOG_BE_LIKED_COUNTS + ":" + vlogId, 1); - - // 我点赞的视频,需要在redis中保存关联关系 - redis.set(REDIS_USER_LIKE_VLOG + ":" + userId + ":" + vlogId, "1"); - - log.info("nacosConuts="+nacosConuts); - - String countsStr = redis.get(REDIS_VLOG_BE_LIKED_COUNTS + ":" + vlogId); - Integer counts=0; - if (StringUtils.isNotBlank(countsStr)){ - - counts=Integer.valueOf(countsStr); - if (counts>=nacosConuts){ - - vlogService.flushCounts(vlogId, counts); - } - } - - return R.ok(); - } - - - @PostMapping("unlike") - public R unlike(@RequestParam String userId, - @RequestParam String vlogerId, - @RequestParam String vlogId) { - - // 我取消点赞的视频,关联关系删除 - vlogService.userUnLikeVlog(userId, vlogId); - - redis.decrement(REDIS_VLOGER_BE_LIKED_COUNTS + ":" + vlogerId, 1); - redis.decrement(REDIS_VLOG_BE_LIKED_COUNTS + ":" + vlogId, 1); - redis.del(REDIS_USER_LIKE_VLOG + ":" + userId + ":" + vlogId); - - return R.ok(); - } @PostMapping("totalLikedCounts") public R totalLikedCounts(@RequestParam String vlogId) { return R.ok(vlogService.getVlogBeLikedCounts(vlogId)); } - @Tag(name = "手动触发缓存点赞最多视频") - @PostMapping("/cacheTopLikedVlogs") - public R cacheTopLikedVlogs(@RequestParam(defaultValue = "100") int limit) { - try { - vlogService.cacheTopLikedVlogs(limit); - return R.ok(); - } catch (Exception e) { - log.error("手动触发缓存点赞最多视频失败", e); - return R.fail("缓存失败: " + e.getMessage()); - } - } - @Tag(name = "获取缓存中的点赞最多视频") - @GetMapping("/getTopLikedVlogs") - public R getTopLikedVlogs(@RequestParam(defaultValue = "") String date, - @RequestParam(defaultValue = "10") int pageSize, - @RequestParam(defaultValue = "0") int pageNum) { - try { - String redisKey; - if (StringUtils.isBlank(date)) { - // 如果没有指定日期,使用今天的日期 - redisKey = "top_liked_vlogs:" + java.time.LocalDateTime.now().format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd")); - } else { - redisKey = "top_liked_vlogs:" + date; - } - - String cachedData = redis.get(redisKey); - List> resultList = new ArrayList<>(); - - if (StringUtils.isNotBlank(cachedData)) { - // 解析JSON数据 - ObjectMapper objectMapper = new ObjectMapper(); - List> vlogList = objectMapper.readValue(cachedData, new com.fasterxml.jackson.core.type.TypeReference>>() {}); - - // 计算分页 - int startIndex = pageNum * pageSize; - int endIndex = Math.min(startIndex + pageSize, vlogList.size()); - - if (startIndex < vlogList.size()) { - // 从Redis缓存中获取指定页的数据 - resultList = vlogList.subList(startIndex, endIndex); - log.info("从Redis缓存中获取了{}条视频数据", resultList.size()); - } - } - - // 如果Redis中的数据不足,从数据库随机查询补充 - if (resultList.size() < pageSize) { - int needMore = pageSize - resultList.size(); - log.info("Redis缓存数据不足,需要从数据库随机查询{}条视频", needMore); - - // 从数据库随机查询视频 - List> randomVlogs = vlogService.getRandomVlogs(needMore); - resultList.addAll(randomVlogs); - log.info("从数据库随机查询了{}条视频", randomVlogs.size()); - } - - return R.ok(resultList); - } catch (Exception e) { - log.error("获取缓存中的点赞最多视频失败", e); - return R.fail("获取缓存失败: " + e.getMessage()); - } - } } diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/admin/CommentController.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/admin/CommentController.java index bcecf093f..d21dd8fbe 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/admin/CommentController.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/admin/CommentController.java @@ -58,101 +58,7 @@ public class CommentController extends BaseController { return R.ok(commentPage); } - @ApiOperation("查询视频评论列表") - @PostMapping("/vlogComments") - public R> queryVlogComments( - @RequestBody CommentBO bo, - @RequestBody Page page) { - try { - Page commentPage = commentService.pageComment(page, bo); - return R.ok(commentPage); - } catch (Exception e) { - log.error("查询视频评论列表失败", e); - return R.fail("查询视频评论列表失败: " + e.getMessage()); - } - } - @ApiOperation("发布评论") - @PostMapping("/publish") - public R publishComment(@RequestBody CommentBO bo) { - try { - // 鉴权:评论人从登录上下文获取,覆盖入参 - Long loginUserId = LoginHelper.getUserId(); - if (loginUserId == null) { - return R.fail("未登录或登录已过期"); - } - bo.setCommentUserId(String.valueOf(loginUserId)); - - // 父评论为空时,按根评论处理(约定使用"0"作为无父评论标记) - if (bo.getFatherCommentId() == null || bo.getFatherCommentId().isEmpty()) { - bo.setFatherCommentId("0"); - } - - // 1) 创建评论 - commentService.createComment(bo); - - // 2) 短视频评论总数 +1(Redis 优先) - redis.increment(BaseInfoProperties.REDIS_VLOG_COMMENT_COUNTS + ":" + bo.getVlogId(), 1); - - // 3) 发送站内消息:根评论 -> 通知视频作者;回复评论 -> 通知被回复用户 - if ("0".equals(bo.getFatherCommentId())) { - // 评论视频,通知视频作者 - if (bo.getVlogerId() != null && !bo.getVlogerId().isEmpty() - && !String.valueOf(loginUserId).equals(bo.getVlogerId())) { - msgService.createMsg(String.valueOf(loginUserId), bo.getVlogerId(), MessageEnum.COMMENT_VLOG.type, null); - } - } else { - // 回复评论,通知父评论作者 - Comment father = commentService.getCommentDetail(bo.getFatherCommentId()); - if (father != null && father.getCommentUserId() != null - && !String.valueOf(loginUserId).equals(father.getCommentUserId())) { - msgService.createMsg(String.valueOf(loginUserId), father.getCommentUserId(), MessageEnum.REPLY_YOU.type, null); - } - } - - return R.ok(); - } catch (Exception e) { - log.error("发布评论失败", e); - return R.fail("发布评论失败: " + e.getMessage()); - } - } - - @ApiOperation("删除评论") - @PostMapping("/delete") - public R deleteComment( - @ApiParam(value = "评论ID") @RequestParam String commentId) { - try { - String username = LoginHelper.getUsername(); - commentService.deleteComment(commentId, username); - return R.ok(); - } catch (Exception e) { - log.error("删除评论失败", e); - return R.fail("删除评论失败: " + e.getMessage()); - } - } - - @ApiOperation("获取评论详情") - @GetMapping("/detail") - public R> getCommentDetail(@ApiParam(value = "评论ID") @RequestParam String commentId) { - try { - Comment comment = commentService.getCommentDetail(commentId); - if (comment == null) { - return R.fail("评论不存在"); - } - - // 获取子评论 - List childComments = commentService.getChildComments(commentId); - - Map result = new HashMap<>(); - result.put("comment", comment); - result.put("childComments", childComments); - - return R.ok(result); - } catch (Exception e) { - log.error("获取评论详情失败", e); - return R.fail("获取评论详情失败: " + e.getMessage()); - } - } @ApiOperation("获取子评论列表") @GetMapping("/childList") diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/admin/VlogUploadController.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/admin/VlogUploadController.java index 0c0797fc1..62f264770 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/admin/VlogUploadController.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/admin/VlogUploadController.java @@ -9,12 +9,11 @@ import com.wzj.soopin.content.domain.bo.VlogBO; import com.wzj.soopin.content.service.VlogService; import com.wzj.soopin.content.service.VlogUploadService; import com.wzj.soopin.content.utils.RedisOperator; +import org.dromara.common.redis.utils.RedisUtils; import com.wzj.soopin.content.utils.TencentCloudUtil; -import com.wzj.soopin.member.domain.vo.FansVO; import com.wzj.soopin.member.service.IFansService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.domain.R; import org.springframework.beans.factory.annotation.Autowired; @@ -22,10 +21,6 @@ import org.springframework.web.bind.annotation.*; import org.apache.commons.lang3.StringUtils; import java.util.*; -import java.time.Instant; -import java.time.ZoneId; -import java.time.format.DateTimeFormatter; -import java.time.ZonedDateTime; @Slf4j @Api(tags = "管理端-视频") @@ -120,6 +115,77 @@ public class VlogUploadController extends BaseInfoProperties { result.put("size", vlogBO.getSize()); result.put("pages", (resp.getTotalCount() + vlogBO.getSize() - 1) / vlogBO.getSize()); // 总页数 + // 批量获取所有视频的统计信息,避免重复查询 + Map fileIdToVlogIdMap = new HashMap<>(); + List allVlogIds = new ArrayList<>(); + + if (resp.getMediaInfoSet() != null) { + for (MediaInfo mediaInfo : resp.getMediaInfoSet()) { + String fileId = mediaInfo.getFileId(); + Map statistics = vlogService.getVlogStatistics(fileId); + String vlogId = (String) statistics.get("vlogId"); + if (StringUtils.isNotBlank(vlogId)) { + fileIdToVlogIdMap.put(fileId, vlogId); + allVlogIds.add(vlogId); + } + } + } + + // 批量获取所有点赞数据 + Map vlogLikeCounts = new HashMap<>(); + Map vlogCommentCounts = new HashMap<>(); + long totalLikeCounts = 0; + long totalCommentCounts = 0; + + if (!allVlogIds.isEmpty()) { + // 批量获取所有点赞键 + String likePattern = REDIS_USER_LIKE_VLOG + ":*"; + Collection allLikeKeys = RedisUtils.keys(likePattern); + + if (allLikeKeys != null && !allLikeKeys.isEmpty()) { + // 逐个获取点赞值(由于RedisUtils没有批量方法) + Map likeKeyValueMap = new HashMap<>(); + for (String likeKey : allLikeKeys) { + String likeValue = RedisUtils.getCacheObject(likeKey); + if ("1".equals(likeValue)) { + likeKeyValueMap.put(likeKey, likeValue); + } + } + + // 按vlogId分组统计点赞数 + for (String vlogId : allVlogIds) { + int likeCount = 0; + for (String likeKey : likeKeyValueMap.keySet()) { + if (likeKey.endsWith(":" + vlogId)) { + likeCount++; + } + } + vlogLikeCounts.put(vlogId, likeCount); + totalLikeCounts += likeCount; + } + } + + // 批量获取所有评论数 + for (String vlogId : allVlogIds) { + String commentKey = REDIS_VLOG_COMMENT_COUNTS + ":" + vlogId; + String commentCountsStr = RedisUtils.getCacheObject(commentKey); + int commentCount = 0; + if (StringUtils.isNotBlank(commentCountsStr)) { + try { + commentCount = Integer.valueOf(commentCountsStr); + } catch (NumberFormatException e) { + log.warn("Redis中视频{}的评论数格式错误: {}", vlogId, commentCountsStr); + } + } + vlogCommentCounts.put(vlogId, commentCount); + totalCommentCounts += commentCount; + } + } + + // 将总的点赞数和评论数添加到结果中 + result.put("totalLikeCounts", totalLikeCounts); + result.put("totalCommentCounts", totalCommentCounts); + List> mediaList = new ArrayList<>(); if (resp.getMediaInfoSet() != null) { for (MediaInfo mediaInfo : resp.getMediaInfoSet()) { @@ -148,6 +214,20 @@ public class VlogUploadController extends BaseInfoProperties { Map statistics = vlogService.getVlogStatistics(mediaInfo.getFileId()); mediaMap.putAll(statistics); + // 从statistics中获取vlogId,用于Redis查询 + String vlogId = (String) statistics.get("vlogId"); + log.info("处理视频 fileId: {}, vlogId: {}", mediaInfo.getFileId(), vlogId); + + // 使用批量获取的数据,避免重复查询Redis + int videoLikeCounts = 0; + int videoCommentCounts = 0; + if (StringUtils.isNotBlank(vlogId)) { + videoLikeCounts = vlogLikeCounts.getOrDefault(vlogId, 0); + videoCommentCounts = vlogCommentCounts.getOrDefault(vlogId, 0); + } + mediaMap.put("likeCounts", videoLikeCounts); + mediaMap.put("commentCounts", videoCommentCounts); + // 获取视频上传者信息 Map uploaderInfo = vlogService.getVlogUploaderInfo(mediaInfo.getFileId()); if (uploaderInfo != null) { diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/bo/IndexListBO.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/bo/IndexListBO.java index 828466243..21ddb90ea 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/bo/IndexListBO.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/bo/IndexListBO.java @@ -4,7 +4,7 @@ import io.swagger.v3.oas.annotations.media.Schema; public class IndexListBO { @Schema(description = "用户ID") - private String userId; + private String memberId; @Schema(description = "搜索关键字") private String search; @Schema(description = "城市编码") @@ -12,12 +12,12 @@ public class IndexListBO { @Schema(description = "状态") private String status; // getter/setter - public String getUserId() { return userId; } - public void setUserId(String userId) { this.userId = userId; } + public String getMemberId() { return memberId; } + public void setUserId(String userId) { this.memberId = userId; } public String getSearch() { return search; } public void setSearch(String search) { this.search = search; } public String getCityCode() { return cityCode; } public void setCityCode(String cityCode) { this.cityCode = cityCode; } public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } -} \ No newline at end of file +} diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/po/Comment.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/po/Comment.java index b37e2eea8..c8581dea5 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/po/Comment.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/po/Comment.java @@ -3,6 +3,7 @@ package com.wzj.soopin.content.domain.po; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.TableField; import lombok.Data; import java.time.LocalDateTime; @@ -15,8 +16,9 @@ public class Comment { private String id; /** - * 评论的视频是哪个作者(vloger)的关联id + * 评论的视频是哪个作者(member)的关联id */ + @TableField("member_id") private String vlogerId; /** diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/po/Vlog.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/po/Vlog.java index c2a94186b..892320879 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/po/Vlog.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/po/Vlog.java @@ -18,8 +18,8 @@ public class Vlog extends BaseAudit { /** * 对应用户表id,vlog视频发布者 */ - @TableField("vloger_id") - private String vlogerId; + @TableField("member_id") + private String memberId; /** * 视频播放地址 diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/CommentMapper.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/CommentMapper.java index 0949bafd2..9253801ca 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/CommentMapper.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/CommentMapper.java @@ -38,9 +38,9 @@ public interface CommentMapper extends BaseMapper { /** * 根据视频ID查询评论列表 */ - @Select("SELECT c.*, u.nickname as userNickname, u.face as userFace " + + @Select("SELECT c.*, m.nickname as userNickname, m.avatar as userFace " + "FROM cont_comment c " + - "LEFT JOIN cont_users u ON c.comment_user_id = u.id " + + "LEFT JOIN ums_member m ON c.comment_user_id = m.id " + "WHERE c.vlog_id = #{vlogId} " + "ORDER BY c.create_time DESC") List> selectCommentsByVlogId(@Param("vlogId") String vlogId); diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/MyLikedVlogMapper.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/MyLikedVlogMapper.java index 6f2f2f77d..eeebc9235 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/MyLikedVlogMapper.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/MyLikedVlogMapper.java @@ -18,6 +18,6 @@ public interface MyLikedVlogMapper extends BaseMapperPlus> selectLikedUsersByVlogId(@Param("vlogId") String vlogId); } diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/CommentServiceImpl.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/CommentServiceImpl.java index 71b4ef145..f7208aca0 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/CommentServiceImpl.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/CommentServiceImpl.java @@ -8,6 +8,7 @@ import com.wzj.soopin.content.domain.bo.CommentBO; import com.wzj.soopin.content.domain.po.Comment; import com.wzj.soopin.content.domain.po.Vlog; import com.wzj.soopin.content.domain.po.Users; +import com.wzj.soopin.member.domain.po.Member; import com.wzj.soopin.content.domain.vo.ChildCommentVO; import com.wzj.soopin.content.domain.vo.CommentVO; import com.wzj.soopin.content.enums.MessageEnum; @@ -15,6 +16,7 @@ import com.wzj.soopin.content.enums.YesOrNo; import com.wzj.soopin.content.mapper.CommentMapper; import com.wzj.soopin.content.mapper.CommentMapperCustom; import com.wzj.soopin.content.mapper.UsersMapper; +import com.wzj.soopin.member.mapper.MemberMapper; import com.wzj.soopin.content.mapper.VlogMapper; import com.wzj.soopin.content.service.CommentService; import com.wzj.soopin.content.service.MsgService; @@ -54,6 +56,8 @@ public class CommentServiceImpl extends BaseInfoProperties implements CommentSer @Autowired private UsersMapper usersMapper; @Autowired + private MemberMapper memberMapper; + @Autowired private VlogMapper vlogMapper; @Override @@ -184,13 +188,13 @@ public class CommentServiceImpl extends BaseInfoProperties implements CommentSer // 手机号查视频 if (bo != null && org.springframework.util.StringUtils.hasText(bo.getMobile())) { - Users user = usersMapper.selectOne(new LambdaQueryWrapper().eq(Users::getMobile, bo.getMobile())); + Member user = memberMapper.selectOne(new LambdaQueryWrapper().eq(Member::getPhoneHidden, bo.getMobile())); if (user == null) { Page emptyPage = new Page<>(page.getCurrent(), page.getSize(), 0); emptyPage.setRecords(new ArrayList<>()); return emptyPage; } - List vlogList = vlogMapper.selectList(new LambdaQueryWrapper().eq(Vlog::getVlogerId, user.getId())); + List vlogList = vlogMapper.selectList(new LambdaQueryWrapper().eq(Vlog::getMemberId, user.getId())); if (vlogList.isEmpty()) { Page emptyPage = new Page<>(page.getCurrent(), page.getSize(), 0); emptyPage.setRecords(new ArrayList<>()); @@ -211,17 +215,17 @@ public class CommentServiceImpl extends BaseInfoProperties implements CommentSer BeanUtils.copyProperties(comment, vo); vo.setCommentId(comment.getId()); // 查评论用户信息 - Users user = usersMapper.selectById(comment.getCommentUserId()); + Member user = memberMapper.selectById(comment.getCommentUserId()); if (user != null) { - vo.setCommentUserFace(user.getFace()); + vo.setCommentUserFace(user.getAvatar()); vo.setCommentUserNickname(user.getNickname()); } // 查视频作者手机号和视频播放地址 Vlog vlog = vlogMapper.selectById(comment.getVlogId()); if (vlog != null) { - Users vloger = usersMapper.selectById(vlog.getVlogerId()); + Member vloger = memberMapper.selectById(vlog.getMemberId()); if (vloger != null) { - vo.setVlogerMobile(vloger.getMobile()); + vo.setVlogerMobile(vloger.getPhoneHidden()); } vo.setVlogUrl(vlog.getUrl()); // 假设Vlog实体有getUrl()方法 } @@ -245,7 +249,7 @@ public class CommentServiceImpl extends BaseInfoProperties implements CommentSer Comment fatherComment = commentMapper.selectById(fatherCommentId); String replyedUserNickname = null; if (fatherComment != null) { - Users replyedUser = usersMapper.selectById(fatherComment.getCommentUserId()); + Member replyedUser = memberMapper.selectById(fatherComment.getCommentUserId()); if (replyedUser != null) { replyedUserNickname = replyedUser.getNickname(); } @@ -263,10 +267,10 @@ public class CommentServiceImpl extends BaseInfoProperties implements CommentSer vo.setCreateTime(child.getCreateTime()); vo.setReplyedUserNickname(replyedUserNickname); // 回复人昵称和头像 - Users replyUser = usersMapper.selectById(child.getCommentUserId()); + Member replyUser = memberMapper.selectById(child.getCommentUserId()); if (replyUser != null) { vo.setReplyUserNickname(replyUser.getNickname()); - vo.setReplyUserFace(replyUser.getFace()); + vo.setReplyUserFace(replyUser.getAvatar()); } voList.add(vo); } @@ -286,7 +290,7 @@ public class CommentServiceImpl extends BaseInfoProperties implements CommentSer Comment fatherComment = commentMapper.selectById(fatherCommentId); String replyedUserNickname; if (fatherComment != null) { - Users replyedUser = usersMapper.selectById(fatherComment.getCommentUserId()); + Member replyedUser = memberMapper.selectById(fatherComment.getCommentUserId()); if (replyedUser != null) { replyedUserNickname = replyedUser.getNickname(); } else { @@ -310,10 +314,10 @@ public class CommentServiceImpl extends BaseInfoProperties implements CommentSer vo.setCreateTime(child.getCreateTime()); vo.setReplyedUserNickname(replyedUserNickname); // 回复人昵称和头像 - Users replyUser = usersMapper.selectById(child.getCommentUserId()); + Member replyUser = memberMapper.selectById(child.getCommentUserId()); if (replyUser != null) { vo.setReplyUserNickname(replyUser.getNickname()); - vo.setReplyUserFace(replyUser.getFace()); + vo.setReplyUserFace(replyUser.getAvatar()); } return vo; }).collect(java.util.stream.Collectors.toList()); diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogServiceImpl.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogServiceImpl.java index 7a167147d..a57b838c1 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogServiceImpl.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogServiceImpl.java @@ -16,11 +16,13 @@ import com.wzj.soopin.content.domain.bo.IndexListBO; import com.wzj.soopin.content.domain.po.MyLikedVlog; import com.wzj.soopin.content.domain.po.Vlog; import com.wzj.soopin.content.domain.po.Users; +import com.wzj.soopin.member.domain.po.Member; import com.wzj.soopin.content.domain.vo.IndexVlogVO; import com.wzj.soopin.content.enums.YesOrNo; import com.wzj.soopin.content.mapper.CommentMapper; import com.wzj.soopin.content.mapper.MyLikedVlogMapper; import com.wzj.soopin.content.mapper.UsersMapper; +import com.wzj.soopin.member.mapper.MemberMapper; import com.wzj.soopin.content.mapper.VlogMapper; import com.wzj.soopin.content.mapper.VlogMapperCustom; import com.wzj.soopin.content.service.MsgService; @@ -77,6 +79,8 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { @Autowired private UsersMapper usersMapper; @Autowired + private MemberMapper memberMapper; + @Autowired private VlogConvert vlogConvert; @Autowired private ISysMessageService sysMessageService; @@ -95,7 +99,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { // 1. 获取视频信息,找到上传者 Vlog vlog = vlogMapper.selectByFileId(fileId); if (vlog == null) return; - String uploaderId = vlog.getVlogerId(); + String uploaderId = vlog.getMemberId(); // 2. 选择模板(假设你有模板ID,实际可配置到常量或数据库) Long templateId = (status == 1) ? 1938491493736902658L : 1938491899007332353L; // 1001=审核通过模板,1002=驳回模板 @@ -144,7 +148,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { @Override public PagedGridResult getIndexVlogList(IndexListBO bo, Page page) { - String userId = bo.getUserId(); + String userId = bo.getMemberId(); String search = bo.getSearch(); String cityCode = bo.getCityCode(); String status = bo.getStatus(); @@ -199,7 +203,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { } } if (!blockUserList.isEmpty()) { - queryWrapper.notIn(Vlog::getVlogerId, blockUserList); + queryWrapper.notIn(Vlog::getMemberId, blockUserList); } } } @@ -208,7 +212,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { List voList = vlogList.stream().map(v -> { IndexVlogVO vo = vlogConvert.toVO(v); if (StringUtils.isNotBlank(userId)) { - vo.setDoIFollowVloger(fansService.queryDoIFollowVloger(userId, v.getVlogerId())); + vo.setDoIFollowVloger(fansService.queryDoIFollowVloger(userId, v.getMemberId())); vo.setDoILikeThisVlog(doILikeVlog(userId, v.getId())); } vo.setLikeCounts(getVlogBeLikedCounts(v.getId())); @@ -260,7 +264,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { IndexVlogVO vo = vlogConvert.toVO(vlog); if (StringUtils.isNotBlank(userId)) { - vo.setDoIFollowVloger(fansService.queryDoIFollowVloger(userId, vlog.getVlogerId())); + vo.setDoIFollowVloger(fansService.queryDoIFollowVloger(userId, vlog.getMemberId())); vo.setDoILikeThisVlog(doILikeVlog(userId, vlogId)); } @@ -275,7 +279,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { public void changeToPrivateOrPublic(String userId, String vlogId, Integer yesOrNo) { LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.eq(Vlog::getId, vlogId) - .eq(Vlog::getVlogerId, userId) + .eq(Vlog::getMemberId, userId) .set(Vlog::getIsPrivate, yesOrNo); vlogMapper.update(null, updateWrapper); } @@ -285,7 +289,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { public void changeVlogStatus(String userId, String vlogId, Integer status) { LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.eq(Vlog::getId, vlogId) - .eq(Vlog::getVlogerId, userId) + .eq(Vlog::getMemberId, userId) .set(Vlog::getStatus, status); vlogMapper.update(null, updateWrapper); } @@ -299,9 +303,9 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { if(bo.getUserId()==null){ LoginUser user= LoginHelper.getLoginUser(); - queryWrapper.eq(Vlog::getVlogerId, user.getUserId()); + queryWrapper.eq(Vlog::getMemberId, user.getUserId()); }else{ - queryWrapper.eq(Vlog::getVlogerId, bo.getUserId()); + queryWrapper.eq(Vlog::getMemberId, bo.getUserId()); } queryWrapper.eq(Vlog::getIsPrivate, bo.getYesOrNo()); @@ -316,7 +320,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { uid = user != null ? String.valueOf(user.getUserId()) : null; } if (StringUtils.isNotBlank(uid)) { - vo.setDoIFollowVloger(fansService.queryDoIFollowVloger(uid, vlog.getVlogerId())); + vo.setDoIFollowVloger(fansService.queryDoIFollowVloger(uid, vlog.getMemberId())); vo.setDoILikeThisVlog(doILikeVlog(uid, vlog.getId())); } vo.setLikeCounts(getVlogBeLikedCounts(vlog.getId())); @@ -352,13 +356,13 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { // 发送点赞通知 Vlog vlog = vlogMapper.selectById(vlogId); if (vlog != null) { - String vlogerId = vlog.getVlogerId(); + String vlogerId = vlog.getMemberId(); if (!userId.equals(vlogerId)) { Long templateId = 1938491299175723009L; SysMessageTemplateVo template = templateService.selectTemplateById(templateId); if (template != null) { // 查询点赞用户昵称 - Users liker = usersMapper.selectById(userId); + Member liker = memberMapper.selectById(userId); String likerNickname = liker != null && liker.getNickname() != null ? liker.getNickname() : ""; String content = template.getTemplateContent() @@ -430,7 +434,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { } IndexVlogVO vo = vlogConvert.toVO(vlog); if (StringUtils.isNotBlank(finalUid)) { - vo.setDoIFollowVloger(fansService.queryDoIFollowVloger(finalUid, vlog.getVlogerId())); + vo.setDoIFollowVloger(fansService.queryDoIFollowVloger(finalUid, vlog.getMemberId())); vo.setDoILikeThisVlog(true); } vo.setLikeCounts(getVlogBeLikedCounts(vlog.getId())); @@ -496,7 +500,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { // 这里不再统计,避免重复计算 // 获取粉丝数量:优先 Redis,无则 MySQL - String fansCountsStr = redis.get(REDIS_MY_FANS_COUNTS + ":" + vlog.getVlogerId()); + String fansCountsStr = redis.get(REDIS_MY_FANS_COUNTS + ":" + vlog.getMemberId()); Integer fansCounts = 0; if (StringUtils.isNotBlank(fansCountsStr)) { fansCounts = Integer.valueOf(fansCountsStr); @@ -608,20 +612,20 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { } // 获取上传者ID - String uploaderId = vlog.getVlogerId(); + String uploaderId = vlog.getMemberId(); if (uploaderId == null) { return null; } - // 从 t_users 表获取用户信息 - Users user = usersMapper.selectById(uploaderId); + // 从 ums_member 表获取用户信息 + Member user = memberMapper.selectById(uploaderId); if (user == null) { return null; } Map result = new HashMap<>(); result.put("name", user.getNickname()); - result.put("phone", user.getMobile()); + result.put("phone", user.getPhoneHidden()); return result; } diff --git a/ruoyi-modules/ruoyi-content/src/main/resources/mapper/content/CommentMapper.xml b/ruoyi-modules/ruoyi-content/src/main/resources/mapper/content/CommentMapper.xml index f57ebc757..6cad2eec6 100644 --- a/ruoyi-modules/ruoyi-content/src/main/resources/mapper/content/CommentMapper.xml +++ b/ruoyi-modules/ruoyi-content/src/main/resources/mapper/content/CommentMapper.xml @@ -6,7 +6,7 @@ WARNING - @mbg.generated --> - + diff --git a/ruoyi-modules/ruoyi-content/src/main/resources/mapper/content/CommentMapperCustom.xml b/ruoyi-modules/ruoyi-content/src/main/resources/mapper/content/CommentMapperCustom.xml index 54bce60c2..3020729be 100644 --- a/ruoyi-modules/ruoyi-content/src/main/resources/mapper/content/CommentMapperCustom.xml +++ b/ruoyi-modules/ruoyi-content/src/main/resources/mapper/content/CommentMapperCustom.xml @@ -12,24 +12,24 @@ SELECT c.id, c.id as commentId, - c.vloger_id as vlogerId, + c.member_id as vlogerId, c.status, c.father_comment_id as fatherCommentId, c.vlog_id as vlogId, c.comment_user_id as commentUserId, - u.nickname as commentUserNickname, - u.face as commentUserFace, + m.nickname as commentUserNickname, + m.avatar as commentUserFace, c.content, c.like_counts as likeCounts, c.create_time as createTime FROM cont_comment c - LEFT JOIN cont_users u ON c.comment_user_id = u.id + LEFT JOIN ums_member m ON c.comment_user_id = m.id AND c.vlog_id = #{paramMap.vlogId} - AND u.mobile LIKE CONCAT('%', #{paramMap.mobile}, '%') + AND m.phone_hidden LIKE CONCAT('%', #{paramMap.mobile}, '%') AND (c.father_comment_id = '0' OR c.father_comment_id IS NULL) @@ -42,25 +42,25 @@ SELECT c.id, c.id as commentId, - c.vloger_id as vlogerId, + c.member_id as vlogerId, c.father_comment_id as fatherCommentId, c.vlog_id as vlogId, c.comment_user_id as commentUserId, c.status, - u.nickname as commentUserNickname, - u.face as commentUserFace, + m.nickname as commentUserNickname, + m.avatar as commentUserFace, c.content, c.like_counts as likeCounts, c.create_time as createTime FROM cont_comment c - LEFT JOIN cont_users u ON c.comment_user_id = u.id + LEFT JOIN ums_member m ON c.comment_user_id = m.id c.father_comment_id = '0' AND c.vlog_id = #{vlogId} - AND u.mobile LIKE CONCAT('%', #{mobile}, '%') + AND m.phone_hidden LIKE CONCAT('%', #{mobile}, '%') ORDER BY c.create_time DESC diff --git a/ruoyi-modules/ruoyi-content/src/main/resources/mapper/content/FansMapperCustom.xml b/ruoyi-modules/ruoyi-content/src/main/resources/mapper/content/FansMapperCustom.xml index 6b2bbb8d9..562101f25 100644 --- a/ruoyi-modules/ruoyi-content/src/main/resources/mapper/content/FansMapperCustom.xml +++ b/ruoyi-modules/ruoyi-content/src/main/resources/mapper/content/FansMapperCustom.xml @@ -5,17 +5,17 @@ SELECT - u.id as fanId, - u.nickname as nickname, - u.face as face, + m.id as fanId, + m.nickname as nickname, + m.avatar as face, f.is_fan_friend_of_mine as bothFriend, f.created_time as createdTime FROM ums_fans f LEFT JOIN - cont_users u + ums_member m ON - f.fan_id = u.id + f.fan_id = m.id WHERE f.vloger_id = #{paramMap.myId} ORDER BY - u.nickname + m.nickname ASC diff --git a/ruoyi-modules/ruoyi-content/src/main/resources/mapper/content/VlogMapper.xml b/ruoyi-modules/ruoyi-content/src/main/resources/mapper/content/VlogMapper.xml index 2a092d709..a577516de 100644 --- a/ruoyi-modules/ruoyi-content/src/main/resources/mapper/content/VlogMapper.xml +++ b/ruoyi-modules/ruoyi-content/src/main/resources/mapper/content/VlogMapper.xml @@ -73,9 +73,9 @@ SELECT v.id as vlogId, - v.vloger_id as vlogerId, - u.face as vlogerFace, - u.nickname as vlogerName, + v.member_id as vlogerId, + m.avatar as vlogerFace, + m.nickname as vlogerName, v.title as content, v.url as mediaUrl, v.cover as cover, @@ -148,9 +148,9 @@ FROM cont_vlog v LEFT JOIN - cont_users u + ums_member m ON - v.vloger_id = u.id + v.member_id = m.id WHERE v.id = #{paramMap.vlogId} AND v.status = 1 @@ -176,24 +176,24 @@ SELECT c.id, c.id as commentId, - c.vloger_id as vlogerId, + c.member_id as vlogerId, c.father_comment_id as fatherCommentId, c.vlog_id as vlogId, c.comment_user_id as commentUserId, - u.nickname as commentUserNickname, - u.face as commentUserFace, + m.nickname as commentUserNickname, + m.avatar as commentUserFace, c.content, c.like_counts as likeCounts, c.create_time as createTime FROM cont_comment c - LEFT JOIN cont_users u ON c.comment_user_id = u.id + LEFT JOIN ums_member m ON c.comment_user_id = m.id c.father_comment_id = '0' AND c.vlog_id = #{vlogId} - AND u.mobile LIKE CONCAT('%', #{mobile}, '%') + AND m.phone_hidden LIKE CONCAT('%', #{mobile}, '%') ORDER BY c.create_time DESC @@ -202,7 +202,7 @@ SELECT v.id as vlogId, - v.vloger_id as vlogerId, - u.face as vlogerFace, - u.nickname as vlogerName, + v.member_id as vlogerId, + m.avatar as vlogerFace, + m.nickname as vlogerName, v.title as content, v.url as url, v.cover as cover, @@ -25,9 +25,9 @@ FROM cont_vlog v LEFT JOIN - cont_users u + ums_member m ON - v.vloger_id = u.id + v.member_id = m.id WHERE v.is_private = 0 @@ -52,7 +52,7 @@ - AND v.vloger_id NOT IN + AND v.member_id NOT IN #{vlogerId} @@ -66,9 +66,9 @@ SELECT v.id as vlogId, - v.vloger_id as vlogerId, + v.member_id as vlogerId, -- u.face as vlogerFace, -- u.nickname as vlogerName, v.title as content, @@ -122,11 +122,11 @@ ON v.id = mlv.vlog_id LEFT JOIN - cont_users u + ums_member m ON - mlv.user_id = u.id + mlv.user_id = m.id WHERE - u.id = #{paramMap.userId} + m.id = #{paramMap.userId} AND v.status = 1 AND v.first_frame_img IS NOT NULL AND v.is_private = 0 @@ -137,7 +137,7 @@ - AND v.vloger_id NOT IN + AND v.member_id NOT IN #{vlogerId} @@ -150,9 +150,9 @@ SELECT v.id as vlogId, - v.vloger_id as vlogerId, - u.face as vlogerFace, - u.nickname as vlogerName, + v.member_id as vlogerId, + m.avatar as vlogerFace, + m.nickname as vlogerName, v.title as content, v.url as url, v.cover as cover, @@ -213,11 +213,11 @@ LEFT JOIN ums_fans f ON - v.vloger_id = f.fan_id + v.member_id = f.fan_id LEFT JOIN - cont_users u + ums_member m ON - f.fan_id = u.id + f.fan_id = m.id WHERE v.is_private = 0 AND v.status = 1