123
This commit is contained in:
@@ -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_TOTAL_REDIS = REDIS_P + "userGreetTotal:%s:%s";
|
||||||
public static final String USER_GREET_SEND_TIME_REDIS = REDIS_P + "userGreetSendTime:%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 BLACK_REDIS = REDIS_P + "black:%s";
|
||||||
|
|
||||||
|
public static final String FORBID_CACHE_REDIS = REDIS_P + "forbid:%s";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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<ForbidFilter> list(ForbidFilter bo, PageQuery pageQuery) {
|
||||||
|
Page<ForbidFilter> page = forbidFilterService.page(pageQuery.build(), Wrappers.lambdaQuery(bo));
|
||||||
|
return TableDataInfo.build(page);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取登陆拦截记录详细信息
|
||||||
|
*
|
||||||
|
* @param id 主键
|
||||||
|
*/
|
||||||
|
@SaCheckPermission("cai:forbidFilter:query")
|
||||||
|
@GetMapping("/{id}")
|
||||||
|
public R<ForbidFilter> 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<Void> 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<Void> 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<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||||
|
@PathVariable Long[] ids) {
|
||||||
|
return toAjax(forbidFilterService.removeBatchByIds(Arrays.asList(ids)));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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<UserForbidLog> list(UserForbidLog bo, PageQuery pageQuery) {
|
||||||
|
Page<UserForbidLog> page = userForbidLogService.page(pageQuery.build(), Wrappers.lambdaQuery(bo));
|
||||||
|
return TableDataInfo.build(page);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取封禁记录详细信息
|
||||||
|
*
|
||||||
|
* @param id 主键
|
||||||
|
*/
|
||||||
|
@SaCheckPermission("cai:userForbidLog:query")
|
||||||
|
@GetMapping("/{id}")
|
||||||
|
public R<UserForbidLog> 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<Void> 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<Void> 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<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||||
|
@PathVariable Long[] ids) {
|
||||||
|
return toAjax(userForbidLogService.removeBatchByIds(Arrays.asList(ids)));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -25,39 +25,14 @@ public class UserForbid implements Serializable {
|
|||||||
*/
|
*/
|
||||||
@TableId(value = "id",type = IdType.AUTO)
|
@TableId(value = "id",type = IdType.AUTO)
|
||||||
private Long id;
|
private Long id;
|
||||||
/**
|
|
||||||
* 类型 :1 封用户uid 2.封设备uuid 3.imei 4.mac
|
|
||||||
*/
|
|
||||||
private Integer type;
|
private Integer type;
|
||||||
/**
|
|
||||||
* 封禁来源:1.账号 2.聊天
|
|
||||||
*/
|
|
||||||
private Integer sourceId;
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
private String member;
|
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 beginTime;
|
||||||
/**
|
|
||||||
* 结束时间
|
|
||||||
*/
|
|
||||||
private LocalDateTime endTime;
|
private LocalDateTime endTime;
|
||||||
/**
|
private LocalDateTime createTime;
|
||||||
* 原始用户ID(后台编辑用)
|
|
||||||
*/
|
|
||||||
private Long originUid;
|
|
||||||
/**
|
|
||||||
* 理由
|
|
||||||
*/
|
|
||||||
private String reason;
|
private String reason;
|
||||||
|
|
||||||
private LocalDateTime createTime;
|
// 1-封禁中 2-已解封
|
||||||
|
private Integer forbidStatus;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
package com.ruoyi.cai.enums;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1.封6小时 2.封1天 3.封3天 4.封7天 5.封一个月 6.封10年
|
||||||
|
* <p>created on 2024/1/18 15:01</p>
|
||||||
|
* @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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -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<Object, Object> 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<Object, Object> redisMap = redissonClient.getMap(key);
|
||||||
|
if(!redisMap.containsKey(member)){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
Object o = redisMap.get(member);
|
||||||
|
return MapGetUtil.getLong(o);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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<ForbidFilter> {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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<UserForbidLog> {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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<ForbidFilter> {
|
||||||
|
|
||||||
|
void addForbidFilter(ForbidFilter forbidFilter);
|
||||||
|
}
|
||||||
@@ -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<UserForbidLog> {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,7 +1,9 @@
|
|||||||
package com.ruoyi.cai.service;
|
package com.ruoyi.cai.service;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
import com.ruoyi.cai.domain.User;
|
||||||
import com.ruoyi.cai.domain.UserForbid;
|
import com.ruoyi.cai.domain.UserForbid;
|
||||||
|
import com.ruoyi.cai.domain.UserForbidLog;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 封号列表Service接口
|
* 封号列表Service接口
|
||||||
@@ -11,4 +13,5 @@ import com.ruoyi.cai.domain.UserForbid;
|
|||||||
*/
|
*/
|
||||||
public interface UserForbidService extends IService<UserForbid> {
|
public interface UserForbidService extends IService<UserForbid> {
|
||||||
|
|
||||||
|
void forbid(UserForbidLog userForbidLog, User user);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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<ForbidFilterMapper,ForbidFilter> implements ForbidFilterService {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addForbidFilter(ForbidFilter forbidFilter) {
|
||||||
|
ExecutorConstant.COMMON_EXECUTOR.execute(() -> {
|
||||||
|
this.save(forbidFilter);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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<UserForbidLogMapper,UserForbidLog> implements UserForbidLogService {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,11 +1,25 @@
|
|||||||
package com.ruoyi.cai.service.impl;
|
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.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.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.mapper.UserForbidMapper;
|
||||||
|
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 lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 封号列表Service业务层处理
|
* 封号列表Service业务层处理
|
||||||
*
|
*
|
||||||
@@ -13,6 +27,68 @@ import org.springframework.stereotype.Service;
|
|||||||
* @date 2023-12-21
|
* @date 2023-12-21
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
|
@Slf4j
|
||||||
public class UserForbidServiceImpl extends ServiceImpl<UserForbidMapper, UserForbid> implements UserForbidService {
|
public class UserForbidServiceImpl extends ServiceImpl<UserForbidMapper, UserForbid> 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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE mapper
|
||||||
|
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="com.ruoyi.cai.mapper.ForbidFilterMapper">
|
||||||
|
|
||||||
|
<resultMap type="com.ruoyi.cai.domain.ForbidFilter" id="ForbidFilterResult">
|
||||||
|
<result property="id" column="id"/>
|
||||||
|
<result property="type" column="type"/>
|
||||||
|
<result property="member" column="member"/>
|
||||||
|
<result property="userId" column="user_id"/>
|
||||||
|
<result property="traceNo" column="trace_no"/>
|
||||||
|
<result property="forbidId" column="forbid_id"/>
|
||||||
|
<result property="createTime" column="create_time"/>
|
||||||
|
<result property="filterReason" column="filter_reason"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
|
||||||
|
</mapper>
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE mapper
|
||||||
|
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="com.ruoyi.cai.mapper.UserForbidLogMapper">
|
||||||
|
|
||||||
|
<resultMap type="com.ruoyi.cai.domain.UserForbidLog" id="UserForbidLogResult">
|
||||||
|
<result property="id" column="id"/>
|
||||||
|
<result property="type" column="type"/>
|
||||||
|
<result property="member" column="member"/>
|
||||||
|
<result property="forbidTime" column="forbid_time"/>
|
||||||
|
<result property="createTime" column="create_time"/>
|
||||||
|
<result property="originUid" column="origin_uid"/>
|
||||||
|
<result property="reason" column="reason"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
|
||||||
|
</mapper>
|
||||||
Reference in New Issue
Block a user