From 92960b071bda1599cf38c77f1f7b3a61a4821ea2 Mon Sep 17 00:00:00 2001 From: User_cyk <1020691186@qq.com> Date: Fri, 22 Dec 2023 10:35:16 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=80=E7=B3=BB=E5=88=97=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 34 +- .../lovenav/controller/SearchController.java | 77 +++++ .../controller/UrlAndCateController.java | 188 +++++++++++ .../java/com/lovenav/dao/UrlCateListDao.java | 14 + src/main/java/com/lovenav/dao/UrlListDao.java | 13 + src/main/java/com/lovenav/dao/UserDao.java | 3 +- .../java/com/lovenav/entity/UrlCateList.java | 2 +- src/main/java/com/lovenav/entity/UrlList.java | 2 +- .../lovenav/service/UrlCateListService.java | 12 + .../com/lovenav/service/UrlListService.java | 13 + .../java/com/lovenav/service/UserService.java | 1 + .../service/serviceImpl/RedisServiceImpl.java | 7 +- .../serviceImpl/UrlCateListServiceImpl.java | 56 ++++ .../serviceImpl/UrlLiserServiceImpl.java | 63 ++++ .../service/serviceImpl/UserServiceImpl.java | 64 ++-- src/main/java/com/lovenav/vo/CateAndUrl.java | 96 ++++++ src/main/resources/mybatis/UrlCateListDao.xml | 27 +- src/main/resources/mybatis/UrlListDao.xml | 33 +- .../com/lovenav/LoveNavApplicationTests.java | 313 ++++++++++++++++++ 19 files changed, 967 insertions(+), 51 deletions(-) create mode 100644 src/main/java/com/lovenav/controller/UrlAndCateController.java create mode 100644 src/main/java/com/lovenav/service/UrlCateListService.java create mode 100644 src/main/java/com/lovenav/service/UrlListService.java create mode 100644 src/main/java/com/lovenav/service/serviceImpl/UrlCateListServiceImpl.java create mode 100644 src/main/java/com/lovenav/service/serviceImpl/UrlLiserServiceImpl.java create mode 100644 src/main/java/com/lovenav/vo/CateAndUrl.java diff --git a/pom.xml b/pom.xml index a5b2ed7..2905927 100644 --- a/pom.xml +++ b/pom.xml @@ -43,11 +43,6 @@ org.springframework.boot spring-boot-starter-data-redis - - commons-lang - commons-lang - 2.6 - org.springframework.boot @@ -83,6 +78,11 @@ fastjson 1.2.47 + + org.apache.commons + commons-lang3 + 3.4 + com.alibaba.fastjson2 @@ -96,6 +96,30 @@ + + + + com.fasterxml.jackson.core + jackson-core + 2.12.0 + + + com.fasterxml.jackson.core + jackson-databind + 2.12.0 + + + com.fasterxml.jackson.core + jackson-annotations + 2.12.0 + + + redis.clients + jedis + 3.7.1 + + + diff --git a/src/main/java/com/lovenav/controller/SearchController.java b/src/main/java/com/lovenav/controller/SearchController.java index e12ded1..51158fe 100644 --- a/src/main/java/com/lovenav/controller/SearchController.java +++ b/src/main/java/com/lovenav/controller/SearchController.java @@ -1,4 +1,81 @@ package com.lovenav.controller; +import com.alibaba.fastjson2.JSONObject; +import com.lovenav.entity.UrlList; +import com.lovenav.filter.SensitiveFilter; +import com.lovenav.service.RedisService; +import com.lovenav.service.UrlListService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +@RestController +@RequestMapping("/Search") public class SearchController { + private static Logger logger = LoggerFactory.getLogger(SearchController.class); + + @Autowired + RedisService redisService ; + + @Autowired + UrlListService urlListService; + + @RequestMapping("/searchByInput") + public String searchByInput(String searchKey,String userId ) throws IOException { + String placeholder = "***"; + //非法敏感词汇判断 + SensitiveFilter filter = SensitiveFilter.getInstance(); + String s = filter.replaceSensitiveWord(searchKey, 1, placeholder); + System.out.println(s); + int n = filter.CheckSensitiveWord(searchKey,0,2); + //存在非法字符 + if(n > 0){ + logger.info("这个人输入了非法字符--> {},不知道他到底要查什么~ userid--> {}",searchKey,1); + return setResult(500,"查询失败"); + } + + + redisService.addSearchHistoryByUserId(userId, searchKey); + redisService.incrementScore(searchKey); + + //返回网站数据 + UrlList urlList = urlListService.selectUrListByInput(searchKey); + HashMap result = new HashMap<>(); + result.put("code", 200); + result.put("msg", "查询成功"); + result.put("data",urlList); + String jsonString = JSONObject.toJSONString(result); + + return jsonString; + } + public String setResult(Integer code, String msg) { + HashMap result = new HashMap<>(); + result.put("code", code); + result.put("msg", msg); + String jsonString = JSONObject.toJSONString(result); + return jsonString; + } + /** + * 获取个人历史数据列表 + */ + @RequestMapping("/getSearchHistoryByUserId") + public String getSearchHistoryByUserId(String userId) + { + String res = "123"; + return res; + } + /** + * 删除个人历史数据 + */ + @RequestMapping("/delSearchHistoryByUserId") + public String delSearchHistoryByUserId(String userId, String searchKey){ + String res = "123"; + return res; + } } diff --git a/src/main/java/com/lovenav/controller/UrlAndCateController.java b/src/main/java/com/lovenav/controller/UrlAndCateController.java new file mode 100644 index 0000000..471091f --- /dev/null +++ b/src/main/java/com/lovenav/controller/UrlAndCateController.java @@ -0,0 +1,188 @@ +package com.lovenav.controller; + +import com.alibaba.fastjson2.JSONObject; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; +import com.lovenav.entity.UrlCateList; +import com.lovenav.entity.UrlList; +import com.lovenav.service.UrlCateListService; +import com.lovenav.service.UrlListService; +import com.lovenav.vo.CateAndUrl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +@RestController +@RequestMapping("/UrlAndCate") +public class UrlAndCateController { + + @Autowired + ObjectMapper objectMapper; + + @Autowired + UrlCateListService urlCateListService; + + @Autowired + UrlListService urlListService; + + + //处理JSON + @RequestMapping("/disposeJson") + public String disposeJson(@RequestBody String data2 ,String email) + { + String jsonString; + //先转换成ObjectMapper类型 + ObjectNode objectNode = objectMapper.createObjectNode(); + try { + JsonNode rootNode = objectMapper.readTree(data2); + disposeBookmarkFunction1(rootNode,"top",email); + HashMap result = new HashMap<>(); + result.put("code", 200); + result.put("msg", "查询成功"); + jsonString = JSONObject.toJSONString(result); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + return jsonString; + } + public void disposeBookmarkFunction1(JsonNode rootNode,String parent,String email) + { + + for(int i=0;i urlCateLists = urlCateListService.selectUrListByUserId(userId); + List urlLists = urlListService.selectUrList(); + + List cateAndUrlList = new ArrayList<>(); + + + + + //预处理为CateAndUrl对象 + for( int i = 0 ; i < urlCateLists.size() ; i++) + { + CateAndUrl cateAndUrl = new CateAndUrl(); + cateAndUrl.setFloder("true"); + cateAndUrl.setName(urlCateLists.get(i).getName()); + cateAndUrl.setParentId(urlCateLists.get(i).getRootCateId()); + cateAndUrl.setCateId(urlCateLists.get(i).getId()); + cateAndUrlList.add(cateAndUrl); + + } + for( int i = 0 ; i < urlLists.size() ; i++) + { + CateAndUrl cateAndUrl = new CateAndUrl(); + cateAndUrl.setFloder("false"); + cateAndUrl.setName(urlLists.get(i).getName()); + cateAndUrl.setParentId(urlLists.get(i).getCateId()); + cateAndUrl.setUrlId(urlLists.get(i).getId()); + cateAndUrlList.add(cateAndUrl); + + } + + List parentsList = new ArrayList<>(); + //声明返回集合 + List resultList = new ArrayList<>(); + //对全部数据进行遍历 + for (CateAndUrl disease : cateAndUrlList) { + //判断是否是第一梯队,或者说是树的根节点,如果是根节点就加入到父类集合与返回集合 + if (disease.getParentId() == 0) { + parentsList.add(disease); + resultList.add(disease); + } else { + //对于不是第一梯队的数据进行遍历 + for (CateAndUrl parent : parentsList) { + //对数据的pid与父类集合中的父节点进行配对,如果配对成功,就把数据加入到父节点中的子节点集合 + + if (parent.getFloder().equals("true") ) { + if( parent.getCateId() == disease.getParentId()) + { + parent.getChildUC().add(disease); + //当前数据有可能是别的数据的父节点,加到父类容器 + parentsList.add(disease); + break; + } + + } + if (parent.getFloder().equals("false") ) { + if(parent.getUrlId() == disease.getParentId()) + { + parent.getChildUC().add(disease); + //当前数据有可能是别的数据的父节点,加到父类容器 + parentsList.add(disease); + break; + } + + } + } + } + } + + ObjectMapper mapper = new ObjectMapper(); + String Json; + HashMap result = new HashMap<>(); + // java对象转换为json字符换 + try { + Json = mapper.writeValueAsString(resultList); + result.put("code", 200); + result.put("msg", "处理成功"); + result.put("data", resultList); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + return JSONObject.toJSONString(result); + } + public String setResult(Integer code, String msg) { + HashMap result = new HashMap<>(); + result.put("code", code); + result.put("msg", msg); + String jsonString = JSONObject.toJSONString(result); + return jsonString; + } + + //详情页面 + @RequestMapping("/clickUrl") + public String clickUrl(String urlId) + { + + UrlList urlList = urlListService.selectUrlListByUrlId(Long.valueOf(urlId)); + HashMap result = new HashMap<>(); + result.put("code", 200); + result.put("msg", "查询成功"); + result.put("data",urlList); + String jsonString = JSONObject.toJSONString(result); + return jsonString; + } +} diff --git a/src/main/java/com/lovenav/dao/UrlCateListDao.java b/src/main/java/com/lovenav/dao/UrlCateListDao.java index 82203b1..35d78fb 100644 --- a/src/main/java/com/lovenav/dao/UrlCateListDao.java +++ b/src/main/java/com/lovenav/dao/UrlCateListDao.java @@ -1,9 +1,16 @@ package com.lovenav.dao; import com.lovenav.entity.UrlCateList; +import com.lovenav.entity.UrlList; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository +@Mapper public interface UrlCateListDao { int deleteByPrimaryKey(Integer id); @@ -16,4 +23,11 @@ public interface UrlCateListDao { int updateByPrimaryKeySelective(UrlCateList record); int updateByPrimaryKey(UrlCateList record); + + + + public UrlCateList selectCateByNameAnduserId(@Param("name")String name, @Param("userId") int userId); + + + public List selectUrListByUserId(Integer userId); } \ No newline at end of file diff --git a/src/main/java/com/lovenav/dao/UrlListDao.java b/src/main/java/com/lovenav/dao/UrlListDao.java index 32352e5..6492868 100644 --- a/src/main/java/com/lovenav/dao/UrlListDao.java +++ b/src/main/java/com/lovenav/dao/UrlListDao.java @@ -1,9 +1,14 @@ package com.lovenav.dao; import com.lovenav.entity.UrlList; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository +@Mapper public interface UrlListDao { int deleteByPrimaryKey(Long id); @@ -16,4 +21,12 @@ public interface UrlListDao { int updateByPrimaryKeySelective(UrlList record); int updateByPrimaryKey(UrlList record); + + + public List selectUrList(); + + public UrlList selectUrListByInput(String input); + + public UrlList selectUrlListByUrlId(Long urlId); + } \ No newline at end of file diff --git a/src/main/java/com/lovenav/dao/UserDao.java b/src/main/java/com/lovenav/dao/UserDao.java index 01caf7b..5d2c56e 100644 --- a/src/main/java/com/lovenav/dao/UserDao.java +++ b/src/main/java/com/lovenav/dao/UserDao.java @@ -2,9 +2,9 @@ package com.lovenav.dao; import com.lovenav.entity.User; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Repository; - @Repository @Mapper public interface UserDao { @@ -27,4 +27,5 @@ public interface UserDao { int updateByEmail(User user); + } \ No newline at end of file diff --git a/src/main/java/com/lovenav/entity/UrlCateList.java b/src/main/java/com/lovenav/entity/UrlCateList.java index 2b65858..b5a6599 100644 --- a/src/main/java/com/lovenav/entity/UrlCateList.java +++ b/src/main/java/com/lovenav/entity/UrlCateList.java @@ -21,7 +21,7 @@ public class UrlCateList implements Serializable { /** * 创建时间 */ - private Integer createtime; + private Long createtime; /** * url 数量 diff --git a/src/main/java/com/lovenav/entity/UrlList.java b/src/main/java/com/lovenav/entity/UrlList.java index 0d66b74..bce8c64 100644 --- a/src/main/java/com/lovenav/entity/UrlList.java +++ b/src/main/java/com/lovenav/entity/UrlList.java @@ -36,7 +36,7 @@ public class UrlList implements Serializable { /** * 创建时间 */ - private Integer createtime; + private Long createtime; /** * 访问数量 diff --git a/src/main/java/com/lovenav/service/UrlCateListService.java b/src/main/java/com/lovenav/service/UrlCateListService.java new file mode 100644 index 0000000..ca15be5 --- /dev/null +++ b/src/main/java/com/lovenav/service/UrlCateListService.java @@ -0,0 +1,12 @@ +package com.lovenav.service; + +import com.lovenav.entity.UrlCateList; + +import java.util.List; + +public interface UrlCateListService { + + + public int selectAndInsertUrlCate(String email , String cateName , String parent); + public List selectUrListByUserId(Integer userId); +} diff --git a/src/main/java/com/lovenav/service/UrlListService.java b/src/main/java/com/lovenav/service/UrlListService.java new file mode 100644 index 0000000..050d8be --- /dev/null +++ b/src/main/java/com/lovenav/service/UrlListService.java @@ -0,0 +1,13 @@ +package com.lovenav.service; + +import com.lovenav.entity.UrlList; + +import java.util.List; + +public interface UrlListService { + + public int selectCateAndInsertUrl(String parent,String name , String icon ,String url ,String email ); + public List selectUrList(); + public UrlList selectUrListByInput(String input); + public UrlList selectUrlListByUrlId(Long urlId); +} diff --git a/src/main/java/com/lovenav/service/UserService.java b/src/main/java/com/lovenav/service/UserService.java index 4cd7eeb..2e3e0c2 100644 --- a/src/main/java/com/lovenav/service/UserService.java +++ b/src/main/java/com/lovenav/service/UserService.java @@ -4,6 +4,7 @@ import com.lovenav.entity.User; + public interface UserService { public String sendEmailActivecode(User user); diff --git a/src/main/java/com/lovenav/service/serviceImpl/RedisServiceImpl.java b/src/main/java/com/lovenav/service/serviceImpl/RedisServiceImpl.java index e5af48a..640e45b 100644 --- a/src/main/java/com/lovenav/service/serviceImpl/RedisServiceImpl.java +++ b/src/main/java/com/lovenav/service/serviceImpl/RedisServiceImpl.java @@ -119,7 +119,8 @@ public class RedisServiceImpl implements RedisService { if (result.size() > HOT_SEARCH_NUMBER) { break; } - Long time = Long.valueOf(Objects.requireNonNull(valueOperations.get(val))); + + Long time = Long.valueOf(Objects.requireNonNull(valueOperations.get("search:search-time:"+val))); //返回最近一个月的数据 if ((now - time) < HOT_SEARCH_TIME) { result.add(val); @@ -134,7 +135,8 @@ public class RedisServiceImpl implements RedisService { if (result.size() > HOT_SEARCH_NUMBER) { break; } - Long time = Long.valueOf(Objects.requireNonNull(valueOperations.get(val))); + System.out.println(valueOperations.get(val)); + Long time = Long.valueOf(Objects.requireNonNull(valueOperations.get("search:search-time:"+val))); //返回最近一个月的数据 if ((now - time) < HOT_SEARCH_TIME) { result.add(val); @@ -186,6 +188,7 @@ public class RedisServiceImpl implements RedisService { // 没有的话就插入,有的话的直接更新;add是有就覆盖,没有就插入 zSetOperations.incrementScore(RedisKeyUtils.getHotSearchKey(), searchKey, 1); valueOperations.getAndSet(RedisKeyUtils.getSearchTimeKey(searchKey), String.valueOf(now)); + return 1L; }catch (Exception e){ logger.error("redis发生异常,异常原因:",e); diff --git a/src/main/java/com/lovenav/service/serviceImpl/UrlCateListServiceImpl.java b/src/main/java/com/lovenav/service/serviceImpl/UrlCateListServiceImpl.java new file mode 100644 index 0000000..0219efc --- /dev/null +++ b/src/main/java/com/lovenav/service/serviceImpl/UrlCateListServiceImpl.java @@ -0,0 +1,56 @@ +package com.lovenav.service.serviceImpl; + +import com.lovenav.dao.UrlCateListDao; +import com.lovenav.dao.UserDao; +import com.lovenav.entity.UrlCateList; +import com.lovenav.entity.User; +import com.lovenav.service.UrlCateListService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; + +@Transactional +@Service("urlCateListService") +public class UrlCateListServiceImpl implements UrlCateListService { + + + + @Autowired + UrlCateListDao urlCateListDao; + + @Autowired + UserDao userDao; + public int selectAndInsertUrlCate(String email , String cateName , String parent ) + { + //找用户ID + User user = userDao.selectByEmail(email); + int userId = user.getId(); + + //找父标签有没有 + UrlCateList cateParent = urlCateListDao.selectCateByNameAnduserId(parent,userId); + + UrlCateList targetCate = new UrlCateList(); + //设置属性 + targetCate.setName(cateName); + targetCate.setUserId(userId); + Date date = new Date(); + targetCate.setCreatetime(date.getTime()); + + if(cateParent != null) + { + targetCate.setRootCateId(cateParent.getId()); + }else{ + targetCate.setRootCateId(0); + } + //插入 + int flag = urlCateListDao.insert(targetCate); + return flag; + } + + public List selectUrListByUserId(Integer userId){ + return urlCateListDao.selectUrListByUserId(userId); + } +} diff --git a/src/main/java/com/lovenav/service/serviceImpl/UrlLiserServiceImpl.java b/src/main/java/com/lovenav/service/serviceImpl/UrlLiserServiceImpl.java new file mode 100644 index 0000000..b1f5f21 --- /dev/null +++ b/src/main/java/com/lovenav/service/serviceImpl/UrlLiserServiceImpl.java @@ -0,0 +1,63 @@ +package com.lovenav.service.serviceImpl; + +import com.lovenav.dao.UrlCateListDao; +import com.lovenav.dao.UrlListDao; +import com.lovenav.dao.UserDao; +import com.lovenav.entity.UrlCateList; +import com.lovenav.entity.UrlList; +import com.lovenav.entity.User; +import com.lovenav.service.UrlListService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; + +@Transactional +@Service("urlListService") +public class UrlLiserServiceImpl implements UrlListService { + + @Autowired + UrlCateListDao urlCateListDao; + + @Autowired + UrlListDao urlListDao; + @Autowired + UserDao userDao; + public int selectCateAndInsertUrl(String parent,String name , String icon ,String url ,String email) + { + //找用户ID + User user = userDao.selectByEmail(email); + int userId = user.getId(); + + UrlCateList urlCateList = urlCateListDao.selectCateByNameAnduserId(parent,userId); + UrlList urlList = new UrlList(); + //设置属性 + urlList.setCateId(urlCateList.getId()); + urlList.setUrl(url); + urlList.setIcon(icon); + urlList.setName(name); + Date date = new Date(); + urlList.setCreatetime(date.getTime()); + urlList.setViews(Long.valueOf("0")); + int flag = urlListDao.insert(urlList); + return flag; + } + + public List selectUrList(){ + return urlListDao.selectUrList(); + } + + public UrlList selectUrListByInput(String input) + { + return urlListDao.selectUrListByInput(input); + } + public UrlList selectUrlListByUrlId(Long urlId) + { + UrlList urlList = urlListDao.selectUrlListByUrlId(urlId); + urlList.setViews(urlList.getViews()+1); + urlListDao.updateByPrimaryKeySelective(urlList); + return urlList; + } +} diff --git a/src/main/java/com/lovenav/service/serviceImpl/UserServiceImpl.java b/src/main/java/com/lovenav/service/serviceImpl/UserServiceImpl.java index 0f4847c..aa8a0f7 100644 --- a/src/main/java/com/lovenav/service/serviceImpl/UserServiceImpl.java +++ b/src/main/java/com/lovenav/service/serviceImpl/UserServiceImpl.java @@ -8,43 +8,18 @@ import com.lovenav.service.UserService; import com.lovenav.utils.MD5Utils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; -import java.text.SimpleDateFormat; +import javax.annotation.Resource; import java.util.Date; import java.util.regex.Pattern; - -@Service +@Transactional +@Service("userService") public class UserServiceImpl implements UserService { - @Autowired + + @Resource UserDao userDao; - @Override - public String sendEmailActivecode(User user) { - return EmailUtils.sendEmail(user); - } - - @Override - public int UserRegister(User user) { - - user.setRoleId(Byte.valueOf("1")); - user.setUserStatus(Byte.valueOf("1")); - user.setUserPassword(MD5Utils.md5(user.getUserPassword())); - Date date=new Date(); - user.setUserRegistered(date); - - - - return userDao.insert(user); - } - - - @Override - public User selectUserAlreadyExist(User user) { - System.out.println(user.getUserEmail()); - User user1=userDao.selectByEmail(user.getUserEmail()); - return user1; - } - @Override public User userLogin(User user) { boolean result; @@ -82,5 +57,32 @@ public class UserServiceImpl implements UserService { return userDao.updateByEmail(user); } + @Override + public String sendEmailActivecode(User user) { + return EmailUtils.sendEmail(user); + } + + @Override + public int UserRegister(User user) { + + user.setRoleId(Byte.valueOf("1")); + user.setUserStatus(Byte.valueOf("1")); + user.setUserPassword(MD5Utils.md5(user.getUserPassword())); + Date date=new Date(); + user.setUserRegistered(date); + + + + return userDao.insert(user); + } + + + @Override + public User selectUserAlreadyExist(User user) { + System.out.println(user.getUserEmail()); + User user1=userDao.selectByEmail(user.getUserEmail()); + return user1; + } + } diff --git a/src/main/java/com/lovenav/vo/CateAndUrl.java b/src/main/java/com/lovenav/vo/CateAndUrl.java new file mode 100644 index 0000000..0f0be25 --- /dev/null +++ b/src/main/java/com/lovenav/vo/CateAndUrl.java @@ -0,0 +1,96 @@ +package com.lovenav.vo; + +import java.util.ArrayList; +import java.util.List; + +public class CateAndUrl { + String name; + String icon; + String url; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getIcon() { + return icon; + } + + public void setIcon(String icon) { + this.icon = icon; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getFloder() { + return floder; + } + + public void setFloder(String floder) { + this.floder = floder; + } + + public List getChildUC() { + return childUC; + } + + public void setChildUC(List childUC) { + this.childUC = childUC; + } + + @Override + public String toString() { + return "cateAndUrl{" + + "name='" + name + '\'' + + ", icon='" + icon + '\'' + + ", url='" + url + '\'' + + ", floder='" + floder + '\'' + + ", childUC=" + childUC + + '}'; + } + + public int getParentId() { + return parentId; + } + + public void setParentId(int parentId) { + this.parentId = parentId; + } + + String floder; + + + public Integer getCateId() { + return cateId; + } + + public void setCateId(Integer cateId) { + this.cateId = cateId; + } + + public Long getUrlId() { + return urlId; + } + + public void setUrlId(Long urlId) { + this.urlId = urlId; + } + + int parentId; + + Integer cateId; + Long urlId; + + List childUC = new ArrayList<>(); + +} diff --git a/src/main/resources/mybatis/UrlCateListDao.xml b/src/main/resources/mybatis/UrlCateListDao.xml index fce8e38..96bb201 100644 --- a/src/main/resources/mybatis/UrlCateListDao.xml +++ b/src/main/resources/mybatis/UrlCateListDao.xml @@ -4,7 +4,7 @@ - + @@ -23,6 +23,23 @@ from ln_url_cate_list where id = #{id,jdbcType=INTEGER} + + + + + + + delete from ln_url_cate_list where id = #{id,jdbcType=INTEGER} @@ -32,7 +49,7 @@ weigh, `status`, need_login, user_id, root_cate_id, ico ) - values (#{name,jdbcType=VARCHAR}, #{createtime,jdbcType=INTEGER}, #{urlNumber,jdbcType=BIGINT}, + values (#{name,jdbcType=VARCHAR}, #{createtime,jdbcType=BIGINT}, #{urlNumber,jdbcType=BIGINT}, #{weigh,jdbcType=BIGINT}, #{status,jdbcType=TINYINT}, #{needLogin,jdbcType=TINYINT}, #{userId,jdbcType=INTEGER}, #{rootCateId,jdbcType=INTEGER}, #{ico,jdbcType=VARCHAR} ) @@ -73,7 +90,7 @@ #{name,jdbcType=VARCHAR}, - #{createtime,jdbcType=INTEGER}, + #{createtime,jdbcType=BIGINT}, #{urlNumber,jdbcType=BIGINT}, @@ -105,7 +122,7 @@ `name` = #{name,jdbcType=VARCHAR}, - createtime = #{createtime,jdbcType=INTEGER}, + createtime = #{createtime,jdbcType=BIGINT}, url_number = #{urlNumber,jdbcType=BIGINT}, @@ -134,7 +151,7 @@ update ln_url_cate_list set `name` = #{name,jdbcType=VARCHAR}, - createtime = #{createtime,jdbcType=INTEGER}, + createtime = #{createtime,jdbcType=BIGINT}, url_number = #{urlNumber,jdbcType=BIGINT}, weigh = #{weigh,jdbcType=BIGINT}, `status` = #{status,jdbcType=TINYINT}, diff --git a/src/main/resources/mybatis/UrlListDao.xml b/src/main/resources/mybatis/UrlListDao.xml index 13499d0..113b786 100644 --- a/src/main/resources/mybatis/UrlListDao.xml +++ b/src/main/resources/mybatis/UrlListDao.xml @@ -7,7 +7,7 @@ - + @@ -30,6 +30,29 @@ from ln_url_list where id = #{id,jdbcType=BIGINT} + + + + + + + + + delete from ln_url_list where id = #{id,jdbcType=BIGINT} @@ -42,7 +65,7 @@ is_need_agent, is_ad, is_top, is_encrypt) values (#{name,jdbcType=VARCHAR}, #{icon,jdbcType=VARCHAR}, #{cateId,jdbcType=INTEGER}, - #{url,jdbcType=VARCHAR}, #{createtime,jdbcType=INTEGER}, #{views,jdbcType=BIGINT}, + #{url,jdbcType=VARCHAR}, #{createtime,jdbcType=BIGINT}, #{views,jdbcType=BIGINT}, #{tags,jdbcType=VARCHAR}, #{weigh,jdbcType=BIGINT}, #{status,jdbcType=TINYINT}, #{desc,jdbcType=VARCHAR}, #{needLogin,jdbcType=TINYINT}, #{agentHint,jdbcType=VARCHAR}, #{isNeedAgent,jdbcType=TINYINT}, #{isAd,jdbcType=TINYINT}, #{isTop,jdbcType=TINYINT}, @@ -114,7 +137,7 @@ #{url,jdbcType=VARCHAR}, - #{createtime,jdbcType=INTEGER}, + #{createtime,jdbcType=BIGINT}, #{views,jdbcType=BIGINT}, @@ -167,7 +190,7 @@ url = #{url,jdbcType=VARCHAR}, - createtime = #{createtime,jdbcType=INTEGER}, + createtime = #{createtime,jdbcType=BIGINT}, views = #{views,jdbcType=BIGINT}, @@ -211,7 +234,7 @@ icon = #{icon,jdbcType=VARCHAR}, cate_id = #{cateId,jdbcType=INTEGER}, url = #{url,jdbcType=VARCHAR}, - createtime = #{createtime,jdbcType=INTEGER}, + createtime = #{createtime,jdbcType=BIGINT}, views = #{views,jdbcType=BIGINT}, tags = #{tags,jdbcType=VARCHAR}, weigh = #{weigh,jdbcType=BIGINT}, diff --git a/src/test/java/com/lovenav/LoveNavApplicationTests.java b/src/test/java/com/lovenav/LoveNavApplicationTests.java index 1def733..1dcdaef 100644 --- a/src/test/java/com/lovenav/LoveNavApplicationTests.java +++ b/src/test/java/com/lovenav/LoveNavApplicationTests.java @@ -1,13 +1,326 @@ package com.lovenav; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; +import com.lovenav.dao.UrlCateListDao; +import com.lovenav.dao.UrlListDao; +import com.lovenav.dao.UserDao; +import com.lovenav.entity.UrlCateList; +import com.lovenav.entity.UrlList; +import com.lovenav.filter.SensitiveFilter; +import com.lovenav.service.RedisService; +import com.lovenav.service.UrlCateListService; +import com.lovenav.service.UrlListService; +import com.lovenav.service.UserService; +import com.lovenav.vo.CateAndUrl; import org.junit.jupiter.api.Test; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.slf4j.Logger; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; @SpringBootTest class LoveNavApplicationTests { + @Autowired + private RedisTemplate redisTemplate; + @Autowired + private StringRedisTemplate stringRedisTemplate; + + @Autowired + RedisService redisService ; + + @Autowired + UserService userService ; + + @Autowired + UrlCateListService urlCateListService; + + @Autowired + UrlListService urlListService; + + @Autowired + UserDao userDao; + + @Autowired + SensitiveFilter sensitiveFilter; + @Autowired + ObjectMapper objectMapper; + @Autowired + UrlCateListDao urlCateListDao; + @Autowired + UrlListDao urlListDao; + + private static Logger logger = LoggerFactory.getLogger(LoveNavApplicationTests.class); + @Test void contextLoads() { + + String userId = "2"; + String searchKey="学习"; + String abc = "[91片先生, bilibli, 学习, 阁楼]"; + redisService.addSearchHistoryByUserId(userId, searchKey); + redisService.incrementScoreByUserId(searchKey); + redisService.incrementScore(searchKey); + +// redisService.getSearchHistoryByUserId(userId); + + +// System.out.println(redisService.getSearchHistoryByUserId(userId)); + System.out.println(redisService.getHotList("学")); + } + + @Test + void testStringRedisTemplate() { + + stringRedisTemplate.opsForValue().set("name", "zhenyu"); + //根据键值取出数据 + System.out.println(stringRedisTemplate.opsForValue().get("name")); + } + + @Test + void testServiceImpl() throws IOException { + + String searchKey = "傻逼h"; + String placeholder = "***"; + //非法敏感词汇判断 + SensitiveFilter filter = SensitiveFilter.getInstance(); + String s = filter.replaceSensitiveWord(searchKey, 1, placeholder); + System.out.println(s); + int n = filter.CheckSensitiveWord(searchKey,0,2); + //存在非法字符 + if(n > 0){ + logger.info("这个人输入了非法字符--> {},不知道他到底要查什么~ userid--> {}",searchKey,1); + } + + } + + @Test + public void disposeBookmark() + { + String data = "\n" + + "[ {\n" + + "\"name\" :\"书签栏\",\n" + + "\"folder\":true,\n" + + "\"children\": [ {\n" + + "\"folder\":false,\n" + + "\"name\" :\"后阁楼_此处安放你的文字\",\n" + + "\"url\": \"http://lxqnsys.com/ hougelou/#/\"\n" + + "}]\n" + + "}, {\n" + + "\"name\" :\"我是文件夹\",\n" + + "\"folder\" : true,\n" + + "\"children\" : [{\n" + + "\"folder\":false,\n" + + "\"name\" :\"理想P卫T_一个简单优雅的在线PPT\",\n" + + "\"url\": \"http:// lxqnsys.com/ ppt/ \"\n" + + "}]\n" + + "\n" + + "}]"; + String data1 = "[\n" + + " {\n" + + " \"name\":\"书签栏\",\n" + + " \"folder\":true,\n" + + " \"children\":[\n" + + " {\n" + + " \"folder\":false,\n" + + " \"name\":\"后阁楼_此处安放你的文字\",\n" + + " \"url\":\"http://lxqnsys.com/ hougelou/#/\"\n" + + " },\n" + + " {\n" + + " \"folder\":true,\n" + + " \"name\":\"seven\",\n" + + " \"url\":\"http://lxqnsys.com/ hougelou/#/\",\n" + + " \"children\":[]\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\":\"我是文件夹\",\n" + + " \"folder\":true,\n" + + " \"children\":[\n" + + " {\n" + + " \"folder\":false,\n" + + " \"name\":\"理想P卫T_一个简单优雅的在线PPT\",\n" + + " \"url\":\"http:// lxqnsys.com/ ppt/ \"\n" + + " }\n" + + " ]\n" + + " }\n" + + "]"; + String data2="[\n" + + " {\n" + + " \"name\":\"书签栏\",\n" + + " \"folder\":true,\n" + + " \"children\":[\n" + + " {\n" + + " \"folder\":false,\n" + + " \"name\":\"后阁楼_此处安放你的文字\",\n" + + " \"url\":\"http://lxqnsys.com/ hougelou/#/\"\n" + + " },\n" + + " {\n" + + " \"folder\":true,\n" + + " \"name\":\"seven\",\n" + + " \"url\":\"http://lxqnsys.com/ hougelou/#/\",\n" + + " \"children\":[]\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\":\"我是文件夹\",\n" + + " \"folder\":true,\n" + + " \"children\":[\n" + + " {\n" + + " \"folder\":false,\n" + + " \"name\":\"理想P卫T_一个简单优雅的在线PPT\",\n" + + " \"url\":\"http:// lxqnsys.com/ ppt/ \"\n" + + " },\n" + + " {\n" + + " \"folder\":true,\n" + + " \"name\":\"eight\",\n" + + " \"url\":\"http://lxqnsys.com/ hougelou/#/\",\n" + + " \"children\":[]\n" + + " }\n" + + " ]\n" + + " }\n" + + "]"; + String mes = "success"; + //先转换成ObjectMapper类型 + ObjectNode objectNode = objectMapper.createObjectNode(); + try { + JsonNode rootNode = objectMapper.readTree(data2); + disposeBookmarkFunction1(rootNode,"top","fadas"); + + + + + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + + + } + @Test + public void disposeBookmarkFunction1(JsonNode rootNode,String parent,String email) + { + + for(int i=0;i urlCateLists = urlCateListDao.selectUrListByUserId(1); + List urlLists = urlListDao.selectUrList(); + + List cateAndUrlList = new ArrayList<>(); + + + + + //预处理为CateAndUrl对象 + for( int i = 0 ; i < urlCateLists.size() ; i++) + { + CateAndUrl cateAndUrl = new CateAndUrl(); + cateAndUrl.setFloder("true"); + cateAndUrl.setName(urlCateLists.get(i).getName()); + cateAndUrl.setParentId(urlCateLists.get(i).getRootCateId()); + cateAndUrl.setCateId(urlCateLists.get(i).getId()); + cateAndUrlList.add(cateAndUrl); + + } + for( int i = 0 ; i < urlLists.size() ; i++) + { + CateAndUrl cateAndUrl = new CateAndUrl(); + cateAndUrl.setFloder("false"); + cateAndUrl.setName(urlLists.get(i).getName()); + cateAndUrl.setParentId(urlLists.get(i).getCateId()); + cateAndUrl.setUrlId(urlLists.get(i).getId()); + cateAndUrlList.add(cateAndUrl); + + } + + List parentsList = new ArrayList<>(); + //声明返回集合 + List resultList = new ArrayList<>(); + //对全部数据进行遍历 + for (CateAndUrl disease : cateAndUrlList) { + //判断是否是第一梯队,或者说是树的根节点,如果是根节点就加入到父类集合与返回集合 + if (disease.getParentId() == 0) { + parentsList.add(disease); + resultList.add(disease); + } else { + //对于不是第一梯队的数据进行遍历 + for (CateAndUrl parent : parentsList) { + //对数据的pid与父类集合中的父节点进行配对,如果配对成功,就把数据加入到父节点中的子节点集合 + + + if (parent.getFloder().equals("true") ) { + if( parent.getCateId() == disease.getParentId()) + { + parent.getChildUC().add(disease); + //当前数据有可能是别的数据的父节点,加到父类容器 + parentsList.add(disease); + break; + } + + } + if (parent.getFloder().equals("false") ) { + if(parent.getUrlId() == disease.getParentId()) + { + parent.getChildUC().add(disease); + //当前数据有可能是别的数据的父节点,加到父类容器 + parentsList.add(disease); + break; + } + + } + } + } + } + + ObjectMapper mapper = new ObjectMapper(); + // java对象转换为json字符换 + try { + String Json = mapper.writeValueAsString(resultList); + System.out.println(Json); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + + + + + + + + + return ; + } }