From b265f24f815e39001fccb4c4229ffb12271df811 Mon Sep 17 00:00:00 2001 From: ChenYan <3139166962@qq.com> Date: Fri, 17 Jan 2025 15:59:21 +0800 Subject: [PATCH] =?UTF-8?q?feat(communityCenter):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E8=AF=84=E8=AE=BA=E5=8C=BA=20=E7=82=B9=E8=B5=9E=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PublishCommissionController.java | 72 ++++++++ .../PublishCommissionLikeController.java | 26 +++ mcwl-communityCenter/pom.xml | 2 +- .../domain/PublicModelCommentVo.java | 67 +++++++ .../domain/PublishCommission.java | 52 ++++++ .../domain/PublishCommissionLike.java | 39 ++++ .../mapper/PublishCommissionLikeMapper.java | 17 ++ .../mapper/PublishCommissionMapper.java | 17 ++ .../service/PublishCommissionLikeService.java | 18 ++ .../service/PublishCommissionService.java | 29 +++ .../PublishCommissionLikeServiceImpl.java | 19 ++ .../impl/PublishCommissionServiceImpl.java | 167 ++++++++++++++++++ 12 files changed, 524 insertions(+), 1 deletion(-) create mode 100644 mcwl-admin/src/main/java/com/mcwl/web/controller/communityCenter/PublishCommissionController.java create mode 100644 mcwl-admin/src/main/java/com/mcwl/web/controller/communityCenter/PublishCommissionLikeController.java create mode 100644 mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/domain/PublicModelCommentVo.java create mode 100644 mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/domain/PublishCommission.java create mode 100644 mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/domain/PublishCommissionLike.java create mode 100644 mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/mapper/PublishCommissionLikeMapper.java create mode 100644 mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/mapper/PublishCommissionMapper.java create mode 100644 mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/service/PublishCommissionLikeService.java create mode 100644 mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/service/PublishCommissionService.java create mode 100644 mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/service/impl/PublishCommissionLikeServiceImpl.java create mode 100644 mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/service/impl/PublishCommissionServiceImpl.java diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/communityCenter/PublishCommissionController.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/communityCenter/PublishCommissionController.java new file mode 100644 index 0000000..76e2833 --- /dev/null +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/communityCenter/PublishCommissionController.java @@ -0,0 +1,72 @@ +package com.mcwl.web.controller.communityCenter; + +import com.mcwl.common.core.controller.BaseController; +import com.mcwl.communityCenter.domain.PublicModelCommentVo; +import com.mcwl.communityCenter.domain.PublishCommission; +import com.mcwl.communityCenter.service.PublishCommissionService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/**社群评论 + * @Author:ChenYan + * @Project:mcwl-ai + * @Package:com.mcwl.web.controller.communityCenter + * @Filename:PublishCommissionController + * @Description TODO + * @Date:2025/1/17 14:21 + */ +@RequestMapping("PublishCommission") +@RestController +public class PublishCommissionController extends BaseController { + + @Autowired + private PublishCommissionService publishCommissionService; + + + /** + * 获取评论 + * @param publishCommission + * @return + */ + @GetMapping("/comment/{Id}") + public List getComment(@RequestBody PublishCommission publishCommission) { + + return publishCommissionService.getComment(publishCommission); + } + +/** + * 添加评论 + * @param publishCommission + * @return + */ + @PostMapping("/save") + public ResponseEntity save(@RequestBody PublishCommission publishCommission) { + publishCommissionService.save(publishCommission); + return ResponseEntity.ok("评论成功"); + } + + + /** + * 点赞或取消点赞评论 + * @param userId 用户ID + * @param commentId 评论ID + * @return 更新后的点赞数 + */ + @PostMapping("/{commentId}/like") + public ResponseEntity toggleLike(@PathVariable Long commentId, @RequestParam Long userId) { + int updatedLikes = publishCommissionService.toggleLike(userId, commentId); + return ResponseEntity.ok(updatedLikes); + } + + + + @DeleteMapping("/{id}") + public ResponseEntity delete(@PathVariable Long id) { + publishCommissionService.removeById(id); + return ResponseEntity.ok("删除成功"); + } + +} diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/communityCenter/PublishCommissionLikeController.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/communityCenter/PublishCommissionLikeController.java new file mode 100644 index 0000000..e164f24 --- /dev/null +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/communityCenter/PublishCommissionLikeController.java @@ -0,0 +1,26 @@ +package com.mcwl.web.controller.communityCenter; + +import com.mcwl.common.core.controller.BaseController; +import com.mcwl.communityCenter.service.PublishCommissionLikeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/**社群评论区点赞 + * @Author:ChenYan + * @Project:mcwl-ai + * @Package:com.mcwl.web.controller.communityCenter + * @Filename:PublishCommissionLikeController + * @Description TODO + * @Date:2025/1/17 14:21 + */ +@RestController +@RequestMapping("PublishCommissionLike") +public class PublishCommissionLikeController extends BaseController { + + @Autowired + private PublishCommissionLikeService publishCommissionLikeService; + + + +} diff --git a/mcwl-communityCenter/pom.xml b/mcwl-communityCenter/pom.xml index 32d525a..cabc991 100644 --- a/mcwl-communityCenter/pom.xml +++ b/mcwl-communityCenter/pom.xml @@ -28,4 +28,4 @@ - \ No newline at end of file + diff --git a/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/domain/PublicModelCommentVo.java b/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/domain/PublicModelCommentVo.java new file mode 100644 index 0000000..6db6fda --- /dev/null +++ b/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/domain/PublicModelCommentVo.java @@ -0,0 +1,67 @@ +package com.mcwl.communityCenter.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.mcwl.resource.domain.vo.ModelCommentVo; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * 评论区评论 + */ + +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Data +public class PublicModelCommentVo { + + /** + * 用户id + */ + private Long userId; + + /** + * 用户名 + */ + private String userName; + + /** + * 用户头像 + */ + private String userAvatar; + + /** + * 评论id + */ + private Long commentId; + + /** + * 评论内容 + */ + private String content; + + /** + * 子评论 + */ + private List contentList = new ArrayList<>(); + + /** + * 评论点赞数 + */ + private Integer likeNum; + + /** + * 评论时间 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; + +} diff --git a/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/domain/PublishCommission.java b/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/domain/PublishCommission.java new file mode 100644 index 0000000..2563b27 --- /dev/null +++ b/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/domain/PublishCommission.java @@ -0,0 +1,52 @@ +package com.mcwl.communityCenter.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.mcwl.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/**社群评论区 + * @Author:ChenYan + * @Project:mcwl-ai + * @Package:com.mcwl.web.controller.communityCenter + * @Filename:PublishCommission + * @Description TODO + * @Date:2025/1/17 14:11 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("cc_publish_commission") +public class PublishCommission extends BaseEntity { + /** + * id + */ + @TableId + private Long id; + /** + * 租户id + */ + private Long tenantId; + /** + * 用户id + */ + private Long userId; + /** + * 内容 + */ + private String content; + /** + * 父评论id + */ + private Long parentId; + /** + * 点赞数 + */ + private Integer likeNum; + /** + * 删除标志(0代表存在 2代表删除) + */ + private String delFlag; + + +} diff --git a/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/domain/PublishCommissionLike.java b/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/domain/PublishCommissionLike.java new file mode 100644 index 0000000..294c53b --- /dev/null +++ b/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/domain/PublishCommissionLike.java @@ -0,0 +1,39 @@ +package com.mcwl.communityCenter.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.mcwl.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/**社群评论点赞 + * @Author:ChenYan + * @Project:mcwl-ai + * @Package:com.mcwl.communityCenter.domain + * @Filename:PublishCommissionLike + * @Description TODO + * @Date:2025/1/17 14:16 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("cc_publish_commission_like") +public class PublishCommissionLike extends BaseEntity { + + /** + * 评论点赞id + */ + @TableId + private Long id; + /** + * 用户id + */ + private Long userId; + /** + * 社群id + */ + private Long communityId; + /** + * 评论id + */ + private Long publishCommissionId; +} diff --git a/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/mapper/PublishCommissionLikeMapper.java b/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/mapper/PublishCommissionLikeMapper.java new file mode 100644 index 0000000..8822558 --- /dev/null +++ b/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/mapper/PublishCommissionLikeMapper.java @@ -0,0 +1,17 @@ +package com.mcwl.communityCenter.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.mcwl.communityCenter.domain.PublishCommissionLike; +import org.apache.ibatis.annotations.Mapper; + +/** + * @Author:ChenYan + * @Project:mcwl-ai + * @Package:com.mcwl.communityCenter.mapper + * @Filename:PublishCommissionLikeMapper + * @Description TODO + * @Date:2025/1/17 14:26 + */ +@Mapper +public interface PublishCommissionLikeMapper extends BaseMapper { +} diff --git a/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/mapper/PublishCommissionMapper.java b/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/mapper/PublishCommissionMapper.java new file mode 100644 index 0000000..8e0c19a --- /dev/null +++ b/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/mapper/PublishCommissionMapper.java @@ -0,0 +1,17 @@ +package com.mcwl.communityCenter.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.mcwl.communityCenter.domain.PublishCommission; +import org.apache.ibatis.annotations.Mapper; + +/** + * @Author:ChenYan + * @Project:mcwl-ai + * @Package:com.mcwl.communityCenter.mapper + * @Filename:PublishCommissionMapper + * @Description TODO + * @Date:2025/1/17 14:29 + */ +@Mapper +public interface PublishCommissionMapper extends BaseMapper { +} diff --git a/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/service/PublishCommissionLikeService.java b/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/service/PublishCommissionLikeService.java new file mode 100644 index 0000000..f502dbb --- /dev/null +++ b/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/service/PublishCommissionLikeService.java @@ -0,0 +1,18 @@ +package com.mcwl.communityCenter.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.mcwl.communityCenter.domain.PublishCommissionLike; +import org.springframework.stereotype.Service; + +/** + * @Author:ChenYan + * @Project:mcwl-ai + * @Package:com.mcwl.communityCenter.service + * @Filename:PublishCommissionLikeService + * @Description TODO + * @Date:2025/1/17 14:23 + */ +@Service +public interface PublishCommissionLikeService extends IService { + +} diff --git a/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/service/PublishCommissionService.java b/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/service/PublishCommissionService.java new file mode 100644 index 0000000..862b86f --- /dev/null +++ b/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/service/PublishCommissionService.java @@ -0,0 +1,29 @@ +package com.mcwl.communityCenter.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.mcwl.communityCenter.domain.PublicModelCommentVo; +import com.mcwl.communityCenter.domain.PublishCommission; + +import java.util.List; + +/** + * @Author:ChenYan + * @Project:mcwl-ai + * @Package:com.mcwl.communityCenter.service + * @Filename:PublishCommissionService + * @Description TODO + * @Date:2025/1/17 14:27 + */ + +public interface PublishCommissionService extends IService { + /** + * 点赞或取消点赞评论 + * @param userId 用户ID + * @param commentId 评论ID + * @return 更新后的点赞数 + */ + int toggleLike(Long userId, Long commentId); + + List getComment(PublishCommission publishCommission); + +} diff --git a/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/service/impl/PublishCommissionLikeServiceImpl.java b/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/service/impl/PublishCommissionLikeServiceImpl.java new file mode 100644 index 0000000..16e4adf --- /dev/null +++ b/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/service/impl/PublishCommissionLikeServiceImpl.java @@ -0,0 +1,19 @@ +package com.mcwl.communityCenter.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.mcwl.communityCenter.domain.PublishCommissionLike; +import com.mcwl.communityCenter.mapper.PublishCommissionLikeMapper; +import com.mcwl.communityCenter.service.PublishCommissionLikeService; +import org.springframework.stereotype.Service; + +/** + * @Author:ChenYan + * @Project:mcwl-ai + * @Package:com.mcwl.communityCenter.service.impl + * @Filename:PublishCommissionLikeServiceImpl + * @Description TODO + * @Date:2025/1/17 14:25 + */ +@Service +public class PublishCommissionLikeServiceImpl extends ServiceImplimplements PublishCommissionLikeService { +} diff --git a/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/service/impl/PublishCommissionServiceImpl.java b/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/service/impl/PublishCommissionServiceImpl.java new file mode 100644 index 0000000..9cd0ab2 --- /dev/null +++ b/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/service/impl/PublishCommissionServiceImpl.java @@ -0,0 +1,167 @@ +package com.mcwl.communityCenter.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.mcwl.common.core.domain.entity.SysUser; +import com.mcwl.communityCenter.domain.PublicModelCommentVo; +import com.mcwl.communityCenter.domain.PublishCommission; +import com.mcwl.communityCenter.domain.PublishCommissionLike; +import com.mcwl.communityCenter.mapper.PublishCommissionLikeMapper; +import com.mcwl.communityCenter.mapper.PublishCommissionMapper; +import com.mcwl.communityCenter.service.PublishCommissionService; +import com.mcwl.resource.domain.ModelComment; +import com.mcwl.resource.domain.vo.ModelCommentVo; +import com.mcwl.system.service.ISysUserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.validation.constraints.NotNull; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +/** + * @Author:ChenYan + * @Project:mcwl-ai + * @Package:com.mcwl.communityCenter.service.impl + * @Filename:PublishCommissionServiceImpl + * @Description TODO + * @Date:2025/1/17 14:28 + */ +@Service +public class PublishCommissionServiceImpl extends ServiceImpl implements PublishCommissionService { + @Autowired + private PublishCommissionMapper publishCommentMapper; + @Autowired + private PublishCommissionLikeMapper likeMapper; + + @Autowired + private ISysUserService sysUserService; + + /** + * 点赞或取消点赞评论 + * @param userId 用户ID + * @param commentId 评论ID + * @return 更新后的点赞数 + */ + @Override + @Transactional + public int toggleLike(Long userId, Long commentId) { + // 检查评论是否存在 + PublishCommission comment = this.getById(commentId); + if (comment == null) { + throw new RuntimeException("Comment not found"); + } + + // 检查用户是否已经点赞 + PublishCommissionLike like = likeMapper.selectOne( + new LambdaQueryWrapper() + .eq(PublishCommissionLike::getUserId, userId) + .eq(PublishCommissionLike::getPublishCommissionId, commentId)); + + if (like == null) { // 如果没有找到点赞记录,则进行点赞 + like = new PublishCommissionLike(); + like.setUserId(userId); + like.setCommunityId(1L); // 假设有一个默认的社区ID + like.setPublishCommissionId(commentId); + likeMapper.insert(like); + + // 更新评论的点赞数 + comment.setLikeNum(comment.getLikeNum() == null ? 1 : comment.getLikeNum() + 1); + } else { // 如果找到了点赞记录,则取消点赞 + likeMapper.deleteById(like.getId()); + + // 更新评论的点赞数 + comment.setLikeNum(Math.max(0, comment.getLikeNum() - 1)); + } + + // 保存更新后的评论信息 + this.updateById(comment); + + return comment.getLikeNum(); + } + + @Override + public List getComment(PublishCommission publishCommission) { + List CommentVoList = new ArrayList<>(); + + // 查询所有父评论 + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(PublishCommission::getTenantId, publishCommission.getTenantId()) + .isNull(PublishCommission::getParentId) + .orderByDesc(PublishCommission::getCreateTime); + // 添加父评论 + List modelCommentList = publishCommentMapper.selectList(lqw); + for (PublishCommission modelComment : modelCommentList) { + PublicModelCommentVo modelCommentVo = getModelCommentVo(modelComment); + CommentVoList.add(modelCommentVo); + } + + return CommentVoList; + } + + + /** + * 构建ModelCommentVo对象 + * + * @param Comment 父评论对象 + * @return ModelCommentVo对象 + */ + @NotNull + private PublicModelCommentVo getModelCommentVo(PublishCommission Comment) { + Long userId = Comment.getUserId(); + SysUser sysUser = sysUserService.selectUserById(userId); + + // 构建ModelCommentVo对象 + PublicModelCommentVo CommentVo = new PublicModelCommentVo(); + CommentVo.setUserId(userId); + CommentVo.setUserName(sysUser.getUserName()); + CommentVo.setUserAvatar(sysUser.getAvatar()); + CommentVo.setCommentId(Comment.getId()); + CommentVo.setContent(Comment.getContent()); + // 查询子评论 + CommentVo.setContentList(getContentList(Comment.getId())); + CommentVo.setLikeNum(Comment.getLikeNum()); + CommentVo.setCreateTime(Comment.getCreateTime()); + return CommentVo; + } + + + /** + * 递归查询子评论 + * + * @param modelCommentId 父评论id + * @return List + */ + private List getContentList(Long modelCommentId) { + List CommentVoList = new ArrayList<>(); + if (Objects.isNull(modelCommentId)) { + return CommentVoList; + } + + // 查询子评论 + LambdaQueryWrapper lqw = new LambdaQueryWrapper() + .eq(PublishCommission::getParentId, modelCommentId) + .orderByDesc(PublishCommission::getCreateTime); + + List CommentList = publishCommentMapper.selectList(lqw); + + for (PublishCommission Comment : CommentList) { + Long userId = Comment.getUserId(); + SysUser sysUser = sysUserService.selectUserById(userId); + PublicModelCommentVo CommentVo = new PublicModelCommentVo(); + CommentVo.setUserId(userId); + CommentVo.setUserName(sysUser.getUserName()); + CommentVo.setUserAvatar(sysUser.getAvatar()); + CommentVo.setCommentId(Comment.getId()); + CommentVo.setContent(Comment.getContent()); + CommentVo.setLikeNum(Comment.getLikeNum()); + CommentVo.setCreateTime(Comment.getCreateTime()); + + + CommentVoList.add(CommentVo); + } + return CommentVoList; + } +}