Result result = new Result();
boolean isLimit = LimitVisitTimeUtil.limitVisit(WTOIP_YUN_APP_PORTAL_WEEKDAY_NOTE_NOTIFY,"1",7,TimeUnit.DAYS);
if (isLimit){
result.setCode(1);
result.setMessage("每周只能发一次短信");
result.setObject(0);
return result;
}
/**
* 通过key 设置访问次数限制
* @param key
* @param num 限制次数
* @param timeout 间隔时长
* @param unit 时间单位
* @return
*/
public static boolean limitVisit(String key,String num,long timeout, TimeUnit unit){
if (StringUtils.isBlank(key)){
logger.error("redis key 为空,设置访问次数限制失败");
return false;
}
try {
//限制用户提交次数
String numStr = stringRedisTemplate.opsForValue().get(key);
if (unit == TimeUnit.MINUTES){
timeout = timeout * 60;
}else if (unit == TimeUnit.HOURS){
timeout = timeout * 60 * 60;
}else if (unit == TimeUnit.DAYS){
timeout = timeout * 60 * 60 * 24;
}
//第一次访问不进行减一,所以num最小值为1
if (StringUtils.isBlank(numStr)){
stringRedisTemplate.opsForValue().set(key,num,timeout,TimeUnit.SECONDS);
}else {
int num_ = Integer.parseInt(numStr);
num_--;
if (num_ <= 0){
return true;
}
stringRedisTemplate.opsForValue().set(key,num_+"",stringRedisTemplate.getExpire(key,TimeUnit.SECONDS),TimeUnit.SECONDS);
}
}catch (Exception e){
logger.error("设置默认访问次数失败,key : {},报错:{}",key,e);
}
return false;
}