This commit is contained in:
张良(004796)
2024-01-31 22:36:50 +08:00
parent 98458c32fa
commit b725191b1a
11 changed files with 101 additions and 37 deletions

View File

@@ -2,15 +2,13 @@ package com.ruoyi.web.controller.cai.admin;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.net.Ipv4Util;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.cai.domain.UserForbid;
import com.ruoyi.cai.dto.admin.UserForbidDTO;
import com.ruoyi.cai.dto.admin.query.forbid.UserForbidIpReq;
import com.ruoyi.cai.dto.admin.vo.UserForbidAdminVo;
import com.ruoyi.cai.dto.admin.vo.userforbid.UserForbidInfo;
import com.ruoyi.cai.enums.ForbidTimeEnum;
import com.ruoyi.cai.enums.ForbidTypeEnum;
import com.ruoyi.cai.enums.forbid.ForbidTypeEnum;
import com.ruoyi.cai.manager.UserForbidManager;
import com.ruoyi.cai.service.UserForbidService;
import com.ruoyi.cai.util.IpAddressUtil;
@@ -20,18 +18,13 @@ import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.validate.AddGroup;
import com.ruoyi.common.core.validate.EditGroup;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.exception.ServiceException;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.Arrays;
/**
* 封号列表

View File

@@ -10,6 +10,9 @@ public class UserForbidInfo {
private User user;
private UserInfo userInfo;
private UserForbid userForbid;
private String userForbidBetween;
private UserForbid ipUserForbid;
private String ipForbidBetween;
}

View File

@@ -0,0 +1,18 @@
package com.ruoyi.cai.enums;
import lombok.Getter;
@Getter
public enum ForbidStatusEnum {
// 1-封禁中 2-已解封
FORBID(1,"封禁中"),
NORMAL(2,"已解封"),
;
private final Integer code;
private final String text;
ForbidStatusEnum(Integer code, String text) {
this.code = code;
this.text = text;
}
}

View File

@@ -1,4 +1,4 @@
package com.ruoyi.cai.enums;
package com.ruoyi.cai.enums.forbid;
import lombok.Getter;

View File

@@ -1,4 +1,4 @@
package com.ruoyi.cai.enums;
package com.ruoyi.cai.enums.forbid;
import lombok.Getter;

View File

@@ -2,7 +2,7 @@ package com.ruoyi.cai.manager;
import com.ruoyi.cai.constant.RedisHttpConstant;
import com.ruoyi.cai.domain.UserForbid;
import com.ruoyi.cai.enums.ForbidTypeEnum;
import com.ruoyi.cai.enums.forbid.ForbidTypeEnum;
import com.ruoyi.common.utils.MapGetUtil;
import org.redisson.api.RMap;
import org.redisson.api.RedissonClient;

View File

@@ -6,8 +6,9 @@ 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.enums.ForbidStatusEnum;
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;
@@ -22,7 +23,6 @@ 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;
@@ -155,7 +155,7 @@ public class UserForbidManager {
UserForbid userForbid = userForbidService.getById(id);
userForbidService.update(Wrappers.lambdaUpdate(UserForbid.class)
.eq(UserForbid::getId,userForbid.getId())
.set(UserForbid::getForbidStatus,2));
.set(UserForbid::getForbidStatus, ForbidStatusEnum.NORMAL.getCode()));
if(ForbidTypeEnum.USER.getCode().equals(userForbid.getType())){
User user = userService.getByUserCode(userForbid.getMember());
userService.update(Wrappers.lambdaUpdate(User.class).eq(User::getId,user.getId()).set(User::getStatus,0));
@@ -178,7 +178,7 @@ public class UserForbidManager {
current++;
page.setCurrent(current);
Page<UserForbid> res = userForbidService.page(page,Wrappers.lambdaQuery(UserForbid.class)
.eq(UserForbid::getForbidStatus,1));
.eq(UserForbid::getForbidStatus,ForbidStatusEnum.FORBID.getCode()));
List<UserForbid> records = res.getRecords();
if(records.isEmpty()){
break;
@@ -196,7 +196,7 @@ public class UserForbidManager {
}
for (Long expireId : expireConsumer) {
UserForbid userForbid = userForbidService.getById(expireId);
if(userForbid == null || userForbid.getForbidStatus() == 2){
if(userForbid == null || ForbidStatusEnum.NORMAL.getCode().equals(userForbid.getForbidStatus())){
return;
}
// < 12小时
@@ -215,7 +215,7 @@ public class UserForbidManager {
public void checkExpire(Long id){
UserForbid userForbid = userForbidService.getById(id);
if(userForbid == null || userForbid.getForbidStatus() == 2){
if(userForbid == null || ForbidStatusEnum.NORMAL.getCode().equals(userForbid.getForbidStatus())){
return;
}
if(!userForbid.getEndTime().isAfter(LocalDateTime.now())){

View File

@@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.cai.domain.ForbidFilter;
import com.ruoyi.cai.dto.admin.vo.ForbidFilterAdminVo;
import com.ruoyi.cai.enums.ForbidTypeEnum;
import com.ruoyi.common.core.domain.PageQuery;
/**

View File

@@ -7,8 +7,8 @@ import com.ruoyi.cai.domain.UserErrorLog;
import com.ruoyi.cai.dto.admin.UserForbidDTO;
import com.ruoyi.cai.dto.admin.vo.UserErrorLogAdminVo;
import com.ruoyi.cai.dto.app.query.push.PushErrorReq;
import com.ruoyi.cai.enums.ForbidTimeEnum;
import com.ruoyi.cai.enums.ForbidTypeEnum;
import com.ruoyi.cai.enums.forbid.ForbidTimeEnum;
import com.ruoyi.cai.enums.forbid.ForbidTypeEnum;
import com.ruoyi.cai.enums.user.UserErrorLogHomeIndexEnum;
import com.ruoyi.cai.enums.user.UserErrorLogType;
import com.ruoyi.cai.manager.UserForbidManager;

View File

@@ -5,12 +5,11 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.cai.domain.*;
import com.ruoyi.cai.dto.admin.UserForbidDTO;
import com.ruoyi.cai.dto.admin.query.forbid.UserForbidIpReq;
import com.ruoyi.cai.dto.admin.vo.UserForbidAdminVo;
import com.ruoyi.cai.dto.admin.vo.userforbid.UserForbidInfo;
import com.ruoyi.cai.enums.ForbidTimeEnum;
import com.ruoyi.cai.enums.ForbidTypeEnum;
import com.ruoyi.cai.enums.ForbidStatusEnum;
import com.ruoyi.cai.enums.forbid.ForbidTimeEnum;
import com.ruoyi.cai.enums.forbid.ForbidTypeEnum;
import com.ruoyi.cai.manager.ForbidCache;
import com.ruoyi.cai.mapper.UserForbidMapper;
import com.ruoyi.cai.mq.AmqpProducer;
@@ -22,13 +21,11 @@ import com.ruoyi.cai.service.UserInfoService;
import com.ruoyi.cai.service.UserService;
import com.ruoyi.cai.util.CaiDateUtil;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.exception.ServiceException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
/**
* 封号列表Service业务层处理
@@ -67,9 +64,9 @@ public class UserForbidServiceImpl extends ServiceImpl<UserForbidMapper, UserFor
one.setType(userForbidLog.getType());
one.setMember(userForbidLog.getMember());
one.setBeginTime(LocalDateTime.now());
} else if(one.getForbidStatus() == 2){ // 已解封
} else if(ForbidStatusEnum.NORMAL.getCode().equals(one.getForbidStatus())){ // 已解封
one.setBeginTime(LocalDateTime.now());
} else if(one.getForbidStatus() == 1 && one.getEndTime().isBefore(LocalDateTime.now())){
} else if(ForbidStatusEnum.FORBID.getCode().equals(one.getForbidStatus()) && one.getEndTime().isBefore(LocalDateTime.now())){
one.setBeginTime(LocalDateTime.now());
}
LocalDateTime endTime = getEndTime(one.getBeginTime(), forbidTime);
@@ -78,7 +75,7 @@ public class UserForbidServiceImpl extends ServiceImpl<UserForbidMapper, UserFor
}
one.setEndTime(endTime);
one.setReason(userForbidLog.getReason());
one.setForbidStatus(1);
one.setForbidStatus(ForbidStatusEnum.FORBID.getCode());
this.saveOrUpdate(one);
if(user != null){
userService.update(Wrappers.lambdaUpdate(User.class).eq(User::getId,user.getId()).set(User::getStatus,1));
@@ -111,15 +108,22 @@ public class UserForbidServiceImpl extends ServiceImpl<UserForbidMapper, UserFor
return null;
}
UserForbidInfo userForbidInfo = new UserForbidInfo();
userForbidInfo.setUser(user);
userForbidInfo.setUserInfo(userInfo);
UserForbid userForbid = this.getOne(Wrappers.lambdaQuery(UserForbid.class)
.eq(UserForbid::getType, ForbidTypeEnum.USER.getCode()).last("limit 1"));
if(userForbid != null && userForbid.getForbidStatus() == 1 && userForbid.getEndTime().isAfter(LocalDateTime.now())){
.eq(UserForbid::getMember, user.getUsercode())
.eq(UserForbid::getType, ForbidTypeEnum.USER.getCode())
.last("limit 1"));
if(userForbid != null && ForbidStatusEnum.FORBID.getCode().equals(userForbid.getForbidStatus()) && userForbid.getEndTime().isAfter(LocalDateTime.now())){
userForbidInfo.setUserForbid(userForbid);
userForbidInfo.setUserForbidBetween(CaiDateUtil.betweenShowString(LocalDateTime.now(),userForbid.getEndTime()));
}
UserForbid ipUserForbid = this.getOne(Wrappers.lambdaQuery(UserForbid.class)
.eq(UserForbid::getMember, userInfo.getLastLoginIp())
.eq(UserForbid::getType, ForbidTypeEnum.IP.getCode()).last("limit 1"));
if(userForbid != null && userForbid.getForbidStatus() == 1 && userForbid.getEndTime().isAfter(LocalDateTime.now())){
if(ipUserForbid != null && ForbidStatusEnum.FORBID.getCode().equals(ipUserForbid.getForbidStatus()) && ipUserForbid.getEndTime().isAfter(LocalDateTime.now())){
userForbidInfo.setIpUserForbid(ipUserForbid);
userForbidInfo.setIpForbidBetween(CaiDateUtil.betweenShowString(LocalDateTime.now(),ipUserForbid.getEndTime()));
}
return userForbidInfo;
}

View File

@@ -3,9 +3,7 @@ package com.ruoyi.cai.util;
import cn.hutool.core.date.DateUtil;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjusters;
@@ -21,6 +19,56 @@ public class CaiDateUtil {
return ChronoUnit.SECONDS.between(after, before);
}
public static String betweenShowString(LocalDateTime minTime,LocalDateTime maxTime){
Duration duration = Duration.between(minTime, maxTime);
long seconds = duration.getSeconds();
long absSeconds = Math.abs(seconds);
long days = absSeconds / (60 * 60 * 24);
long hours = (absSeconds % (60 * 60 * 24)) / (60 * 60);
long minutes = (absSeconds % (60 * 60)) / 60;
if(days < 30){
return days+""+hours+"小时"+minutes+"分钟";
}
Period period = Period.between(minTime.toLocalDate(), maxTime.toLocalDate());
StringBuilder stringBuilder = new StringBuilder();
if(period.getYears() != 0){
stringBuilder.append(period.getYears()).append("");
}
if(period.getMonths() != 0){
stringBuilder.append(period.getMonths()).append("");
}
if(period.getDays() != 0){
stringBuilder.append(period.getDays()).append("");
}
return stringBuilder.toString();
}
public static void main(String[] args) {
// 两个时间点
LocalDateTime dateTime1 = LocalDateTime.of(2020, 5, 20, 12, 0, 0);
LocalDateTime dateTime2 = LocalDateTime.of(2024, 1, 15, 11, 30, 0);
// 计算日期间隔
Period period = Period.between(dateTime1.toLocalDate(), dateTime2.toLocalDate());
// 输出年、月、日间隔
System.out.println("间隔: " + period.getYears() + "" + period.getMonths() + " 个月 " + period.getDays() + "");
// 计算时间间隔
Duration duration = Duration.between(dateTime1, dateTime2);
// 输出时、分、秒间隔
long seconds = duration.getSeconds();
long absSeconds = Math.abs(seconds);
long days = absSeconds / (60 * 60 * 24);
long hours = (absSeconds % (60 * 60 * 24)) / (60 * 60);
long minutes = (absSeconds % (60 * 60)) / 60;
long secs = absSeconds % 60;
System.out.println("时间间隔: " + days + "" + hours + " 小时 " + minutes + " 分钟 " + secs + "");
}
public static LocalDate getLastWeekOne(LocalDate date){
@@ -42,6 +90,5 @@ public class CaiDateUtil {
public static String getCurrentTimeStr() {
return localDateTimeToString(LocalDateTime.now());
}
}