『博客开发日记-后台』之更新审核评论的方法

本文最后更新于 2026年5月16日 下午

更新审核评论的方法


前言

先前审核评论的方法存在缺陷(先发邮件再写入数据库)

这样做虽然说可以用

但在逻辑上纯在缺陷

如果上面的入口失败的话又发送了邮件

就会造成错误了

所以改成先入库再发送邮件

保证成功入库了之后才发邮件


代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
//审核评论(允许评论发布)
@Override
@Transactional(rollbackFor = Exception.class)
public ResponseResult approveComment(Long[] ids)
{
// 参数校验
if (ids == null || ids.length == 0) {
return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR, "请选择要审核的评论");
}

//获取评论id列表
List<Long> idList = List.of(ids);

//查询需要审核的评论
List<Comment> commentsToApprove = commentService.listByIds(idList);
if (commentsToApprove.size() != ids.length) {
//找出不存在的 评论id
Set<Long> existIds = commentsToApprove.stream()
.map(Comment::getId)
.collect(Collectors.toSet());

List<Long> notExistIds = idList.stream()
.filter(id -> !existIds.contains(id))
.toList();

return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR, "审核失败!!原因:以下评论 id 不存在:" + notExistIds);
}

//检查是否有不属于待审核状态的评论
boolean hasInvalidStatus = commentsToApprove.stream()
.anyMatch(comment -> !SystemConstants.COMMENT_STATUS_PENDING_REVIEW.equals(comment.getStatus()));

if (hasInvalidStatus) {
return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR,
"所选评论中含有状态为'正常'或'审核未通过'评论,请重新选择!");
}

//批量更新评论状态为正常
commentsToApprove.forEach(comment -> comment.setStatus(SystemConstants.COMMENT_STATUS_NORMAL));

//先更新数据库
boolean updateResult = commentService.updateBatchById(commentsToApprove);
if (!updateResult) {
return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR, "审核失败");
}

//数据库更新成功后再发送审核通过邮件
commentsToApprove.forEach(comment -> {
if (!StringUtils.hasText(comment.getEmail())) {
return;
}

try {
emailService.sendCommentApprovedNotification(comment);
} catch (Exception e) {
log.error("发送评论审核通过邮件失败,commentId={}, email={}", comment.getId(), comment.getEmail(), e);
}
});

return ResponseResult.okResult(AppHttpCodeEnum.SUCCESS.getCode(),
"成功审核通过 " + commentsToApprove.size() + " 条评论");
}

//审核评论(拒绝评论发布)
@Override
@Transactional(rollbackFor = Exception.class)
public ResponseResult rejectComment(Long[] ids)
{
// 参数校验
if (ids == null || ids.length == 0) {
return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR, "请选择要审核的评论");
}

//获取评论id列表
List<Long> idList = List.of(ids);

//查询需要审核的评论
List<Comment> commentsToReject = commentService.listByIds(idList);
if (commentsToReject.size() != ids.length) {
//找出不存在的 评论id
Set<Long> existIds = commentsToReject.stream()
.map(Comment::getId)
.collect(Collectors.toSet());

List<Long> notExistIds = idList.stream()
.filter(id -> !existIds.contains(id))
.toList();

return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR, "审核失败!!原因:以下评论 id 不存在:" + notExistIds);
}

//检查是否有不属于待审核状态的评论
boolean hasInvalidStatus = commentsToReject.stream()
.anyMatch(comment -> !SystemConstants.COMMENT_STATUS_PENDING_REVIEW.equals(comment.getStatus()));

if (hasInvalidStatus) {
return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR,
"所选评论中含有状态为'正常'或'审核未通过'评论,请重新选择!");
}

//批量更新评论状态为审核未通过
commentsToReject.forEach(comment -> comment.setStatus(SystemConstants.COMMENT_STATUS_REVIEW_NOT_PASSED));

//先更新数据库
boolean updateResult = commentService.updateBatchById(commentsToReject);
if (!updateResult) {
return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR, "审核失败");
}

//数据库更新成功后再发送审核未通过邮件
commentsToReject.forEach(comment -> {
if (!StringUtils.hasText(comment.getEmail())) {
return;
}

try {
emailService.sendCommentRejectedNotification(comment);
} catch (Exception e) {
log.error("发送评论审核未通过邮件失败,commentId={}, email={}", comment.getId(), comment.getEmail(), e);
}
});

return ResponseResult.okResult(AppHttpCodeEnum.SUCCESS.getCode(),
"成功拒绝 " + commentsToReject.size() + " 条评论进行发布");
}




PS:该系列只做为作者学习开发项目做的笔记用

不一定符合读者来学习,仅供参考


预告

后续会记录博客的开发过程

每次学习会做一份笔记来进行发表

“一花一世界,一叶一菩提”


版权所有 © 2026 云梦泽
欢迎访问我的个人网站:https://hgt12.github.io/


『博客开发日记-后台』之更新审核评论的方法
http://example.com/2026/05/15/『博客开发日记-后台』之更新审核评论的方法/
作者
云梦泽
发布于
2026年5月15日
更新于
2026年5月16日
许可协议