From 90356b55c80f4503bfb7c268e053df09fab172cd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=BC=A0=E8=89=AF=28004796=29?=
Date: Tue, 6 Feb 2024 16:56:03 +0800
Subject: [PATCH] 123333
---
.../controller/cai/app/ImAppController.java | 7 +-
.../cai/dto/commom/im/ImgContentDTO.java | 18 ++
.../com/ruoyi/cai/enums/ChatTypeEnum.java | 11 +-
.../ruoyi/cai/enums/im/ImImgStatusEnum.java | 20 ++
.../java/com/ruoyi/cai/manager/ImService.java | 122 ++++++++++-
.../ruoyi/cai/manager/UserForbidManager.java | 6 +-
.../java/com/ruoyi/cai/mq/AmqpProducer.java | 6 +-
.../cai/mq/{dto => }/CommonConsumerEnum.java | 2 +-
.../com/ruoyi/cai/mq/CommonDelayTypeEnum.java | 11 +-
.../mq/{handle => config}/HandleConfig.java | 5 +-
.../cai/mq/config/HandleDelayConfig.java | 32 +++
.../ruoyi/cai/mq/consumer/CommonConsumer.java | 3 +-
.../mq/consumer/CommonDelayMqConsumer.java | 41 ++--
.../ruoyi/cai/mq/consumer/WindowConsumer.java | 2 +-
.../com/ruoyi/cai/mq/dto/CommonDelayDto.java | 24 ---
.../cai/mq/{dto => handle}/CommonDTO.java | 3 +-
.../java/com/ruoyi/cai/mq/handle/IHandle.java | 2 +-
.../cai/mq/handle/LoginNotifyHandle.java | 2 +-
.../ruoyi/cai/mq/handle/RankNotifyHandle.java | 2 +-
.../cai/mq/handle/SysPushNotifyHandle.java | 2 +-
.../cai/mq/handle/WindowGiftNotifyHandle.java | 2 +-
.../mq/handle/WindowRechargeNotifyHandle.java | 2 +-
.../cai/mq/handle/dto/LoginNotifyDTO.java | 4 +-
.../cai/mq/handle/dto/RankNotifyDTO.java | 4 +-
.../cai/mq/handle/dto/SysPushNotifyDTO.java | 4 +-
.../mq/handle/dto/WindowGiftNotifyDTO.java | 4 +-
.../handle/dto/WindowRechargeNotifyDTO.java | 4 +-
.../cai/mq/handleDelay/CommonDelayDto.java | 9 +
.../cai/mq/handleDelay/ForbidDelayHandle.java | 31 +++
.../cai/mq/handleDelay/IHandleDelay.java | 10 +
.../handleDelay/SaveSendImImgDelayHandle.java | 32 +++
.../mq/handleDelay/SysPushDelayHandle.java | 32 +++
.../mq/handleDelay/dto/ForbidDelayDto.java | 14 ++
.../dto/SaveSendImImgDelayDto.java | 14 ++
.../mq/handleDelay/dto/SysPushDelayDto.java | 14 ++
.../cai/service/impl/SysPushServiceImpl.java | 27 ++-
.../service/impl/UserForbidServiceImpl.java | 7 +-
.../java/com/ruoyi/cai/util/FileUtils.java | 200 ++++++++++++++++++
.../main/java/com/ruoyi/yunxin/Yunxin.java | 4 +-
.../{ImTypeEnum.java => YxImTypeEnum.java} | 4 +-
40 files changed, 622 insertions(+), 121 deletions(-)
create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/dto/commom/im/ImgContentDTO.java
create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/enums/im/ImImgStatusEnum.java
rename ruoyi-cai/src/main/java/com/ruoyi/cai/mq/{dto => }/CommonConsumerEnum.java (75%)
rename ruoyi-cai/src/main/java/com/ruoyi/cai/mq/{handle => config}/HandleConfig.java (80%)
create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/mq/config/HandleDelayConfig.java
delete mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/mq/dto/CommonDelayDto.java
rename ruoyi-cai/src/main/java/com/ruoyi/cai/mq/{dto => handle}/CommonDTO.java (54%)
create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handleDelay/CommonDelayDto.java
create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handleDelay/ForbidDelayHandle.java
create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handleDelay/IHandleDelay.java
create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handleDelay/SaveSendImImgDelayHandle.java
create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handleDelay/SysPushDelayHandle.java
create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handleDelay/dto/ForbidDelayDto.java
create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handleDelay/dto/SaveSendImImgDelayDto.java
create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handleDelay/dto/SysPushDelayDto.java
create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/util/FileUtils.java
rename ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/enums/{ImTypeEnum.java => YxImTypeEnum.java} (90%)
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/app/ImAppController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/app/ImAppController.java
index 29430380..a1cb6ff1 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/app/ImAppController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/app/ImAppController.java
@@ -1,6 +1,5 @@
package com.ruoyi.web.controller.cai.app;
-import com.alibaba.fastjson.JSON;
import com.ruoyi.cai.dto.app.query.im.ImMessageDTO;
import com.ruoyi.cai.dto.app.query.im.SaveSendImImgReq;
import com.ruoyi.cai.dto.app.vo.ImResp;
@@ -37,10 +36,10 @@ public class ImAppController {
}
@PostMapping("/send/saveSendImImg")
- @Operation(summary = "更新发送的图片消息(只定义了接口,未实现逻辑,里面有点复杂)")
+ @Operation(summary = "更新发送的图片消息")
@Log(title = "更新发送的图片消息", businessType = BusinessType.OTHER, isSaveDb = false)
- public R saveSendImImg(@Validated @RequestBody SaveSendImImgReq saveSendImImgReq){
- log.error("更新发送的图片消息 = {}", JSON.toJSONString(saveSendImImgReq));
+ public R saveSendImImg(@Validated @RequestBody SaveSendImImgReq saveSendImImgReq){
+ imService.saveSendImImg(saveSendImImgReq);
return R.ok();
}
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/commom/im/ImgContentDTO.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/commom/im/ImgContentDTO.java
new file mode 100644
index 00000000..6882dc9b
--- /dev/null
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/commom/im/ImgContentDTO.java
@@ -0,0 +1,18 @@
+package com.ruoyi.cai.dto.commom.im;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+public class ImgContentDTO {
+ @Schema(description = "不知道是撒")
+ private String serverId;
+ @Schema(description = "不知道是撒")
+ private String messageId;
+ @Schema(description = "时间")
+ private String time;
+ @Schema(description = "图片地址")
+ private String imageUrl;
+ @Schema(description = "OSS图片地址")
+ private String ossImage;
+}
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/ChatTypeEnum.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/ChatTypeEnum.java
index 2b050df4..799af7ef 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/ChatTypeEnum.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/ChatTypeEnum.java
@@ -1,5 +1,6 @@
package com.ruoyi.cai.enums;
+import com.ruoyi.yunxin.enums.YxImTypeEnum;
import lombok.Getter;
/**
@@ -8,11 +9,11 @@ import lombok.Getter;
* @author duet
*/
public enum ChatTypeEnum {
- MESSAGE(1,0),
- VOICE(2,2),
- PICTURE(3,1),
- VIDEO(4,3),
- CUSTOM(100,100)
+ MESSAGE(1, YxImTypeEnum.TXT.getCode()),
+ VOICE(2,YxImTypeEnum.VOICE.getCode()),
+ IMAGE(3,YxImTypeEnum.IMAGE.getCode()),
+ VIDEO(4,YxImTypeEnum.VIDEO.getCode()),
+ CUSTOM(100,YxImTypeEnum.CUSTOM.getCode())
;
@Getter
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/im/ImImgStatusEnum.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/im/ImImgStatusEnum.java
new file mode 100644
index 00000000..4408e301
--- /dev/null
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/im/ImImgStatusEnum.java
@@ -0,0 +1,20 @@
+package com.ruoyi.cai.enums.im;
+
+import lombok.Getter;
+
+// 图片下载状态:0=未更新,1=已更新,2=已下载,3=下载失败
+@Getter
+public enum ImImgStatusEnum {
+ NO(0,"未更新"),
+ INIT(1,"已初始化"),
+ DOWNLOAD(2,"已下载"),
+ DOWNLOAD_FAIL(3,"下载失败"),
+ ;
+ private final Integer code;
+ private final String text;
+
+ ImImgStatusEnum(Integer code, String text) {
+ this.code = code;
+ this.text = text;
+ }
+}
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/ImService.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/ImService.java
index 15d9179a..7223c4d7 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/ImService.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/ImService.java
@@ -1,19 +1,37 @@
package com.ruoyi.cai.manager;
+import cn.hutool.core.lang.UUID;
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.cai.domain.Account;
import com.ruoyi.cai.domain.User;
import com.ruoyi.cai.domain.UserChatRecord;
import com.ruoyi.cai.dto.app.query.im.ImMessageDTO;
+import com.ruoyi.cai.dto.app.query.im.SaveSendImImgReq;
import com.ruoyi.cai.dto.app.vo.ImResp;
-import com.ruoyi.cai.enums.GenderEnum;
+import com.ruoyi.cai.dto.commom.im.ImgContentDTO;
import com.ruoyi.cai.enums.ChatTypeEnum;
+import com.ruoyi.cai.enums.GenderEnum;
import com.ruoyi.cai.enums.UserMemberTypeEnum;
+import com.ruoyi.cai.enums.im.ImImgStatusEnum;
+import com.ruoyi.cai.mq.AmqpProducer;
+import com.ruoyi.cai.mq.handleDelay.dto.SaveSendImImgDelayDto;
import com.ruoyi.cai.service.*;
+import com.ruoyi.cai.util.FileUtils;
import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.system.domain.vo.SysOssVo;
+import com.ruoyi.system.service.ISysOssService;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
+import java.io.File;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+
@Component
+@Slf4j
public class ImService {
@Autowired
@@ -28,6 +46,12 @@ public class ImService {
private UserChatRecordService userChatRecordService;
@Autowired
private InnerUserFilter innerUserFilter;
+ @Autowired
+ private UserBlacklistService userBlacklistService;
+ @Autowired
+ private AmqpProducer amqpProducer;
+ @Autowired
+ private ISysOssService sysOssService;
public ImResp sendMessage(Long fromUserId, ImMessageDTO message) {
ChatTypeEnum typeEnum = ChatTypeEnum.getByType(message.getType());
@@ -135,9 +159,6 @@ public class ImService {
return resp;
}
- @Autowired
- private UserBlacklistService userBlacklistService;
-
private Long getByImPrice(Long userId){
UserMemberTypeEnum userMemberType = userMemberService.checkUserIsMember(userId);
if(userMemberType == null){
@@ -151,4 +172,97 @@ public class ImService {
}
return 10L;
}
+
+ public void saveSendImImg(SaveSendImImgReq saveSendImImgReq) {
+ if(StringUtils.isBlank(saveSendImImgReq.getImageUrl())){
+ throw new ServiceException("图片url地址不存在");
+ }
+ if(saveSendImImgReq.getRecordId() == null){
+ throw new ServiceException("记录不存在");
+ }
+ UserChatRecord userChatRecord = userChatRecordService.getById(saveSendImImgReq.getRecordId());
+ if(userChatRecord == null){
+ throw new ServiceException("记录不存在");
+ }
+ if(!ChatTypeEnum.IMAGE.getImType().equals(userChatRecord.getType())){
+ throw new ServiceException("记录不是图片类型");
+ }
+ if(!ImImgStatusEnum.NO.getCode().equals(userChatRecord.getImgStatus())){
+ return;
+ }
+ ImgContentDTO content = new ImgContentDTO();
+ content.setServerId(saveSendImImgReq.getServerId());
+ content.setMessageId(saveSendImImgReq.getMessageId());
+ content.setTime(saveSendImImgReq.getTime());
+ content.setImageUrl(saveSendImImgReq.getImageUrl());
+ boolean update = userChatRecordService.update(Wrappers.lambdaUpdate(UserChatRecord.class)
+ .eq(UserChatRecord::getId, userChatRecord.getId())
+ .eq(UserChatRecord::getImgStatus, ImImgStatusEnum.NO.getCode())
+ .set(UserChatRecord::getImgStatus, ImImgStatusEnum.INIT.getCode())
+ .set(UserChatRecord::getContent, JSON.toJSONString(content)));
+ if(!update){
+ log.warn("保存图片消息 忽略,重复调用 record={}",JSON.toJSONString(userChatRecord));
+ return;
+ }
+ SaveSendImImgDelayDto dto = new SaveSendImImgDelayDto();
+ dto.setRecordId(saveSendImImgReq.getRecordId());
+ amqpProducer.sendCommonDelayMq(dto,5);
+ }
+
+
+ public void saveSendImImgDeal(Long recordId) {
+ UserChatRecord userChatRecord = userChatRecordService.getById(recordId);
+ if(userChatRecord == null){
+ log.warn("保存图片消息 忽略,记录不存在 recordId={}",recordId);
+ return;
+ }
+ if(!ChatTypeEnum.IMAGE.getImType().equals(userChatRecord.getType())){
+ log.warn("保存图片消息 忽略,记录不是图片类型 recordId={}",recordId);
+ return;
+ }
+ if(ImImgStatusEnum.DOWNLOAD.getCode().equals(userChatRecord.getImgStatus())){
+ log.warn("保存图片消息 忽略,状态错误 已经下载了 recordId={}",recordId);
+ return;
+ }
+ String contentStr = userChatRecord.getContent();
+ if(StringUtils.isBlank(contentStr)){
+ log.warn("保存图片消息 忽略,状态错误 内容为空 recordId={}",recordId);
+ return;
+ }
+ ImgContentDTO content = JSON.parseObject(contentStr, ImgContentDTO.class);
+ if(content == null || StringUtils.isBlank(content.getImageUrl())){
+ throw new ServiceException("图片url地址不存在");
+ }
+ ImImgStatusEnum imImgStatusEnum = ImImgStatusEnum.DOWNLOAD_FAIL;
+ File imgeFile = null;
+ try {
+ File tempFile = FileUtils.getTempFile();
+ imgeFile = getSaveSendImImgTempFile(tempFile, content.getImageUrl());
+ FileUtils.downloadPath(content.getImageUrl(),imgeFile);
+ SysOssVo upload = sysOssService.upload(imgeFile);
+ content.setOssImage(upload.getUrl());
+ imImgStatusEnum = ImImgStatusEnum.DOWNLOAD;
+ }catch (Exception e){
+ log.error("更新聊天图片失败",e);
+ } finally {
+ FileUtils.deleteFile(imgeFile);
+ }
+ userChatRecordService.update(Wrappers.lambdaUpdate(UserChatRecord.class)
+ .eq(UserChatRecord::getId, recordId)
+ .set(UserChatRecord::getImgStatus, imImgStatusEnum.getCode())
+ .set(UserChatRecord::getContent, JSON.toJSONString(content)));
+ }
+
+ private File getSaveSendImImgTempFile(File parentFile,String imageUrl){
+ String day = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
+ File tempFile = new File(parentFile,day);
+ if (!tempFile.exists()) {
+ tempFile.mkdirs();
+ }
+ String suffix = StringUtils.substring(imageUrl, imageUrl.lastIndexOf("."), imageUrl.length());
+ String fileName = UUID.fastUUID() + "." + suffix;
+ return new File(tempFile,fileName);
+ }
+
+
}
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/UserForbidManager.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/UserForbidManager.java
index 3de929b4..86faa99f 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/UserForbidManager.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/UserForbidManager.java
@@ -12,7 +12,8 @@ import com.ruoyi.cai.enums.forbid.ForbidTimeEnum;
import com.ruoyi.cai.enums.forbid.ForbidTypeEnum;
import com.ruoyi.cai.mq.AmqpProducer;
import com.ruoyi.cai.mq.CommonDelayTypeEnum;
-import com.ruoyi.cai.mq.dto.CommonDelayDto;
+import com.ruoyi.cai.mq.handleDelay.CommonDelayDto;
+import com.ruoyi.cai.mq.handleDelay.dto.ForbidDelayDto;
import com.ruoyi.cai.service.*;
import com.ruoyi.cai.util.CaiDateUtil;
import com.ruoyi.common.exception.ServiceException;
@@ -251,9 +252,8 @@ public class UserForbidManager {
// < 12小时
long between = CaiDateUtil.diff(userForbid.getEndTime(),LocalDateTime.now());
if(between > 0 && between < 60*60*12){
- CommonDelayDto dto = new CommonDelayDto();
+ ForbidDelayDto dto = new ForbidDelayDto();
dto.setForbidId(expireId);
- dto.setType(CommonDelayTypeEnum.USER_FORBID.getCode());
amqpProducer.sendCommonDelayMq(dto,(int)between+5);
}
}
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/AmqpProducer.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/AmqpProducer.java
index 2dfd4d54..559507c6 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/AmqpProducer.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/AmqpProducer.java
@@ -7,8 +7,8 @@ import com.ruoyi.cai.mq.config.CommonDelayMqConfig;
import com.ruoyi.cai.mq.consumer.CalculateSalesQueueConsumer;
import com.ruoyi.cai.mq.consumer.CommonConsumer;
import com.ruoyi.cai.mq.consumer.WindowConsumer;
-import com.ruoyi.cai.mq.dto.CommonDTO;
-import com.ruoyi.cai.mq.dto.CommonDelayDto;
+import com.ruoyi.cai.mq.handle.CommonDTO;
+import com.ruoyi.cai.mq.handleDelay.CommonDelayDto;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -53,7 +53,7 @@ public class AmqpProducer {
});
}
- public void sendCommonDelayMq(CommonDelayDto dto, Integer timeout){
+ public void sendCommonDelayMq(T dto, Integer timeout){
rabbitTemplate.convertAndSend(CommonDelayMqConfig.EXCHANGE_NAME,
CommonDelayMqConfig.ROUTING_KEY,
JSON.toJSONString(dto),
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/dto/CommonConsumerEnum.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/CommonConsumerEnum.java
similarity index 75%
rename from ruoyi-cai/src/main/java/com/ruoyi/cai/mq/dto/CommonConsumerEnum.java
rename to ruoyi-cai/src/main/java/com/ruoyi/cai/mq/CommonConsumerEnum.java
index 8fd02425..067798d8 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/dto/CommonConsumerEnum.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/CommonConsumerEnum.java
@@ -1,4 +1,4 @@
-package com.ruoyi.cai.mq.dto;
+package com.ruoyi.cai.mq;
public enum CommonConsumerEnum {
WINDOW_GIFT,WINDOW_RECHARGE,
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/CommonDelayTypeEnum.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/CommonDelayTypeEnum.java
index 14a34224..12ce0e0b 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/CommonDelayTypeEnum.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/CommonDelayTypeEnum.java
@@ -4,12 +4,7 @@ import lombok.Getter;
@Getter
public enum CommonDelayTypeEnum {
- USER_FORBID(1),
- SYS_PUSH(2),
- ;
- private final Integer code;
-
- CommonDelayTypeEnum(Integer code) {
- this.code = code;
- }
+ USER_FORBID,
+ SYS_PUSH,
+ SAVE_SEND_IM_IMG,
}
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/HandleConfig.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/config/HandleConfig.java
similarity index 80%
rename from ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/HandleConfig.java
rename to ruoyi-cai/src/main/java/com/ruoyi/cai/mq/config/HandleConfig.java
index d9d52956..61dfe2d6 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/HandleConfig.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/config/HandleConfig.java
@@ -1,5 +1,6 @@
-package com.ruoyi.cai.mq.handle;
+package com.ruoyi.cai.mq.config;
+import com.ruoyi.cai.mq.handle.IHandle;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -11,7 +12,7 @@ import java.util.Map;
@Component
public class HandleConfig {
- public static Map MAP = new HashMap<>();
+ public static Map MAP = new HashMap<>();
@Autowired
private List handles;
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/config/HandleDelayConfig.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/config/HandleDelayConfig.java
new file mode 100644
index 00000000..e2592367
--- /dev/null
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/config/HandleDelayConfig.java
@@ -0,0 +1,32 @@
+package com.ruoyi.cai.mq.config;
+
+import com.ruoyi.cai.mq.handleDelay.IHandleDelay;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Component
+public class HandleDelayConfig {
+
+ public static Map MAP = new HashMap<>();
+
+ @Autowired
+ private List handles;
+
+ @PostConstruct
+ public void init(){
+ for (IHandleDelay handle : handles) {
+ MAP.put(handle.getType().name(),handle);
+ }
+ }
+
+
+ public IHandleDelay getHandle(String type){
+ return MAP.get(type);
+ }
+
+}
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/consumer/CommonConsumer.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/consumer/CommonConsumer.java
index 79896bb1..8baa4722 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/consumer/CommonConsumer.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/consumer/CommonConsumer.java
@@ -2,9 +2,8 @@ package com.ruoyi.cai.mq.consumer;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
-import com.ruoyi.cai.mq.handle.HandleConfig;
+import com.ruoyi.cai.mq.config.HandleConfig;
import com.ruoyi.cai.mq.handle.IHandle;
-import com.ruoyi.cai.service.ConsumeLogService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/consumer/CommonDelayMqConsumer.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/consumer/CommonDelayMqConsumer.java
index ee145c13..56acc134 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/consumer/CommonDelayMqConsumer.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/consumer/CommonDelayMqConsumer.java
@@ -1,15 +1,18 @@
package com.ruoyi.cai.mq.consumer;
import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.cai.manager.UserForbidManager;
import com.ruoyi.cai.mq.CommonDelayTypeEnum;
import com.ruoyi.cai.mq.config.CommonDelayMqConfig;
-import com.ruoyi.cai.mq.dto.CommonDelayDto;
+import com.ruoyi.cai.mq.config.HandleDelayConfig;
+import com.ruoyi.cai.mq.handle.IHandle;
+import com.ruoyi.cai.mq.handleDelay.CommonDelayDto;
+import com.ruoyi.cai.mq.handleDelay.IHandleDelay;
import com.ruoyi.cai.service.SysPushService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.cache.Cache;
import org.springframework.stereotype.Component;
@Slf4j
@@ -19,33 +22,21 @@ public class CommonDelayMqConsumer {
private UserForbidManager userForbidManager;
@Autowired
private SysPushService sysPushService;
+ @Autowired
+ private HandleDelayConfig handleDelayConfig;
@RabbitListener(queues = CommonDelayMqConfig.QUEUE_NAME
,containerFactory = "customContainerFactory")
public void checkTimeOutMq(String message) {
- log.info("CommonDelayMqConsumer: " + message);
- CommonDelayDto dto = JSON.parseObject(message, CommonDelayDto.class);
- CommonDelayTypeEnum typeEnum = dto.getTypeEnum();
- if(typeEnum == null){
- log.warn("延时任务执行失败,未检测到正确的类型 dto={}",JSON.toJSONString(dto));
- return;
- }
- switch (typeEnum){
- case USER_FORBID:
- try {
- userForbidManager.checkExpire(dto.getForbidId());
- }catch (Exception e){
- log.error("检查用户封禁状态失败!需要开发确认!",e);
- }
- break;
- case SYS_PUSH:
- try {
- sysPushService.fastStart(dto.getSysPushId());
- }catch (Exception e){
- log.error("检查系统推送失败!需要开发确认!", e);
- }
- default:
- break;
+ log.info("公共延时队列消息处理-开始: message=" + message);
+ try {
+ JSONObject object = JSON.parseObject(message);
+ String type = object.getString("type");
+ IHandleDelay handle = handleDelayConfig.getHandle(type);
+ handle.run(message);
+ }catch (Exception e){
+ log.error("公共延时队列消息处理-失败: message=" + message,e);
}
+ log.info("公共延时队列消息处理-结束: message=" + message);
}
}
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/consumer/WindowConsumer.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/consumer/WindowConsumer.java
index e6100fd0..8ad64d07 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/consumer/WindowConsumer.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/consumer/WindowConsumer.java
@@ -2,7 +2,7 @@ package com.ruoyi.cai.mq.consumer;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
-import com.ruoyi.cai.mq.handle.HandleConfig;
+import com.ruoyi.cai.mq.config.HandleConfig;
import com.ruoyi.cai.mq.handle.IHandle;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.Exchange;
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/dto/CommonDelayDto.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/dto/CommonDelayDto.java
deleted file mode 100644
index f106161c..00000000
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/dto/CommonDelayDto.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.ruoyi.cai.mq.dto;
-
-import com.ruoyi.cai.mq.CommonDelayTypeEnum;
-import lombok.Data;
-
-@Data
-public class CommonDelayDto {
- /**
- * @see com.ruoyi.cai.mq.CommonDelayTypeEnum
- */
- private Integer type;
- private Long forbidId;
- private Long sysPushId;
-
- public CommonDelayTypeEnum getTypeEnum(){
- CommonDelayTypeEnum[] values = CommonDelayTypeEnum.values();
- for (CommonDelayTypeEnum value : values) {
- if(value.getCode().equals(this.type)){
- return value;
- }
- }
- return null;
- }
-}
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/dto/CommonDTO.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/CommonDTO.java
similarity index 54%
rename from ruoyi-cai/src/main/java/com/ruoyi/cai/mq/dto/CommonDTO.java
rename to ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/CommonDTO.java
index f1a9fd34..5e70701d 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/dto/CommonDTO.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/CommonDTO.java
@@ -1,5 +1,6 @@
-package com.ruoyi.cai.mq.dto;
+package com.ruoyi.cai.mq.handle;
+import com.ruoyi.cai.mq.CommonConsumerEnum;
import lombok.Data;
@Data
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/IHandle.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/IHandle.java
index 45e9ef19..1810718f 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/IHandle.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/IHandle.java
@@ -1,6 +1,6 @@
package com.ruoyi.cai.mq.handle;
-import com.ruoyi.cai.mq.dto.CommonConsumerEnum;
+import com.ruoyi.cai.mq.CommonConsumerEnum;
public interface IHandle {
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/LoginNotifyHandle.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/LoginNotifyHandle.java
index ac735741..eb62101f 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/LoginNotifyHandle.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/LoginNotifyHandle.java
@@ -8,7 +8,7 @@ import com.ruoyi.cai.dto.commom.IdDTO;
import com.ruoyi.cai.enums.GenderEnum;
import com.ruoyi.cai.manager.LockManager;
import com.ruoyi.cai.mapper.UserFollowMapper;
-import com.ruoyi.cai.mq.dto.CommonConsumerEnum;
+import com.ruoyi.cai.mq.CommonConsumerEnum;
import com.ruoyi.cai.mq.handle.dto.LoginNotifyDTO;
import com.ruoyi.cai.notice.YunxinHttpService;
import com.ruoyi.cai.service.UserInfoService;
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/RankNotifyHandle.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/RankNotifyHandle.java
index 8ef0d162..5341769c 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/RankNotifyHandle.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/RankNotifyHandle.java
@@ -1,7 +1,7 @@
package com.ruoyi.cai.mq.handle;
import com.alibaba.fastjson2.JSON;
-import com.ruoyi.cai.mq.dto.CommonConsumerEnum;
+import com.ruoyi.cai.mq.CommonConsumerEnum;
import com.ruoyi.cai.mq.handle.dto.RankNotifyDTO;
import com.ruoyi.cai.rank.RankManager;
import lombok.extern.slf4j.Slf4j;
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/SysPushNotifyHandle.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/SysPushNotifyHandle.java
index 4cc242cf..2754e25b 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/SysPushNotifyHandle.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/SysPushNotifyHandle.java
@@ -1,7 +1,7 @@
package com.ruoyi.cai.mq.handle;
import com.alibaba.fastjson2.JSON;
-import com.ruoyi.cai.mq.dto.CommonConsumerEnum;
+import com.ruoyi.cai.mq.CommonConsumerEnum;
import com.ruoyi.cai.mq.handle.dto.SysPushNotifyDTO;
import com.ruoyi.cai.service.SysPushService;
import lombok.extern.slf4j.Slf4j;
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/WindowGiftNotifyHandle.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/WindowGiftNotifyHandle.java
index bdfd5cd7..18f09ef4 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/WindowGiftNotifyHandle.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/WindowGiftNotifyHandle.java
@@ -4,7 +4,7 @@ import com.alibaba.fastjson2.JSON;
import com.google.common.collect.Lists;
import com.ruoyi.cai.domain.Gift;
import com.ruoyi.cai.domain.User;
-import com.ruoyi.cai.mq.dto.CommonConsumerEnum;
+import com.ruoyi.cai.mq.CommonConsumerEnum;
import com.ruoyi.cai.mq.handle.dto.WindowGiftNotifyDTO;
import com.ruoyi.cai.notice.YunxinHttpService;
import com.ruoyi.cai.notice.data.child.SendGiftWindowsAmountNoticeData;
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/WindowRechargeNotifyHandle.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/WindowRechargeNotifyHandle.java
index d168a422..b9928fd2 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/WindowRechargeNotifyHandle.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/WindowRechargeNotifyHandle.java
@@ -2,7 +2,7 @@ package com.ruoyi.cai.mq.handle;
import com.alibaba.fastjson2.JSON;
import com.google.common.collect.Lists;
-import com.ruoyi.cai.mq.dto.CommonConsumerEnum;
+import com.ruoyi.cai.mq.CommonConsumerEnum;
import com.ruoyi.cai.mq.handle.dto.WindowRechargeNotifyDTO;
import com.ruoyi.cai.notice.YunxinHttpService;
import com.ruoyi.framework.OnlineUserTodayCache;
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/LoginNotifyDTO.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/LoginNotifyDTO.java
index 755b60a6..3ee71e8f 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/LoginNotifyDTO.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/LoginNotifyDTO.java
@@ -1,7 +1,7 @@
package com.ruoyi.cai.mq.handle.dto;
-import com.ruoyi.cai.mq.dto.CommonConsumerEnum;
-import com.ruoyi.cai.mq.dto.CommonDTO;
+import com.ruoyi.cai.mq.CommonConsumerEnum;
+import com.ruoyi.cai.mq.handle.CommonDTO;
import lombok.Data;
import java.time.LocalDateTime;
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/RankNotifyDTO.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/RankNotifyDTO.java
index 14a26934..cbb58989 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/RankNotifyDTO.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/RankNotifyDTO.java
@@ -1,7 +1,7 @@
package com.ruoyi.cai.mq.handle.dto;
-import com.ruoyi.cai.mq.dto.CommonConsumerEnum;
-import com.ruoyi.cai.mq.dto.CommonDTO;
+import com.ruoyi.cai.mq.CommonConsumerEnum;
+import com.ruoyi.cai.mq.handle.CommonDTO;
import lombok.Data;
import java.time.LocalDateTime;
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/SysPushNotifyDTO.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/SysPushNotifyDTO.java
index 3398c308..b04d5c3d 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/SysPushNotifyDTO.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/SysPushNotifyDTO.java
@@ -1,7 +1,7 @@
package com.ruoyi.cai.mq.handle.dto;
-import com.ruoyi.cai.mq.dto.CommonConsumerEnum;
-import com.ruoyi.cai.mq.dto.CommonDTO;
+import com.ruoyi.cai.mq.CommonConsumerEnum;
+import com.ruoyi.cai.mq.handle.CommonDTO;
import lombok.Data;
@Data
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/WindowGiftNotifyDTO.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/WindowGiftNotifyDTO.java
index 4e295cd9..e0096c93 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/WindowGiftNotifyDTO.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/WindowGiftNotifyDTO.java
@@ -1,8 +1,8 @@
package com.ruoyi.cai.mq.handle.dto;
import com.ruoyi.cai.domain.Gift;
-import com.ruoyi.cai.mq.dto.CommonConsumerEnum;
-import com.ruoyi.cai.mq.dto.CommonDTO;
+import com.ruoyi.cai.mq.CommonConsumerEnum;
+import com.ruoyi.cai.mq.handle.CommonDTO;
import lombok.Data;
import java.time.LocalDateTime;
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/WindowRechargeNotifyDTO.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/WindowRechargeNotifyDTO.java
index 07b51344..c10d164c 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/WindowRechargeNotifyDTO.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/WindowRechargeNotifyDTO.java
@@ -1,7 +1,7 @@
package com.ruoyi.cai.mq.handle.dto;
-import com.ruoyi.cai.mq.dto.CommonConsumerEnum;
-import com.ruoyi.cai.mq.dto.CommonDTO;
+import com.ruoyi.cai.mq.CommonConsumerEnum;
+import com.ruoyi.cai.mq.handle.CommonDTO;
import lombok.Data;
import java.time.LocalDateTime;
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handleDelay/CommonDelayDto.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handleDelay/CommonDelayDto.java
new file mode 100644
index 00000000..8f84a418
--- /dev/null
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handleDelay/CommonDelayDto.java
@@ -0,0 +1,9 @@
+package com.ruoyi.cai.mq.handleDelay;
+
+import com.ruoyi.cai.mq.CommonDelayTypeEnum;
+import lombok.Data;
+
+@Data
+public class CommonDelayDto {
+ private CommonDelayTypeEnum type;
+}
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handleDelay/ForbidDelayHandle.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handleDelay/ForbidDelayHandle.java
new file mode 100644
index 00000000..ebd80505
--- /dev/null
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handleDelay/ForbidDelayHandle.java
@@ -0,0 +1,31 @@
+package com.ruoyi.cai.mq.handleDelay;
+
+import com.alibaba.fastjson2.JSON;
+import com.ruoyi.cai.manager.UserForbidManager;
+import com.ruoyi.cai.mq.CommonDelayTypeEnum;
+import com.ruoyi.cai.mq.handleDelay.dto.ForbidDelayDto;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+@Slf4j
+public class ForbidDelayHandle implements IHandleDelay {
+ @Autowired
+ private UserForbidManager userForbidManager;
+
+ @Override
+ public void run(String message) {
+ try {
+ ForbidDelayDto dto = JSON.parseObject(message, ForbidDelayDto.class);
+ userForbidManager.checkExpire(dto.getForbidId());
+ }catch (Exception e){
+ log.error("处理延时推送消息失败!",e);
+ }
+ }
+
+ @Override
+ public CommonDelayTypeEnum getType() {
+ return CommonDelayTypeEnum.USER_FORBID;
+ }
+}
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handleDelay/IHandleDelay.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handleDelay/IHandleDelay.java
new file mode 100644
index 00000000..f21ef438
--- /dev/null
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handleDelay/IHandleDelay.java
@@ -0,0 +1,10 @@
+package com.ruoyi.cai.mq.handleDelay;
+
+import com.ruoyi.cai.mq.CommonDelayTypeEnum;
+
+public interface IHandleDelay {
+
+ void run(String message);
+
+ CommonDelayTypeEnum getType();
+}
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handleDelay/SaveSendImImgDelayHandle.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handleDelay/SaveSendImImgDelayHandle.java
new file mode 100644
index 00000000..66b7aa54
--- /dev/null
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handleDelay/SaveSendImImgDelayHandle.java
@@ -0,0 +1,32 @@
+package com.ruoyi.cai.mq.handleDelay;
+
+import com.alibaba.fastjson2.JSON;
+import com.ruoyi.cai.manager.ImService;
+import com.ruoyi.cai.mq.CommonDelayTypeEnum;
+import com.ruoyi.cai.mq.handleDelay.dto.SaveSendImImgDelayDto;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+@Slf4j
+public class SaveSendImImgDelayHandle implements IHandleDelay {
+
+ @Autowired
+ private ImService imService;
+
+ @Override
+ public void run(String message) {
+ try {
+ SaveSendImImgDelayDto dto = JSON.parseObject(message, SaveSendImImgDelayDto.class);
+ imService.saveSendImImgDeal(dto.getRecordId());
+ }catch (Exception e){
+ log.error("处理延时推送消息失败!",e);
+ }
+ }
+
+ @Override
+ public CommonDelayTypeEnum getType() {
+ return CommonDelayTypeEnum.SAVE_SEND_IM_IMG;
+ }
+}
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handleDelay/SysPushDelayHandle.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handleDelay/SysPushDelayHandle.java
new file mode 100644
index 00000000..c0fff74b
--- /dev/null
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handleDelay/SysPushDelayHandle.java
@@ -0,0 +1,32 @@
+package com.ruoyi.cai.mq.handleDelay;
+
+import com.alibaba.fastjson2.JSON;
+import com.ruoyi.cai.mq.CommonDelayTypeEnum;
+import com.ruoyi.cai.mq.handleDelay.dto.SysPushDelayDto;
+import com.ruoyi.cai.service.SysPushService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+@Slf4j
+public class SysPushDelayHandle implements IHandleDelay {
+
+ @Autowired
+ private SysPushService sysPushService;
+
+ @Override
+ public void run(String message) {
+ try {
+ SysPushDelayDto dto = JSON.parseObject(message, SysPushDelayDto.class);
+ sysPushService.fastStart(dto.getSysPushId());
+ }catch (Exception e){
+ log.error("处理延时推送消息失败!",e);
+ }
+ }
+
+ @Override
+ public CommonDelayTypeEnum getType() {
+ return CommonDelayTypeEnum.SYS_PUSH;
+ }
+}
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handleDelay/dto/ForbidDelayDto.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handleDelay/dto/ForbidDelayDto.java
new file mode 100644
index 00000000..cb64ba27
--- /dev/null
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handleDelay/dto/ForbidDelayDto.java
@@ -0,0 +1,14 @@
+package com.ruoyi.cai.mq.handleDelay.dto;
+
+import com.ruoyi.cai.mq.CommonDelayTypeEnum;
+import com.ruoyi.cai.mq.handleDelay.CommonDelayDto;
+import lombok.Data;
+
+@Data
+public class ForbidDelayDto extends CommonDelayDto {
+ private Long forbidId;
+
+ public ForbidDelayDto() {
+ this.setType(CommonDelayTypeEnum.USER_FORBID);
+ }
+}
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handleDelay/dto/SaveSendImImgDelayDto.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handleDelay/dto/SaveSendImImgDelayDto.java
new file mode 100644
index 00000000..c50e268f
--- /dev/null
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handleDelay/dto/SaveSendImImgDelayDto.java
@@ -0,0 +1,14 @@
+package com.ruoyi.cai.mq.handleDelay.dto;
+
+import com.ruoyi.cai.mq.CommonDelayTypeEnum;
+import com.ruoyi.cai.mq.handleDelay.CommonDelayDto;
+import lombok.Data;
+
+@Data
+public class SaveSendImImgDelayDto extends CommonDelayDto {
+ private Long recordId;
+ public SaveSendImImgDelayDto() {
+ this.setType(CommonDelayTypeEnum.SAVE_SEND_IM_IMG);
+ }
+
+}
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handleDelay/dto/SysPushDelayDto.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handleDelay/dto/SysPushDelayDto.java
new file mode 100644
index 00000000..71eddb03
--- /dev/null
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handleDelay/dto/SysPushDelayDto.java
@@ -0,0 +1,14 @@
+package com.ruoyi.cai.mq.handleDelay.dto;
+
+import com.ruoyi.cai.mq.CommonDelayTypeEnum;
+import com.ruoyi.cai.mq.handleDelay.CommonDelayDto;
+import lombok.Data;
+
+@Data
+public class SysPushDelayDto extends CommonDelayDto {
+ private Long sysPushId;
+
+ public SysPushDelayDto() {
+ this.setType(CommonDelayTypeEnum.SYS_PUSH);
+ }
+}
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/SysPushServiceImpl.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/SysPushServiceImpl.java
index e9d61fe8..13d899fb 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/SysPushServiceImpl.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/SysPushServiceImpl.java
@@ -20,9 +20,8 @@ import com.ruoyi.cai.enums.systempush.*;
import com.ruoyi.cai.manager.SystemConfigManager;
import com.ruoyi.cai.mapper.SysPushMapper;
import com.ruoyi.cai.mq.AmqpProducer;
-import com.ruoyi.cai.mq.CommonDelayTypeEnum;
-import com.ruoyi.cai.mq.dto.CommonDelayDto;
import com.ruoyi.cai.mq.handle.dto.SysPushNotifyDTO;
+import com.ruoyi.cai.mq.handleDelay.dto.SysPushDelayDto;
import com.ruoyi.cai.notice.data.NoticeMsgR;
import com.ruoyi.cai.notice.data.NoticeOnlyImageR;
import com.ruoyi.cai.notice.data.NoticeR;
@@ -38,7 +37,7 @@ import com.ruoyi.cai.util.CaiDateUtil;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.BeanConvertUtil;
import com.ruoyi.yunxin.Yunxin;
-import com.ruoyi.yunxin.enums.ImTypeEnum;
+import com.ruoyi.yunxin.enums.YxImTypeEnum;
import com.ruoyi.yunxin.resp.YxCommonR;
import com.ruoyi.yunxin.resp.YxDataR;
import lombok.extern.slf4j.Slf4j;
@@ -179,9 +178,8 @@ public class SysPushServiceImpl extends ServiceImpl impl
try {
// 小于 < 12小时
long between = CaiDateUtil.diff(sysPush.getSendTime(), LocalDateTime.now());
- CommonDelayDto dto = new CommonDelayDto();
+ SysPushDelayDto dto = new SysPushDelayDto();
dto.setSysPushId(sysPush.getId());
- dto.setType(CommonDelayTypeEnum.SYS_PUSH.getCode());
amqpProducer.sendCommonDelayMq(dto,(int)between+2);
}catch (Exception e){
log.error("系统推送任务发送失败!",e);
@@ -321,21 +319,21 @@ public class SysPushServiceImpl extends ServiceImpl impl
}
String content = sysPush.getContent();
Object body;
- ImTypeEnum imTypeEnum;
+ YxImTypeEnum yxImTypeEnum;
switch (systemPushType){
case SIMPLE_TEXT:
body = JSON.parseObject(content, NoticeMsgR.class);
- imTypeEnum = ImTypeEnum.TXT;
+ yxImTypeEnum = YxImTypeEnum.TXT;
break;
case TEXT:
NoticeR noticeR = JSON.parseObject(content, new TypeReference>() {});
noticeR.getData().setCurrentDate();
body = noticeR;
- imTypeEnum = ImTypeEnum.CUSTOM;
+ yxImTypeEnum = YxImTypeEnum.CUSTOM;
break;
case SIMPLE_IMAGE_TEXT:
NoticeR simpleImageTextR = JSON.parseObject(content, new TypeReference>() {});
- imTypeEnum = ImTypeEnum.CUSTOM;
+ yxImTypeEnum = YxImTypeEnum.CUSTOM;
SimpleImageTextData data = simpleImageTextR.getData();
if(data.getImage() != null){
data.setImage(cosUrl+data.getImage());
@@ -352,7 +350,7 @@ public class SysPushServiceImpl extends ServiceImpl impl
}
}
body = multipleImageTextR;
- imTypeEnum = ImTypeEnum.CUSTOM;
+ yxImTypeEnum = YxImTypeEnum.CUSTOM;
break;
case ONLY_IMAGE:
NoticeOnlyImageR imageR = JSON.parseObject(content, NoticeOnlyImageR.class);
@@ -360,12 +358,12 @@ public class SysPushServiceImpl extends ServiceImpl impl
imageR.setUrl(cosUrl+imageR.getUrl());
}
body = imageR;
- imTypeEnum = ImTypeEnum.IMAGE;
+ yxImTypeEnum = YxImTypeEnum.IMAGE;
break;
default:
throw new ServiceException("消息类型有误");
}
- YxDataR r = yunxin.batchSendToNotice(userIds, body, null, imTypeEnum);
+ YxDataR r = yunxin.batchSendToNotice(userIds, body, null, yxImTypeEnum);
SendSysPushResp resp = new SendSysPushResp();
resp.setImResp(r);
return resp;
@@ -413,9 +411,8 @@ public class SysPushServiceImpl extends ServiceImpl impl
// < 12小时
long between = CaiDateUtil.diff(sysPush.getSendTime(),LocalDateTime.now());
if(between > 0 && between < 60*60*12){
- CommonDelayDto dto = new CommonDelayDto();
- dto.setForbidId(expireId);
- dto.setType(CommonDelayTypeEnum.SYS_PUSH.getCode());
+ SysPushDelayDto dto = new SysPushDelayDto();
+ dto.setSysPushId(sysPush.getId());
amqpProducer.sendCommonDelayMq(dto,(int)between+5);
}
}
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserForbidServiceImpl.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserForbidServiceImpl.java
index 3cc14061..9f6194fb 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserForbidServiceImpl.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserForbidServiceImpl.java
@@ -14,7 +14,9 @@ import com.ruoyi.cai.manager.ForbidCache;
import com.ruoyi.cai.mapper.UserForbidMapper;
import com.ruoyi.cai.mq.AmqpProducer;
import com.ruoyi.cai.mq.CommonDelayTypeEnum;
-import com.ruoyi.cai.mq.dto.CommonDelayDto;
+import com.ruoyi.cai.mq.handleDelay.CommonDelayDto;
+import com.ruoyi.cai.mq.handleDelay.dto.ForbidDelayDto;
+import com.ruoyi.cai.mq.handleDelay.dto.SysPushDelayDto;
import com.ruoyi.cai.service.AnchorService;
import com.ruoyi.cai.service.UserForbidService;
import com.ruoyi.cai.service.UserInfoService;
@@ -88,9 +90,8 @@ public class UserForbidServiceImpl extends ServiceImplcreated on 2022/6/16 11:54
+ * @author ZL
+ */
+@Slf4j
+public class FileUtils {
+
+ private final static String TEMP_PATH = "/temp";
+
+
+ public static void main(String[] args) {
+ String targetFile = "C:\\ffmpeg\\video\\55585858.mp4";
+// String filePath = "http://oss.nohi.vip/nono/20220816164358-F4A25960-F837-49B1-83F2-D41865FD46F8.mp4";
+ String filePath = "https://download-video.hik-express.com/fc/20220817184523-909E6F0C-1FE3-4D4D-8A4E-296107EF08CD.mp4?Expires=1661168603&OSSAccessKeyId=LTAI5t9GNWcPxHVUMNU3WRqD&Signature=ybHhkkdhAqYt%2F7x07KYNnPDA9OY%3D";
+ byte[] fileStream = getFileStream(filePath);
+ byteToFile(fileStream,new File(targetFile));
+ }
+
+ /**
+ * 得到文件流
+ * @param url 网络图片URL地址
+ * @return
+ */
+ public static byte[] getFileStream(String url){
+ InputStream inStream = null;
+ try {
+ URL httpUrl = new URL(url);
+ HttpURLConnection conn = (HttpURLConnection)httpUrl.openConnection();
+ conn.setRequestMethod("GET");
+ conn.setConnectTimeout(10 * 1000);
+ conn.setReadTimeout(10 * 1000);
+ inStream = conn.getInputStream();//通过输入流获取图片数据
+ return readInputStream(inStream);//得到图片的二进制数据
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ } finally {
+ if(inStream != null){
+ try {
+ inStream.close();
+ } catch (IOException e) {
+ log.error("流关闭失败",e);
+ }
+ }
+ }
+ }
+
+ public static void downloadPath(String path,File targetFile){
+ InputStream inStream = null;
+ try {
+ URL httpUrl = new URL(path);
+ HttpURLConnection conn = (HttpURLConnection)httpUrl.openConnection();
+ conn.setRequestMethod("GET");
+ conn.setConnectTimeout(10 * 1000);
+ conn.setReadTimeout(10 * 1000);
+ inStream = conn.getInputStream();//通过输入流获取图片数据
+ byte[] buffer = new byte[1024];
+ try (OutputStream os = Files.newOutputStream(targetFile.toPath())){
+ int len ;
+ while((len = inStream.read(buffer)) != -1) {
+ os.write(buffer, 0, len);
+ os.flush();
+ }
+ }
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ } finally {
+ if(inStream != null){
+ try {
+ inStream.close();
+ } catch (IOException e) {
+ log.error("流关闭失败",e);
+ }
+ }
+ }
+ }
+
+ /**
+ * 从输入流中获取数据
+ * @param inStream 输入流
+ * @return
+ * @throws Exception
+ */
+ public static byte[] readInputStream(InputStream inStream) throws Exception{
+ try (ByteArrayOutputStream outStream = new ByteArrayOutputStream()){
+ byte[] buffer = new byte[1024];
+ int len;
+ while( (len=inStream.read(buffer)) != -1 ){
+ outStream.write(buffer, 0, len);
+ }
+ return outStream.toByteArray();
+ }
+ }
+
+ /**
+ * 从输入流中获取数据
+ * @param inputStream 输入流
+ * @return
+ * @throws Exception
+ */
+ public static String readInputStreamByLine(InputStream inputStream) throws Exception{
+ StringBuilder sb = new StringBuilder();
+ try (BufferedReader br = new BufferedReader(new InputStreamReader(inputStream))){
+ String str;
+ while ((str = br.readLine()) != null) {
+ sb.append(str);
+ }
+ }
+ return sb.toString();
+ }
+
+
+ public static byte[] fileToByte(File file){
+ try (InputStream in = Files.newInputStream(file.toPath())){
+ byte[] data = new byte[in.available()];
+ in.read(data);
+ return data;
+ } catch (IOException e) {
+ throw new RuntimeException("文件转换字节失败",e);
+ }
+ }
+
+ public static void byteToFile(byte[] bytes,File file){
+ File parentFile = file.getParentFile();
+ if(!parentFile.exists()){
+ parentFile.mkdirs();
+ }
+ try (OutputStream outputStream = Files.newOutputStream(file.toPath())){
+ outputStream.write(bytes);
+ }catch (IOException e){
+ throw new RuntimeException("字节写入文件失败!",e);
+ }
+ }
+
+ public static File getTempFile() throws FileNotFoundException {
+ File path = new File(ResourceUtils.getURL("classpath:").getPath());
+ if (!path.exists()) {
+ path = new File("");
+ }
+ File tempLocation = new File(path.getAbsolutePath() + TEMP_PATH);
+ if (!tempLocation.exists()) {
+ tempLocation.mkdirs();
+ }
+ return tempLocation;
+ }
+
+ public static String getRootFIle() throws FileNotFoundException {
+ File path = new File(ResourceUtils.getURL("classpath:").getPath());
+ if (!path.exists()) {
+ path = new File("");
+ }
+ return path.getAbsolutePath();
+ }
+
+ public static boolean deleteFile(File deleteFile){
+ if(deleteFile == null || !deleteFile.isFile()){
+ return false;
+ }
+ return deleteFile.delete();
+ }
+
+ /**
+ * 删除文件
+ * @param rootFile
+ * @param deleteFilePath
+ */
+ public static void deleteFile(File rootFile, List deleteFilePath){
+ if(!rootFile.exists()){
+ return;
+ }
+ File[] files = rootFile.listFiles();
+ if(files == null){
+ return;
+ }
+ for (File file : files) {
+ if(!deleteFilePath.contains(file.getName())){
+ try {
+ String path = file.getAbsolutePath();
+ if(file.isDirectory()){
+ org.apache.commons.io.FileUtils.deleteDirectory(file);
+ log.info("del dir success. path=[{}]", path);
+ }
+ } catch (IOException e) {
+ log.error("清理文件的时候删除失败,filePath={}",file.getParentFile(),e);
+ }
+ }
+ }
+ }
+}
diff --git a/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/Yunxin.java b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/Yunxin.java
index 0c6ef251..72d8d97a 100644
--- a/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/Yunxin.java
+++ b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/Yunxin.java
@@ -3,7 +3,7 @@ package com.ruoyi.yunxin;
import com.alibaba.fastjson2.JSON;
import com.ruoyi.yunxin.client.ImMessageClient;
import com.ruoyi.yunxin.config.YunxinProperties;
-import com.ruoyi.yunxin.enums.ImTypeEnum;
+import com.ruoyi.yunxin.enums.YxImTypeEnum;
import com.ruoyi.yunxin.req.*;
import com.ruoyi.yunxin.req.type.YxTextData;
import com.ruoyi.yunxin.resp.SendMsgResp;
@@ -57,7 +57,7 @@ public class Yunxin {
return messageClient.sendBatchMsg(req);
}
- public YxDataR batchSendToNotice(List toUid, Object body, Option option, ImTypeEnum type){
+ public YxDataR batchSendToNotice(List toUid, Object body, Option option, YxImTypeEnum type){
SendBatchMsgReq req = new SendBatchMsgReq();
req.setFromAccid(SYS_NOTICE_ID);
req.setToAccids(toUid.stream().map(i -> String.valueOf(toUid)).collect(Collectors.toList()));
diff --git a/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/enums/ImTypeEnum.java b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/enums/YxImTypeEnum.java
similarity index 90%
rename from ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/enums/ImTypeEnum.java
rename to ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/enums/YxImTypeEnum.java
index de58ff61..dea691ae 100644
--- a/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/enums/ImTypeEnum.java
+++ b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/enums/YxImTypeEnum.java
@@ -8,7 +8,7 @@ import lombok.Getter;
* @author 77
*/
@Getter
-public enum ImTypeEnum {
+public enum YxImTypeEnum {
TXT(0,"文本消息"),
IMAGE(1,"图片消息"),
VOICE(2,"语音消息"),
@@ -21,7 +21,7 @@ public enum ImTypeEnum {
private final Integer code;
private final String text;
- ImTypeEnum(Integer code, String text) {
+ YxImTypeEnum(Integer code, String text) {
this.code = code;
this.text = text;
}