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