From af2e269e71a5f80a35218c026902a3492e22b3d2 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 19:05:25 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/dromara/app/AppVlogController.java | 2 +- .../soopin/content/domain/vo/IndexVlogVO.java | 12 +- .../content/service/impl/VlogServiceImpl.java | 132 ++++++++++++++---- .../resources/mapper/content/VlogMapper.xml | 8 +- .../mapper/content/VlogMapperCustom.xml | 72 +++++----- 5 files changed, 158 insertions(+), 68 deletions(-) diff --git a/ruoyi-admin/src/main/java/org/dromara/app/AppVlogController.java b/ruoyi-admin/src/main/java/org/dromara/app/AppVlogController.java index e1f9d35f2..882323141 100644 --- a/ruoyi-admin/src/main/java/org/dromara/app/AppVlogController.java +++ b/ruoyi-admin/src/main/java/org/dromara/app/AppVlogController.java @@ -45,7 +45,7 @@ public class AppVlogController { PagedGridResult pages = vlogService.getIndexVlogList(bo, page); return R.ok(pages); } - @GetMapping("detail") + @GetMapping("/detail") public R detail(@RequestParam(defaultValue = "") String userId, @RequestParam String vlogId) { return R.ok(vlogService.getVlogDetailById(userId, vlogId)); diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/vo/IndexVlogVO.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/vo/IndexVlogVO.java index 2796e1c3f..becf96967 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/vo/IndexVlogVO.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/vo/IndexVlogVO.java @@ -1,5 +1,7 @@ package com.wzj.soopin.content.domain.vo; +import com.wzj.soopin.content.domain.po.Vlog; +import io.github.linpeilie.annotations.AutoMapper; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -9,11 +11,13 @@ import lombok.ToString; @AllArgsConstructor @NoArgsConstructor @ToString +@AutoMapper(target = Vlog.class) public class IndexVlogVO { - private String vlogId; - private String vlogerId; - private String vlogerFace; - private String vlogerName; + private String Id; + private String memberId; + private String avatar; + private String nickname; + private String title; private String content; private String url; private String cover; 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 a57b838c1..a5d5c2f26 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 @@ -44,6 +44,7 @@ import org.dromara.system.service.ISysMessageService; import org.dromara.system.service.ISysMessageTemplateService; import org.dromara.system.domain.bo.SysMessageBo; import org.dromara.system.domain.vo.SysMessageTemplateVo; +import org.dromara.common.core.utils.MapstructUtils; import java.time.Instant; import java.time.LocalDateTime; @@ -81,8 +82,6 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { @Autowired private MemberMapper memberMapper; @Autowired - private VlogConvert vlogConvert; - @Autowired private ISysMessageService sysMessageService; @Autowired private ISysMessageTemplateService templateService; @@ -136,7 +135,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { @Override public void createVlog(VlogBO vlogBO) { String vid = sid.nextShort(); - Vlog vlog = vlogConvert.toEntity(vlogBO); + Vlog vlog = MapstructUtils.convert(vlogBO, Vlog.class); vlog.setId(vid); vlog.setLikeCounts(0); vlog.setCommentsCounts(0); @@ -196,8 +195,8 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { for (String report : reports) { try { Map reportMap = objectMapper.readValue(report, new TypeReference>() {}); - String vlogerId = (String) reportMap.get("vlogerId"); - blockUserList.add(vlogerId); + String memberId = (String) reportMap.get("MemberId"); + blockUserList.add(memberId); } catch (JsonProcessingException e) { e.printStackTrace(); } @@ -210,7 +209,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { Page vlogPage = vlogMapper.selectPage(pageParam, queryWrapper); List vlogList = vlogPage.getRecords(); List voList = vlogList.stream().map(v -> { - IndexVlogVO vo = vlogConvert.toVO(v); + IndexVlogVO vo = MapstructUtils.convert(v, IndexVlogVO.class); if (StringUtils.isNotBlank(userId)) { vo.setDoIFollowVloger(fansService.queryDoIFollowVloger(userId, v.getMemberId())); vo.setDoILikeThisVlog(doILikeVlog(userId, v.getId())); @@ -220,6 +219,26 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { return vo; }).collect(Collectors.toList()); + // 批量补充作者信息(头像/昵称) + if (!vlogList.isEmpty()) { + List memberIds = vlogList.stream() + .map(Vlog::getMemberId) + .filter(StringUtils::isNotBlank) + .distinct() + .collect(Collectors.toList()); + if (!memberIds.isEmpty()) { + List members = memberMapper.selectList(new LambdaQueryWrapper().in(Member::getId, memberIds)); + Map memberMap = members.stream().collect(Collectors.toMap(m -> String.valueOf(m.getId()), m -> m, (a, b) -> a)); + voList.forEach(vo -> { + Member m = memberMap.get(vo.getMemberId()); + if (m != null) { + vo.setAvatar(m.getAvatar()); + vo.setNickname(m.getNickname()); + } + }); + } + } + // 封装分页结果 PagedGridResult gridResult = new PagedGridResult(); gridResult.setRows(voList); // 当前页数据列表 @@ -261,7 +280,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { return null; } - IndexVlogVO vo = vlogConvert.toVO(vlog); + IndexVlogVO vo = MapstructUtils.convert(vlog, IndexVlogVO.class); if (StringUtils.isNotBlank(userId)) { vo.setDoIFollowVloger(fansService.queryDoIFollowVloger(userId, vlog.getMemberId())); @@ -271,6 +290,13 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { vo.setLikeCounts(getVlogBeLikedCounts(vlogId)); vo.setCommentsCounts(getVlogComment(vlogId)); + // 补充作者信息(头像/昵称) + Member author = memberMapper.selectById(vlog.getMemberId()); + if (author != null) { + vo.setAvatar(author.getAvatar()); + vo.setNickname(author.getNickname()); + } + return vo; } @@ -313,7 +339,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { List vlogList = vlogPage.getRecords(); List voList = vlogList.stream().map(vlog -> { - IndexVlogVO vo = vlogConvert.toVO(vlog); + IndexVlogVO vo = MapstructUtils.convert(vlog, IndexVlogVO.class); String uid = bo.getUserId(); if (StringUtils.isBlank(uid)) { LoginUser user = LoginHelper.getLoginUser(); @@ -325,6 +351,14 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { } vo.setLikeCounts(getVlogBeLikedCounts(vlog.getId())); vo.setCommentsCounts(getVlogComment(vlog.getId())); + + // 补充用户信息(头像/昵称) + Member author = memberMapper.selectById(vlog.getMemberId()); + if (author != null) { + vo.setAvatar(author.getAvatar()); + vo.setNickname(author.getNickname()); + } + return vo; }).collect(Collectors.toList()); @@ -432,13 +466,21 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { if (vlog == null) { return null; } - IndexVlogVO vo = vlogConvert.toVO(vlog); + IndexVlogVO vo = MapstructUtils.convert(vlog, IndexVlogVO.class); if (StringUtils.isNotBlank(finalUid)) { vo.setDoIFollowVloger(fansService.queryDoIFollowVloger(finalUid, vlog.getMemberId())); vo.setDoILikeThisVlog(true); } vo.setLikeCounts(getVlogBeLikedCounts(vlog.getId())); vo.setCommentsCounts(getVlogComment(vlog.getId())); + + // 补充用户信息(头像/昵称) + Member author = memberMapper.selectById(vlog.getMemberId()); + if (author != null) { + vo.setAvatar(author.getAvatar()); + vo.setNickname(author.getNickname()); + } + return vo; }) .filter(Objects::nonNull) @@ -452,28 +494,68 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { return gridResult; } - @Override - public PagedGridResult getMyFriendVlogList(SimpleListBO bo, Page page) { - int current = (int) page.getCurrent(); - int size = (int) page.getSize(); - Page pageParam = new Page<>(current, size); - Map map = new HashMap<>(); - map.put("myId", bo.getMyId()); - List voList = vlogMapperCustom.getMyFriendVlogList(map); - // TODO: 组装PagedGridResult返回 - return null; - } - @Override public PagedGridResult getMyFollowVlogList(SimpleListBO bo, Page page) { int current = (int) page.getCurrent(); int size = (int) page.getSize(); - Page pageParam = new Page<>(current, size); Map map = new HashMap<>(); map.put("myId", bo.getMyId()); List voList = vlogMapperCustom.getMyFollowVlogList(map); - // TODO: 组装PagedGridResult返回 - return null; + + // 补充用户信息(头像/昵称) + voList.forEach(vo -> { + if (StringUtils.isNotBlank(vo.getMemberId())) { + Member author = memberMapper.selectById(vo.getMemberId()); + if (author != null) { + vo.setAvatar(author.getAvatar()); + vo.setNickname(author.getNickname()); + } + } + }); + + // 手动分页 + int startIndex = (current - 1) * size; + int endIndex = Math.min(startIndex + size, voList.size()); + List pagedList = voList.subList(startIndex, endIndex); + + PagedGridResult gridResult = new PagedGridResult(); + gridResult.setRows(pagedList); + gridResult.setPage(current); + gridResult.setRecords(voList.size()); + gridResult.setTotal((int) Math.ceil((double) voList.size() / size)); + return gridResult; + } + + @Override + public PagedGridResult getMyFriendVlogList(SimpleListBO bo, Page page) { + int current = (int) page.getCurrent(); + int size = (int) page.getSize(); + Map map = new HashMap<>(); + map.put("myId", bo.getMyId()); + List voList = vlogMapperCustom.getMyFriendVlogList(map); + + // 补充用户信息(头像/昵称) + voList.forEach(vo -> { + if (StringUtils.isNotBlank(vo.getMemberId())) { + Member author = memberMapper.selectById(vo.getMemberId()); + if (author != null) { + vo.setAvatar(author.getAvatar()); + vo.setNickname(author.getNickname()); + } + } + }); + + // 手动分页 + int startIndex = (current - 1) * size; + int endIndex = Math.min(startIndex + size, voList.size()); + List pagedList = voList.subList(startIndex, endIndex); + + PagedGridResult gridResult = new PagedGridResult(); + gridResult.setRows(pagedList); + gridResult.setPage(current); + gridResult.setRecords(voList.size()); + gridResult.setTotal((int) Math.ceil((double) voList.size() / size)); + return gridResult; } @Override @@ -534,7 +616,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { // } else { // result.put("vodDetail", vodDetail); // } - IndexVlogVO vo = vlogConvert.toVO(vlog); + IndexVlogVO vo = MapstructUtils.convert(vlog, IndexVlogVO.class); // 添加评论信息 List> comments = commentMapper.selectCommentsByVlogId(vlog.getId()); result.put("comments", comments); 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 a577516de..a67674e74 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 @@ -127,10 +127,10 @@ SELECT - v.id as vlogId, - v.member_id as vlogerId, - m.avatar as vlogerFace, - m.nickname as vlogerName, + v.id, + v.member_id, + m.avatar, + m.nickname, v.title as content, v.url as url, v.cover as cover, + v.title, v.width as width, v.height as height, v.like_counts as likeCounts, @@ -53,8 +54,8 @@ AND v.member_id NOT IN - - #{vlogerId} + + #{memberId} ORDER BY @@ -98,9 +99,8 @@ SELECT v.id as vlogId, - v.member_id as vlogerId, - m.avatar as vlogerFace, - m.nickname as vlogerName, + v.member_id as memberId, + v.title as title, v.title as content, v.url as url, v.cover as cover, @@ -166,34 +167,35 @@ v.status as status, v.file_id as fileId, v.first_frame_img as firstFrameImg, - v.id as vlogId + v.id as Id, + m.avatar as avatar, + m.nickname as nickname FROM - cont_vlog v + cont_vlog v LEFT JOIN - cont_fans f + cont_fans f ON - v.member_id = f.vloger_id + v.member_id = f.vloger_id LEFT JOIN - ums_member m + ums_member m ON - f.vloger_id = m.id + v.member_id = m.id WHERE - v.is_private = 0 + v.is_private = 0 AND v.status = 1 AND v.first_frame_img IS NOT NULL AND f.fan_id = #{paramMap.myId} ORDER BY - v.created_time + v.created_time DESC