This commit is contained in:
张良(004796)
2024-02-06 16:56:03 +08:00
parent c827dbc0aa
commit 90356b55c8
40 changed files with 622 additions and 121 deletions

View File

@@ -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 <T extends CommonDelayDto> void sendCommonDelayMq(T dto, Integer timeout){
rabbitTemplate.convertAndSend(CommonDelayMqConfig.EXCHANGE_NAME,
CommonDelayMqConfig.ROUTING_KEY,
JSON.toJSONString(dto),

View File

@@ -1,4 +1,4 @@
package com.ruoyi.cai.mq.dto;
package com.ruoyi.cai.mq;
public enum CommonConsumerEnum {
WINDOW_GIFT,WINDOW_RECHARGE,

View File

@@ -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,
}

View File

@@ -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<String,IHandle> MAP = new HashMap<>();
public static Map<String, IHandle> MAP = new HashMap<>();
@Autowired
private List<IHandle> handles;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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

View File

@@ -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 {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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();
}

View File

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

View File

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

View File

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

View File

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

View File

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