Redis实现接口防重复点击

This commit is contained in:
WangHao
2021-02-13 20:52:17 +08:00
parent 38e4f2aa04
commit fec325e383
7 changed files with 117 additions and 85 deletions

View File

@ -2,6 +2,7 @@ package com.ruoyi.bookmark.service;
import java.util.List;
import com.ruoyi.bookmark.domain.SqBookmark;
import com.ruoyi.common.utils.bookmarkhtml.HtmlName;
/**
* 书签管理Service接口
@ -111,4 +112,12 @@ public interface ISqBookmarkService
* @return
*/
List<SqBookmark> selectByUrlUserID(String url, Long userId);
/**
* 批量添加html导入的数据
*
* @param
* @return
*/
void addALLBookMarkByHtml(List<HtmlName> list,Long userID);
}

View File

@ -2,6 +2,7 @@ package com.ruoyi.bookmark.service;
import java.util.List;
import com.ruoyi.bookmark.domain.SqMenu;
import org.omg.CORBA.INTERNAL;
/**
* 书签菜单Service接口
@ -113,4 +114,15 @@ public interface ISqMenuService
* @return
*/
public void addMenu(Long userID, String title, Long valueOf);
/**
*防止重复点击上传文件
*
* @param state 表示某个功能
* @param userID 用户ID
* @param time key过期时间(秒)
* @return
*/
public Long noRepetition(String state, Long userID, Long time);
}

View File

@ -1,7 +1,11 @@
package com.ruoyi.bookmark.service.impl;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
import java.util.*;
import java.util.stream.Collectors;
import cn.hutool.core.date.DateUtil;
import com.github.pagehelper.PageHelper;
@ -14,6 +18,10 @@ import com.ruoyi.bookmark.mapper.SqTagMapper;
import com.ruoyi.bookmark.service.ISqTagService;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.bookmarkhtml.Const;
import com.ruoyi.common.utils.bookmarkhtml.HtmlName;
import com.ruoyi.common.utils.bookmarkhtml.ImportHtml;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@ -303,5 +311,51 @@ public class SqBookmarkServiceImpl implements ISqBookmarkService
return sqBookmarkMapper.selectByExample(example);
}
@Override
public void addALLBookMarkByHtml(List<HtmlName> list,Long userID) {
//获取所有的 *目录*文件夹
List<HtmlName> listMenu= list.stream().filter(m-> m.getState().equals("0")).collect(Collectors.toList());
//id排序 防止已添加的父id漏修改 id升序
listMenu.sort(Comparator.comparing(HtmlName::getId));
//1.添加目录
for (HtmlName h : listMenu) {
String id=h.getId();
//添加 返回id
SqMenu sqMenu = new SqMenu(userID,h.getTitle(),Long.valueOf(h.getParentId()), Const.MenuIocURL);
int countId = sqMenuMapper.insertSqMenu(sqMenu);
if(countId!=0){
Long k=Long.valueOf(sqMenu.getMenuId().toString());
//批量修改对应的父目录id
listMenu = ImportHtml.listFilter(listMenu,k,id);
//批量修改对应的书签id
list = ImportHtml.listFilter(list,k,id);
}
}
//2.添加书签
for (HtmlName h : list) {
if (!h.getState().equals("0")&&h.getState().equals(Const.BOOKMARK_STATE_FLAG)) {
SqBookmark sqBookmark =new SqBookmark();
sqBookmark.setUserid(userID);
sqBookmark.setTitle(h.getTitle());
sqBookmark.setUrl(h.getUrl());
try {
sqBookmark.setUrls(ImportHtml.Urlutils(new URL(h.getUrl())));
} catch (MalformedURLException e) {
e.printStackTrace();
logger.info("导入书签,获取host出错!");
}
if(StringUtils.isBlank(h.getDescription())){
sqBookmark.setDescription(h.getTitle());
}else{
sqBookmark.setDescription(h.getDescription());
}
sqBookmark.setMenuId(Long.valueOf(h.getParentId()));
sqBookmark.setCreateTime(new Date());
sqBookmarkMapper.insertSqBookmark(sqBookmark);
}
}
}
}

View File

@ -2,6 +2,9 @@ package com.ruoyi.bookmark.service.impl;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import com.ruoyi.common.core.redis.RedisUtil;
import com.ruoyi.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -20,6 +23,8 @@ public class SqMenuServiceImpl implements ISqMenuService
{
@Autowired
private SqMenuMapper sqMenuMapper;
@Autowired
private RedisUtil redisUtil;
/**
* 查询 目录菜单的 所有父级ID
@ -163,6 +168,26 @@ public class SqMenuServiceImpl implements ISqMenuService
sqMenuMapper.addMenu(userID,title,parentId);
}
/**
*防止重复点击上传文件
*
* @param state 表示某个功能
* @param userID 用户ID
* @param time key过期时间 (秒)
* @return
*/
@Override
public Long noRepetition(String state, Long userID, Long time) {
String key = "BookMark:"+state+":"+userID.toString();
String str = redisUtil.get(key);
if (str==null){
redisUtil.setEx(key,"0",time,TimeUnit.SECONDS);
return 0L;
}else{
return redisUtil.getExpire(key);
}
}
/**
* 批量减少目录下书签数量