From eaf26c265f8882b2e100428d942ac377330cc114 Mon Sep 17 00:00:00 2001
From: inleft <inleft@qq.com>
Date: Thu, 04 Aug 2022 18:47:07 +0800
Subject: [PATCH] 新增:消息盒子功能

---
 snowy-main/src/main/java/vip/xiaonuo/modular/blogarticlecomment/controller/BlogArticleCommentOutsideController.java |   99 +++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 87 insertions(+), 12 deletions(-)

diff --git a/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticlecomment/controller/BlogArticleCommentOutsideController.java b/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticlecomment/controller/BlogArticleCommentOutsideController.java
index 194209a..0420a93 100644
--- a/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticlecomment/controller/BlogArticleCommentOutsideController.java
+++ b/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticlecomment/controller/BlogArticleCommentOutsideController.java
@@ -28,6 +28,7 @@
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.lang.Dict;
+import cn.hutool.core.util.PageUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.extra.template.Template;
 import cn.hutool.extra.template.TemplateConfig;
@@ -38,6 +39,7 @@
 import org.springframework.web.bind.annotation.*;
 import vip.xiaonuo.core.annotion.BusinessLog;
 import vip.xiaonuo.core.consts.MyConstant;
+import vip.xiaonuo.core.context.constant.ConstantContextHolder;
 import vip.xiaonuo.core.email.MailSender;
 import vip.xiaonuo.core.email.modular.model.SendMailParam;
 import vip.xiaonuo.core.enums.LogAnnotionOpTypeEnum;
@@ -70,7 +72,7 @@
     private BlogArticleService blogArticleService;
 
     @Resource
-    private BlogArticleCommentService blogArticleCommentService;
+    private BlogArticleCommentService commentService;
 
 
     @Resource
@@ -80,6 +82,13 @@
     @BusinessLog(title = "外部blog系统_blog留言/评论_增加", opType = LogAnnotionOpTypeEnum.ADD)
     public ResponseData add(@RequestBody @Validated(BlogArticleCommentAddDto.add.class) BlogArticleCommentAddDto addDto) {
         BlogArticle checkArticle = null;
+
+        //自我认证
+        if (MyConstant.myIds.contains(addDto.getVisitorNickName())) {
+            if (StrUtil.isEmpty(addDto.getAuthCode()) || !addDto.getAuthCode().equals(ConstantContextHolder.getAuthCode())) {
+                throw new BlogException("不要成为我,你就是真的自己");
+            }
+        }
 
         if (MyConstant.Yes.equals(addDto.getIsReceiveMail()) && StrUtil.isEmpty(addDto.getVisitorEmail())) {
             throw new BlogException("如果是想接收通知的话,你可能需要填上一个邮箱..");
@@ -104,31 +113,36 @@
         insert.setIsEnable(MyConstant.Yes);
         insert.setIsReceiveCallback(addDto.getIsReceiveMail());
 
-        blogArticleCommentService.save(insert);
+        //自己留言已读
+        if (MyConstant.myIds.contains(addDto.getVisitorNickName())) {
+            insert.setIsRead(MyConstant.Yes);
+        }
+
+        commentService.save(insert);
 
         if (addDto.getReplyId() == null || addDto.getReplyId() == 0L) {
             //这里为根节点,预留通知我
             return new SuccessResponseData();
         }
 
-        BlogArticleComment lastComment = blogArticleCommentService.getById(addDto.getReplyId());
+        BlogArticleComment lastComment = commentService.getById(addDto.getReplyId());
 
         if (lastComment == null) {
             return new SuccessResponseData();
         }
 
-        //前一个留言接收邮件回复(发送给我的本体可以跳过.如果是给评论者自己的追加可以跳过)
+        //前一个留言接收邮件回复(如果是给评论者自己的追加可以跳过)
         if (MyConstant.Yes.equals(lastComment.getIsReceiveCallback())
                 && StrUtil.isNotEmpty(lastComment.getVisitorEmail())
-                && !lastComment.getVisitorNickName().equals(MyConstant.inleft)
-                && !lastComment.getVisitorEmail().equals(MyConstant.email)
+//                && !lastComment.getVisitorNickName().equals(MyConstant.inleft)
+//                && !lastComment.getVisitorEmail().equals(MyConstant.email)
                 && !lastComment.getVisitorNickName().equals(addDto.getVisitorNickName())
                 && !lastComment.getVisitorEmail().equals(addDto.getVisitorEmail())) {
 
             TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig("templates", TemplateConfig.ResourceMode.CLASSPATH));
             Template template = engine.getTemplate("emailReplyModel.ftl");
 
-            String title = "碎碎念";
+            String title = MyConstant.msgTitle;
             String address;
             //跳转地址
             if (addDto.getCommentType().equals(MyConstant.CommentType.type_1)) {
@@ -171,7 +185,7 @@
         Page queryPage = new Page<>(queryDto.getPageNo(), queryDto.getPageSize());
 
 
-        List<BlogArticleComment> commentList = blogArticleCommentService.lambdaQuery()
+        List<BlogArticleComment> commentList = commentService.lambdaQuery()
                 .eq(queryDto.getArticleId() != null, BlogArticleComment::getArticleId, queryDto.getArticleId())
                 .eq(BlogArticleComment::getCommentType, queryDto.getArticleId() == null ? MyConstant.CommentType.type_1 : MyConstant.CommentType.type_2)
                 .eq(BlogArticleComment::getIsCheck, MyConstant.Yes)
@@ -185,7 +199,7 @@
                     BlogCommentVo vo = new BlogCommentVo();
                     BeanUtil.copyProperties(e, vo);
                     vo.setIsHasNext(MyConstant.No);
-                    List<BlogCommentVo> replyList = blogArticleCommentService.getReplyListById(e.getId(), limitCount);
+                    List<BlogCommentVo> replyList = commentService.getReplyListById(e.getId(), limitCount);
                     vo.setReplyList(replyList);
 
                     if (e.getAuthStatus().equals(MyConstant.AuthStatus.privateCode)) {
@@ -193,7 +207,7 @@
                     }
 
                     if (CollUtil.isNotEmpty(replyList)
-                            && blogArticleCommentService.lambdaQuery()
+                            && commentService.lambdaQuery()
                             .eq(BlogArticleComment::getParentId, e.getId())
                             .eq(BlogArticleComment::getIsCheck, MyConstant.Yes)
                             .eq(BlogArticleComment::getIsEnable, MyConstant.Yes)
@@ -211,12 +225,12 @@
     @GetMapping("/blogComment/queryBlogCommentSubList")
     @BusinessLog(title = "外部blog系统_blog留言/评论子列表_查询", opType = LogAnnotionOpTypeEnum.QUERY)
     public ResponseData queryBlogCommentSubList(BlogCommentQueryDto queryDto) {
-        if (queryDto.getArticleId() != null && blogArticleCommentService.getById(queryDto.getCommentId()) == null) {
+        if (queryDto.getArticleId() != null && commentService.getById(queryDto.getCommentId()) == null) {
             throw new BlogException("查询不到相关评论");
         }
 
 
-        List<BlogCommentVo> replyList = blogArticleCommentService.getReplyListById(queryDto.getCommentId(), null);
+        List<BlogCommentVo> replyList = commentService.getReplyListById(queryDto.getCommentId(), null);
 //        for (BlogCommentVo vo : replyList) {
 //            vo.setIsHasNext(MyConstant.No);
 //            if (vo.getAuthStatus().equals(MyConstant.AuthStatus.privateCode)) {
@@ -227,6 +241,67 @@
         return new SuccessResponseData(replyList);
     }
 
+    @GetMapping("/blogComment/history")
+    @BusinessLog(title = "外部blog系统_blog留言/最近留言查询", opType = LogAnnotionOpTypeEnum.QUERY)
+    public ResponseData history(BlogCommentQueryDto queryDto) {
+        Page queryPage = new Page<>(queryDto.getPageNo(), queryDto.getPageSize());
+
+        //查询最近未读留言,无穷分页,(注意*号隐蔽,登录可见)
+        int unreadCommentListCount = commentService.lambdaQuery()
+                .eq(BlogArticleComment::getIsCheck, MyConstant.Yes)
+                .eq(BlogArticleComment::getIsEnable, MyConstant.Yes)
+                .eq(BlogArticleComment::getIsRead, MyConstant.No)
+                .count();
+
+        //取出所有未读消息+最多10条已读消息
+        long limitTotal = unreadCommentListCount + MyConstant.limitRead;
+
+        //最大页数不能超出限制
+        if (PageUtil.getEnd(queryDto.getPageNo() - 1, queryDto.getPageSize()) > limitTotal
+                && PageUtil.getEnd(queryDto.getPageNo() - 2, queryDto.getPageSize()) > limitTotal) {
+            queryPage.setMaxLimit(limitTotal);
+            return new SuccessResponseData(queryPage);
+        }
+
+        //当前页超出起始页,未达尾页, 限制当前查询个数
+        long limitSize = queryDto.getPageSize();
+        if (PageUtil.getEnd(queryDto.getPageNo() - 1, queryDto.getPageSize()) > limitTotal) {
+            limitSize = limitTotal % queryDto.getPageSize();
+        }
+
+        List<BlogArticleComment> commentList = commentService.lambdaQuery()
+                .eq(BlogArticleComment::getIsCheck, MyConstant.Yes)
+                .eq(BlogArticleComment::getIsEnable, MyConstant.Yes)
+                .orderByAsc(BlogArticleComment::getIsRead)
+                .orderByDesc(BlogArticleComment::getCreateDate)
+                .page(queryPage).getRecords();
+
+        //queryPage.setTotal(limitTotal - (limitTotal % queryDto.getPageSize()));
+        queryPage.setTotal(limitTotal);
+        List<BlogCommentVo> res = commentList.stream()
+                .limit(limitSize)
+                .map(e -> {
+                            BlogCommentVo vo = new BlogCommentVo();
+                            BeanUtil.copyProperties(e, vo);
+                            if (e.getAuthStatus().equals(MyConstant.AuthStatus.privateCode)) {
+                                vo.setCommentContent(MyConstant.privateComment);
+                            }
+                            if (MyConstant.CommentType.type_2 == e.getCommentType()) {
+                                vo.setArticleTitle(blogArticleService.lambdaQuery()
+                                        .eq(BlogArticle::getId, e.getArticleId())
+                                        .select(BlogArticle::getTitle).one().getTitle());
+                            } else {
+                                vo.setArticleTitle(MyConstant.msgTitle);
+                            }
+
+                            return vo;
+                        }
+                ).collect(Collectors.toList());
+
+        queryPage.setRecords(res);
+        return new SuccessResponseData(queryPage);
+    }
+
     //    @GetMapping("/blogComment/test")
     public ResponseData test() {
 

--
Gitblit v1.9.1