fix:代码优化

This commit is contained in:
zhongzb
2023-10-02 14:45:14 +08:00
parent 78e30a43c4
commit 0a3b503990
11 changed files with 65 additions and 103 deletions

View File

@@ -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跳转链接

View File

@@ -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) {

View File

@@ -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);
/**
* 展示消息

View File

@@ -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());

View File

@@ -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());

View File

@@ -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());

View File

@@ -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();
}

View File

@@ -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());

View File

@@ -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);
}

View File

@@ -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());

View File

@@ -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());