getPreSignedPostFormData(String bucketName, String fileName) {
+ // 为存储桶创建一个上传策略,过期时间为7天
+ PostPolicy policy = new PostPolicy(bucketName, ZonedDateTime.now().plusDays(7));
+ // 设置一个参数key,值为上传对象的名称
+ policy.addEqualsCondition("key", fileName);
+ // 添加Content-Type以"image/"开头,表示只能上传照片
+ policy.addStartsWithCondition("Content-Type", "image/");
+ // 设置上传文件的大小 64kiB to 10MiB.
+ policy.addContentLengthRangeCondition(64 * 1024, 10 * 1024 * 1024);
+ return minioClient.getPresignedPostFormData(policy);
+ }
+
+}
diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/common/utils/oss/OssFile.java b/mallchat-common/src/main/java/com/abin/mallchat/common/common/utils/oss/OssFile.java
new file mode 100644
index 0000000..469de40
--- /dev/null
+++ b/mallchat-common/src/main/java/com/abin/mallchat/common/common/utils/oss/OssFile.java
@@ -0,0 +1,17 @@
+package com.abin.mallchat.common.common.utils.oss;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+@Data
+@AllArgsConstructor
+public class OssFile {
+ /**
+ * OSS 存储时文件路径
+ */
+ String ossFilePath;
+ /**
+ * 原始文件名
+ */
+ String originalFileName;
+}
\ No newline at end of file
diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/common/utils/oss/OssProperties.java b/mallchat-common/src/main/java/com/abin/mallchat/common/common/utils/oss/OssProperties.java
new file mode 100644
index 0000000..50d521e
--- /dev/null
+++ b/mallchat-common/src/main/java/com/abin/mallchat/common/common/utils/oss/OssProperties.java
@@ -0,0 +1,39 @@
+package com.abin.mallchat.common.common.utils.oss;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+@Data
+@ConfigurationProperties(prefix = "oss")
+public class OssProperties {
+
+ /**
+ * 是否开启
+ */
+ Boolean enabled;
+
+ /**
+ * 存储对象服务器类型
+ */
+ OssType type;
+
+ /**
+ * OSS 访问端点,集群时需提供统一入口
+ */
+ String endpoint;
+
+ /**
+ * 用户名
+ */
+ String accessKey;
+
+ /**
+ * 密码
+ */
+ String secretKey;
+
+ /**
+ * 存储桶
+ */
+ String bucketName;
+}
diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/common/utils/oss/OssType.java b/mallchat-common/src/main/java/com/abin/mallchat/common/common/utils/oss/OssType.java
new file mode 100644
index 0000000..f424fcb
--- /dev/null
+++ b/mallchat-common/src/main/java/com/abin/mallchat/common/common/utils/oss/OssType.java
@@ -0,0 +1,39 @@
+package com.abin.mallchat.common.common.utils.oss;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum OssType {
+ /**
+ * Minio 对象存储
+ */
+ MINIO("minio", 1),
+
+ /**
+ * 华为 OBS
+ */
+ OBS("obs", 2),
+
+ /**
+ * 腾讯 COS
+ */
+ COS("tencent", 3),
+
+ /**
+ * 阿里巴巴 SSO
+ */
+ ALIBABA("alibaba", 4),
+ ;
+
+ /**
+ * 名称
+ */
+ final String name;
+ /**
+ * 类型
+ */
+ final int type;
+
+}
diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/common/utils/oss/domain/OssReq.java b/mallchat-common/src/main/java/com/abin/mallchat/common/common/utils/oss/domain/OssReq.java
new file mode 100644
index 0000000..8c9f49b
--- /dev/null
+++ b/mallchat-common/src/main/java/com/abin/mallchat/common/common/utils/oss/domain/OssReq.java
@@ -0,0 +1,29 @@
+package com.abin.mallchat.common.common.utils.oss.domain;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+
+/**
+ * Description: 上传url请求入参
+ * Author: abin
+ * Date: 2023-03-23
+ */
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class OssReq {
+ @ApiModelProperty(value = "文件存储路径")
+ private String filePath;
+ @ApiModelProperty(value = "文件名")
+ private String fileName;
+ @ApiModelProperty(value = "请求的uid")
+ private Long uid;
+ @ApiModelProperty(value = "自动生成地址")
+ @Builder.Default
+ private boolean autoPath = true;
+}
diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/common/utils/oss/domain/OssResp.java b/mallchat-common/src/main/java/com/abin/mallchat/common/common/utils/oss/domain/OssResp.java
new file mode 100644
index 0000000..41c4f58
--- /dev/null
+++ b/mallchat-common/src/main/java/com/abin/mallchat/common/common/utils/oss/domain/OssResp.java
@@ -0,0 +1,26 @@
+package com.abin.mallchat.common.common.utils.oss.domain;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+
+/**
+ * Description: 上传url请求出参
+ * Author: abin
+ * Date: 2023-03-23
+ */
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class OssResp {
+
+ @ApiModelProperty(value = "上传的临时url")
+ private String uploadUrl;
+
+ @ApiModelProperty(value = "成功后能够下载的url")
+ private String downloadUrl;
+}
diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/sensitive/service/impl/SensitiveWordServiceImpl.java b/mallchat-common/src/main/java/com/abin/mallchat/common/sensitive/service/impl/SensitiveWordServiceImpl.java
index 19bab7a..d7fd50f 100644
--- a/mallchat-common/src/main/java/com/abin/mallchat/common/sensitive/service/impl/SensitiveWordServiceImpl.java
+++ b/mallchat-common/src/main/java/com/abin/mallchat/common/sensitive/service/impl/SensitiveWordServiceImpl.java
@@ -5,10 +5,10 @@ import com.abin.mallchat.common.sensitive.dao.SensitiveWordDao;
import com.abin.mallchat.common.sensitive.domain.SensitiveWord;
import com.abin.mallchat.common.sensitive.service.ISensitiveWordService;
import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
import javax.annotation.PostConstruct;
import java.util.List;
diff --git a/mallchat-common/src/main/resources/application-pro.properties b/mallchat-common/src/main/resources/application-pro.properties
index 0943abe..3b71009 100644
--- a/mallchat-common/src/main/resources/application-pro.properties
+++ b/mallchat-common/src/main/resources/application-pro.properties
@@ -18,4 +18,11 @@ mallchat.wx.secret=380bfc1c9147fdsf4sf07
# 接口配置里的Token值
mallchat.wx.token=sdfsf
# 接口配置里的EncodingAESKey值
-mallchat.wx.aesKey=sha1
\ No newline at end of file
+mallchat.wx.aesKey=sha1
+##################OSS配置##################
+oss.enabled=true
+oss.type=minio
+oss.endpoint=http://localhost:9000
+oss.access-key=BEZ213
+oss.secret-key=Ii4vCMIXuFfds1EZ8e7RXI2342342kV
+oss.bucketName=default
\ No newline at end of file
diff --git a/mallchat-common/src/main/resources/application-test.properties b/mallchat-common/src/main/resources/application-test.properties
index 0943abe..45e7793 100644
--- a/mallchat-common/src/main/resources/application-test.properties
+++ b/mallchat-common/src/main/resources/application-test.properties
@@ -18,4 +18,11 @@ mallchat.wx.secret=380bfc1c9147fdsf4sf07
# 接口配置里的Token值
mallchat.wx.token=sdfsf
# 接口配置里的EncodingAESKey值
-mallchat.wx.aesKey=sha1
\ No newline at end of file
+mallchat.wx.aesKey=sha1
+##################OSS配置##################
+oss.enabled=true
+oss.type=minio
+oss.endpoint=http://localhost:9000
+oss.access-key=BEZ213
+oss.secret-key=Ii4vCMIXuFe241dsfEZ8e7RXI2342342kV
+oss.bucketName=default
\ No newline at end of file
diff --git a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/controller/ChatController.java b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/controller/ChatController.java
index ac0154e..a74ed2b 100644
--- a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/controller/ChatController.java
+++ b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/controller/ChatController.java
@@ -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;
/**
*
@@ -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> getMemberPage1(@Valid CursorPageBaseReq request) {
- CursorPageBaseResp memberPage = chatService.getMemberPage(request);
- filterBlackMember(memberPage);
- List 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> 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> getMsgPage(@Valid ChatMessagePageReq request) {
- CursorPageBaseResp msgPage = chatService.getMsgPage(request, RequestHolder.get().getUid());
- filterBlackMsg(msgPage);
- List 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 sendMsg(@Valid @RequestBody ChatMessageReq request) {
diff --git a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/domain/vo/request/ChatMessageReq.java b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/domain/vo/request/ChatMessageReq.java
index ac3063d..a6a6095 100644
--- a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/domain/vo/request/ChatMessageReq.java
+++ b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/domain/vo/request/ChatMessageReq.java
@@ -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;
}
diff --git a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/adapter/MessageAdapter.java b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/adapter/MessageAdapter.java
index dd49ed8..53e10fa 100644
--- a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/adapter/MessageAdapter.java
+++ b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/adapter/MessageAdapter.java
@@ -32,6 +32,7 @@ public class MessageAdapter {
return Message.builder()
.fromUid(uid)
.roomId(request.getRoomId())
+ .type(request.getMsgType())
.status(MessageStatusEnum.NORMAL.getStatus())
.build();
diff --git a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/strategy/mark/DisLikeStrategy.java b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/strategy/mark/DisLikeStrategy.java
index 299881f..b848e1b 100644
--- a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/strategy/mark/DisLikeStrategy.java
+++ b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/strategy/mark/DisLikeStrategy.java
@@ -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() {
diff --git a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/strategy/msg/FileMsgHandler.java b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/strategy/msg/FileMsgHandler.java
new file mode 100644
index 0000000..529c3bf
--- /dev/null
+++ b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/strategy/msg/FileMsgHandler.java
@@ -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: abin
+ * 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();
+ }
+}
diff --git a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/strategy/msg/ImgMsgHandler.java b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/strategy/msg/ImgMsgHandler.java
new file mode 100644
index 0000000..91ae4f9
--- /dev/null
+++ b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/strategy/msg/ImgMsgHandler.java
@@ -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: abin
+ * 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 "图片";
+ }
+}
diff --git a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/strategy/msg/SoundMsgHandler.java b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/strategy/msg/SoundMsgHandler.java
new file mode 100644
index 0000000..84aae0d
--- /dev/null
+++ b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/strategy/msg/SoundMsgHandler.java
@@ -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: abin
+ * 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 "语音";
+ }
+}
diff --git a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/strategy/msg/TextMsgHandler.java b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/strategy/msg/TextMsgHandler.java
index 4ac036b..461ed88 100644
--- a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/strategy/msg/TextMsgHandler.java
+++ b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/strategy/msg/TextMsgHandler.java
@@ -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 atUidList = body.getAtUidList();
Map batch = userInfoCache.getBatch(atUidList);
@@ -96,7 +96,7 @@ public class TextMsgHandler extends AbstractMsgHandler {
Map urlTitleMap = URL_TITLE_DISCOVER.getContentTitleMap(body.getContent());
extra.setUrlTitleMap(urlTitleMap);
//艾特功能
- if (CollectionUtils.isNotEmpty(body.getAtUidList())) {
+ if (CollectionUtil.isNotEmpty(body.getAtUidList())) {
extra.setAtUidList(body.getAtUidList());
}
diff --git a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/strategy/msg/VideoMsgHandler.java b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/strategy/msg/VideoMsgHandler.java
new file mode 100644
index 0000000..ae967c7
--- /dev/null
+++ b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/strategy/msg/VideoMsgHandler.java
@@ -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: abin
+ * 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 "视频";
+ }
+}
diff --git a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/controller/OssController.java b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/controller/OssController.java
new file mode 100644
index 0000000..5221c21
--- /dev/null
+++ b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/controller/OssController.java
@@ -0,0 +1,34 @@
+package com.abin.mallchat.custom.user.controller;
+
+import com.abin.mallchat.common.common.domain.vo.response.ApiResult;
+import com.abin.mallchat.common.common.utils.RequestHolder;
+import com.abin.mallchat.common.common.utils.oss.domain.OssResp;
+import com.abin.mallchat.custom.user.domain.vo.request.oss.UploadUrlReq;
+import com.abin.mallchat.custom.user.service.OssService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+
+/**
+ * Description: oss控制层
+ * Author: abin
+ * Date: 2023-06-20
+ */
+@RestController
+@RequestMapping("/capi/oss")
+@Api(tags = "oss相关接口")
+public class OssController {
+ @Autowired
+ private OssService ossService;
+
+ @GetMapping("/upload/url")
+ @ApiOperation("获取临时上传链接")
+ public ApiResult getUploadUrl(@Valid UploadUrlReq req) {
+ return ApiResult.success(ossService.getUploadUrl(RequestHolder.get().getUid(), req));
+ }
+}
diff --git a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/domain/enums/OssSceneEnum.java b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/domain/enums/OssSceneEnum.java
new file mode 100644
index 0000000..ce7c7ac
--- /dev/null
+++ b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/domain/enums/OssSceneEnum.java
@@ -0,0 +1,35 @@
+package com.abin.mallchat.custom.user.domain.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.Arrays;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+/**
+ * Description: 场景枚举
+ * Author: abin
+ * Date: 2023-06-20
+ */
+@AllArgsConstructor
+@Getter
+public enum OssSceneEnum {
+ CHAT(1, "聊天", "/chat"),
+ ;
+
+ private final Integer type;
+ private final String desc;
+ private final String path;
+
+ private static final Map cache;
+
+ static {
+ cache = Arrays.stream(OssSceneEnum.values()).collect(Collectors.toMap(OssSceneEnum::getType, Function.identity()));
+ }
+
+ public static OssSceneEnum of(Integer type) {
+ return cache.get(type);
+ }
+}
diff --git a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/domain/vo/request/oss/UploadUrlReq.java b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/domain/vo/request/oss/UploadUrlReq.java
new file mode 100644
index 0000000..d0b0028
--- /dev/null
+++ b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/domain/vo/request/oss/UploadUrlReq.java
@@ -0,0 +1,29 @@
+package com.abin.mallchat.custom.user.domain.vo.request.oss;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+
+/**
+ * Description: 上传url请求入参
+ * Author: abin
+ * Date: 2023-03-23
+ */
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class UploadUrlReq {
+ @ApiModelProperty(value = "文件名(带后缀)")
+ @NotBlank
+ private String fileName;
+ @ApiModelProperty(value = "上传场景1.聊天室")
+ @NotNull
+ private Integer scene;
+}
diff --git a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/service/OssService.java b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/service/OssService.java
new file mode 100644
index 0000000..926d4ba
--- /dev/null
+++ b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/service/OssService.java
@@ -0,0 +1,20 @@
+package com.abin.mallchat.custom.user.service;
+
+import com.abin.mallchat.common.common.utils.oss.domain.OssResp;
+import com.abin.mallchat.custom.user.domain.vo.request.oss.UploadUrlReq;
+
+/**
+ *
+ * oss 服务类
+ *
+ *
+ * @author abin
+ * @since 2023-03-19
+ */
+public interface OssService {
+
+ /**
+ * 获取临时的上传链接
+ */
+ OssResp getUploadUrl(Long uid, UploadUrlReq req);
+}
diff --git a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/service/impl/OssServiceImpl.java b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/service/impl/OssServiceImpl.java
new file mode 100644
index 0000000..08bf513
--- /dev/null
+++ b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/service/impl/OssServiceImpl.java
@@ -0,0 +1,35 @@
+package com.abin.mallchat.custom.user.service.impl;
+
+import com.abin.mallchat.common.common.utils.AssertUtil;
+import com.abin.mallchat.common.common.utils.oss.MinIOTemplate;
+import com.abin.mallchat.common.common.utils.oss.domain.OssReq;
+import com.abin.mallchat.common.common.utils.oss.domain.OssResp;
+import com.abin.mallchat.custom.user.domain.enums.OssSceneEnum;
+import com.abin.mallchat.custom.user.domain.vo.request.oss.UploadUrlReq;
+import com.abin.mallchat.custom.user.service.OssService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * Description:
+ * Author: abin
+ * Date: 2023-06-20
+ */
+@Service
+public class OssServiceImpl implements OssService {
+ private static final String BUCKET_NAME = "mallchat";
+ @Autowired
+ private MinIOTemplate minIOTemplate;
+
+ @Override
+ public OssResp getUploadUrl(Long uid, UploadUrlReq req) {
+ OssSceneEnum sceneEnum = OssSceneEnum.of(req.getScene());
+ AssertUtil.isNotEmpty(sceneEnum, "场景有误");
+ OssReq ossReq = OssReq.builder()
+ .fileName(req.getFileName())
+ .filePath(sceneEnum.getPath())
+ .uid(uid)
+ .build();
+ return minIOTemplate.getPreSignedObjectUrl(ossReq);
+ }
+}
diff --git a/pom.xml b/pom.xml
index 8248c1e..93913fa 100644
--- a/pom.xml
+++ b/pom.xml
@@ -44,6 +44,8 @@
4.4.0
3.4.0
1.15.3
+ 4.8.1
+ 3.17.1
@@ -53,6 +55,11 @@
mallchat-common
${mallchat-common.version}