diff --git a/aurora-springboot/src/main/java/com/aurora/constant/CommonConstant.java b/aurora-springboot/src/main/java/com/aurora/constant/CommonConstant.java index 953f3df..1e7f774 100644 --- a/aurora-springboot/src/main/java/com/aurora/constant/CommonConstant.java +++ b/aurora-springboot/src/main/java/com/aurora/constant/CommonConstant.java @@ -40,4 +40,6 @@ public interface CommonConstant { String COMMENT_REMIND = "评论提醒"; + String MENTION_REMIND = "@提醒"; + } diff --git a/aurora-springboot/src/main/java/com/aurora/consumer/CommentNoticeConsumer.java b/aurora-springboot/src/main/java/com/aurora/consumer/CommentNoticeConsumer.java index c1f7b7a..16bda3c 100644 --- a/aurora-springboot/src/main/java/com/aurora/consumer/CommentNoticeConsumer.java +++ b/aurora-springboot/src/main/java/com/aurora/consumer/CommentNoticeConsumer.java @@ -9,7 +9,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import static com.aurora.constant.CommonConstant.*; import static com.aurora.constant.RabbitMQConstant.EMAIL_QUEUE; @Component @@ -21,12 +20,8 @@ public class CommentNoticeConsumer { @RabbitHandler public void process(byte[] data) { - EmailDTO mailDTO = JSON.parseObject(new String(data), EmailDTO.class); - if (CAPTCHA.equals(mailDTO.getSubject()) || CHECK_REMIND.equals(mailDTO.getSubject())) { - emailUtil.sendSimpleMail(mailDTO); - } - if (COMMENT_REMIND.equals(mailDTO.getSubject())) { - emailUtil.sendHtmlMail(mailDTO); - } + EmailDTO emailDTO = JSON.parseObject(new String(data), EmailDTO.class); + emailUtil.sendHtmlMail(emailDTO); } + } diff --git a/aurora-springboot/src/main/java/com/aurora/consumer/SubscribeConsumer.java b/aurora-springboot/src/main/java/com/aurora/consumer/SubscribeConsumer.java index 20ec5c6..e028bdc 100644 --- a/aurora-springboot/src/main/java/com/aurora/consumer/SubscribeConsumer.java +++ b/aurora-springboot/src/main/java/com/aurora/consumer/SubscribeConsumer.java @@ -15,7 +15,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; import static com.aurora.constant.CommonConstant.TRUE; @@ -45,14 +47,20 @@ public class SubscribeConsumer { List emails = users.stream().map(UserInfo::getEmail).collect(Collectors.toList()); for (String email : emails) { EmailDTO emailDTO = new EmailDTO(); + Map map = new HashMap<>(); emailDTO.setEmail(email); emailDTO.setSubject("文章订阅"); + emailDTO.setTemplate("common.html"); + String url = websiteUrl + "/articles/" + articleId; if (article.getUpdateTime() == null) { - emailDTO.setContent("花未眠的个人博客发布了新的文章,地址:" + websiteUrl + "/articles/" + articleId); + map.put("content", "花未眠的个人博客发布了新的文章," + + "点击查看"); } else { - emailDTO.setContent("花未眠的个人博客对《" + article.getArticleTitle() + "》进行了更新,地址:" + websiteUrl + "/articles/" + articleId); + map.put("content", "花未眠的个人博客对《" + article.getArticleTitle() + "》进行了更新," + + "点击查看"); } - emailUtil.sendSimpleMail(emailDTO); + emailDTO.setCommentMap(map); + emailUtil.sendHtmlMail(emailDTO); } } diff --git a/aurora-springboot/src/main/java/com/aurora/controller/CommentController.java b/aurora-springboot/src/main/java/com/aurora/controller/CommentController.java index db93d70..fbd0fd6 100644 --- a/aurora-springboot/src/main/java/com/aurora/controller/CommentController.java +++ b/aurora-springboot/src/main/java/com/aurora/controller/CommentController.java @@ -25,7 +25,7 @@ public class CommentController { @Autowired private CommentService commentService; - @AccessLimit(seconds = 60,maxCount = 3) + @AccessLimit(seconds = 60, maxCount = 3) @OptLog(optType = SAVE) @ApiOperation("添加评论") @PostMapping("/comments/save") diff --git a/aurora-springboot/src/main/java/com/aurora/interceptor/AccessLimitInterceptor.java b/aurora-springboot/src/main/java/com/aurora/interceptor/AccessLimitInterceptor.java index 576a914..94dece4 100644 --- a/aurora-springboot/src/main/java/com/aurora/interceptor/AccessLimitInterceptor.java +++ b/aurora-springboot/src/main/java/com/aurora/interceptor/AccessLimitInterceptor.java @@ -36,7 +36,7 @@ public class AccessLimitInterceptor implements HandlerInterceptor { if (accessLimit != null) { long seconds = accessLimit.seconds(); int maxCount = accessLimit.maxCount(); - String key = IpUtil.getIpAddress(httpServletRequest) + hm.getMethod().getName(); + String key = IpUtil.getIpAddress(httpServletRequest) + "-" + hm.getMethod().getName(); try { long q = redisService.incrExpire(key, seconds); if (q > maxCount) { diff --git a/aurora-springboot/src/main/java/com/aurora/model/dto/EmailDTO.java b/aurora-springboot/src/main/java/com/aurora/model/dto/EmailDTO.java index ef60921..47b040b 100644 --- a/aurora-springboot/src/main/java/com/aurora/model/dto/EmailDTO.java +++ b/aurora-springboot/src/main/java/com/aurora/model/dto/EmailDTO.java @@ -17,8 +17,6 @@ public class EmailDTO { private String subject; - private String content; - private Map commentMap; private String template; diff --git a/aurora-springboot/src/main/java/com/aurora/service/impl/ArticleServiceImpl.java b/aurora-springboot/src/main/java/com/aurora/service/impl/ArticleServiceImpl.java index 0225f84..cc519e8 100644 --- a/aurora-springboot/src/main/java/com/aurora/service/impl/ArticleServiceImpl.java +++ b/aurora-springboot/src/main/java/com/aurora/service/impl/ArticleServiceImpl.java @@ -203,9 +203,7 @@ public class ArticleServiceImpl extends ServiceImpl impl } } List archiveDTOs = new ArrayList<>(); - map.forEach((key, value) -> { - archiveDTOs.add(ArchiveDTO.builder().Time(key).articles(value).build()); - }); + map.forEach((key, value) -> archiveDTOs.add(ArchiveDTO.builder().Time(key).articles(value).build())); archiveDTOs.sort((o1, o2) -> { String[] o1s = o1.getTime().split("-"); String[] o2s = o2.getTime().split("-"); diff --git a/aurora-springboot/src/main/java/com/aurora/service/impl/CommentServiceImpl.java b/aurora-springboot/src/main/java/com/aurora/service/impl/CommentServiceImpl.java index 90ccbea..d30a7b3 100644 --- a/aurora-springboot/src/main/java/com/aurora/service/impl/CommentServiceImpl.java +++ b/aurora-springboot/src/main/java/com/aurora/service/impl/CommentServiceImpl.java @@ -119,9 +119,7 @@ public class CommentServiceImpl extends ServiceImpl impl List replyDTOS = commentMapper.listReplies(commentIds); Map> replyMap = replyDTOS.stream() .collect(Collectors.groupingBy(ReplyDTO::getParentId)); - commentDTOs.forEach(item -> { - item.setReplyDTOs(replyMap.get(item.getId())); - }); + commentDTOs.forEach(item -> item.setReplyDTOs(replyMap.get(item.getId()))); return new PageResultDTO<>(commentDTOs, commentCount); } @@ -211,11 +209,40 @@ public class CommentServiceImpl extends ServiceImpl impl private void notice(Comment comment, String fromNickname) { if (comment.getUserId().equals(comment.getReplyUserId())) { - return; + if (Objects.nonNull(comment.getParentId())) { + Comment parentComment = commentMapper.selectById(comment.getParentId()); + if (parentComment.getUserId().equals(comment.getUserId())) { + return; + } + } } if (comment.getUserId().equals(BLOGGER_ID) && Objects.isNull(comment.getParentId())) { return; } + if (Objects.nonNull(comment.getParentId())) { + Comment parentComment = commentMapper.selectById(comment.getParentId()); + if (!comment.getReplyUserId().equals(parentComment.getUserId()) + && !comment.getReplyUserId().equals(comment.getUserId())) { + UserInfo userInfo = userInfoMapper.selectById(comment.getUserId()); + UserInfo replyUserinfo = userInfoMapper.selectById(comment.getReplyUserId()); + Map map = new HashMap<>(); + String topicId = Objects.nonNull(comment.getTopicId()) ? comment.getTopicId().toString() : ""; + String url = websiteUrl + getCommentPath(comment.getType()) + topicId; + map.put("content", userInfo.getNickname() + "在" + Objects.requireNonNull(getCommentEnum(comment.getType())).getDesc() + + "的评论区@了你," + + "点击查看"); + EmailDTO emailDTO = EmailDTO.builder() + .email(replyUserinfo.getEmail()) + .subject(MENTION_REMIND) + .template("common.html") + .commentMap(map) + .build(); + rabbitTemplate.convertAndSend(EMAIL_EXCHANGE, "*", new Message(JSON.toJSONBytes(emailDTO), new MessageProperties())); + } + if (comment.getUserId().equals(parentComment.getUserId())) { + return; + } + } String title; Integer userId = BLOGGER_ID; String topicId = Objects.nonNull(comment.getTopicId()) ? comment.getTopicId().toString() : ""; @@ -237,21 +264,21 @@ public class CommentServiceImpl extends ServiceImpl impl } else { title = Objects.requireNonNull(getCommentEnum(comment.getType())).getDesc(); } - UserInfo user = userInfoMapper.selectById(userId); - if (StringUtils.isNotBlank(user.getEmail())) { - EmailDTO emailDTO = getEmailDTO(comment, user, fromNickname, topicId, title, userId); + UserInfo userInfo = userInfoMapper.selectById(userId); + if (StringUtils.isNotBlank(userInfo.getEmail())) { + EmailDTO emailDTO = getEmailDTO(comment, userInfo, fromNickname, topicId, title); rabbitTemplate.convertAndSend(EMAIL_EXCHANGE, "*", new Message(JSON.toJSONBytes(emailDTO), new MessageProperties())); } } - private EmailDTO getEmailDTO(Comment comment, UserInfo user, String fromNickname, String topicId, String title, Integer userId) { + private EmailDTO getEmailDTO(Comment comment, UserInfo userInfo, String fromNickname, String topicId, String title) { EmailDTO emailDTO = new EmailDTO(); + Map map = new HashMap<>(); if (comment.getIsReview().equals(TRUE)) { - Map map = new HashMap<>(); String url = websiteUrl + getCommentPath(comment.getType()) + topicId; if (Objects.isNull(comment.getParentId())) { - emailDTO.setEmail(user.getEmail()); - emailDTO.setSubject("评论提醒"); + emailDTO.setEmail(userInfo.getEmail()); + emailDTO.setSubject(COMMENT_REMIND); emailDTO.setTemplate("owner.html"); String createTime = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm").format(comment.getCreateTime()); map.put("time", createTime); @@ -260,26 +287,42 @@ public class CommentServiceImpl extends ServiceImpl impl map.put("nickname", fromNickname); map.put("content", comment.getCommentContent()); } else { - Comment parentComment = commentMapper.selectOne(new LambdaQueryWrapper().select(Comment::getCommentContent, Comment::getCreateTime).eq(Comment::getId, comment.getParentId())); - emailDTO.setEmail(user.getEmail()); - emailDTO.setSubject("评论提醒"); + Comment parentComment = commentMapper.selectOne(new LambdaQueryWrapper().select(Comment::getUserId, Comment::getCommentContent, Comment::getCreateTime).eq(Comment::getId, comment.getParentId())); + if (!userInfo.getId().equals(parentComment.getUserId())) { + userInfo = userInfoMapper.selectById(parentComment.getUserId()); + } + emailDTO.setEmail(userInfo.getEmail()); + emailDTO.setSubject(COMMENT_REMIND); emailDTO.setTemplate("user.html"); map.put("url", url); map.put("title", title); String createTime = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm").format(parentComment.getCreateTime()); map.put("time", createTime); - map.put("toUser", user.getNickname()); + map.put("toUser", userInfo.getNickname()); map.put("fromUser", fromNickname); map.put("parentComment", parentComment.getCommentContent()); - map.put("replyComment", comment.getCommentContent()); + if (!comment.getReplyUserId().equals(parentComment.getUserId())) { + UserInfo mentionUserInfo = userInfoMapper.selectById(comment.getReplyUserId()); + if (Objects.nonNull(mentionUserInfo.getWebsite())) { + map.put("replyComment", "@" + mentionUserInfo.getNickname() + " " + "" + parentComment.getCommentContent()); + } else { + map.put("replyComment", "@" + mentionUserInfo.getNickname() + " " + parentComment.getCommentContent()); + } + } else { + map.put("replyComment", parentComment.getCommentContent()); + } } - emailDTO.setCommentMap(map); } else { String adminEmail = userInfoMapper.selectById(BLOGGER_ID).getEmail(); emailDTO.setEmail(adminEmail); - emailDTO.setSubject("审核提醒"); - emailDTO.setContent("您收到了一条新的回复,请前往后台管理页面审核"); + emailDTO.setSubject(CHECK_REMIND); + emailDTO.setTemplate("common.html"); + map.put("content", "您收到了一条新的回复,请前往后台管理页面审核"); } + emailDTO.setCommentMap(map); return emailDTO; } + } diff --git a/aurora-springboot/src/main/java/com/aurora/service/impl/JobServiceImpl.java b/aurora-springboot/src/main/java/com/aurora/service/impl/JobServiceImpl.java index 4a6ca08..6880b66 100644 --- a/aurora-springboot/src/main/java/com/aurora/service/impl/JobServiceImpl.java +++ b/aurora-springboot/src/main/java/com/aurora/service/impl/JobServiceImpl.java @@ -150,4 +150,5 @@ public class JobServiceImpl extends ServiceImpl implements JobSe } ScheduleUtil.createScheduleJob(scheduler, job); } + } diff --git a/aurora-springboot/src/main/java/com/aurora/service/impl/UserAuthServiceImpl.java b/aurora-springboot/src/main/java/com/aurora/service/impl/UserAuthServiceImpl.java index 5e9426f..b46a6f5 100644 --- a/aurora-springboot/src/main/java/com/aurora/service/impl/UserAuthServiceImpl.java +++ b/aurora-springboot/src/main/java/com/aurora/service/impl/UserAuthServiceImpl.java @@ -32,10 +32,7 @@ import org.springframework.security.crypto.bcrypt.BCrypt; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; import static com.aurora.constant.RabbitMQConstant.EMAIL_EXCHANGE; @@ -78,10 +75,13 @@ public class UserAuthServiceImpl implements UserAuthService { throw new BizException("请输入正确邮箱"); } String code = getRandomCode(); + Map map = new HashMap<>(); + map.put("content", "您的验证码为 " + code + " 有效期15分钟,请不要告诉他人哦!"); EmailDTO emailDTO = EmailDTO.builder() .email(username) .subject("验证码") - .content("您的验证码为 " + code + " 有效期15分钟,请不要告诉他人哦!") + .template("common.html") + .commentMap(map) .build(); rabbitTemplate.convertAndSend(EMAIL_EXCHANGE, "*", new Message(JSON.toJSONBytes(emailDTO), new MessageProperties())); redisService.set(USER_CODE_KEY + username, code, CODE_EXPIRE_TIME); diff --git a/aurora-springboot/src/main/java/com/aurora/util/EmailUtil.java b/aurora-springboot/src/main/java/com/aurora/util/EmailUtil.java index c916be5..d4eeb01 100644 --- a/aurora-springboot/src/main/java/com/aurora/util/EmailUtil.java +++ b/aurora-springboot/src/main/java/com/aurora/util/EmailUtil.java @@ -3,7 +3,6 @@ package com.aurora.util; import com.aurora.model.dto.EmailDTO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.stereotype.Component; @@ -25,15 +24,6 @@ public class EmailUtil { @Autowired private TemplateEngine templateEngine; - public void sendSimpleMail(EmailDTO emailDTO) { - SimpleMailMessage simpleMail = new SimpleMailMessage(); - simpleMail.setFrom(email); - simpleMail.setTo(emailDTO.getEmail()); - simpleMail.setSubject(emailDTO.getSubject()); - simpleMail.setText(emailDTO.getContent()); - javaMailSender.send(simpleMail); - } - public void sendHtmlMail(EmailDTO emailDTO) { try { MimeMessage mimeMessage = javaMailSender.createMimeMessage(); diff --git a/aurora-springboot/src/main/resources/templates/common.html b/aurora-springboot/src/main/resources/templates/common.html new file mode 100644 index 0000000..175aa03 --- /dev/null +++ b/aurora-springboot/src/main/resources/templates/common.html @@ -0,0 +1,49 @@ + + + + + Title + + +
+
+

+ 来自花未眠的个人博客的邮件 +

+
+
+
+

+
+
+

不管当下的境遇如何,提瓦特大陆的星空永远会有你的位置。——《原神》

+
+
+
+ + \ No newline at end of file diff --git a/aurora-springboot/src/main/resources/templates/owner.html b/aurora-springboot/src/main/resources/templates/owner.html index 3b50a3d..b79b007 100644 --- a/aurora-springboot/src/main/resources/templates/owner.html +++ b/aurora-springboot/src/main/resources/templates/owner.html @@ -47,7 +47,7 @@ color:#12addb" th:href="@{${url}}" target="_blank">查看回复的完整內容

-

什么都无法舍弃的人,什么都改变不了。——《进击的巨人》

+

不管当下的境遇如何,提瓦特大陆的星空永远会有你的位置。——《原神》

diff --git a/aurora-vue/aurora-admin/src/views/website/Website.vue b/aurora-vue/aurora-admin/src/views/website/Website.vue index bfed7b3..e9e5d77 100644 --- a/aurora-vue/aurora-admin/src/views/website/Website.vue +++ b/aurora-vue/aurora-admin/src/views/website/Website.vue @@ -147,20 +147,20 @@ - 关闭 开启 + 关闭 - 关闭 开启 + 关闭 - 关闭 开启 + 关闭 diff --git a/aurora-vue/aurora-blog/src/components/Footer.vue b/aurora-vue/aurora-blog/src/components/Footer.vue index 4b7bdfb..f531e58 100644 --- a/aurora-vue/aurora-blog/src/components/Footer.vue +++ b/aurora-vue/aurora-blog/src/components/Footer.vue @@ -11,7 +11,7 @@ {{ websiteConfig.author }}
  • - + {{ websiteConfig.beianNumber }}
  • diff --git a/aurora.sql b/aurora.sql index ea5b9ee..40f225c 100644 --- a/aurora.sql +++ b/aurora.sql @@ -218,7 +218,7 @@ INSERT INTO `t_menu` VALUES (214, '网站管理', '/website', '/website/Website. INSERT INTO `t_menu` VALUES (220, '定时任务日志', '/quartz/log/:quartzId', '/log/QuartzLog.vue', 'el-icon-myguanyuwo', '2022-07-28 10:53:23', '2022-08-05 10:27:47', 2, 19, 1); INSERT INTO `t_menu` VALUES (221, '说说管理', '/talk-submenu', 'Layout', 'el-icon-mypinglun', '2022-08-15 17:27:10', '2022-08-15 17:27:39', 3, NULL, 0); INSERT INTO `t_menu` VALUES (222, '说说列表', '/talk-list', '/talk/TalkList.vue', 'el-icon-myiconfontdongtaidianji', '2022-08-15 17:29:05', NULL, 1, 221, 0); -INSERT INTO `t_menu` VALUES (223, '发布说说', '/talks/:talkId', '/talk/Talk.vue', 'el-icon-myfabusekuai', '2022-08-15 17:34:26', '2022-08-16 16:06:04', 2, 221, 0); +INSERT INTO `t_menu` VALUES (223, '发布说说', '/talks', '/talk/Talk.vue', 'el-icon-myfabusekuai', '2022-08-15 17:34:26', '2022-08-16 16:06:04', 2, 221, 0); INSERT INTO `t_menu` VALUES (224, '修改说说', '/talks/:talkId', '/talk/Talk.vue', 'el-icon-myfabusekuai', '2022-08-16 16:06:59', '2022-08-16 16:08:21', 3, 221, 1); INSERT INTO `t_menu` VALUES (225, '异常日志', '/exception/log', '/log/ExceptionLog.vue', 'el-icon-myguanyuwo', '2022-08-25 13:40:08', '2022-08-25 13:40:31', 1, 19, 0);