mirror of
https://github.com/zongzibinbin/MallChat.git
synced 2026-03-14 06:03:42 +08:00
fix:代码优化
This commit is contained in:
@@ -2,6 +2,7 @@ package com.abin.mallchat.common.chat.domain.entity.msg;
|
||||
|
||||
import com.abin.mallchat.common.common.utils.discover.domain.UrlInfo;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
@@ -21,6 +22,7 @@ import java.util.Map;
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class MessageExtra implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
//url跳转链接
|
||||
|
||||
@@ -104,15 +104,11 @@ public class ChatServiceImpl implements ChatService {
|
||||
@Transactional
|
||||
public Long sendMsg(ChatMessageReq request, Long uid) {
|
||||
check(request, uid);
|
||||
AbstractMsgHandler msgHandler = MsgHandlerFactory.getStrategyNoNull(request.getMsgType());//todo 这里先不扩展,后续再改
|
||||
msgHandler.checkMsg(request, uid);
|
||||
//同步获取消息的跳转链接标题
|
||||
Message insert = MessageAdapter.buildMsgSave(request, uid);
|
||||
messageDao.save(insert);
|
||||
msgHandler.saveMsg(insert, request);
|
||||
AbstractMsgHandler<?> msgHandler = MsgHandlerFactory.getStrategyNoNull(request.getMsgType());
|
||||
Long msgId = msgHandler.checkAndSaveMsg(request, uid);
|
||||
//发布消息发送事件
|
||||
applicationEventPublisher.publishEvent(new MessageSendEvent(this, insert.getId()));
|
||||
return insert.getId();
|
||||
applicationEventPublisher.publishEvent(new MessageSendEvent(this, msgId));
|
||||
return msgId;
|
||||
}
|
||||
|
||||
private void check(ChatMessageReq request, Long uid) {
|
||||
|
||||
@@ -1,20 +1,32 @@
|
||||
package com.abin.mallchat.common.chat.service.strategy.msg;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.abin.mallchat.common.chat.dao.MessageDao;
|
||||
import com.abin.mallchat.common.chat.domain.entity.Message;
|
||||
import com.abin.mallchat.common.chat.domain.enums.MessageTypeEnum;
|
||||
import com.abin.mallchat.common.chat.domain.vo.request.ChatMessageReq;
|
||||
import com.abin.mallchat.common.chat.service.adapter.MessageAdapter;
|
||||
import com.abin.mallchat.common.common.utils.AssertUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import java.lang.reflect.ParameterizedType;
|
||||
|
||||
/**
|
||||
* Description: 消息处理器抽象类
|
||||
* Author: <a href="https://github.com/zongzibinbin">abin</a>
|
||||
* Date: 2023-06-04
|
||||
*/
|
||||
public abstract class AbstractMsgHandler {
|
||||
public abstract class AbstractMsgHandler<Req> {
|
||||
@Autowired
|
||||
private MessageDao messageDao;
|
||||
private Class<Req> bodyClass;
|
||||
|
||||
@PostConstruct
|
||||
private void init() {
|
||||
ParameterizedType genericSuperclass = (ParameterizedType) this.getClass().getGenericSuperclass();
|
||||
this.bodyClass = (Class<Req>) genericSuperclass.getActualTypeArguments()[0];
|
||||
MsgHandlerFactory.register(getMsgTypeEnum().getType(), this);
|
||||
}
|
||||
|
||||
@@ -23,15 +35,33 @@ public abstract class AbstractMsgHandler {
|
||||
*/
|
||||
abstract MessageTypeEnum getMsgTypeEnum();
|
||||
|
||||
/**
|
||||
* 校验消息——保存前校验
|
||||
*/
|
||||
public abstract void checkMsg(ChatMessageReq req, Long uid);
|
||||
protected void checkMsg(Req body, Long roomId, Long uid) {
|
||||
|
||||
/**
|
||||
* 保存消息
|
||||
*/
|
||||
public abstract void saveMsg(Message msg, ChatMessageReq req);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public Long checkAndSaveMsg(ChatMessageReq request, Long uid) {
|
||||
Req body = this.toBean(request.getBody());
|
||||
//统一校验
|
||||
AssertUtil.allCheckValidateThrow(body);
|
||||
//子类扩展校验
|
||||
checkMsg(body, request.getRoomId(), uid);
|
||||
Message insert = MessageAdapter.buildMsgSave(request, uid);
|
||||
//统一保存
|
||||
messageDao.save(insert);
|
||||
//子类扩展保存
|
||||
saveMsg(insert, body);
|
||||
return insert.getId();
|
||||
}
|
||||
|
||||
private Req toBean(Object body) {
|
||||
if (bodyClass.isAssignableFrom(body.getClass())) {
|
||||
return (Req) body;
|
||||
}
|
||||
return BeanUtil.toBean(body, bodyClass);
|
||||
}
|
||||
|
||||
protected abstract void saveMsg(Message message, Req body);
|
||||
|
||||
/**
|
||||
* 展示消息
|
||||
|
||||
@@ -1,13 +1,10 @@
|
||||
package com.abin.mallchat.common.chat.service.strategy.msg;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.abin.mallchat.common.chat.dao.MessageDao;
|
||||
import com.abin.mallchat.common.chat.domain.entity.Message;
|
||||
import com.abin.mallchat.common.chat.domain.entity.msg.EmojisMsgDTO;
|
||||
import com.abin.mallchat.common.chat.domain.entity.msg.MessageExtra;
|
||||
import com.abin.mallchat.common.chat.domain.enums.MessageTypeEnum;
|
||||
import com.abin.mallchat.common.chat.domain.vo.request.ChatMessageReq;
|
||||
import com.abin.mallchat.common.common.utils.AssertUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@@ -19,7 +16,7 @@ import java.util.Optional;
|
||||
* Date: 2023-06-04
|
||||
*/
|
||||
@Component
|
||||
public class EmojisMsgHandler extends AbstractMsgHandler {
|
||||
public class EmojisMsgHandler extends AbstractMsgHandler<EmojisMsgDTO> {
|
||||
@Autowired
|
||||
private MessageDao messageDao;
|
||||
|
||||
@@ -29,14 +26,7 @@ public class EmojisMsgHandler extends AbstractMsgHandler {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void checkMsg(ChatMessageReq request, Long uid) {
|
||||
EmojisMsgDTO body = BeanUtil.toBean(request.getBody(), EmojisMsgDTO.class);
|
||||
AssertUtil.allCheckValidateThrow(body);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveMsg(Message msg, ChatMessageReq request) {
|
||||
EmojisMsgDTO body = BeanUtil.toBean(request.getBody(), EmojisMsgDTO.class);
|
||||
public void saveMsg(Message msg, EmojisMsgDTO body) {
|
||||
MessageExtra extra = Optional.ofNullable(msg.getExtra()).orElse(new MessageExtra());
|
||||
Message update = new Message();
|
||||
update.setId(msg.getId());
|
||||
|
||||
@@ -1,13 +1,10 @@
|
||||
package com.abin.mallchat.common.chat.service.strategy.msg;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.abin.mallchat.common.chat.dao.MessageDao;
|
||||
import com.abin.mallchat.common.chat.domain.entity.Message;
|
||||
import com.abin.mallchat.common.chat.domain.entity.msg.FileMsgDTO;
|
||||
import com.abin.mallchat.common.chat.domain.entity.msg.MessageExtra;
|
||||
import com.abin.mallchat.common.chat.domain.enums.MessageTypeEnum;
|
||||
import com.abin.mallchat.common.chat.domain.vo.request.ChatMessageReq;
|
||||
import com.abin.mallchat.common.common.utils.AssertUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@@ -19,7 +16,7 @@ import java.util.Optional;
|
||||
* Date: 2023-06-04
|
||||
*/
|
||||
@Component
|
||||
public class FileMsgHandler extends AbstractMsgHandler {
|
||||
public class FileMsgHandler extends AbstractMsgHandler<FileMsgDTO> {
|
||||
@Autowired
|
||||
private MessageDao messageDao;
|
||||
|
||||
@@ -29,14 +26,7 @@ public class FileMsgHandler extends AbstractMsgHandler {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void checkMsg(ChatMessageReq request, Long uid) {
|
||||
FileMsgDTO body = BeanUtil.toBean(request.getBody(), FileMsgDTO.class);
|
||||
AssertUtil.allCheckValidateThrow(body);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveMsg(Message msg, ChatMessageReq request) {
|
||||
FileMsgDTO body = BeanUtil.toBean(request.getBody(), FileMsgDTO.class);
|
||||
public void saveMsg(Message msg, FileMsgDTO body) {
|
||||
MessageExtra extra = Optional.ofNullable(msg.getExtra()).orElse(new MessageExtra());
|
||||
Message update = new Message();
|
||||
update.setId(msg.getId());
|
||||
|
||||
@@ -1,13 +1,10 @@
|
||||
package com.abin.mallchat.common.chat.service.strategy.msg;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.abin.mallchat.common.chat.dao.MessageDao;
|
||||
import com.abin.mallchat.common.chat.domain.entity.Message;
|
||||
import com.abin.mallchat.common.chat.domain.entity.msg.ImgMsgDTO;
|
||||
import com.abin.mallchat.common.chat.domain.entity.msg.MessageExtra;
|
||||
import com.abin.mallchat.common.chat.domain.enums.MessageTypeEnum;
|
||||
import com.abin.mallchat.common.chat.domain.vo.request.ChatMessageReq;
|
||||
import com.abin.mallchat.common.common.utils.AssertUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@@ -19,7 +16,7 @@ import java.util.Optional;
|
||||
* Date: 2023-06-04
|
||||
*/
|
||||
@Component
|
||||
public class ImgMsgHandler extends AbstractMsgHandler {
|
||||
public class ImgMsgHandler extends AbstractMsgHandler<ImgMsgDTO> {
|
||||
@Autowired
|
||||
private MessageDao messageDao;
|
||||
|
||||
@@ -29,14 +26,7 @@ public class ImgMsgHandler extends AbstractMsgHandler {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void checkMsg(ChatMessageReq request, Long uid) {
|
||||
ImgMsgDTO body = BeanUtil.toBean(request.getBody(), ImgMsgDTO.class);
|
||||
AssertUtil.allCheckValidateThrow(body);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveMsg(Message msg, ChatMessageReq request) {
|
||||
ImgMsgDTO body = BeanUtil.toBean(request.getBody(), ImgMsgDTO.class);
|
||||
public void saveMsg(Message msg, ImgMsgDTO body) {
|
||||
MessageExtra extra = Optional.ofNullable(msg.getExtra()).orElse(new MessageExtra());
|
||||
Message update = new Message();
|
||||
update.setId(msg.getId());
|
||||
|
||||
@@ -6,7 +6,6 @@ import com.abin.mallchat.common.chat.domain.entity.Message;
|
||||
import com.abin.mallchat.common.chat.domain.entity.msg.MessageExtra;
|
||||
import com.abin.mallchat.common.chat.domain.entity.msg.MsgRecall;
|
||||
import com.abin.mallchat.common.chat.domain.enums.MessageTypeEnum;
|
||||
import com.abin.mallchat.common.chat.domain.vo.request.ChatMessageReq;
|
||||
import com.abin.mallchat.common.chat.service.cache.MsgCache;
|
||||
import com.abin.mallchat.common.common.event.MessageRecallEvent;
|
||||
import com.abin.mallchat.common.user.domain.entity.User;
|
||||
@@ -24,7 +23,7 @@ import java.util.Objects;
|
||||
* Date: 2023-06-04
|
||||
*/
|
||||
@Component
|
||||
public class RecallMsgHandler extends AbstractMsgHandler {
|
||||
public class RecallMsgHandler extends AbstractMsgHandler<Object> {
|
||||
@Autowired
|
||||
private MessageDao messageDao;
|
||||
@Autowired
|
||||
@@ -40,12 +39,7 @@ public class RecallMsgHandler extends AbstractMsgHandler {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void checkMsg(ChatMessageReq request, Long uid) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveMsg(Message msg, ChatMessageReq request) {
|
||||
public void saveMsg(Message msg, Object body) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,13 +1,10 @@
|
||||
package com.abin.mallchat.common.chat.service.strategy.msg;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.abin.mallchat.common.chat.dao.MessageDao;
|
||||
import com.abin.mallchat.common.chat.domain.entity.Message;
|
||||
import com.abin.mallchat.common.chat.domain.entity.msg.MessageExtra;
|
||||
import com.abin.mallchat.common.chat.domain.entity.msg.SoundMsgDTO;
|
||||
import com.abin.mallchat.common.chat.domain.enums.MessageTypeEnum;
|
||||
import com.abin.mallchat.common.chat.domain.vo.request.ChatMessageReq;
|
||||
import com.abin.mallchat.common.common.utils.AssertUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@@ -19,7 +16,7 @@ import java.util.Optional;
|
||||
* Date: 2023-06-04
|
||||
*/
|
||||
@Component
|
||||
public class SoundMsgHandler extends AbstractMsgHandler {
|
||||
public class SoundMsgHandler extends AbstractMsgHandler<SoundMsgDTO> {
|
||||
@Autowired
|
||||
private MessageDao messageDao;
|
||||
|
||||
@@ -29,14 +26,7 @@ public class SoundMsgHandler extends AbstractMsgHandler {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void checkMsg(ChatMessageReq request, Long uid) {
|
||||
SoundMsgDTO body = BeanUtil.toBean(request.getBody(), SoundMsgDTO.class);
|
||||
AssertUtil.allCheckValidateThrow(body);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveMsg(Message msg, ChatMessageReq request) {
|
||||
SoundMsgDTO body = BeanUtil.toBean(request.getBody(), SoundMsgDTO.class);
|
||||
public void saveMsg(Message msg, SoundMsgDTO body) {
|
||||
MessageExtra extra = Optional.ofNullable(msg.getExtra()).orElse(new MessageExtra());
|
||||
Message update = new Message();
|
||||
update.setId(msg.getId());
|
||||
|
||||
@@ -3,7 +3,6 @@ package com.abin.mallchat.common.chat.service.strategy.msg;
|
||||
import com.abin.mallchat.common.chat.dao.MessageDao;
|
||||
import com.abin.mallchat.common.chat.domain.entity.Message;
|
||||
import com.abin.mallchat.common.chat.domain.enums.MessageTypeEnum;
|
||||
import com.abin.mallchat.common.chat.domain.vo.request.ChatMessageReq;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@@ -13,7 +12,7 @@ import org.springframework.stereotype.Component;
|
||||
* Date: 2023-06-04
|
||||
*/
|
||||
@Component
|
||||
public class SystemMsgHandler extends AbstractMsgHandler {
|
||||
public class SystemMsgHandler extends AbstractMsgHandler<String> {
|
||||
|
||||
@Autowired
|
||||
private MessageDao messageDao;
|
||||
@@ -24,14 +23,10 @@ public class SystemMsgHandler extends AbstractMsgHandler {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void checkMsg(ChatMessageReq request, Long uid) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveMsg(Message msg, ChatMessageReq request) {
|
||||
public void saveMsg(Message msg, String body) {
|
||||
Message update = new Message();
|
||||
update.setId(msg.getId());
|
||||
update.setContent((String) request.getBody());
|
||||
update.setContent(body);
|
||||
messageDao.updateById(update);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,13 +1,11 @@
|
||||
package com.abin.mallchat.common.chat.service.strategy.msg;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import com.abin.mallchat.common.chat.dao.MessageDao;
|
||||
import com.abin.mallchat.common.chat.domain.entity.Message;
|
||||
import com.abin.mallchat.common.chat.domain.entity.msg.MessageExtra;
|
||||
import com.abin.mallchat.common.chat.domain.enums.MessageStatusEnum;
|
||||
import com.abin.mallchat.common.chat.domain.enums.MessageTypeEnum;
|
||||
import com.abin.mallchat.common.chat.domain.vo.request.ChatMessageReq;
|
||||
import com.abin.mallchat.common.chat.domain.vo.request.msg.TextMsgReq;
|
||||
import com.abin.mallchat.common.chat.domain.vo.response.msg.TextMsgResp;
|
||||
import com.abin.mallchat.common.chat.service.adapter.MessageAdapter;
|
||||
@@ -37,7 +35,7 @@ import java.util.stream.Collectors;
|
||||
* Date: 2023-06-04
|
||||
*/
|
||||
@Component
|
||||
public class TextMsgHandler extends AbstractMsgHandler {
|
||||
public class TextMsgHandler extends AbstractMsgHandler<TextMsgReq> {
|
||||
@Autowired
|
||||
private MessageDao messageDao;
|
||||
@Autowired
|
||||
@@ -59,14 +57,12 @@ public class TextMsgHandler extends AbstractMsgHandler {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void checkMsg(ChatMessageReq request, Long uid) {
|
||||
TextMsgReq body = BeanUtil.toBean(request.getBody(), TextMsgReq.class);
|
||||
AssertUtil.allCheckValidateThrow(body);
|
||||
protected void checkMsg(TextMsgReq body, Long roomId, Long uid) {
|
||||
//校验下回复消息
|
||||
if (Objects.nonNull(body.getReplyMsgId())) {
|
||||
Message replyMsg = messageDao.getById(body.getReplyMsgId());
|
||||
AssertUtil.isNotEmpty(replyMsg, "回复消息不存在");
|
||||
AssertUtil.equal(replyMsg.getRoomId(), request.getRoomId(), "只能回复相同会话内的消息");
|
||||
AssertUtil.equal(replyMsg.getRoomId(), roomId, "只能回复相同会话内的消息");
|
||||
}
|
||||
if (CollectionUtil.isNotEmpty(body.getAtUidList())) {
|
||||
//前端传入的@用户列表可能会重复,需要去重
|
||||
@@ -83,8 +79,7 @@ public class TextMsgHandler extends AbstractMsgHandler {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveMsg(Message msg, ChatMessageReq request) {//插入文本内容
|
||||
TextMsgReq body = BeanUtil.toBean(request.getBody(), TextMsgReq.class);
|
||||
public void saveMsg(Message msg, TextMsgReq body) {//插入文本内容
|
||||
MessageExtra extra = Optional.ofNullable(msg.getExtra()).orElse(new MessageExtra());
|
||||
Message update = new Message();
|
||||
update.setId(msg.getId());
|
||||
@@ -92,7 +87,7 @@ public class TextMsgHandler extends AbstractMsgHandler {
|
||||
update.setExtra(extra);
|
||||
//如果有回复消息
|
||||
if (Objects.nonNull(body.getReplyMsgId())) {
|
||||
Integer gapCount = messageDao.getGapCount(request.getRoomId(), body.getReplyMsgId(), msg.getId());
|
||||
Integer gapCount = messageDao.getGapCount(msg.getRoomId(), body.getReplyMsgId(), msg.getId());
|
||||
update.setGapCount(gapCount);
|
||||
update.setReplyMsgId(body.getReplyMsgId());
|
||||
|
||||
|
||||
@@ -1,13 +1,10 @@
|
||||
package com.abin.mallchat.common.chat.service.strategy.msg;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.abin.mallchat.common.chat.dao.MessageDao;
|
||||
import com.abin.mallchat.common.chat.domain.entity.Message;
|
||||
import com.abin.mallchat.common.chat.domain.entity.msg.MessageExtra;
|
||||
import com.abin.mallchat.common.chat.domain.entity.msg.VideoMsgDTO;
|
||||
import com.abin.mallchat.common.chat.domain.enums.MessageTypeEnum;
|
||||
import com.abin.mallchat.common.chat.domain.vo.request.ChatMessageReq;
|
||||
import com.abin.mallchat.common.common.utils.AssertUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@@ -19,7 +16,7 @@ import java.util.Optional;
|
||||
* Date: 2023-06-04
|
||||
*/
|
||||
@Component
|
||||
public class VideoMsgHandler extends AbstractMsgHandler {
|
||||
public class VideoMsgHandler extends AbstractMsgHandler<VideoMsgDTO> {
|
||||
@Autowired
|
||||
private MessageDao messageDao;
|
||||
|
||||
@@ -29,14 +26,7 @@ public class VideoMsgHandler extends AbstractMsgHandler {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void checkMsg(ChatMessageReq request, Long uid) {
|
||||
VideoMsgDTO body = BeanUtil.toBean(request.getBody(), VideoMsgDTO.class);
|
||||
AssertUtil.allCheckValidateThrow(body);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveMsg(Message msg, ChatMessageReq request) {
|
||||
VideoMsgDTO body = BeanUtil.toBean(request.getBody(), VideoMsgDTO.class);
|
||||
public void saveMsg(Message msg, VideoMsgDTO body) {
|
||||
MessageExtra extra = Optional.ofNullable(msg.getExtra()).orElse(new MessageExtra());
|
||||
Message update = new Message();
|
||||
update.setId(msg.getId());
|
||||
|
||||
Reference in New Issue
Block a user