feat:增加图片上传功能,增加多种消息类型

This commit is contained in:
zhongzb
2023-06-28 23:25:53 +08:00
parent 892b658d38
commit c889a9fdc6
35 changed files with 946 additions and 49 deletions

View File

@@ -15,7 +15,6 @@ import com.abin.mallchat.custom.user.service.impl.UserServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -23,7 +22,6 @@ import javax.validation.Valid;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
* <p>
@@ -59,20 +57,6 @@ public class ChatController {
return ApiResult.success(memberPage);
}
@GetMapping("/public/member/page/v1")
@ApiOperation("群成员列表/v1")
@FrequencyControl(time = 120, count = 20, target = FrequencyControl.Target.IP)
public ApiResult<CursorPageBaseResp<ChatMemberRespV1>> getMemberPage1(@Valid CursorPageBaseReq request) {
CursorPageBaseResp<ChatMemberResp> memberPage = chatService.getMemberPage(request);
filterBlackMember(memberPage);
List<ChatMemberRespV1> collect = memberPage.getList().stream().map(a -> {
ChatMemberRespV1 v1 = new ChatMemberRespV1();
BeanUtils.copyProperties(a, v1);
return v1;
}).collect(Collectors.toList());
return ApiResult.success(CursorPageBaseResp.init(memberPage, collect));
}
@GetMapping("/member/list")
@ApiOperation("房间内的所有群成员列表-@专用")
public ApiResult<List<ChatMemberListResp>> getMemberList(@Valid ChatMessageMemberReq chatMessageMemberReq) {
@@ -97,20 +81,6 @@ public class ChatController {
@Autowired
private UserServiceImpl userService;
@GetMapping("/public/msg/page/v1")
@ApiOperation("消息列表/v1")
@FrequencyControl(time = 120, count = 20, target = FrequencyControl.Target.IP)
public ApiResult<CursorPageBaseResp<ChatMessageRespV1>> getMsgPage(@Valid ChatMessagePageReq request) {
CursorPageBaseResp<ChatMessageResp> msgPage = chatService.getMsgPage(request, RequestHolder.get().getUid());
filterBlackMsg(msgPage);
List<ChatMessageRespV1> collect = msgPage.getList().stream().map(a -> {
ChatMessageRespV1 v1 = new ChatMessageRespV1();
BeanUtils.copyProperties(a, v1);
return v1;
}).collect(Collectors.toList());
return ApiResult.success(CursorPageBaseResp.init(msgPage, collect));
}
@GetMapping("/public/msg/page")
@ApiOperation("消息列表")
@FrequencyControl(time = 120, count = 20, target = FrequencyControl.Target.IP)
@@ -129,7 +99,7 @@ public class ChatController {
@PostMapping("/msg")
@ApiOperation("发送消息")
@FrequencyControl(time = 5, count = 2, target = FrequencyControl.Target.UID)
@FrequencyControl(time = 5, count = 3, target = FrequencyControl.Target.UID)
@FrequencyControl(time = 30, count = 5, target = FrequencyControl.Target.UID)
@FrequencyControl(time = 60, count = 10, target = FrequencyControl.Target.UID)
public ApiResult<ChatMessageResp> sendMsg(@Valid @RequestBody ChatMessageReq request) {

View File

@@ -25,9 +25,11 @@ public class ChatMessageReq {
private Long roomId;
@ApiModelProperty("消息类型")
@NotNull
private Integer msgType = MessageTypeEnum.TEXT.getType();
@ApiModelProperty("消息内容类型不同传值不同见https://www.yuque.com/snab/mallcaht/rkb2uz5k1qqdmcmd")
@NotNull
private Object body;
}

View File

@@ -32,6 +32,7 @@ public class MessageAdapter {
return Message.builder()
.fromUid(uid)
.roomId(request.getRoomId())
.type(request.getMsgType())
.status(MessageStatusEnum.NORMAL.getStatus())
.build();

View File

@@ -1,8 +1,6 @@
package com.abin.mallchat.custom.chat.service.strategy.mark;
import com.abin.mallchat.common.chat.domain.enums.MessageMarkTypeEnum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
/**
@@ -12,9 +10,6 @@ import org.springframework.stereotype.Component;
*/
@Component
public class DisLikeStrategy extends AbstractMsgMarkStrategy {
@Autowired
@Lazy
private LikeStrategy likeStrategy;
@Override
protected MessageMarkTypeEnum getTypeEnum() {

View File

@@ -0,0 +1,54 @@
package com.abin.mallchat.custom.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.custom.chat.domain.vo.request.ChatMessageReq;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Optional;
/**
* Description:图片消息
* Author: <a href="https://github.com/zongzibinbin">abin</a>
* Date: 2023-06-04
*/
@Component
public class FileMsgHandler extends AbstractMsgHandler {
@Autowired
private MessageDao messageDao;
@Override
MessageTypeEnum getMsgTypeEnum() {
return MessageTypeEnum.FILE;
}
@Override
public void checkMsg(ChatMessageReq request, Long uid) {
}
@Override
public void saveMsg(Message msg, ChatMessageReq request) {
FileMsgDTO body = BeanUtil.toBean(request.getBody(), FileMsgDTO.class);
MessageExtra extra = Optional.ofNullable(msg.getExtra()).orElse(new MessageExtra());
Message update = new Message();
update.setId(msg.getId());
update.setExtra(extra);
extra.setFileMsg(body);
messageDao.updateById(update);
}
@Override
public Object showMsg(Message msg) {
return msg.getExtra().getFileMsg();
}
@Override
public Object showReplyMsg(Message msg) {
return "文件:" + msg.getExtra().getFileMsg().getFileName();
}
}

View File

@@ -0,0 +1,54 @@
package com.abin.mallchat.custom.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.custom.chat.domain.vo.request.ChatMessageReq;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Optional;
/**
* Description:图片消息
* Author: <a href="https://github.com/zongzibinbin">abin</a>
* Date: 2023-06-04
*/
@Component
public class ImgMsgHandler extends AbstractMsgHandler {
@Autowired
private MessageDao messageDao;
@Override
MessageTypeEnum getMsgTypeEnum() {
return MessageTypeEnum.IMG;
}
@Override
public void checkMsg(ChatMessageReq request, Long uid) {
}
@Override
public void saveMsg(Message msg, ChatMessageReq request) {
ImgMsgDTO body = BeanUtil.toBean(request.getBody(), ImgMsgDTO.class);
MessageExtra extra = Optional.ofNullable(msg.getExtra()).orElse(new MessageExtra());
Message update = new Message();
update.setId(msg.getId());
update.setExtra(extra);
extra.setImgMsgDTO(body);
messageDao.updateById(update);
}
@Override
public Object showMsg(Message msg) {
return msg.getExtra().getImgMsgDTO();
}
@Override
public Object showReplyMsg(Message msg) {
return "图片";
}
}

View File

@@ -0,0 +1,54 @@
package com.abin.mallchat.custom.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.custom.chat.domain.vo.request.ChatMessageReq;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Optional;
/**
* Description:图片消息
* Author: <a href="https://github.com/zongzibinbin">abin</a>
* Date: 2023-06-04
*/
@Component
public class SoundMsgHandler extends AbstractMsgHandler {
@Autowired
private MessageDao messageDao;
@Override
MessageTypeEnum getMsgTypeEnum() {
return MessageTypeEnum.SOUND;
}
@Override
public void checkMsg(ChatMessageReq request, Long uid) {
}
@Override
public void saveMsg(Message msg, ChatMessageReq request) {
SoundMsgDTO body = BeanUtil.toBean(request.getBody(), SoundMsgDTO.class);
MessageExtra extra = Optional.ofNullable(msg.getExtra()).orElse(new MessageExtra());
Message update = new Message();
update.setId(msg.getId());
update.setExtra(extra);
extra.setSoundMsgDTO(body);
messageDao.updateById(update);
}
@Override
public Object showMsg(Message msg) {
return msg.getExtra().getFileMsg();
}
@Override
public Object showReplyMsg(Message msg) {
return "语音";
}
}

View File

@@ -1,6 +1,7 @@
package com.abin.mallchat.custom.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;
@@ -20,7 +21,6 @@ import com.abin.mallchat.custom.chat.domain.vo.request.ChatMessageReq;
import com.abin.mallchat.custom.chat.domain.vo.request.msg.TextMsgReq;
import com.abin.mallchat.custom.chat.domain.vo.response.msg.TextMsgResp;
import com.abin.mallchat.custom.chat.service.adapter.MessageAdapter;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -65,7 +65,7 @@ public class TextMsgHandler extends AbstractMsgHandler {
AssertUtil.isNotEmpty(replyMsg, "回复消息不存在");
AssertUtil.equal(replyMsg.getRoomId(), request.getRoomId(), "只能回复相同会话内的消息");
}
if (CollectionUtils.isNotEmpty(body.getAtUidList())) {
if (CollectionUtil.isNotEmpty(body.getAtUidList())) {
AssertUtil.isTrue(body.getAtUidList().size() > 10, "一次别艾特这么多人");
List<Long> atUidList = body.getAtUidList();
Map<Long, User> batch = userInfoCache.getBatch(atUidList);
@@ -96,7 +96,7 @@ public class TextMsgHandler extends AbstractMsgHandler {
Map<String, String> urlTitleMap = URL_TITLE_DISCOVER.getContentTitleMap(body.getContent());
extra.setUrlTitleMap(urlTitleMap);
//艾特功能
if (CollectionUtils.isNotEmpty(body.getAtUidList())) {
if (CollectionUtil.isNotEmpty(body.getAtUidList())) {
extra.setAtUidList(body.getAtUidList());
}

View File

@@ -0,0 +1,54 @@
package com.abin.mallchat.custom.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.custom.chat.domain.vo.request.ChatMessageReq;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Optional;
/**
* Description:视频消息
* Author: <a href="https://github.com/zongzibinbin">abin</a>
* Date: 2023-06-04
*/
@Component
public class VideoMsgHandler extends AbstractMsgHandler {
@Autowired
private MessageDao messageDao;
@Override
MessageTypeEnum getMsgTypeEnum() {
return MessageTypeEnum.VIDEO;
}
@Override
public void checkMsg(ChatMessageReq request, Long uid) {
}
@Override
public void saveMsg(Message msg, ChatMessageReq request) {
VideoMsgDTO body = BeanUtil.toBean(request.getBody(), VideoMsgDTO.class);
MessageExtra extra = Optional.ofNullable(msg.getExtra()).orElse(new MessageExtra());
Message update = new Message();
update.setId(msg.getId());
update.setExtra(extra);
extra.setVideoMsgDTO(body);
messageDao.updateById(update);
}
@Override
public Object showMsg(Message msg) {
return msg.getExtra().getVideoMsgDTO();
}
@Override
public Object showReplyMsg(Message msg) {
return "视频";
}
}