From a2c4af86b65f9c0b339bfcb37b1cc00b33f48b9e Mon Sep 17 00:00:00 2001 From: Administrator <15274802129@163.com> Date: Thu, 10 Jul 2025 12:41:46 +0800 Subject: [PATCH] feat(clothes): 添加社区评论功能 --- src/main/java/cc/mrbird/febs/mall/service/impl/ApiClothesSocialServiceImpl.java | 109 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 106 insertions(+), 3 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiClothesSocialServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiClothesSocialServiceImpl.java index 6e9ee3b..4d730aa 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiClothesSocialServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiClothesSocialServiceImpl.java @@ -27,9 +27,7 @@ import java.math.BigDecimal; import java.math.RoundingMode; -import java.util.ArrayList; -import java.util.List; -import java.util.Set; +import java.util.*; import java.util.stream.Collectors; @Slf4j @@ -62,6 +60,7 @@ private final ClothesTypeArtMapper clothesTypeArtMapper; private final ClothesLocationRemarkMapper clothesLocationRemarkMapper; private final ClothesPatternRemarkMapper clothesPatternRemarkMapper; + private final ClothesSocialCommentMapper clothesSocialCommentMapper; @Override @@ -114,8 +113,36 @@ // 调用Mapper方法获取活动分页数据 Page<ApiAllSocialVo> voPage = clothesSocialMapper.selectPageInSocial(page, dto); + List<ApiAllSocialVo> vos = voPage.getRecords(); + if (CollUtil.isNotEmpty(vos)) { + Set<Long> socialIds = vos.stream() + .map(ApiAllSocialVo::getId) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + + if (CollUtil.isNotEmpty(socialIds)) { + List<ClothesSocialFollow> clothesSocialFollows = clothesSocialFollowMapper.selectList( + Wrappers.lambdaQuery(ClothesSocialFollow.class) + .select(ClothesSocialFollow::getId, ClothesSocialFollow::getSourceId) + .in(ClothesSocialFollow::getSourceId, socialIds) + .eq(ClothesSocialFollow::getType, SocialTypeEnum.LIKE.getValue()) + ); + + Map<Long, Long> likeCountBySocialIdMap = new HashMap<>(); + if (CollUtil.isNotEmpty(clothesSocialFollows)) { + likeCountBySocialIdMap = clothesSocialFollows.stream() + .collect(Collectors.groupingBy(ClothesSocialFollow::getSourceId, Collectors.counting())); + } + + for (ApiAllSocialVo item : vos){ + item.setLikeCnt(likeCountBySocialIdMap.getOrDefault(item.getId(), 0L).intValue()); + } + } + } + return new FebsResponse().success().data(voPage); } + @Override public FebsResponse socialInfo(ApiSocialInfoDto dto) { @@ -130,6 +157,7 @@ apiSocialInfoVo.setName(clothesSocial.getName()); apiSocialInfoVo.setContent(clothesSocial.getContent()); apiSocialInfoVo.setCreatedTime(clothesSocial.getCreatedTime()); + apiSocialInfoVo.setCommentState(clothesSocial.getCommentState()); List<ClothesSocialFile> clothesSocialFiles = clothesSocialFileMapper.selectList( Wrappers.lambdaQuery(ClothesSocialFile.class) @@ -211,6 +239,29 @@ apiSocialMuseVo.setLocationRemarkList(locationRemarkList); } apiSocialMuseVo.setTotalAmount(totalAmount.setScale(2, RoundingMode.DOWN)); + + List<ClothesSocialFollow> clothesSocialFollows = clothesSocialFollowMapper.selectList( + Wrappers.lambdaQuery(ClothesSocialFollow.class) + .select(ClothesSocialFollow::getType) + .eq(ClothesSocialFollow::getSourceId, socialId) + ); + if (CollUtil.isNotEmpty(clothesSocialFollows)){ + + Map<Integer, Long> collect = clothesSocialFollows.stream() + .collect(Collectors.groupingBy(ClothesSocialFollow::getType, Collectors.counting())); + apiSocialInfoVo.setLikeCnt(collect.getOrDefault(SocialTypeEnum.LIKE.getValue(), 0L).intValue()); + apiSocialInfoVo.setCollectCnt(collect.getOrDefault(SocialTypeEnum.COLLECT.getValue(), 0L).intValue()); + } + + List<ClothesSocialComment> clothesSocialComments = clothesSocialCommentMapper.selectList( + Wrappers.lambdaQuery(ClothesSocialComment.class) + .eq(ClothesSocialComment::getSocialId, socialId) + .eq(ClothesSocialComment::getShowState, ClothesEnum.UP.getCode()) + .isNull(ClothesSocialComment::getParentId) + ); + if (CollUtil.isNotEmpty(clothesSocialComments)){ + apiSocialInfoVo.setCommentCnt(clothesSocialComments.size()); + } } } @@ -496,6 +547,58 @@ return new FebsResponse().success().data(record); } + @Override + public FebsResponse comment(ApiClothesSocialCommentDto dto) { + + Long memberId = LoginUserUtil.getLoginUser().getId(); + Long socialId = dto.getSocialId(); + Long commentId = dto.getCommentId(); + ClothesSocial clothesSocial = clothesSocialMapper.selectById(socialId); + if (ObjectUtil.isNull(clothesSocial)){ + return new FebsResponse().fail().message("社区不存在"); + } + if (ClothesEnum.DOWN.getCode() == clothesSocial.getCommentState()){ + return new FebsResponse().fail().message("禁止评论"); + } + ClothesSocialComment entity = new ClothesSocialComment(); + entity.setMemberId(memberId); + entity.setSocialId(socialId); + entity.setComment(dto.getComment()); + ClothesSocialComment clothesSocialComment = clothesSocialCommentMapper.selectById(commentId); + if(ObjectUtil.isNotNull(clothesSocialComment)){ + entity.setParentId(clothesSocialComment.getParentId()); + entity.setCommentId(clothesSocialComment.getId()); + } + clothesSocialCommentMapper.insert(entity); + + return new FebsResponse().success().message("操作成功"); + } + + @Override + public FebsResponse allComment(ApiAllCommentDto dto) { + // 创建分页对象,传入当前页和每页大小 + Page<ApiAllCommentVo> page = new Page<>(dto.getPageNow(), dto.getPageSize()); + // 调用Mapper方法获取活动分页数据 + Page<ApiAllCommentVo> voPage = clothesSocialCommentMapper.selectPageInComment(page, dto); + List<ApiAllCommentVo> records = voPage.getRecords(); + if (CollUtil.isNotEmpty(records)){ + Set<Long> collect = records.stream().map(ApiAllCommentVo::getCommentId).collect(Collectors.toSet()); + List<ClothesSocialComment> clothesSocialComments = clothesSocialCommentMapper.selectList( + Wrappers.lambdaQuery(ClothesSocialComment.class) + .select(ClothesSocialComment::getParentId) + .in(ClothesSocialComment::getParentId, collect) + ); + if (CollUtil.isNotEmpty(clothesSocialComments)){ + Map<Long, Long> collect1 = clothesSocialComments.stream() + .collect(Collectors.groupingBy(ClothesSocialComment::getParentId, Collectors.counting())); + for (ApiAllCommentVo vo : records){ + vo.setCommentCnt(collect1.getOrDefault(vo.getCommentId(), 0L).intValue()); + } + } + } + return new FebsResponse().success().data(voPage); + } + public static void main(String[] args) { JSONObject jsonObject = new JSONObject(); jsonObject.putByPath("text", "123"); -- Gitblit v1.9.1