|
@@ -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())
|
|
|
+ );
|
|
|
+ }
|
|
|
+}
|