This commit is contained in:
张良(004796)
2024-01-19 19:11:18 +08:00
parent 87ed8dbfa7
commit f759a2e45f
6 changed files with 124 additions and 3 deletions

View File

@@ -2,12 +2,14 @@ package com.ruoyi.cai.manager;
import com.alibaba.fastjson.JSON;
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.dto.admin.UserForbidDTO;
import com.ruoyi.cai.dto.admin.query.UserForbidReq;
import com.ruoyi.cai.enums.ForbidTimeEnum;
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.common.utils.StringUtils;
import lombok.Data;
@@ -17,6 +19,9 @@ import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.List;
@Component
@@ -159,6 +164,63 @@ public class UserForbidManager {
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
public static class CheckForbid implements Serializable {
// 是否已经被封禁