From 3e5b7b9984de9b394a45c998c0e67e06b2167c10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E8=89=AF=28004796=29?= Date: Thu, 18 Jan 2024 18:29:21 +0800 Subject: [PATCH] 123 --- .../com/ruoyi/cai/constant/RedisConstant.java | 2 + .../controller/ForbidFilterController.java | 95 +++++++++++++ .../admin/UserForbidLogController.java | 95 +++++++++++++ .../com/ruoyi/cai/domain/ForbidFilter.java | 54 +++++++ .../java/com/ruoyi/cai/domain/UserForbid.java | 31 +--- .../com/ruoyi/cai/domain/UserForbidLog.java | 47 ++++++ .../ruoyi/cai/dto/admin/UserForbidDTO.java | 16 +++ .../com/ruoyi/cai/enums/ForbidTimeEnum.java | 37 +++++ .../com/ruoyi/cai/enums/ForbidTypeEnum.java | 31 ++++ .../com/ruoyi/cai/manager/ForbidCache.java | 37 +++++ .../ruoyi/cai/manager/UserForbidManager.java | 134 ++++++++++++++++++ .../ruoyi/cai/mapper/ForbidFilterMapper.java | 14 ++ .../ruoyi/cai/mapper/UserForbidLogMapper.java | 14 ++ .../cai/service/ForbidFilterService.java | 16 +++ .../cai/service/UserForbidLogService.java | 14 ++ .../ruoyi/cai/service/UserForbidService.java | 3 + .../service/impl/ForbidFilterServiceImpl.java | 25 ++++ .../impl/UserForbidLogServiceImpl.java | 18 +++ .../service/impl/UserForbidServiceImpl.java | 76 ++++++++++ .../mapper/cai/ForbidFilterMapper.xml | 19 +++ .../mapper/cai/UserForbidLogMapper.xml | 18 +++ 21 files changed, 768 insertions(+), 28 deletions(-) create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/controller/ForbidFilterController.java create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/controller/admin/UserForbidLogController.java create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/domain/ForbidFilter.java create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/domain/UserForbidLog.java create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/dto/admin/UserForbidDTO.java create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/enums/ForbidTimeEnum.java create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/enums/ForbidTypeEnum.java create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/manager/ForbidCache.java create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/manager/UserForbidManager.java create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/ForbidFilterMapper.java create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/UserForbidLogMapper.java create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/service/ForbidFilterService.java create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserForbidLogService.java create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/ForbidFilterServiceImpl.java create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserForbidLogServiceImpl.java create mode 100644 ruoyi-cai/src/main/resources/mapper/cai/ForbidFilterMapper.xml create mode 100644 ruoyi-cai/src/main/resources/mapper/cai/UserForbidLogMapper.xml diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/constant/RedisConstant.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/constant/RedisConstant.java index 3e26ce79..f8c6bf0e 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/constant/RedisConstant.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/constant/RedisConstant.java @@ -10,5 +10,7 @@ public class RedisConstant { public static final String USER_GREET_TOTAL_REDIS = REDIS_P + "userGreetTotal:%s:%s"; public static final String USER_GREET_SEND_TIME_REDIS = REDIS_P + "userGreetSendTime:%s"; public static final String BLACK_REDIS = REDIS_P + "black:%s"; + + public static final String FORBID_CACHE_REDIS = REDIS_P + "forbid:%s"; } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/ForbidFilterController.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/ForbidFilterController.java new file mode 100644 index 00000000..7574fc00 --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/ForbidFilterController.java @@ -0,0 +1,95 @@ +package com.ruoyi.cai.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.cai.domain.ForbidFilter; +import com.ruoyi.cai.service.ForbidFilterService; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.annotation.RepeatSubmit; +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 lombok.RequiredArgsConstructor; +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; + +/** + * 登陆拦截记录 + * + * @author 77 + * @date 2024-01-18 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/cai/forbidFilter") +public class ForbidFilterController extends BaseController { + + private final ForbidFilterService forbidFilterService; + + /** + * 查询登陆拦截记录列表 + */ + @SaCheckPermission("cai:forbidFilter:list") + @GetMapping("/list") + public TableDataInfo list(ForbidFilter bo, PageQuery pageQuery) { + Page page = forbidFilterService.page(pageQuery.build(), Wrappers.lambdaQuery(bo)); + return TableDataInfo.build(page); + } + + /** + * 获取登陆拦截记录详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("cai:forbidFilter:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(forbidFilterService.getById(id)); + } + + /** + * 新增登陆拦截记录 + */ + @SaCheckPermission("cai:forbidFilter:add") + @Log(title = "登陆拦截记录", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody ForbidFilter bo) { + return toAjax(forbidFilterService.save(bo)); + } + + /** + * 修改登陆拦截记录 + */ + @SaCheckPermission("cai:forbidFilter:edit") + @Log(title = "登陆拦截记录", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody ForbidFilter bo) { + return toAjax(forbidFilterService.updateById(bo)); + } + + /** + * 删除登陆拦截记录 + * + * @param ids 主键串 + */ + @SaCheckPermission("cai:forbidFilter:remove") + @Log(title = "登陆拦截记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(forbidFilterService.removeBatchByIds(Arrays.asList(ids))); + } +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/admin/UserForbidLogController.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/admin/UserForbidLogController.java new file mode 100644 index 00000000..30734cec --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/admin/UserForbidLogController.java @@ -0,0 +1,95 @@ +package com.ruoyi.cai.controller.admin; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.cai.domain.UserForbidLog; +import com.ruoyi.cai.service.UserForbidLogService; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.annotation.RepeatSubmit; +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 lombok.RequiredArgsConstructor; +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; + +/** + * 封禁记录 + * + * @author 77 + * @date 2024-01-18 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/cai/userForbidLog") +public class UserForbidLogController extends BaseController { + + private final UserForbidLogService userForbidLogService; + + /** + * 查询封禁记录列表 + */ + @SaCheckPermission("cai:userForbidLog:list") + @GetMapping("/list") + public TableDataInfo list(UserForbidLog bo, PageQuery pageQuery) { + Page page = userForbidLogService.page(pageQuery.build(), Wrappers.lambdaQuery(bo)); + return TableDataInfo.build(page); + } + + /** + * 获取封禁记录详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("cai:userForbidLog:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(userForbidLogService.getById(id)); + } + + /** + * 新增封禁记录 + */ + @SaCheckPermission("cai:userForbidLog:add") + @Log(title = "封禁记录", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody UserForbidLog bo) { + return toAjax(userForbidLogService.save(bo)); + } + + /** + * 修改封禁记录 + */ + @SaCheckPermission("cai:userForbidLog:edit") + @Log(title = "封禁记录", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody UserForbidLog bo) { + return toAjax(userForbidLogService.updateById(bo)); + } + + /** + * 删除封禁记录 + * + * @param ids 主键串 + */ + @SaCheckPermission("cai:userForbidLog:remove") + @Log(title = "封禁记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(userForbidLogService.removeBatchByIds(Arrays.asList(ids))); + } +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/ForbidFilter.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/ForbidFilter.java new file mode 100644 index 00000000..7840d654 --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/ForbidFilter.java @@ -0,0 +1,54 @@ +package com.ruoyi.cai.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 登陆拦截记录对象 cai_forbid_filter + * + * @author 77 + * @date 2024-01-18 + */ +@Data +@TableName("cai_forbid_filter") +public class ForbidFilter implements Serializable { + + private static final long serialVersionUID=1L; + + /** + * + */ + @TableId(value = "id") + private Long id; + /** + * 类型 + */ + private Integer type; + /** + * 拦截数据 + */ + private String member; + /** + * 拦截用户 + */ + private Long userId; + /** + * 拦截编号 + */ + private String traceNo; + /** + * 关联ID + */ + private Long forbidId; + /** + * 理由 + */ + private String filterReason; + + private LocalDateTime createTime; + +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/UserForbid.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/UserForbid.java index 8b5560df..7dbfa25b 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/UserForbid.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/UserForbid.java @@ -25,39 +25,14 @@ public class UserForbid implements Serializable { */ @TableId(value = "id",type = IdType.AUTO) private Long id; - /** - * 类型 :1 封用户uid 2.封设备uuid 3.imei 4.mac - */ private Integer type; - /** - * 封禁来源:1.账号 2.聊天 - */ - private Integer sourceId; - /** - * - */ private String member; - /** - * 封号时长 1.封6小时 2.封1天 3.封3天 4.封5天 5.封7天 6.封一个月 7.封10年 8 一小时 9 三小时 10 十二小时 - */ - private Integer forbidTime; - /** - * 开始时间 - */ private LocalDateTime beginTime; - /** - * 结束时间 - */ private LocalDateTime endTime; - /** - * 原始用户ID(后台编辑用) - */ - private Long originUid; - /** - * 理由 - */ + private LocalDateTime createTime; private String reason; - private LocalDateTime createTime; + // 1-封禁中 2-已解封 + private Integer forbidStatus; } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/UserForbidLog.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/UserForbidLog.java new file mode 100644 index 00000000..aafe6ba1 --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/UserForbidLog.java @@ -0,0 +1,47 @@ +package com.ruoyi.cai.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 封禁记录对象 cai_user_forbid_log + * + * @author 77 + * @date 2024-01-18 + */ +@Data +@TableName("cai_user_forbid_log") +public class UserForbidLog implements Serializable { + + private static final long serialVersionUID=1L; + + /** + * + */ + @TableId(value = "id",type = IdType.AUTO) + private Long id; + /** + * 类型 :1 封用户uid 2.封设备uuid 3.imei 4.ip + */ + private Integer type; + /** + * + */ + private String member; + /** + * 封号时长 1.封6小时 2.封1天 3.封3天 4.封7天 5.封一个月 6.封10年 + */ + private Integer forbidTime; + /** + * 理由 + */ + private String reason; + + private LocalDateTime createTime; + +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/admin/UserForbidDTO.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/admin/UserForbidDTO.java new file mode 100644 index 00000000..bbb95480 --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/admin/UserForbidDTO.java @@ -0,0 +1,16 @@ +package com.ruoyi.cai.dto.admin; + +import lombok.Data; + +@Data +public class UserForbidDTO { + // 封禁时间 + private Integer forbidTime; + // 封禁类型 + private Integer forbidType; + // 封禁内容 + private String member; + // 封禁备注 + private String remark; + +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/ForbidTimeEnum.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/ForbidTimeEnum.java new file mode 100644 index 00000000..394c1730 --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/ForbidTimeEnum.java @@ -0,0 +1,37 @@ +package com.ruoyi.cai.enums; + +import lombok.Getter; + +/** + * 1.封6小时 2.封1天 3.封3天 4.封7天 5.封一个月 6.封10年 + *

created on 2024/1/18 15:01

+ * @author 77 + */ +@Getter +public enum ForbidTimeEnum { + HOUSE_6(1,"封6小时"), + DAY_1(2,"封1天"), + DAY_3(3,"封3天"), + DAY_7(4,"封7天"), + MONTH_1(5,"封一个月"), + YEAR_10(6,"封10年"), + ; + + private final Integer code; + private final String text; + + ForbidTimeEnum(Integer code, String text) { + this.code = code; + this.text = text; + } + + public static ForbidTimeEnum getByCode(Integer code){ + ForbidTimeEnum[] values = ForbidTimeEnum.values(); + for (ForbidTimeEnum value : values) { + if(value.getCode().equals(code)){ + return value; + } + } + return null; + } +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/ForbidTypeEnum.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/ForbidTypeEnum.java new file mode 100644 index 00000000..678b543a --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/ForbidTypeEnum.java @@ -0,0 +1,31 @@ +package com.ruoyi.cai.enums; + +import lombok.Getter; + +@Getter +public enum ForbidTypeEnum { + USER(1,"封用户"), + UUID(2,"封设备"), + IMEI(3,"封IMEI"), + MAC(4,"封MAC"), + IP(5,"封IP"), + ; + private final Integer code; + private final String text; + + ForbidTypeEnum(Integer code, String text) { + this.code = code; + this.text = text; + } + + public static ForbidTypeEnum getByCode(Integer code){ + ForbidTypeEnum[] values = ForbidTypeEnum.values(); + for (ForbidTypeEnum value : values) { + if(value.getCode().equals(code)){ + return value; + } + } + return null; + } +} + diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/ForbidCache.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/ForbidCache.java new file mode 100644 index 00000000..7e8fb1ea --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/ForbidCache.java @@ -0,0 +1,37 @@ +package com.ruoyi.cai.manager; + +import com.ruoyi.cai.constant.RedisConstant; +import com.ruoyi.cai.domain.UserForbid; +import com.ruoyi.cai.enums.ForbidTypeEnum; +import com.ruoyi.cai.ws.util.MapGetUtil; +import org.redisson.api.RMap; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class ForbidCache { + + @Autowired + private RedissonClient redissonClient; + + private String getKey(Integer type){ + return String.format(RedisConstant.FORBID_CACHE_REDIS,type); + } + + public void addForbid(UserForbid userForbid){ + RMap redisMap = redissonClient.getMap(getKey(userForbid.getType())); + redisMap.put(userForbid.getMember(),userForbid.getId()); + } + + public Long checkForbid(String member, ForbidTypeEnum forbidTypeEnum){ + String key = getKey(forbidTypeEnum.getCode()); + RMap redisMap = redissonClient.getMap(key); + if(!redisMap.containsKey(member)){ + return null; + } + Object o = redisMap.get(member); + return MapGetUtil.getLong(o); + + } +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/UserForbidManager.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/UserForbidManager.java new file mode 100644 index 00000000..bb6f465a --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/UserForbidManager.java @@ -0,0 +1,134 @@ +package com.ruoyi.cai.manager; + +import com.alibaba.fastjson.JSON; +import com.ruoyi.cai.domain.ForbidFilter; +import com.ruoyi.cai.domain.User; +import com.ruoyi.cai.domain.UserForbidLog; +import com.ruoyi.cai.dto.admin.UserForbidDTO; +import com.ruoyi.cai.enums.ForbidTimeEnum; +import com.ruoyi.cai.enums.ForbidTypeEnum; +import com.ruoyi.cai.service.ForbidFilterService; +import com.ruoyi.cai.service.UserForbidLogService; +import com.ruoyi.cai.service.UserForbidService; +import com.ruoyi.cai.service.UserService; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.Serializable; + +@Component +@Slf4j +public class UserForbidManager { + @Autowired + private UserForbidLogService userForbidLogService; + @Autowired + private UserForbidService userForbidService; + @Autowired + private UserService userService; + @Autowired + private ForbidCache forbidCache; + @Autowired + private ForbidFilterService forbidFilterService; + + + /** + * 封禁总入口 + */ + public void forbid(UserForbidDTO userForbidDTO){ + ForbidTimeEnum forbidTime = ForbidTimeEnum.getByCode(userForbidDTO.getForbidTime()); + ForbidTypeEnum forbidType = ForbidTypeEnum.getByCode(userForbidDTO.getForbidType()); + if(forbidTime == null || forbidType == null){ + log.error("封禁入参错误 data={}", JSON.toJSONString(userForbidDTO)); + return; + } + User user = null; + if(forbidType == ForbidTypeEnum.USER){ + user = userService.getById(userForbidDTO.getMember()); + if(user == null){ + return; + } + } + UserForbidLog userForbidLog = new UserForbidLog(); + userForbidLog.setType(userForbidDTO.getForbidType()); + userForbidLog.setMember(userForbidDTO.getMember()); + userForbidLog.setForbidTime(userForbidDTO.getForbidTime()); + userForbidLog.setReason(userForbidDTO.getRemark()); + userForbidLogService.save(userForbidLog); + userForbidService.forbid(userForbidLog,user); + } + + public CheckForbid checkForbid(Long userId,String IMEI,String ip){ + ForbidTypeEnum typeEnum; + CheckForbid noForbid = CheckForbid.noForbid(); + String member; + Long forbidId; + if(userId != null){ + forbidId = forbidCache.checkForbid(userId + "", ForbidTypeEnum.USER); + if(forbidId == null){ + return noForbid; + } + member = userId+""; + typeEnum = ForbidTypeEnum.USER; + String traceId = IdManager.nextIdStr(); + noForbid = CheckForbid.forbid(traceId); + noForbid.setMessage("您的账号已被封禁"); + + }else if(IMEI != null){ + forbidId = forbidCache.checkForbid(IMEI, ForbidTypeEnum.IMEI); + if(forbidId == null){ + return noForbid; + } + member = IMEI; + typeEnum = ForbidTypeEnum.IMEI; + String traceId = IdManager.nextIdStr(); + noForbid = CheckForbid.forbid(traceId); + noForbid.setMessage("您的设备已被封禁"); + }else if(ip != null){ + forbidId = forbidCache.checkForbid(ip, ForbidTypeEnum.IP); + if(forbidId == null){ + return noForbid; + } + member = ip; + typeEnum = ForbidTypeEnum.IP; + String traceId = IdManager.nextIdStr(); + noForbid = CheckForbid.forbid(traceId); + noForbid.setMessage("您的IP已被封禁"); + }else{ + return noForbid; + } + if(noForbid.isForbid()){ + // 保存拦截记录 + ForbidFilter filter = new ForbidFilter(); + filter.setType(typeEnum.getCode()); + filter.setMember(member); + filter.setUserId(userId); + filter.setTraceNo(noForbid.getTraceId()); + filter.setForbidId(forbidId); + filter.setFilterReason(noForbid.getMessage()); + forbidFilterService.addForbidFilter(filter); + } + return noForbid; + } + + @Data + public static class CheckForbid implements Serializable { + // 是否已经被封禁 + private boolean forbid = false; + private String traceId; + private String message; + + public static CheckForbid noForbid(){ + return new CheckForbid(); + } + + public static CheckForbid forbid(String traceId){ + CheckForbid checkForbid = new CheckForbid(); + checkForbid.setForbid(true); + checkForbid.setTraceId(traceId); + return checkForbid; + } + } + +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/ForbidFilterMapper.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/ForbidFilterMapper.java new file mode 100644 index 00000000..e15a1eab --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/ForbidFilterMapper.java @@ -0,0 +1,14 @@ +package com.ruoyi.cai.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.cai.domain.ForbidFilter; + +/** + * 登陆拦截记录Mapper接口 + * + * @author 77 + * @date 2024-01-18 + */ +public interface ForbidFilterMapper extends BaseMapper { + +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/UserForbidLogMapper.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/UserForbidLogMapper.java new file mode 100644 index 00000000..f0916fbf --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/UserForbidLogMapper.java @@ -0,0 +1,14 @@ +package com.ruoyi.cai.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.cai.domain.UserForbidLog; + +/** + * 封禁记录Mapper接口 + * + * @author 77 + * @date 2024-01-18 + */ +public interface UserForbidLogMapper extends BaseMapper { + +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/ForbidFilterService.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/ForbidFilterService.java new file mode 100644 index 00000000..912f4f5f --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/ForbidFilterService.java @@ -0,0 +1,16 @@ +package com.ruoyi.cai.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.cai.domain.ForbidFilter; +import com.ruoyi.cai.enums.ForbidTypeEnum; + +/** + * 登陆拦截记录Service接口 + * + * @author 77 + * @date 2024-01-18 + */ +public interface ForbidFilterService extends IService { + + void addForbidFilter(ForbidFilter forbidFilter); +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserForbidLogService.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserForbidLogService.java new file mode 100644 index 00000000..e2ea8212 --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserForbidLogService.java @@ -0,0 +1,14 @@ +package com.ruoyi.cai.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.cai.domain.UserForbidLog; + +/** + * 封禁记录Service接口 + * + * @author 77 + * @date 2024-01-18 + */ +public interface UserForbidLogService extends IService { + +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserForbidService.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserForbidService.java index 6a12bdd9..944e8bf8 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserForbidService.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserForbidService.java @@ -1,7 +1,9 @@ package com.ruoyi.cai.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.cai.domain.User; import com.ruoyi.cai.domain.UserForbid; +import com.ruoyi.cai.domain.UserForbidLog; /** * 封号列表Service接口 @@ -11,4 +13,5 @@ import com.ruoyi.cai.domain.UserForbid; */ public interface UserForbidService extends IService { + void forbid(UserForbidLog userForbidLog, User user); } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/ForbidFilterServiceImpl.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/ForbidFilterServiceImpl.java new file mode 100644 index 00000000..84ed72ae --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/ForbidFilterServiceImpl.java @@ -0,0 +1,25 @@ +package com.ruoyi.cai.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.cai.domain.ForbidFilter; +import com.ruoyi.cai.executor.ExecutorConstant; +import com.ruoyi.cai.mapper.ForbidFilterMapper; +import com.ruoyi.cai.service.ForbidFilterService; +import org.springframework.stereotype.Service; + +/** + * 登陆拦截记录Service业务层处理 + * + * @author 77 + * @date 2024-01-18 + */ +@Service +public class ForbidFilterServiceImpl extends ServiceImpl implements ForbidFilterService { + + @Override + public void addForbidFilter(ForbidFilter forbidFilter) { + ExecutorConstant.COMMON_EXECUTOR.execute(() -> { + this.save(forbidFilter); + }); + } +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserForbidLogServiceImpl.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserForbidLogServiceImpl.java new file mode 100644 index 00000000..98463789 --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserForbidLogServiceImpl.java @@ -0,0 +1,18 @@ +package com.ruoyi.cai.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.cai.domain.UserForbidLog; +import com.ruoyi.cai.mapper.UserForbidLogMapper; +import com.ruoyi.cai.service.UserForbidLogService; +import org.springframework.stereotype.Service; + +/** + * 封禁记录Service业务层处理 + * + * @author 77 + * @date 2024-01-18 + */ +@Service +public class UserForbidLogServiceImpl extends ServiceImpl implements UserForbidLogService { + +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserForbidServiceImpl.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserForbidServiceImpl.java index 5fea0bbe..7becdb47 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserForbidServiceImpl.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserForbidServiceImpl.java @@ -1,11 +1,25 @@ package com.ruoyi.cai.service.impl; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.cai.domain.Anchor; +import com.ruoyi.cai.domain.User; import com.ruoyi.cai.domain.UserForbid; +import com.ruoyi.cai.domain.UserForbidLog; +import com.ruoyi.cai.enums.ForbidTimeEnum; +import com.ruoyi.cai.enums.ForbidTypeEnum; +import com.ruoyi.cai.manager.ForbidCache; import com.ruoyi.cai.mapper.UserForbidMapper; +import com.ruoyi.cai.service.AnchorService; import com.ruoyi.cai.service.UserForbidService; +import com.ruoyi.cai.service.UserService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.time.LocalDateTime; + /** * 封号列表Service业务层处理 * @@ -13,6 +27,68 @@ import org.springframework.stereotype.Service; * @date 2023-12-21 */ @Service +@Slf4j public class UserForbidServiceImpl extends ServiceImpl implements UserForbidService { + @Autowired + private UserService userService; + @Autowired + private AnchorService anchorService; + @Autowired + private ForbidCache forbidCache; + + @Override + public void forbid(UserForbidLog userForbidLog, User user) { + ForbidTimeEnum forbidTime = ForbidTimeEnum.getByCode(userForbidLog.getForbidTime()); + ForbidTypeEnum forbidType = ForbidTypeEnum.getByCode(userForbidLog.getType()); + if(forbidTime == null || forbidType == null){ + log.error("封禁入参错误 data={}", JSON.toJSONString(userForbidLog)); + return; + } + UserForbid one = this.getOne(Wrappers.lambdaQuery(UserForbid.class) + .eq(UserForbid::getMember, userForbidLog.getMember()) + .eq(UserForbid::getType, forbidType.getCode())); + if(one == null){ + one = new UserForbid(); + one.setType(userForbidLog.getType()); + one.setMember(userForbidLog.getMember()); + one.setBeginTime(LocalDateTime.now()); + } else if(one.getForbidStatus() == 2){ // 已解封 + one.setBeginTime(LocalDateTime.now()); + } else if(one.getForbidStatus() == 1 && one.getEndTime().isBefore(LocalDateTime.now())){ + one.setBeginTime(LocalDateTime.now()); + } + LocalDateTime endTime = getEndTime(one.getBeginTime(), forbidTime); + if(endTime == null){ + return; + } + one.setEndTime(endTime); + one.setReason(userForbidLog.getReason()); + this.save(one); + if(user != null){ + userService.update(Wrappers.lambdaUpdate(User.class).eq(User::getId,user.getId()).set(User::getStatus,1)); + anchorService.update(Wrappers.lambdaUpdate(Anchor.class).eq(Anchor::getId,user.getId()).set(Anchor::getStatus,1)); + } + forbidCache.addForbid(one); + } + + private LocalDateTime getEndTime(LocalDateTime beginTime, ForbidTimeEnum time){ + switch (time){ + case DAY_1: + return beginTime.plusDays(1); + case DAY_3: + return beginTime.plusDays(3); + case DAY_7: + return beginTime.plusDays(7); + case HOUSE_6: + return beginTime.plusHours(6); + case MONTH_1: + return beginTime.plusMonths(1); + case YEAR_10: + return beginTime.plusYears(10); + default: + break; + } + return null; + } } diff --git a/ruoyi-cai/src/main/resources/mapper/cai/ForbidFilterMapper.xml b/ruoyi-cai/src/main/resources/mapper/cai/ForbidFilterMapper.xml new file mode 100644 index 00000000..66148c68 --- /dev/null +++ b/ruoyi-cai/src/main/resources/mapper/cai/ForbidFilterMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + diff --git a/ruoyi-cai/src/main/resources/mapper/cai/UserForbidLogMapper.xml b/ruoyi-cai/src/main/resources/mapper/cai/UserForbidLogMapper.xml new file mode 100644 index 00000000..58c7718e --- /dev/null +++ b/ruoyi-cai/src/main/resources/mapper/cai/UserForbidLogMapper.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + +