Skip to content

Commit d75683a

Browse files
committed
Fix: 解决新增内容时,数据未刷到lucene问题(切面Order顺序问题)
1 parent 6a725ed commit d75683a

File tree

12 files changed

+125
-86
lines changed

12 files changed

+125
-86
lines changed

upupor-lucene/src/main/java/com/upupor/lucene/AbstractFlush.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030
import com.upupor.lucene.enums.LuceneDataType;
3131
import com.upupor.lucene.enums.LuceneOperationType;
3232
import lombok.Getter;
33+
import lombok.extern.slf4j.Slf4j;
34+
import org.apache.commons.lang3.time.StopWatch;
3335

3436
import javax.annotation.Resource;
3537

@@ -40,6 +42,7 @@
4042
* @date 2022年04月04日 14:13
4143
* @email: yangrunkang53@gmail.com
4244
*/
45+
@Slf4j
4346
public abstract class AbstractFlush<T> {
4447

4548
@Getter
@@ -80,6 +83,9 @@ protected void update() {
8083
public abstract LuceneDataType runDataType();
8184

8285
public void flush(LuceneEvent event) {
86+
StopWatch stopWatch = new StopWatch();
87+
stopWatch.start();
88+
8389
// 初始化抽象类基础参数
8490
this.event = event;
8591
// 初始化目标对象
@@ -96,6 +102,9 @@ public void flush(LuceneEvent event) {
96102
if (LuceneOperationType.DELETE.equals(this.event.getOperationType())) {
97103
delete();
98104
}
105+
106+
stopWatch.stop();
107+
log.info("[FlushLucene][操作类型:{}][数据类型:{}][目标Id:{}][耗时:{}ms]",event.getOperationType(),event.getDataType(),event.getTargetId(),stopWatch.getTime());
99108
}
100109

101110
}

upupor-service/src/main/java/com/upupor/service/business/aggregation/service/RadioService.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@
2828
package com.upupor.service.business.aggregation.service;
2929

3030
import com.upupor.service.business.aggregation.dao.entity.Radio;
31+
import com.upupor.service.dto.OperateRadioDto;
3132
import com.upupor.service.dto.page.common.ListRadioDto;
33+
import com.upupor.service.outer.req.AddRadioReq;
34+
import com.upupor.service.outer.req.DelRadioReq;
3235

3336
import java.util.List;
3437

@@ -68,4 +71,8 @@ public interface RadioService {
6871
*/
6972
Boolean userHasRadio(String userId);
7073

74+
OperateRadioDto createNewRadio(AddRadioReq addRadioReq);
75+
76+
OperateRadioDto deleteRadio(DelRadioReq delRadioReq);
77+
7178
}

upupor-service/src/main/java/com/upupor/service/business/aggregation/service/impl/ContentServiceImpl.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
import lombok.RequiredArgsConstructor;
5757
import lombok.extern.slf4j.Slf4j;
5858
import org.springframework.stereotype.Service;
59+
import org.springframework.transaction.annotation.Propagation;
5960
import org.springframework.transaction.annotation.Transactional;
6061
import org.springframework.util.CollectionUtils;
6162
import org.springframework.util.StringUtils;
@@ -257,20 +258,17 @@ public void bindContentExtend(Content content) {
257258
}
258259

259260
@Override
260-
@Transactional(rollbackFor = Exception.class)
261261
public OperateContentDto addContent(AddContentDetailReq addContentDetailReq) {
262262
return AbstractEditor.execute(abstractEditorList, AbstractEditor.EditorType.CREATE, addContentDetailReq);
263263
}
264264

265265

266266
@Override
267-
@Transactional(rollbackFor = Exception.class)
268267
public OperateContentDto updateContent(UpdateContentReq updateContentReq) {
269268
return AbstractEditor.execute(abstractEditorList, AbstractEditor.EditorType.EDIT, updateContentReq);
270269
}
271270

272271
@Override
273-
@Transactional(rollbackFor = Exception.class)
274272
public OperateContentDto updateContentStatus(UpdateContentReq updateContentReq) {
275273
return AbstractEditor.execute(abstractEditorList, AbstractEditor.EditorType.UPDATE_STATUS, updateContentReq);
276274
}

upupor-service/src/main/java/com/upupor/service/business/aggregation/service/impl/MemberServiceImpl.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@
5050
import org.springframework.beans.BeanUtils;
5151
import org.springframework.context.ApplicationEventPublisher;
5252
import org.springframework.stereotype.Service;
53+
import org.springframework.transaction.annotation.Propagation;
54+
import org.springframework.transaction.annotation.Transactional;
5355
import org.springframework.util.CollectionUtils;
5456
import org.springframework.util.StringUtils;
5557

@@ -73,7 +75,6 @@ public class MemberServiceImpl implements MemberService {
7375
private final MemberMapper memberMapper;
7476
private final MemberExtendMapper memberExtendMapper;
7577
private final MemberIntegralMapper memberIntegralMapper;
76-
private final ContentDataMapper contentDataMapper;
7778
private final MemberIntegralService memberIntegralService;
7879
@Resource
7980
private FanService fanService;
@@ -328,7 +329,7 @@ public Boolean editMemberBgStyle(UpdateCssReq updateCssReq) {
328329
boolean result = total > 0;
329330
if (result) {
330331
if (!StringUtils.isEmpty(memberExtend.getBgImg())) {
331-
ServletUtils.getSession().setAttribute(CcConstant.Session.USER_BG_IMG, memberExtend.getBgImg());
332+
ServletUtils.getSession().setAttribute(CcConstant.Session.USER_BG_IMG, memberExtend.getBgImg());
332333
}
333334
}
334335

upupor-service/src/main/java/com/upupor/service/business/aggregation/service/impl/RadioServiceImpl.java

Lines changed: 91 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,26 +31,33 @@
3131
import com.github.pagehelper.PageHelper;
3232
import com.github.pagehelper.PageInfo;
3333
import com.google.common.collect.Lists;
34+
import com.upupor.framework.utils.CcDateUtil;
35+
import com.upupor.service.business.aggregation.dao.entity.File;
3436
import com.upupor.service.business.aggregation.dao.entity.Member;
3537
import com.upupor.service.business.aggregation.dao.entity.Radio;
3638
import com.upupor.service.business.aggregation.dao.mapper.RadioMapper;
3739
import com.upupor.service.business.aggregation.service.ContentService;
40+
import com.upupor.service.business.aggregation.service.FileService;
3841
import com.upupor.service.business.aggregation.service.MemberService;
3942
import com.upupor.service.business.aggregation.service.RadioService;
4043
import com.upupor.service.common.BusinessException;
4144
import com.upupor.service.common.ErrorCode;
45+
import com.upupor.service.dto.OperateRadioDto;
4246
import com.upupor.service.dto.page.common.ListRadioDto;
47+
import com.upupor.service.outer.req.AddRadioReq;
48+
import com.upupor.service.outer.req.DelRadioReq;
4349
import com.upupor.service.types.RadioStatus;
4450
import com.upupor.service.utils.Asserts;
51+
import com.upupor.service.utils.CcUtils;
52+
import com.upupor.service.utils.ServletUtils;
4553
import lombok.RequiredArgsConstructor;
4654
import org.springframework.stereotype.Service;
55+
import org.springframework.transaction.annotation.Propagation;
56+
import org.springframework.transaction.annotation.Transactional;
4757
import org.springframework.util.CollectionUtils;
4858
import org.springframework.util.StringUtils;
4959

50-
import java.util.ArrayList;
51-
import java.util.List;
52-
import java.util.Objects;
53-
import java.util.Set;
60+
import java.util.*;
5461
import java.util.stream.Collectors;
5562

5663
/**
@@ -67,6 +74,8 @@ public class RadioServiceImpl implements RadioService {
6774

6875
private final ContentService contentService;
6976

77+
private final FileService fileService;
78+
7079
@Override
7180
public Boolean addRadio(Radio radio) {
7281

@@ -204,4 +213,82 @@ public Boolean userHasRadio(String userId) {
204213
return radioMapper.countRadioByUserId(userId) > 0;
205214
}
206215

216+
@Override
217+
public OperateRadioDto createNewRadio(AddRadioReq addRadioReq) {
218+
if (Objects.isNull(addRadioReq.getFileUrl())) {
219+
throw new BusinessException(ErrorCode.PARAM_ERROR, "音频文件为空");
220+
}
221+
222+
if (Objects.isNull(addRadioReq.getRadioIntro())) {
223+
throw new BusinessException(ErrorCode.PARAM_ERROR, "音频简介为空");
224+
}
225+
226+
// 获取用户
227+
Member member = memberService.memberInfo(ServletUtils.getUserId());
228+
if (Objects.isNull(member)) {
229+
throw new BusinessException(ErrorCode.MEMBER_NOT_EXISTS);
230+
}
231+
232+
// 检查文件是否上传成功
233+
File file = fileService.selectByFileUrl(addRadioReq.getFileUrl());
234+
if (Objects.isNull(file)) {
235+
throw new BusinessException(ErrorCode.RADIO_NOT_EXITS_IN_DB);
236+
}
237+
238+
Radio radio = new Radio();
239+
radio.setRadioId(CcUtils.getUuId());
240+
radio.setUserId(member.getUserId());
241+
radio.setRadioIntro(addRadioReq.getRadioIntro());
242+
radio.setRadioUrl(file.getFileUrl());
243+
radio.setContentId(null);
244+
radio.setStatus(RadioStatus.NORMAL);
245+
radio.setCreateTime(CcDateUtil.getCurrentTime());
246+
radio.setLatestCommentTime(CcDateUtil.getCurrentTime());
247+
radio.setSysUpdateTime(new Date());
248+
249+
if (!this.addRadio(radio)) {
250+
throw new BusinessException(ErrorCode.UPLOAD_RADIO_ERROR);
251+
}
252+
253+
// 初始化数据
254+
contentService.initContendData(radio.getRadioId());
255+
256+
257+
OperateRadioDto operateRadioDto = new OperateRadioDto();
258+
operateRadioDto.setRadioId(radio.getRadioId());
259+
operateRadioDto.setSuccess(Boolean.TRUE);
260+
operateRadioDto.setStatus(radio.getStatus());
261+
262+
return operateRadioDto;
263+
}
264+
265+
266+
@Override
267+
public OperateRadioDto deleteRadio(DelRadioReq delRadioReq) {
268+
if (Objects.isNull(delRadioReq) || StringUtils.isEmpty(delRadioReq.getRadioId())) {
269+
throw new BusinessException(ErrorCode.PARAM_ERROR);
270+
}
271+
272+
String userId = ServletUtils.getUserId();
273+
274+
Radio radio = this.getByRadioId(delRadioReq.getRadioId());
275+
if (Objects.isNull(radio)) {
276+
throw new BusinessException(ErrorCode.RADIO_NOT_EXISTS);
277+
}
278+
279+
if (!radio.getUserId().equals(userId)) {
280+
throw new BusinessException(ErrorCode.RADIO_NOT_BELONG_TO_YOU);
281+
}
282+
283+
radio.setStatus(RadioStatus.DELETED);
284+
radio.setSysUpdateTime(new Date());
285+
Boolean success = this.updateRadio(radio) >0;
286+
287+
288+
OperateRadioDto operateRadioDto = new OperateRadioDto();
289+
operateRadioDto.setRadioId(radio.getRadioId());
290+
operateRadioDto.setSuccess(success);
291+
operateRadioDto.setStatus(radio.getStatus());
292+
return operateRadioDto;
293+
}
207294
}

upupor-service/src/main/java/com/upupor/service/business/editor/AbstractEditor.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,6 @@ public abstract class AbstractEditor<T extends BaseContentReq> {
7171
@Resource
7272
protected ApplicationEventPublisher eventPublisher;
7373

74-
@Resource
75-
protected UpuporLuceneService upuporLuceneService;
76-
7774
protected T req;
7875

7976
public T getReq() {

upupor-service/src/main/java/com/upupor/service/listener/ContentListener.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,9 +124,10 @@ private void recordViewerHistory(String targetId, ViewTargetType targetType, Str
124124
viewHistoryMapper.insert(viewHistory);
125125
}
126126

127-
@TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)
127+
@EventListener
128128
@Async
129129
public void createContent(PublishContentEvent createContentEvent) {
130+
log.info("触发刷新创建新内容事件");
130131

131132
String contentId = createContentEvent.getContentId();
132133
if (StringUtils.isEmpty(contentId)) {
@@ -135,6 +136,7 @@ public void createContent(PublishContentEvent createContentEvent) {
135136

136137
Content content = contentService.getContentByContentIdNoStatus(contentId);
137138
if (Objects.isNull(content) || !content.getStatus().equals(ContentStatus.NORMAL)) {
139+
log.warn("文章不存在或者状态不正常,不执行后续事件");
138140
return;
139141
}
140142

upupor-service/src/main/java/com/upupor/service/listener/LuceneListener.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@
2727

2828
package com.upupor.service.listener;
2929

30-
import com.upupor.lucene.LuceneEvent;
3130
import com.upupor.lucene.AbstractFlush;
31+
import com.upupor.lucene.LuceneEvent;
3232
import lombok.RequiredArgsConstructor;
3333
import lombok.extern.slf4j.Slf4j;
3434
import org.apache.commons.lang3.StringUtils;
@@ -55,6 +55,7 @@ public class LuceneListener {
5555
@EventListener
5656
@Async
5757
public void flushLucene(LuceneEvent luceneEvent) {
58+
log.info("触发刷新Lucene事件");
5859
if (StringUtils.isEmpty(luceneEvent.getTargetId())) {
5960
return;
6061
}

upupor-web/src/main/java/com/upupor/web/aop/ControllerAspectAdvice.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import org.aspectj.lang.annotation.Aspect;
4444
import org.aspectj.lang.annotation.Pointcut;
4545
import org.springframework.context.ApplicationEventPublisher;
46+
import org.springframework.core.annotation.Order;
4647
import org.springframework.stereotype.Component;
4748

4849
import javax.servlet.http.HttpServletRequest;
@@ -57,6 +58,7 @@
5758
@Aspect
5859
@Component
5960
@RequiredArgsConstructor
61+
@Order(1)
6062
public class ControllerAspectAdvice {
6163
private final ApplicationEventPublisher publisher;
6264
private final List<ControllerAspectChecker> controllerAspectCheckerList;

upupor-web/src/main/java/com/upupor/web/aop/LuceneAspectAdvice.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import org.aspectj.lang.ProceedingJoinPoint;
4141
import org.aspectj.lang.annotation.*;
4242
import org.springframework.context.ApplicationEventPublisher;
43+
import org.springframework.core.annotation.Order;
4344
import org.springframework.stereotype.Component;
4445

4546
import java.util.ArrayList;
@@ -54,6 +55,7 @@
5455
@Aspect
5556
@Component
5657
@RequiredArgsConstructor
58+
@Order(2)
5759
public class LuceneAspectAdvice {
5860
private final ApplicationEventPublisher publisher;
5961

0 commit comments

Comments
 (0)