content: package com.ld.poetry.aop;
  
  import com.ld.poetry.entity.User;
  import com.ld.poetry.handle.PoetryRuntimeException;
  import com.ld.poetry.constants.CommonConst;
  import com.ld.poetry.utils.cache.PoetryCache;
  import com.ld.poetry.utils.PoetryUtil;
  import lombok.extern.slf4j.Slf4j;
  import org.aspectj.lang.ProceedingJoinPoint;
  import org.aspectj.lang.annotation.Around;
  import org.aspectj.lang.annotation.Aspect;
  import org.springframework.core.annotation.Order;
  import org.springframework.stereotype.Component;
  import org.springframework.util.StringUtils;
  
  import java.util.concurrent.atomic.AtomicInteger;
  
  
  @Aspect
  @Component
  @Order(1)
  @Slf4j
  public class SaveCheckAspect {
  
      @Around("@annotation(saveCheck)")
      public Object around(ProceedingJoinPoint joinPoint, SaveCheck saveCheck) throws Throwable {
          boolean flag = false;
  
          String token = PoetryUtil.getToken();
          if (StringUtils.hasText(token)) {
              User user = (User) PoetryCache.get(token);
              if (user != null) {
                  if (user.getId().intValue() == PoetryUtil.getAdminUser().getId().intValue()) {
                      return joinPoint.proceed();
                  }
  
                  AtomicInteger atomicInteger = (AtomicInteger) PoetryCache.get(CommonConst.SAVE_COUNT_USER_ID + user.getId().toString());
                  if (atomicInteger == null) {
                      atomicInteger = new AtomicInteger();
                      PoetryCache.put(CommonConst.SAVE_COUNT_USER_ID + user.getId().toString(), atomicInteger, CommonConst.SAVE_EXPIRE);
                  }
                  int userIdCount = atomicInteger.getAndIncrement();
                  if (userIdCount >= CommonConst.SAVE_MAX_COUNT) {
                      log.info("用户保存超限：" + user.getId().toString() + "，次数：" + userIdCount);
                      flag = true;
                  }
              }
          }
  
          String ip = PoetryUtil.getIpAddr(PoetryUtil.getRequest());
          AtomicInteger atomic = (AtomicInteger) PoetryCache.get(CommonConst.SAVE_COUNT_IP + ip);
          if (atomic == null) {
              atomic = new AtomicInteger();
              PoetryCache.put(CommonConst.SAVE_COUNT_IP + ip, atomic, CommonConst.SAVE_EXPIRE);
          }
          int ipCount = atomic.getAndIncrement();
          if (ipCount > CommonConst.SAVE_MAX_COUNT) {
              log.info("IP保存超限：" + ip + "，次数：" + ipCount);
              flag = true;
          }
  
          if (flag) {
              throw new PoetryRuntimeException("今日提交次数已用尽，请一天后再来！");
          }
  
          return joinPoint.proceed();
      }
  }
  