From f639b5bf8a20b72b782558ca01f086a4ed54c520 Mon Sep 17 00:00:00 2001
From: inleft <inleft@qq.com>
Date: Thu, 14 Jul 2022 15:27:35 +0800
Subject: [PATCH] 添加邮件回复功能

---
 snowy-main/src/main/java/vip/xiaonuo/modular/blogarticlecomment/controller/BlogArticleCommentOutsideController.java |  122 ++++++++++++++++++++++++++++++++++++----
 1 files changed, 109 insertions(+), 13 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 86ea2a4..194209a 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
@@ -26,15 +26,25 @@
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.lang.Dict;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.extra.template.Template;
+import cn.hutool.extra.template.TemplateConfig;
+import cn.hutool.extra.template.TemplateEngine;
+import cn.hutool.extra.template.TemplateUtil;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import vip.xiaonuo.core.annotion.BusinessLog;
 import vip.xiaonuo.core.consts.MyConstant;
+import vip.xiaonuo.core.email.MailSender;
+import vip.xiaonuo.core.email.modular.model.SendMailParam;
 import vip.xiaonuo.core.enums.LogAnnotionOpTypeEnum;
 import vip.xiaonuo.core.exception.BlogException;
 import vip.xiaonuo.core.pojo.response.ResponseData;
 import vip.xiaonuo.core.pojo.response.SuccessResponseData;
+import vip.xiaonuo.modular.blogarticle.entity.BlogArticle;
 import vip.xiaonuo.modular.blogarticle.service.BlogArticleService;
 import vip.xiaonuo.modular.blogarticlecomment.entity.BlogArticleComment;
 import vip.xiaonuo.modular.blogarticlecomment.entity.BlogCommentVo;
@@ -59,29 +69,93 @@
     @Resource
     private BlogArticleService blogArticleService;
 
-
     @Resource
     private BlogArticleCommentService blogArticleCommentService;
 
 
+    @Resource
+    private MailSender mailSender;
+
     @PostMapping("/blogComment/add")
     @BusinessLog(title = "外部blog系统_blog留言/评论_增加", opType = LogAnnotionOpTypeEnum.ADD)
     public ResponseData add(@RequestBody @Validated(BlogArticleCommentAddDto.add.class) BlogArticleCommentAddDto addDto) {
+        BlogArticle checkArticle = null;
+
+        if (MyConstant.Yes.equals(addDto.getIsReceiveMail()) && StrUtil.isEmpty(addDto.getVisitorEmail())) {
+            throw new BlogException("如果是想接收通知的话,你可能需要填上一个邮箱..");
+        }
+
         if (addDto.getCommentType().equals(MyConstant.CommentType.type_2)) {
             if (addDto.getArticleId() == null) {
                 throw new BlogException("评论类型为日志评论,日志id不能为空");
             }
-            if (blogArticleService.getById(addDto.getId()) == null) {
+            checkArticle = blogArticleService.getById(addDto.getArticleId());
+            if (checkArticle == null) {
                 throw new BlogException("查询不到相关日志");
+            }
+
+            if (checkArticle.getIsAllowedComment().equals(MyConstant.No)) {
+                throw new BlogException("该日志评论已经关闭..");
             }
         }
         BlogArticleComment insert = new BlogArticleComment();
         BeanUtil.copyProperties(addDto, insert);
-        insert.setIsCheck(MyConstant.No);
+        insert.setIsCheck(MyConstant.Yes);
         insert.setIsEnable(MyConstant.Yes);
         insert.setIsReceiveCallback(addDto.getIsReceiveMail());
 
         blogArticleCommentService.save(insert);
+
+        if (addDto.getReplyId() == null || addDto.getReplyId() == 0L) {
+            //这里为根节点,预留通知我
+            return new SuccessResponseData();
+        }
+
+        BlogArticleComment lastComment = blogArticleCommentService.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(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 address;
+            //跳转地址
+            if (addDto.getCommentType().equals(MyConstant.CommentType.type_1)) {
+                //留言板
+                address = String.format(MyConstant.url_1, insert.getId());
+            } else {
+                //文章详情
+                address = String.format(MyConstant.url_2, addDto.getArticleId(), insert.getId());
+                title = checkArticle.getTitle();
+            }
+
+            Dict dict = Dict.create()
+                    .set("lastGuest", lastComment.getVisitorNickName())
+                    .set("commentContent", lastComment.getCommentContent())
+                    .set("address", address)
+                    .set("title", title)
+                    .set("sender", addDto.getVisitorNickName())
+                    .set("sendContent", addDto.getCommentContent());
+            String result = template.render(dict);
+
+            SendMailParam param = new SendMailParam();
+            param.setContent(result);
+            param.setTitle("先前您在 [inleft的小木屋] 的留言有了新的回复!\n");
+            param.setTo(lastComment.getVisitorEmail());
+            mailSender.sendMailHtml(param);
+        }
+
 
         return new SuccessResponseData();
     }
@@ -106,8 +180,7 @@
                 .orderByDesc(BlogArticleComment::getCreateDate)
                 .page(queryPage).getRecords();
 
-        int limitCount = 5;
-        String privateComment = "******";
+        int limitCount = 2;
         List<BlogCommentVo> res = commentList.stream().map(e -> {
                     BlogCommentVo vo = new BlogCommentVo();
                     BeanUtil.copyProperties(e, vo);
@@ -116,7 +189,7 @@
                     vo.setReplyList(replyList);
 
                     if (e.getAuthStatus().equals(MyConstant.AuthStatus.privateCode)) {
-                        vo.setCommentContent(privateComment);
+                        vo.setCommentContent(MyConstant.privateComment);
                     }
 
                     if (CollUtil.isNotEmpty(replyList)
@@ -142,16 +215,39 @@
             throw new BlogException("查询不到相关评论");
         }
 
-        String privateComment = "(悄悄话已隐藏)******";
 
         List<BlogCommentVo> replyList = blogArticleCommentService.getReplyListById(queryDto.getCommentId(), null);
-        for (BlogCommentVo vo : replyList) {
-            vo.setIsHasNext(MyConstant.No);
-            if (vo.getAuthStatus().equals(MyConstant.AuthStatus.privateCode)) {
-                vo.setCommentContent(privateComment);
-            }
-        }
+//        for (BlogCommentVo vo : replyList) {
+//            vo.setIsHasNext(MyConstant.No);
+//            if (vo.getAuthStatus().equals(MyConstant.AuthStatus.privateCode)) {
+//                vo.setCommentContent(MyConstant.privateComment);
+//            }
+//        }
 
         return new SuccessResponseData(replyList);
     }
+
+    //    @GetMapping("/blogComment/test")
+    public ResponseData test() {
+
+
+        TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig("templates", TemplateConfig.ResourceMode.CLASSPATH));
+        Template template = engine.getTemplate("emailReplyModel.ftl");
+        Dict dict = Dict.create()
+                .set("lastGuest", "回复人")
+                .set("commentContent", "评论内容")
+                .set("address", "http://blog.inleft.com")
+                .set("title", "回复标题")
+                .set("sendTime", DateUtil.now())
+                .set("sender", "发送人")
+                .set("sendContent", "发送内容");
+        String result = template.render(dict);
+
+        SendMailParam param = new SendMailParam();
+        param.setContent(result);
+        param.setTitle("先前您在 [inleft的小木屋] 的留言有了新的回复!\n");
+        param.setTo("1479853828@qq.com");
+        mailSender.sendMailHtml(param);
+        return new SuccessResponseData();
+    }
 }

--
Gitblit v1.9.1