123
This commit is contained in:
28
ruoyi-cai/src/main/java/com/ruoyi/cai/job/ForbidJob.java
Normal file
28
ruoyi-cai/src/main/java/com/ruoyi/cai/job/ForbidJob.java
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
package com.ruoyi.cai.job;
|
||||||
|
|
||||||
|
import com.ruoyi.cai.manager.UserForbidManager;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.scheduling.annotation.Scheduled;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
public class ForbidJob {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private UserForbidManager userForbidManager;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 每12小时执行一次
|
||||||
|
*/
|
||||||
|
@Scheduled(cron = "0 0 11,23 * * ? ")
|
||||||
|
public void checkForbid(){
|
||||||
|
try {
|
||||||
|
userForbidManager.checkAll();
|
||||||
|
}catch (Exception e){
|
||||||
|
log.error("黑名单失效检测失败!",e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -2,12 +2,14 @@ package com.ruoyi.cai.manager;
|
|||||||
|
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import com.rabbitmq.client.LongString;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.ruoyi.cai.domain.*;
|
import com.ruoyi.cai.domain.*;
|
||||||
import com.ruoyi.cai.dto.admin.UserForbidDTO;
|
import com.ruoyi.cai.dto.admin.UserForbidDTO;
|
||||||
import com.ruoyi.cai.dto.admin.query.UserForbidReq;
|
import com.ruoyi.cai.dto.admin.query.UserForbidReq;
|
||||||
import com.ruoyi.cai.enums.ForbidTimeEnum;
|
import com.ruoyi.cai.enums.ForbidTimeEnum;
|
||||||
import com.ruoyi.cai.enums.ForbidTypeEnum;
|
import com.ruoyi.cai.enums.ForbidTypeEnum;
|
||||||
|
import com.ruoyi.cai.mq.AmqpProducer;
|
||||||
|
import com.ruoyi.cai.mq.CommonDelayDto;
|
||||||
import com.ruoyi.cai.service.*;
|
import com.ruoyi.cai.service.*;
|
||||||
import com.ruoyi.common.utils.StringUtils;
|
import com.ruoyi.common.utils.StringUtils;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@@ -17,6 +19,9 @@ import org.springframework.stereotype.Component;
|
|||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.temporal.ChronoUnit;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
@@ -159,6 +164,63 @@ public class UserForbidManager {
|
|||||||
forbidCache.unForbid(type,member);
|
forbidCache.unForbid(type,member);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void checkAll(){
|
||||||
|
List<Long> expireIds = new ArrayList<>();
|
||||||
|
List<Long> expireConsumer = new ArrayList<>();
|
||||||
|
Page<UserForbid> page = new Page<>();
|
||||||
|
page.setSize(100L);
|
||||||
|
long current = 0;
|
||||||
|
while (true){
|
||||||
|
current++;
|
||||||
|
page.setCurrent(current);
|
||||||
|
Page<UserForbid> res = userForbidService.page(page,Wrappers.lambdaQuery(UserForbid.class)
|
||||||
|
.eq(UserForbid::getForbidStatus,1));
|
||||||
|
List<UserForbid> records = res.getRecords();
|
||||||
|
if(records.isEmpty()){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
for (UserForbid record : records) {
|
||||||
|
if(record.getEndTime().isAfter(LocalDateTime.now())){
|
||||||
|
expireIds.add(record.getId());
|
||||||
|
}else if(record.getEndTime().plusHours(12).isAfter(LocalDateTime.now())){ // 还有12小时过期
|
||||||
|
expireConsumer.add(record.getId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (Long expireId : expireIds) {
|
||||||
|
checkExpire(expireId);
|
||||||
|
}
|
||||||
|
for (Long expireId : expireConsumer) {
|
||||||
|
UserForbid userForbid = userForbidService.getById(expireId);
|
||||||
|
if(userForbid == null || userForbid.getForbidStatus() == 2){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 后者 - 前者 < 12小时
|
||||||
|
long between = ChronoUnit.SECONDS.between(LocalDateTime.now(), userForbid.getEndTime());
|
||||||
|
if(between > 0 && between < 60*60*12){
|
||||||
|
CommonDelayDto dto = new CommonDelayDto();
|
||||||
|
dto.setForbidId(expireId);
|
||||||
|
dto.setType(2);
|
||||||
|
amqpProducer.sendCommonDelayMq(dto,(int)between+5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private AmqpProducer amqpProducer;
|
||||||
|
|
||||||
|
public void checkExpire(Long id){
|
||||||
|
UserForbid userForbid = userForbidService.getById(id);
|
||||||
|
if(userForbid == null || userForbid.getForbidStatus() == 2){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(!userForbid.getEndTime().isAfter(LocalDateTime.now())){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.unForbidByForbidId(id);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public static class CheckForbid implements Serializable {
|
public static class CheckForbid implements Serializable {
|
||||||
// 是否已经被封禁
|
// 是否已经被封禁
|
||||||
|
|||||||
@@ -25,6 +25,16 @@ public class AmqpProducer {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void sendCommonDelayMq(CommonDelayDto dto,Integer timeout){
|
||||||
|
rabbitTemplate.convertAndSend(CommonDelayMqConfig.EXCHANGE_NAME,
|
||||||
|
CommonDelayMqConfig.ROUTING_KEY,
|
||||||
|
JSON.toJSONString(dto),
|
||||||
|
messagePostProcessor -> {
|
||||||
|
messagePostProcessor.getMessageProperties().setDelay(timeout*1000); // 设置延迟时间,单位毫秒
|
||||||
|
return messagePostProcessor;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
public void sendCommonDelayMq(Integer type,Long roomId,Integer timeout){
|
public void sendCommonDelayMq(Integer type,Long roomId,Integer timeout){
|
||||||
CommonDelayDto dto = new CommonDelayDto();
|
CommonDelayDto dto = new CommonDelayDto();
|
||||||
dto.setType(type);
|
dto.setType(type);
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ import lombok.Data;
|
|||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class CommonDelayDto {
|
public class CommonDelayDto {
|
||||||
|
// 1- 房间检测 2-黑名单检测
|
||||||
private Integer type;
|
private Integer type;
|
||||||
private Long roomId;
|
private Long roomId;
|
||||||
|
private Long forbidId;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.ruoyi.cai.mq.consumer;
|
package com.ruoyi.cai.mq.consumer;
|
||||||
|
|
||||||
import com.alibaba.fastjson2.JSON;
|
import com.alibaba.fastjson2.JSON;
|
||||||
|
import com.ruoyi.cai.manager.UserForbidManager;
|
||||||
import com.ruoyi.cai.mq.AmqpProducer;
|
import com.ruoyi.cai.mq.AmqpProducer;
|
||||||
import com.ruoyi.cai.mq.CommonDelayDto;
|
import com.ruoyi.cai.mq.CommonDelayDto;
|
||||||
import com.ruoyi.cai.mq.CommonDelayMqConfig;
|
import com.ruoyi.cai.mq.CommonDelayMqConfig;
|
||||||
@@ -16,7 +17,7 @@ public class CommonDelayMqConsumer {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private CheckTimeOutJob checkTimeOutJob;
|
private CheckTimeOutJob checkTimeOutJob;
|
||||||
@Autowired
|
@Autowired
|
||||||
private AmqpProducer amqpProducer;
|
private UserForbidManager userForbidManager;
|
||||||
|
|
||||||
@RabbitListener(queues = CommonDelayMqConfig.QUEUE_NAME
|
@RabbitListener(queues = CommonDelayMqConfig.QUEUE_NAME
|
||||||
,containerFactory = "customContainerFactory")
|
,containerFactory = "customContainerFactory")
|
||||||
@@ -27,6 +28,9 @@ public class CommonDelayMqConsumer {
|
|||||||
case 1:
|
case 1:
|
||||||
checkTimeOutJob.deal(dto.getRoomId());
|
checkTimeOutJob.deal(dto.getRoomId());
|
||||||
break;
|
break;
|
||||||
|
case 2:
|
||||||
|
userForbidManager.checkAll();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,12 +8,13 @@ import com.ruoyi.cai.domain.Anchor;
|
|||||||
import com.ruoyi.cai.domain.User;
|
import com.ruoyi.cai.domain.User;
|
||||||
import com.ruoyi.cai.domain.UserForbid;
|
import com.ruoyi.cai.domain.UserForbid;
|
||||||
import com.ruoyi.cai.domain.UserForbidLog;
|
import com.ruoyi.cai.domain.UserForbidLog;
|
||||||
import com.ruoyi.cai.dto.admin.query.UserForbidReq;
|
|
||||||
import com.ruoyi.cai.dto.admin.vo.UserForbidAdminVo;
|
import com.ruoyi.cai.dto.admin.vo.UserForbidAdminVo;
|
||||||
import com.ruoyi.cai.enums.ForbidTimeEnum;
|
import com.ruoyi.cai.enums.ForbidTimeEnum;
|
||||||
import com.ruoyi.cai.enums.ForbidTypeEnum;
|
import com.ruoyi.cai.enums.ForbidTypeEnum;
|
||||||
import com.ruoyi.cai.manager.ForbidCache;
|
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.CommonDelayDto;
|
||||||
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.UserService;
|
import com.ruoyi.cai.service.UserService;
|
||||||
@@ -23,6 +24,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.temporal.ChronoUnit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 封号列表Service业务层处理
|
* 封号列表Service业务层处理
|
||||||
@@ -40,6 +42,8 @@ public class UserForbidServiceImpl extends ServiceImpl<UserForbidMapper, UserFor
|
|||||||
private AnchorService anchorService;
|
private AnchorService anchorService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private ForbidCache forbidCache;
|
private ForbidCache forbidCache;
|
||||||
|
@Autowired
|
||||||
|
private AmqpProducer amqpProducer;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void forbid(UserForbidLog userForbidLog, User user) {
|
public void forbid(UserForbidLog userForbidLog, User user) {
|
||||||
@@ -75,6 +79,17 @@ public class UserForbidServiceImpl extends ServiceImpl<UserForbidMapper, UserFor
|
|||||||
anchorService.update(Wrappers.lambdaUpdate(Anchor.class).eq(Anchor::getId,user.getId()).set(Anchor::getStatus,1));
|
anchorService.update(Wrappers.lambdaUpdate(Anchor.class).eq(Anchor::getId,user.getId()).set(Anchor::getStatus,1));
|
||||||
}
|
}
|
||||||
forbidCache.addForbid(one);
|
forbidCache.addForbid(one);
|
||||||
|
try {
|
||||||
|
// 后者 - 前者 < 12小时
|
||||||
|
long between = ChronoUnit.SECONDS.between(LocalDateTime.now(), endTime);
|
||||||
|
CommonDelayDto dto = new CommonDelayDto();
|
||||||
|
dto.setForbidId(one.getId());
|
||||||
|
dto.setType(2);
|
||||||
|
amqpProducer.sendCommonDelayMq(dto,(int)between+2);
|
||||||
|
}catch (Exception e){
|
||||||
|
log.error("延时任务发送失败!");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user