feat:消息标记重构

This commit is contained in:
zhongzb
2023-06-01 21:57:48 +08:00
parent 0d31668183
commit 59a80110ef
26 changed files with 377 additions and 79 deletions

View File

@@ -10,11 +10,13 @@ import com.abin.mallchat.common.common.domain.enums.IdempotentEnum;
import com.abin.mallchat.common.common.event.MessageMarkEvent;
import com.abin.mallchat.common.user.domain.enums.ItemEnum;
import com.abin.mallchat.common.user.service.IUserBackpackService;
import com.abin.mallchat.custom.user.service.WebSocketService;
import com.abin.mallchat.custom.user.service.adapter.WSAdapter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.transaction.event.TransactionalEventListener;
import java.util.Objects;
@@ -32,9 +34,11 @@ public class MessageMarkListener {
private MessageDao messageDao;
@Autowired
private IUserBackpackService iUserBackpackService;
@Autowired
private WebSocketService webSocketService;
@Async
@EventListener(classes = MessageMarkEvent.class)
@TransactionalEventListener(classes = MessageMarkEvent.class, fallbackExecution = true)
public void changeMsgType(MessageMarkEvent event) {
ChatMessageMarkDTO dto = event.getDto();
Message msg = messageDao.getById(dto.getMsgId());
@@ -53,4 +57,12 @@ public class MessageMarkListener {
}
}
@Async
@TransactionalEventListener(classes = MessageMarkEvent.class, fallbackExecution = true)
public void notifyAll(MessageMarkEvent event) {//后续可做合并查询,目前异步影响不大
ChatMessageMarkDTO dto = event.getDto();
Integer markCount = messageMarkDao.getMarkCount(dto.getMsgId(), dto.getMarkType());
webSocketService.sendToAllOnline(WSAdapter.buildMsgMarkSend(dto, markCount), dto.getUid());
}
}

View File

@@ -9,9 +9,9 @@ import com.abin.mallchat.custom.user.service.WebSocketService;
import com.abin.mallchat.custom.user.service.adapter.WSAdapter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.transaction.event.TransactionalEventListener;
/**
* 消息发送监听器
@@ -29,7 +29,7 @@ public class MessageSendListener {
private MessageDao messageDao;
@Async
@EventListener(classes = MessageSendEvent.class)
@TransactionalEventListener(classes = MessageSendEvent.class, fallbackExecution = true)
public void notifyAllOnline(MessageSendEvent event) {
Message message = messageDao.getById(event.getMsgId());
ChatMessageResp msgResp = chatService.getMsgResp(message, null);

View File

@@ -38,7 +38,7 @@ public class UserOnlineListener {
User user = event.getUser();
userCache.online(user.getId(), user.getLastOptTime());
//推送给所有在线用户,该用户登录成功
webSocketService.sendToAllOnline(wsAdapter.buildOnlineNotifyResp(event.getUser()), null);
webSocketService.sendToAllOnline(wsAdapter.buildOnlineNotifyResp(event.getUser()));
}
@Async

View File

@@ -33,16 +33,16 @@ public class UserRegisterListener {
iUserBackpackService.acquireItem(user.getId(), ItemEnum.MODIFY_NAME_CARD.getId(), IdempotentEnum.UID, user.getId().toString());
}
@Async
@EventListener(classes = UserRegisterEvent.class)
public void sendBadge(UserRegisterEvent event) {
User user = event.getUser();
int count = userDao.count();//todo 性能瓶颈,等注册用户多了直接删掉
if (count <= 10) {
iUserBackpackService.acquireItem(user.getId(), ItemEnum.REG_TOP10_BADGE.getId(), IdempotentEnum.UID, user.getId().toString());
} else if (count <= 100) {
iUserBackpackService.acquireItem(user.getId(), ItemEnum.REG_TOP100_BADGE.getId(), IdempotentEnum.UID, user.getId().toString());
}
}
// @Async
// @EventListener(classes = UserRegisterEvent.class)
// public void sendBadge(UserRegisterEvent event) {
// User user = event.getUser();
// int count = userDao.count();// 性能瓶颈,等注册用户多了直接删掉
// if (count <= 10) {
// iUserBackpackService.acquireItem(user.getId(), ItemEnum.REG_TOP10_BADGE.getId(), IdempotentEnum.UID, user.getId().toString());
// } else if (count <= 100) {
// iUserBackpackService.acquireItem(user.getId(), ItemEnum.REG_TOP100_BADGE.getId(), IdempotentEnum.UID, user.getId().toString());
// }
// }
}