123333
This commit is contained in:
@@ -1,6 +1,5 @@
|
|||||||
package com.ruoyi.web.controller.cai.app;
|
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.ImMessageDTO;
|
||||||
import com.ruoyi.cai.dto.app.query.im.SaveSendImImgReq;
|
import com.ruoyi.cai.dto.app.query.im.SaveSendImImgReq;
|
||||||
import com.ruoyi.cai.dto.app.vo.ImResp;
|
import com.ruoyi.cai.dto.app.vo.ImResp;
|
||||||
@@ -37,10 +36,10 @@ public class ImAppController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/send/saveSendImImg")
|
@PostMapping("/send/saveSendImImg")
|
||||||
@Operation(summary = "更新发送的图片消息(只定义了接口,未实现逻辑,里面有点复杂)")
|
@Operation(summary = "更新发送的图片消息")
|
||||||
@Log(title = "更新发送的图片消息", businessType = BusinessType.OTHER, isSaveDb = false)
|
@Log(title = "更新发送的图片消息", businessType = BusinessType.OTHER, isSaveDb = false)
|
||||||
public R<ImResp> saveSendImImg(@Validated @RequestBody SaveSendImImgReq saveSendImImgReq){
|
public R<Void> saveSendImImg(@Validated @RequestBody SaveSendImImgReq saveSendImImgReq){
|
||||||
log.error("更新发送的图片消息 = {}", JSON.toJSONString(saveSendImImgReq));
|
imService.saveSendImImg(saveSendImImgReq);
|
||||||
return R.ok();
|
return R.ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.ruoyi.cai.enums;
|
package com.ruoyi.cai.enums;
|
||||||
|
|
||||||
|
import com.ruoyi.yunxin.enums.YxImTypeEnum;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -8,11 +9,11 @@ import lombok.Getter;
|
|||||||
* @author duet
|
* @author duet
|
||||||
*/
|
*/
|
||||||
public enum ChatTypeEnum {
|
public enum ChatTypeEnum {
|
||||||
MESSAGE(1,0),
|
MESSAGE(1, YxImTypeEnum.TXT.getCode()),
|
||||||
VOICE(2,2),
|
VOICE(2,YxImTypeEnum.VOICE.getCode()),
|
||||||
PICTURE(3,1),
|
IMAGE(3,YxImTypeEnum.IMAGE.getCode()),
|
||||||
VIDEO(4,3),
|
VIDEO(4,YxImTypeEnum.VIDEO.getCode()),
|
||||||
CUSTOM(100,100)
|
CUSTOM(100,YxImTypeEnum.CUSTOM.getCode())
|
||||||
;
|
;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,19 +1,37 @@
|
|||||||
package com.ruoyi.cai.manager;
|
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.Account;
|
||||||
import com.ruoyi.cai.domain.User;
|
import com.ruoyi.cai.domain.User;
|
||||||
import com.ruoyi.cai.domain.UserChatRecord;
|
import com.ruoyi.cai.domain.UserChatRecord;
|
||||||
import com.ruoyi.cai.dto.app.query.im.ImMessageDTO;
|
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.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.ChatTypeEnum;
|
||||||
|
import com.ruoyi.cai.enums.GenderEnum;
|
||||||
import com.ruoyi.cai.enums.UserMemberTypeEnum;
|
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.service.*;
|
||||||
|
import com.ruoyi.cai.util.FileUtils;
|
||||||
import com.ruoyi.common.exception.ServiceException;
|
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.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
|
@Slf4j
|
||||||
public class ImService {
|
public class ImService {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@@ -28,6 +46,12 @@ public class ImService {
|
|||||||
private UserChatRecordService userChatRecordService;
|
private UserChatRecordService userChatRecordService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private InnerUserFilter innerUserFilter;
|
private InnerUserFilter innerUserFilter;
|
||||||
|
@Autowired
|
||||||
|
private UserBlacklistService userBlacklistService;
|
||||||
|
@Autowired
|
||||||
|
private AmqpProducer amqpProducer;
|
||||||
|
@Autowired
|
||||||
|
private ISysOssService sysOssService;
|
||||||
|
|
||||||
public ImResp sendMessage(Long fromUserId, ImMessageDTO message) {
|
public ImResp sendMessage(Long fromUserId, ImMessageDTO message) {
|
||||||
ChatTypeEnum typeEnum = ChatTypeEnum.getByType(message.getType());
|
ChatTypeEnum typeEnum = ChatTypeEnum.getByType(message.getType());
|
||||||
@@ -135,9 +159,6 @@ public class ImService {
|
|||||||
return resp;
|
return resp;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private UserBlacklistService userBlacklistService;
|
|
||||||
|
|
||||||
private Long getByImPrice(Long userId){
|
private Long getByImPrice(Long userId){
|
||||||
UserMemberTypeEnum userMemberType = userMemberService.checkUserIsMember(userId);
|
UserMemberTypeEnum userMemberType = userMemberService.checkUserIsMember(userId);
|
||||||
if(userMemberType == null){
|
if(userMemberType == null){
|
||||||
@@ -151,4 +172,97 @@ public class ImService {
|
|||||||
}
|
}
|
||||||
return 10L;
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,8 @@ import com.ruoyi.cai.enums.forbid.ForbidTimeEnum;
|
|||||||
import com.ruoyi.cai.enums.forbid.ForbidTypeEnum;
|
import com.ruoyi.cai.enums.forbid.ForbidTypeEnum;
|
||||||
import com.ruoyi.cai.mq.AmqpProducer;
|
import com.ruoyi.cai.mq.AmqpProducer;
|
||||||
import com.ruoyi.cai.mq.CommonDelayTypeEnum;
|
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.service.*;
|
||||||
import com.ruoyi.cai.util.CaiDateUtil;
|
import com.ruoyi.cai.util.CaiDateUtil;
|
||||||
import com.ruoyi.common.exception.ServiceException;
|
import com.ruoyi.common.exception.ServiceException;
|
||||||
@@ -251,9 +252,8 @@ public class UserForbidManager {
|
|||||||
// < 12小时
|
// < 12小时
|
||||||
long between = CaiDateUtil.diff(userForbid.getEndTime(),LocalDateTime.now());
|
long between = CaiDateUtil.diff(userForbid.getEndTime(),LocalDateTime.now());
|
||||||
if(between > 0 && between < 60*60*12){
|
if(between > 0 && between < 60*60*12){
|
||||||
CommonDelayDto dto = new CommonDelayDto();
|
ForbidDelayDto dto = new ForbidDelayDto();
|
||||||
dto.setForbidId(expireId);
|
dto.setForbidId(expireId);
|
||||||
dto.setType(CommonDelayTypeEnum.USER_FORBID.getCode());
|
|
||||||
amqpProducer.sendCommonDelayMq(dto,(int)between+5);
|
amqpProducer.sendCommonDelayMq(dto,(int)between+5);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ import com.ruoyi.cai.mq.config.CommonDelayMqConfig;
|
|||||||
import com.ruoyi.cai.mq.consumer.CalculateSalesQueueConsumer;
|
import com.ruoyi.cai.mq.consumer.CalculateSalesQueueConsumer;
|
||||||
import com.ruoyi.cai.mq.consumer.CommonConsumer;
|
import com.ruoyi.cai.mq.consumer.CommonConsumer;
|
||||||
import com.ruoyi.cai.mq.consumer.WindowConsumer;
|
import com.ruoyi.cai.mq.consumer.WindowConsumer;
|
||||||
import com.ruoyi.cai.mq.dto.CommonDTO;
|
import com.ruoyi.cai.mq.handle.CommonDTO;
|
||||||
import com.ruoyi.cai.mq.dto.CommonDelayDto;
|
import com.ruoyi.cai.mq.handleDelay.CommonDelayDto;
|
||||||
import org.springframework.amqp.rabbit.core.RabbitTemplate;
|
import org.springframework.amqp.rabbit.core.RabbitTemplate;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
@@ -53,7 +53,7 @@ public class AmqpProducer {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendCommonDelayMq(CommonDelayDto dto, Integer timeout){
|
public <T extends CommonDelayDto> void sendCommonDelayMq(T dto, Integer timeout){
|
||||||
rabbitTemplate.convertAndSend(CommonDelayMqConfig.EXCHANGE_NAME,
|
rabbitTemplate.convertAndSend(CommonDelayMqConfig.EXCHANGE_NAME,
|
||||||
CommonDelayMqConfig.ROUTING_KEY,
|
CommonDelayMqConfig.ROUTING_KEY,
|
||||||
JSON.toJSONString(dto),
|
JSON.toJSONString(dto),
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.ruoyi.cai.mq.dto;
|
package com.ruoyi.cai.mq;
|
||||||
|
|
||||||
public enum CommonConsumerEnum {
|
public enum CommonConsumerEnum {
|
||||||
WINDOW_GIFT,WINDOW_RECHARGE,
|
WINDOW_GIFT,WINDOW_RECHARGE,
|
||||||
@@ -4,12 +4,7 @@ import lombok.Getter;
|
|||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
public enum CommonDelayTypeEnum {
|
public enum CommonDelayTypeEnum {
|
||||||
USER_FORBID(1),
|
USER_FORBID,
|
||||||
SYS_PUSH(2),
|
SYS_PUSH,
|
||||||
;
|
SAVE_SEND_IM_IMG,
|
||||||
private final Integer code;
|
|
||||||
|
|
||||||
CommonDelayTypeEnum(Integer code) {
|
|
||||||
this.code = code;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@@ -11,7 +12,7 @@ import java.util.Map;
|
|||||||
@Component
|
@Component
|
||||||
public class HandleConfig {
|
public class HandleConfig {
|
||||||
|
|
||||||
public static Map<String,IHandle> MAP = new HashMap<>();
|
public static Map<String, IHandle> MAP = new HashMap<>();
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private List<IHandle> handles;
|
private List<IHandle> handles;
|
||||||
@@ -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<String, IHandleDelay> MAP = new HashMap<>();
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private List<IHandleDelay> handles;
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
public void init(){
|
||||||
|
for (IHandleDelay handle : handles) {
|
||||||
|
MAP.put(handle.getType().name(),handle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public IHandleDelay getHandle(String type){
|
||||||
|
return MAP.get(type);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -2,9 +2,8 @@ package com.ruoyi.cai.mq.consumer;
|
|||||||
|
|
||||||
import com.alibaba.fastjson2.JSON;
|
import com.alibaba.fastjson2.JSON;
|
||||||
import com.alibaba.fastjson2.JSONObject;
|
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.mq.handle.IHandle;
|
||||||
import com.ruoyi.cai.service.ConsumeLogService;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.amqp.rabbit.annotation.Exchange;
|
import org.springframework.amqp.rabbit.annotation.Exchange;
|
||||||
import org.springframework.amqp.rabbit.annotation.Queue;
|
import org.springframework.amqp.rabbit.annotation.Queue;
|
||||||
|
|||||||
@@ -1,15 +1,18 @@
|
|||||||
package com.ruoyi.cai.mq.consumer;
|
package com.ruoyi.cai.mq.consumer;
|
||||||
|
|
||||||
import com.alibaba.fastjson2.JSON;
|
import com.alibaba.fastjson2.JSON;
|
||||||
|
import com.alibaba.fastjson2.JSONObject;
|
||||||
import com.ruoyi.cai.manager.UserForbidManager;
|
import com.ruoyi.cai.manager.UserForbidManager;
|
||||||
import com.ruoyi.cai.mq.CommonDelayTypeEnum;
|
import com.ruoyi.cai.mq.CommonDelayTypeEnum;
|
||||||
import com.ruoyi.cai.mq.config.CommonDelayMqConfig;
|
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 com.ruoyi.cai.service.SysPushService;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.amqp.rabbit.annotation.RabbitListener;
|
import org.springframework.amqp.rabbit.annotation.RabbitListener;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.cache.Cache;
|
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@@ -19,33 +22,21 @@ public class CommonDelayMqConsumer {
|
|||||||
private UserForbidManager userForbidManager;
|
private UserForbidManager userForbidManager;
|
||||||
@Autowired
|
@Autowired
|
||||||
private SysPushService sysPushService;
|
private SysPushService sysPushService;
|
||||||
|
@Autowired
|
||||||
|
private HandleDelayConfig handleDelayConfig;
|
||||||
|
|
||||||
@RabbitListener(queues = CommonDelayMqConfig.QUEUE_NAME
|
@RabbitListener(queues = CommonDelayMqConfig.QUEUE_NAME
|
||||||
,containerFactory = "customContainerFactory")
|
,containerFactory = "customContainerFactory")
|
||||||
public void checkTimeOutMq(String message) {
|
public void checkTimeOutMq(String message) {
|
||||||
log.info("CommonDelayMqConsumer: " + message);
|
log.info("公共延时队列消息处理-开始: message=" + message);
|
||||||
CommonDelayDto dto = JSON.parseObject(message, CommonDelayDto.class);
|
try {
|
||||||
CommonDelayTypeEnum typeEnum = dto.getTypeEnum();
|
JSONObject object = JSON.parseObject(message);
|
||||||
if(typeEnum == null){
|
String type = object.getString("type");
|
||||||
log.warn("延时任务执行失败,未检测到正确的类型 dto={}",JSON.toJSONString(dto));
|
IHandleDelay handle = handleDelayConfig.getHandle(type);
|
||||||
return;
|
handle.run(message);
|
||||||
}
|
}catch (Exception e){
|
||||||
switch (typeEnum){
|
log.error("公共延时队列消息处理-失败: message=" + message,e);
|
||||||
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package com.ruoyi.cai.mq.consumer;
|
|||||||
|
|
||||||
import com.alibaba.fastjson2.JSON;
|
import com.alibaba.fastjson2.JSON;
|
||||||
import com.alibaba.fastjson2.JSONObject;
|
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.mq.handle.IHandle;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.amqp.rabbit.annotation.Exchange;
|
import org.springframework.amqp.rabbit.annotation.Exchange;
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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;
|
import lombok.Data;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.ruoyi.cai.mq.handle;
|
package com.ruoyi.cai.mq.handle;
|
||||||
|
|
||||||
import com.ruoyi.cai.mq.dto.CommonConsumerEnum;
|
import com.ruoyi.cai.mq.CommonConsumerEnum;
|
||||||
|
|
||||||
public interface IHandle {
|
public interface IHandle {
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import com.ruoyi.cai.dto.commom.IdDTO;
|
|||||||
import com.ruoyi.cai.enums.GenderEnum;
|
import com.ruoyi.cai.enums.GenderEnum;
|
||||||
import com.ruoyi.cai.manager.LockManager;
|
import com.ruoyi.cai.manager.LockManager;
|
||||||
import com.ruoyi.cai.mapper.UserFollowMapper;
|
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.mq.handle.dto.LoginNotifyDTO;
|
||||||
import com.ruoyi.cai.notice.YunxinHttpService;
|
import com.ruoyi.cai.notice.YunxinHttpService;
|
||||||
import com.ruoyi.cai.service.UserInfoService;
|
import com.ruoyi.cai.service.UserInfoService;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.ruoyi.cai.mq.handle;
|
package com.ruoyi.cai.mq.handle;
|
||||||
|
|
||||||
import com.alibaba.fastjson2.JSON;
|
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.mq.handle.dto.RankNotifyDTO;
|
||||||
import com.ruoyi.cai.rank.RankManager;
|
import com.ruoyi.cai.rank.RankManager;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.ruoyi.cai.mq.handle;
|
package com.ruoyi.cai.mq.handle;
|
||||||
|
|
||||||
import com.alibaba.fastjson2.JSON;
|
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.mq.handle.dto.SysPushNotifyDTO;
|
||||||
import com.ruoyi.cai.service.SysPushService;
|
import com.ruoyi.cai.service.SysPushService;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import com.alibaba.fastjson2.JSON;
|
|||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.ruoyi.cai.domain.Gift;
|
import com.ruoyi.cai.domain.Gift;
|
||||||
import com.ruoyi.cai.domain.User;
|
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.mq.handle.dto.WindowGiftNotifyDTO;
|
||||||
import com.ruoyi.cai.notice.YunxinHttpService;
|
import com.ruoyi.cai.notice.YunxinHttpService;
|
||||||
import com.ruoyi.cai.notice.data.child.SendGiftWindowsAmountNoticeData;
|
import com.ruoyi.cai.notice.data.child.SendGiftWindowsAmountNoticeData;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package com.ruoyi.cai.mq.handle;
|
|||||||
|
|
||||||
import com.alibaba.fastjson2.JSON;
|
import com.alibaba.fastjson2.JSON;
|
||||||
import com.google.common.collect.Lists;
|
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.mq.handle.dto.WindowRechargeNotifyDTO;
|
||||||
import com.ruoyi.cai.notice.YunxinHttpService;
|
import com.ruoyi.cai.notice.YunxinHttpService;
|
||||||
import com.ruoyi.framework.OnlineUserTodayCache;
|
import com.ruoyi.framework.OnlineUserTodayCache;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.ruoyi.cai.mq.handle.dto;
|
package com.ruoyi.cai.mq.handle.dto;
|
||||||
|
|
||||||
import com.ruoyi.cai.mq.dto.CommonConsumerEnum;
|
import com.ruoyi.cai.mq.CommonConsumerEnum;
|
||||||
import com.ruoyi.cai.mq.dto.CommonDTO;
|
import com.ruoyi.cai.mq.handle.CommonDTO;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.ruoyi.cai.mq.handle.dto;
|
package com.ruoyi.cai.mq.handle.dto;
|
||||||
|
|
||||||
import com.ruoyi.cai.mq.dto.CommonConsumerEnum;
|
import com.ruoyi.cai.mq.CommonConsumerEnum;
|
||||||
import com.ruoyi.cai.mq.dto.CommonDTO;
|
import com.ruoyi.cai.mq.handle.CommonDTO;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.ruoyi.cai.mq.handle.dto;
|
package com.ruoyi.cai.mq.handle.dto;
|
||||||
|
|
||||||
import com.ruoyi.cai.mq.dto.CommonConsumerEnum;
|
import com.ruoyi.cai.mq.CommonConsumerEnum;
|
||||||
import com.ruoyi.cai.mq.dto.CommonDTO;
|
import com.ruoyi.cai.mq.handle.CommonDTO;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
package com.ruoyi.cai.mq.handle.dto;
|
package com.ruoyi.cai.mq.handle.dto;
|
||||||
|
|
||||||
import com.ruoyi.cai.domain.Gift;
|
import com.ruoyi.cai.domain.Gift;
|
||||||
import com.ruoyi.cai.mq.dto.CommonConsumerEnum;
|
import com.ruoyi.cai.mq.CommonConsumerEnum;
|
||||||
import com.ruoyi.cai.mq.dto.CommonDTO;
|
import com.ruoyi.cai.mq.handle.CommonDTO;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.ruoyi.cai.mq.handle.dto;
|
package com.ruoyi.cai.mq.handle.dto;
|
||||||
|
|
||||||
import com.ruoyi.cai.mq.dto.CommonConsumerEnum;
|
import com.ruoyi.cai.mq.CommonConsumerEnum;
|
||||||
import com.ruoyi.cai.mq.dto.CommonDTO;
|
import com.ruoyi.cai.mq.handle.CommonDTO;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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();
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -20,9 +20,8 @@ import com.ruoyi.cai.enums.systempush.*;
|
|||||||
import com.ruoyi.cai.manager.SystemConfigManager;
|
import com.ruoyi.cai.manager.SystemConfigManager;
|
||||||
import com.ruoyi.cai.mapper.SysPushMapper;
|
import com.ruoyi.cai.mapper.SysPushMapper;
|
||||||
import com.ruoyi.cai.mq.AmqpProducer;
|
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.handle.dto.SysPushNotifyDTO;
|
||||||
|
import com.ruoyi.cai.mq.handleDelay.dto.SysPushDelayDto;
|
||||||
import com.ruoyi.cai.notice.data.NoticeMsgR;
|
import com.ruoyi.cai.notice.data.NoticeMsgR;
|
||||||
import com.ruoyi.cai.notice.data.NoticeOnlyImageR;
|
import com.ruoyi.cai.notice.data.NoticeOnlyImageR;
|
||||||
import com.ruoyi.cai.notice.data.NoticeR;
|
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.exception.ServiceException;
|
||||||
import com.ruoyi.common.utils.BeanConvertUtil;
|
import com.ruoyi.common.utils.BeanConvertUtil;
|
||||||
import com.ruoyi.yunxin.Yunxin;
|
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.YxCommonR;
|
||||||
import com.ruoyi.yunxin.resp.YxDataR;
|
import com.ruoyi.yunxin.resp.YxDataR;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@@ -179,9 +178,8 @@ public class SysPushServiceImpl extends ServiceImpl<SysPushMapper, SysPush> impl
|
|||||||
try {
|
try {
|
||||||
// 小于 < 12小时
|
// 小于 < 12小时
|
||||||
long between = CaiDateUtil.diff(sysPush.getSendTime(), LocalDateTime.now());
|
long between = CaiDateUtil.diff(sysPush.getSendTime(), LocalDateTime.now());
|
||||||
CommonDelayDto dto = new CommonDelayDto();
|
SysPushDelayDto dto = new SysPushDelayDto();
|
||||||
dto.setSysPushId(sysPush.getId());
|
dto.setSysPushId(sysPush.getId());
|
||||||
dto.setType(CommonDelayTypeEnum.SYS_PUSH.getCode());
|
|
||||||
amqpProducer.sendCommonDelayMq(dto,(int)between+2);
|
amqpProducer.sendCommonDelayMq(dto,(int)between+2);
|
||||||
}catch (Exception e){
|
}catch (Exception e){
|
||||||
log.error("系统推送任务发送失败!",e);
|
log.error("系统推送任务发送失败!",e);
|
||||||
@@ -321,21 +319,21 @@ public class SysPushServiceImpl extends ServiceImpl<SysPushMapper, SysPush> impl
|
|||||||
}
|
}
|
||||||
String content = sysPush.getContent();
|
String content = sysPush.getContent();
|
||||||
Object body;
|
Object body;
|
||||||
ImTypeEnum imTypeEnum;
|
YxImTypeEnum yxImTypeEnum;
|
||||||
switch (systemPushType){
|
switch (systemPushType){
|
||||||
case SIMPLE_TEXT:
|
case SIMPLE_TEXT:
|
||||||
body = JSON.parseObject(content, NoticeMsgR.class);
|
body = JSON.parseObject(content, NoticeMsgR.class);
|
||||||
imTypeEnum = ImTypeEnum.TXT;
|
yxImTypeEnum = YxImTypeEnum.TXT;
|
||||||
break;
|
break;
|
||||||
case TEXT:
|
case TEXT:
|
||||||
NoticeR<ExtNoticeData> noticeR = JSON.parseObject(content, new TypeReference<NoticeR<ExtNoticeData>>() {});
|
NoticeR<ExtNoticeData> noticeR = JSON.parseObject(content, new TypeReference<NoticeR<ExtNoticeData>>() {});
|
||||||
noticeR.getData().setCurrentDate();
|
noticeR.getData().setCurrentDate();
|
||||||
body = noticeR;
|
body = noticeR;
|
||||||
imTypeEnum = ImTypeEnum.CUSTOM;
|
yxImTypeEnum = YxImTypeEnum.CUSTOM;
|
||||||
break;
|
break;
|
||||||
case SIMPLE_IMAGE_TEXT:
|
case SIMPLE_IMAGE_TEXT:
|
||||||
NoticeR<SimpleImageTextData> simpleImageTextR = JSON.parseObject(content, new TypeReference<NoticeR<SimpleImageTextData>>() {});
|
NoticeR<SimpleImageTextData> simpleImageTextR = JSON.parseObject(content, new TypeReference<NoticeR<SimpleImageTextData>>() {});
|
||||||
imTypeEnum = ImTypeEnum.CUSTOM;
|
yxImTypeEnum = YxImTypeEnum.CUSTOM;
|
||||||
SimpleImageTextData data = simpleImageTextR.getData();
|
SimpleImageTextData data = simpleImageTextR.getData();
|
||||||
if(data.getImage() != null){
|
if(data.getImage() != null){
|
||||||
data.setImage(cosUrl+data.getImage());
|
data.setImage(cosUrl+data.getImage());
|
||||||
@@ -352,7 +350,7 @@ public class SysPushServiceImpl extends ServiceImpl<SysPushMapper, SysPush> impl
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
body = multipleImageTextR;
|
body = multipleImageTextR;
|
||||||
imTypeEnum = ImTypeEnum.CUSTOM;
|
yxImTypeEnum = YxImTypeEnum.CUSTOM;
|
||||||
break;
|
break;
|
||||||
case ONLY_IMAGE:
|
case ONLY_IMAGE:
|
||||||
NoticeOnlyImageR imageR = JSON.parseObject(content, NoticeOnlyImageR.class);
|
NoticeOnlyImageR imageR = JSON.parseObject(content, NoticeOnlyImageR.class);
|
||||||
@@ -360,12 +358,12 @@ public class SysPushServiceImpl extends ServiceImpl<SysPushMapper, SysPush> impl
|
|||||||
imageR.setUrl(cosUrl+imageR.getUrl());
|
imageR.setUrl(cosUrl+imageR.getUrl());
|
||||||
}
|
}
|
||||||
body = imageR;
|
body = imageR;
|
||||||
imTypeEnum = ImTypeEnum.IMAGE;
|
yxImTypeEnum = YxImTypeEnum.IMAGE;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new ServiceException("消息类型有误");
|
throw new ServiceException("消息类型有误");
|
||||||
}
|
}
|
||||||
YxDataR<YxCommonR> r = yunxin.batchSendToNotice(userIds, body, null, imTypeEnum);
|
YxDataR<YxCommonR> r = yunxin.batchSendToNotice(userIds, body, null, yxImTypeEnum);
|
||||||
SendSysPushResp resp = new SendSysPushResp();
|
SendSysPushResp resp = new SendSysPushResp();
|
||||||
resp.setImResp(r);
|
resp.setImResp(r);
|
||||||
return resp;
|
return resp;
|
||||||
@@ -413,9 +411,8 @@ public class SysPushServiceImpl extends ServiceImpl<SysPushMapper, SysPush> impl
|
|||||||
// < 12小时
|
// < 12小时
|
||||||
long between = CaiDateUtil.diff(sysPush.getSendTime(),LocalDateTime.now());
|
long between = CaiDateUtil.diff(sysPush.getSendTime(),LocalDateTime.now());
|
||||||
if(between > 0 && between < 60*60*12){
|
if(between > 0 && between < 60*60*12){
|
||||||
CommonDelayDto dto = new CommonDelayDto();
|
SysPushDelayDto dto = new SysPushDelayDto();
|
||||||
dto.setForbidId(expireId);
|
dto.setSysPushId(sysPush.getId());
|
||||||
dto.setType(CommonDelayTypeEnum.SYS_PUSH.getCode());
|
|
||||||
amqpProducer.sendCommonDelayMq(dto,(int)between+5);
|
amqpProducer.sendCommonDelayMq(dto,(int)between+5);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,9 @@ import com.ruoyi.cai.manager.ForbidCache;
|
|||||||
import com.ruoyi.cai.mapper.UserForbidMapper;
|
import com.ruoyi.cai.mapper.UserForbidMapper;
|
||||||
import com.ruoyi.cai.mq.AmqpProducer;
|
import com.ruoyi.cai.mq.AmqpProducer;
|
||||||
import com.ruoyi.cai.mq.CommonDelayTypeEnum;
|
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.AnchorService;
|
||||||
import com.ruoyi.cai.service.UserForbidService;
|
import com.ruoyi.cai.service.UserForbidService;
|
||||||
import com.ruoyi.cai.service.UserInfoService;
|
import com.ruoyi.cai.service.UserInfoService;
|
||||||
@@ -88,9 +90,8 @@ public class UserForbidServiceImpl extends ServiceImpl<UserForbidMapper, UserFor
|
|||||||
try {
|
try {
|
||||||
// 12小时
|
// 12小时
|
||||||
long between = CaiDateUtil.diff(one.getEndTime(), LocalDateTime.now());
|
long between = CaiDateUtil.diff(one.getEndTime(), LocalDateTime.now());
|
||||||
CommonDelayDto dto = new CommonDelayDto();
|
ForbidDelayDto dto = new ForbidDelayDto();
|
||||||
dto.setForbidId(one.getId());
|
dto.setForbidId(one.getId());
|
||||||
dto.setType(CommonDelayTypeEnum.USER_FORBID.getCode());
|
|
||||||
amqpProducer.sendCommonDelayMq(dto,(int)between+2);
|
amqpProducer.sendCommonDelayMq(dto,(int)between+2);
|
||||||
}catch (Exception e){
|
}catch (Exception e){
|
||||||
log.error("用户封禁延时任务发送失败!",e);
|
log.error("用户封禁延时任务发送失败!",e);
|
||||||
|
|||||||
200
ruoyi-cai/src/main/java/com/ruoyi/cai/util/FileUtils.java
Normal file
200
ruoyi-cai/src/main/java/com/ruoyi/cai/util/FileUtils.java
Normal file
@@ -0,0 +1,200 @@
|
|||||||
|
package com.ruoyi.cai.util;
|
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.util.ResourceUtils;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件工具类
|
||||||
|
* <p>created on 2022/6/16 11:54</p>
|
||||||
|
* @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<String> 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,7 +3,7 @@ package com.ruoyi.yunxin;
|
|||||||
import com.alibaba.fastjson2.JSON;
|
import com.alibaba.fastjson2.JSON;
|
||||||
import com.ruoyi.yunxin.client.ImMessageClient;
|
import com.ruoyi.yunxin.client.ImMessageClient;
|
||||||
import com.ruoyi.yunxin.config.YunxinProperties;
|
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.*;
|
||||||
import com.ruoyi.yunxin.req.type.YxTextData;
|
import com.ruoyi.yunxin.req.type.YxTextData;
|
||||||
import com.ruoyi.yunxin.resp.SendMsgResp;
|
import com.ruoyi.yunxin.resp.SendMsgResp;
|
||||||
@@ -57,7 +57,7 @@ public class Yunxin {
|
|||||||
return messageClient.sendBatchMsg(req);
|
return messageClient.sendBatchMsg(req);
|
||||||
}
|
}
|
||||||
|
|
||||||
public YxDataR<YxCommonR> batchSendToNotice(List<Long> toUid, Object body, Option option, ImTypeEnum type){
|
public YxDataR<YxCommonR> batchSendToNotice(List<Long> toUid, Object body, Option option, YxImTypeEnum type){
|
||||||
SendBatchMsgReq req = new SendBatchMsgReq();
|
SendBatchMsgReq req = new SendBatchMsgReq();
|
||||||
req.setFromAccid(SYS_NOTICE_ID);
|
req.setFromAccid(SYS_NOTICE_ID);
|
||||||
req.setToAccids(toUid.stream().map(i -> String.valueOf(toUid)).collect(Collectors.toList()));
|
req.setToAccids(toUid.stream().map(i -> String.valueOf(toUid)).collect(Collectors.toList()));
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import lombok.Getter;
|
|||||||
* @author 77
|
* @author 77
|
||||||
*/
|
*/
|
||||||
@Getter
|
@Getter
|
||||||
public enum ImTypeEnum {
|
public enum YxImTypeEnum {
|
||||||
TXT(0,"文本消息"),
|
TXT(0,"文本消息"),
|
||||||
IMAGE(1,"图片消息"),
|
IMAGE(1,"图片消息"),
|
||||||
VOICE(2,"语音消息"),
|
VOICE(2,"语音消息"),
|
||||||
@@ -21,7 +21,7 @@ public enum ImTypeEnum {
|
|||||||
private final Integer code;
|
private final Integer code;
|
||||||
private final String text;
|
private final String text;
|
||||||
|
|
||||||
ImTypeEnum(Integer code, String text) {
|
YxImTypeEnum(Integer code, String text) {
|
||||||
this.code = code;
|
this.code = code;
|
||||||
this.text = text;
|
this.text = text;
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user