瀏覽代碼

feat : ip封禁管理接口提交

bilingfeng 2 年之前
父節點
當前提交
424f012458
共有 18 個文件被更改,包括 599 次插入0 次删除
  1. 35 0
      game-module/game-common/src/main/java/com/zanxiang/common/enums/BanStatusEnum.java
  2. 56 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/controller/BanController.java
  3. 3 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/domain/params/GameCategoryListParam.java
  4. 21 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/domain/params/IpBanAddParam.java
  5. 29 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/domain/params/IpBanListParam.java
  6. 30 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/domain/params/IpBanUpdateParam.java
  7. 45 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/domain/vo/IpBanVO.java
  8. 9 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/domain/vo/UserBanVO.java
  9. 120 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/service/Impl/IpBanServiceImpl.java
  10. 18 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/service/Impl/UserBanServiceImpl.java
  11. 39 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/service/IpBanService.java
  12. 9 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/service/UserBanService.java
  13. 68 0
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/IpBan.java
  14. 85 0
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/UserBan.java
  15. 12 0
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/mapper/IpBanMapper.java
  16. 12 0
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/mapper/UserBanMapper.java
  17. 4 0
      game-module/game-mybatis/src/main/resources/mapper/IpBanMapper.xml
  18. 4 0
      game-module/game-mybatis/src/main/resources/mapper/UserBanMapper.xml

+ 35 - 0
game-module/game-common/src/main/java/com/zanxiang/common/enums/BanStatusEnum.java

@@ -0,0 +1,35 @@
+package com.zanxiang.common.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-06-28
+ * @description : ip封禁管理状态
+ */
+@Getter
+@AllArgsConstructor
+public enum BanStatusEnum {
+
+    /**
+     * 正常
+     */
+    NORMAL_STATUS(0, "正常"),
+
+    /**
+     * 封禁
+     */
+    BAN_STATUS(1, "封禁");
+
+    /**
+     * 状态
+     */
+    private Integer status;
+
+    /**
+     * 描述
+     */
+    private String describe;
+
+}

+ 56 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/controller/BanController.java

@@ -0,0 +1,56 @@
+package com.zanxiang.manage.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.zanxiang.common.domain.ResultVo;
+import com.zanxiang.manage.domain.params.IpBanAddParam;
+import com.zanxiang.manage.domain.params.IpBanListParam;
+import com.zanxiang.manage.domain.params.IpBanUpdateParam;
+import com.zanxiang.manage.domain.vo.IpBanVO;
+import com.zanxiang.manage.service.IpBanService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-06-28
+ * @description : 封禁管理接口
+ */
+@Api(tags = {"封禁管理接口"})
+@RestController
+@RequestMapping("/ban")
+@Slf4j
+public class BanController {
+
+    @Autowired
+    private IpBanService ipBanService;
+
+    @ApiOperation(value = "查询ip封禁列表")
+    @PostMapping(value = "/ip/list")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = IpBanVO.class)})
+    public ResultVo<IPage<IpBanVO>> list(@Validated @RequestBody IpBanListParam param) {
+        return new ResultVo<>(ipBanService.list(param));
+    }
+
+    @ApiOperation(value = "添加封禁ip")
+    @PostMapping(value = "/ip/add")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = Boolean.class)})
+    public ResultVo<Boolean> addIp(@Validated @RequestBody IpBanAddParam param) {
+        return new ResultVo<>(ipBanService.addIp(param));
+    }
+
+    @ApiOperation(value = "添加封禁ip")
+    @PostMapping(value = "/ip/update")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = Boolean.class)})
+    public ResultVo<Boolean> ipBanOrRemove(@Validated @RequestBody IpBanUpdateParam param) {
+        return new ResultVo<>(ipBanService.ipBanOrRemove(param));
+    }
+}

+ 3 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/domain/params/GameCategoryListParam.java

@@ -2,6 +2,7 @@ package com.zanxiang.manage.domain.params;
 
 import com.zanxiang.common.base.BasePage;
 import com.zanxiang.mybatis.entity.GameCategory;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -17,10 +18,12 @@ public class GameCategoryListParam extends BasePage<GameCategory> {
     /**
      * 标签名称
      */
+    @ApiModelProperty(notes = "标签名称")
     private String labelName;
 
     /**
      * 是否父标签
      */
+    @ApiModelProperty(notes = "是否父标签")
     private Boolean isParent;
 }

+ 21 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/domain/params/IpBanAddParam.java

@@ -0,0 +1,21 @@
+package com.zanxiang.manage.domain.params;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-06-28
+ * @description : ip封禁添加参数
+ */
+@Data
+public class IpBanAddParam {
+
+    /**
+     * ip列表
+     */
+    @NotEmpty(message = "ip列表不可为空")
+    private List<String> ipList;
+}

+ 29 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/domain/params/IpBanListParam.java

@@ -0,0 +1,29 @@
+package com.zanxiang.manage.domain.params;
+
+import com.zanxiang.common.base.BasePage;
+import com.zanxiang.mybatis.entity.IpBan;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-06-28
+ * @description : ip封禁列表参数
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class IpBanListParam extends BasePage<IpBan> {
+
+    /**
+     * 查询ip
+     */
+    @ApiModelProperty(notes = "查询的ip")
+    private String ip;
+
+    /**
+     * 封禁状态
+     */
+    @ApiModelProperty(notes = "封禁状态")
+    private Integer status;
+}

+ 30 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/domain/params/IpBanUpdateParam.java

@@ -0,0 +1,30 @@
+package com.zanxiang.manage.domain.params;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-06-28
+ * @description : ip封禁管理更新参数
+ */
+@Data
+public class IpBanUpdateParam {
+
+    /**
+     * ip
+     */
+    @NotBlank(message = "ip参数不可为空")
+    @ApiModelProperty(notes = "ip")
+    private String ip;
+
+    /**
+     * 状态
+     */
+    @NotNull(message = "封禁状态不可为空")
+    @ApiModelProperty(notes = "状态, 0 : 解封, 1 : 封禁")
+    private Integer status;
+}

+ 45 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/domain/vo/IpBanVO.java

@@ -0,0 +1,45 @@
+package com.zanxiang.manage.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-06-28
+ * @description : ip封禁详情
+ */
+@Data
+public class IpBanVO {
+
+    /**
+     * 主键id
+     */
+    @ApiModelProperty(notes = "主键id")
+    private Long id;
+
+    /**
+     * ip
+     */
+    @ApiModelProperty(notes = "ip")
+    private String ip;
+
+    /**
+     * 封禁时间
+     */
+    @ApiModelProperty(notes = "封禁时间")
+    private Date banTime;
+
+    /**
+     * 更新时间
+     */
+    @ApiModelProperty(notes = "更新时间")
+    private Date updateTime;
+
+    /**
+     * 状态, 0 正常 1 封禁
+     */
+    @ApiModelProperty(notes = "状态, 0 正常 1 封禁")
+    private Integer status;
+}

+ 9 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/domain/vo/UserBanVO.java

@@ -0,0 +1,9 @@
+package com.zanxiang.manage.domain.vo;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-06-28
+ * @description : 玩家封禁信息
+ */
+public class UserBanVO {
+}

+ 120 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/service/Impl/IpBanServiceImpl.java

@@ -0,0 +1,120 @@
+package com.zanxiang.manage.service.Impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.common.enums.BanStatusEnum;
+import com.zanxiang.common.utils.StringUtils;
+import com.zanxiang.common.utils.bean.BeanUtils;
+import com.zanxiang.manage.domain.params.IpBanAddParam;
+import com.zanxiang.manage.domain.params.IpBanListParam;
+import com.zanxiang.manage.domain.params.IpBanUpdateParam;
+import com.zanxiang.manage.domain.vo.IpBanVO;
+import com.zanxiang.manage.service.IpBanService;
+import com.zanxiang.mybatis.entity.IpBan;
+import com.zanxiang.mybatis.mapper.IpBanMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-06-28
+ * @description : ip封禁管理
+ */
+@Slf4j
+@Service
+public class IpBanServiceImpl extends ServiceImpl<IpBanMapper, IpBan> implements IpBanService {
+
+    /**
+     * 查询ip封禁列表
+     *
+     * @param param : 查询参数
+     * @return : 返回单页数据
+     */
+    @Override
+    public IPage<IpBanVO> list(IpBanListParam param) {
+        return page(param.toPage(), new QueryWrapper<IpBan>().lambda()
+                .eq(StringUtils.isNotBlank(param.getIp()), IpBan::getIp, param.getIp())
+                .eq(param.getStatus() != null, IpBan::getStatus, param.getStatus())
+                .ge(param.getBeginDate() != null, IpBan::getBanTime, param.getBeginDate() == null ? null : LocalDateTime.of(param.getBeginDate(), LocalTime.MIN))
+                .le(param.getEndDate() != null, IpBan::getBanTime, param.getEndDate() == null ? null : LocalDateTime.of(param.getEndDate(), LocalTime.MAX))
+                .orderByDesc(IpBan::getCreateTime))
+                .convert(this::toVo);
+    }
+
+    /**
+     * 游戏标签对象转换
+     *
+     * @param ipBan : ip封禁信息
+     * @return : 返回ip封禁详情
+     */
+    private IpBanVO toVo(IpBan ipBan) {
+        if (Objects.isNull(ipBan)) {
+            return null;
+        }
+        return BeanUtils.copy(ipBan, IpBanVO.class);
+    }
+
+    /**
+     * 添加封禁ip
+     *
+     * @param param : 添加的ip列表
+     * @return : 返回添加结果
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean addIp(IpBanAddParam param) {
+        List<IpBan> list = new ArrayList<>();
+        param.getIpList().forEach(ip -> {
+            //先查询是否已经存在
+            IpBan ipBan = super.getOne(new LambdaQueryWrapper<IpBan>().eq(IpBan::getIp, ip));
+            if (ipBan == null) {
+                ipBan = IpBan.builder()
+                        .ip(ip)
+                        .banTime(LocalDateTime.now())
+                        .status(BanStatusEnum.BAN_STATUS.getStatus())
+                        .operateId(1L)
+                        .operateName("赞象 admin")
+                        .createTime(LocalDateTime.now())
+                        .updateTime(LocalDateTime.now())
+                        .build();
+            } else {
+                if (ipBan.getStatus() == 0) {
+                    ipBan.setStatus(BanStatusEnum.BAN_STATUS.getStatus());
+                    ipBan.setBanTime(LocalDateTime.now());
+                    ipBan.setUpdateTime(LocalDateTime.now());
+                    ipBan.setOperateId(1L);
+                    ipBan.setOperateName("赞象 admin");
+                }
+            }
+            list.add(ipBan);
+        });
+        return super.saveOrUpdateBatch(list);
+    }
+
+    /**
+     * ip封禁或者解封
+     *
+     * @param param : ip封禁更新参数
+     * @return : 返回更新结果
+     */
+    @Override
+    public Boolean ipBanOrRemove(IpBanUpdateParam param) {
+        return super.update(new LambdaUpdateWrapper<IpBan>()
+                .set(IpBan::getStatus, param.getStatus())
+                .set(IpBan::getBanTime, Objects.equals(param.getStatus(), BanStatusEnum.BAN_STATUS.getStatus()) ? LocalDateTime.now() : null)
+                .set(IpBan::getOperateId, 1L)
+                .set(IpBan::getOperateName, "赞象 admin")
+                .set(IpBan::getUpdateTime, LocalDateTime.now())
+        );
+    }
+}

+ 18 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/service/Impl/UserBanServiceImpl.java

@@ -0,0 +1,18 @@
+package com.zanxiang.manage.service.Impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.manage.service.UserBanService;
+import com.zanxiang.mybatis.entity.UserBan;
+import com.zanxiang.mybatis.mapper.UserBanMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-06-28
+ * @description : 玩家封禁管理
+ */
+@Slf4j
+@Service
+public class UserBanServiceImpl extends ServiceImpl<UserBanMapper, UserBan> implements UserBanService {
+}

+ 39 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/service/IpBanService.java

@@ -0,0 +1,39 @@
+package com.zanxiang.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.zanxiang.manage.domain.params.IpBanAddParam;
+import com.zanxiang.manage.domain.params.IpBanListParam;
+import com.zanxiang.manage.domain.params.IpBanUpdateParam;
+import com.zanxiang.manage.domain.vo.IpBanVO;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-06-28
+ * @description : ip封禁管理
+ */
+public interface IpBanService {
+
+    /**
+     * 查询ip封禁列表
+     *
+     * @param param : 查询参数
+     * @return : 返回单页数据
+     */
+    IPage<IpBanVO> list(IpBanListParam param);
+
+    /**
+     * 添加封禁ip
+     *
+     * @param param : 添加的ip列表
+     * @return : 返回添加结果
+     */
+    Boolean addIp(IpBanAddParam param);
+
+    /**
+     * ip封禁或者解封
+     *
+     * @param param : ip封禁更新参数
+     * @return : 返回更新结果
+     */
+    Boolean ipBanOrRemove(IpBanUpdateParam param);
+}

+ 9 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/service/UserBanService.java

@@ -0,0 +1,9 @@
+package com.zanxiang.manage.service;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-06-28
+ * @description : 玩家封禁管理
+ */
+public interface UserBanService {
+}

+ 68 - 0
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/IpBan.java

@@ -0,0 +1,68 @@
+package com.zanxiang.mybatis.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.*;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-06-28
+ * @description : Ip封禁表
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString
+@Builder
+@TableName("h_ip_ban")
+public class IpBan {
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * ip
+     */
+    private String ip;
+
+    /**
+     * 封禁时间
+     */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private LocalDateTime banTime;
+
+    /**
+     * 状态, 0 正常 1 封禁
+     */
+    private Integer status;
+
+    /**
+     * 操作者id
+     */
+    private Long operateId;
+
+    /**
+     * 操作者名字
+     */
+    private String operateName;
+
+    /**
+     * 1:删除,0: 正常
+     */
+    @TableLogic
+    private Integer isDelete;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+}

+ 85 - 0
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/UserBan.java

@@ -0,0 +1,85 @@
+package com.zanxiang.mybatis.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+import java.util.Date;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-06-28
+ * @description : 用户封禁表
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString
+@Builder
+@TableName("h_user_ban")
+public class UserBan {
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * ip
+     */
+    private String userId;
+
+    /**
+     * 用户账号
+     */
+    private String userName;
+
+    /**
+     * 用户昵称
+     */
+    private String userNickName;
+
+    /**
+     * 注册时间
+     */
+    private Date regTime;
+
+    /**
+     * 封禁时间
+     */
+    private Date banTime;
+
+    /**
+     * 状态, 0 正常 1 封禁
+     */
+    private Integer status;
+
+    /**
+     * 操作者id
+     */
+    private Long operateId;
+
+    /**
+     * 操作者名字
+     */
+    private String operateName;
+
+    /**
+     * 1:删除,0: 正常
+     */
+    @TableLogic
+    private Integer isDelete;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
+}

+ 12 - 0
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/mapper/IpBanMapper.java

@@ -0,0 +1,12 @@
+package com.zanxiang.mybatis.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zanxiang.mybatis.entity.IpBan;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-06-28
+ * @description : ${description}
+ */
+public interface IpBanMapper extends BaseMapper<IpBan> {
+}

+ 12 - 0
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/mapper/UserBanMapper.java

@@ -0,0 +1,12 @@
+package com.zanxiang.mybatis.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zanxiang.mybatis.entity.UserBan;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-06-28
+ * @description : ${description}
+ */
+public interface UserBanMapper extends BaseMapper<UserBan> {
+}

+ 4 - 0
game-module/game-mybatis/src/main/resources/mapper/IpBanMapper.xml

@@ -0,0 +1,4 @@
+<?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.zanxiang.mybatis.mapper.IpBanMapper">
+</mapper>

+ 4 - 0
game-module/game-mybatis/src/main/resources/mapper/UserBanMapper.xml

@@ -0,0 +1,4 @@
+<?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.zanxiang.mybatis.mapper.UserBanMapper">
+</mapper>