Merge remote-tracking branch 'origin/master'

This commit is contained in:
cyk 2023-12-25 13:29:05 +08:00
commit 0f2a954882
57 changed files with 1099 additions and 459 deletions

36
pom.xml
View File

@ -48,6 +48,12 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!--获取邮箱头像所需要的依赖 -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.3.7</version>
</dependency>
<!--解析HTML将其转成字符串 -->
<dependency>
<groupId>org.jsoup</groupId>
@ -72,6 +78,17 @@
<artifactId>java-jwt</artifactId>
<version>3.4.0</version>
</dependency>
<!--文件上传依赖-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
<!--引入lombok-->
<dependency>
@ -111,11 +128,24 @@
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
<!-- IP归属地-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
<groupId>org.lionsoul</groupId>
<artifactId>ip2region</artifactId>
<version>2.6.5</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>com.alibaba.fastjson2</groupId>

View File

@ -8,7 +8,7 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
public class MyWebConfigurer implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new UserInterceptor()).addPathPatterns("/*/**").excludePathPatterns("/error","/login","/register","/findThePassword","/verifyCode","/sendActiveCode");
// registry.addInterceptor(new UserInterceptor()).addPathPatterns("/*/**").excludePathPatterns("/error","/login","/register","/findThePassword","/verifyCode","/sendActiveCode");
WebMvcConfigurer.super.addInterceptors(registry);
}
}

View File

@ -0,0 +1,92 @@
package com.lovenav.controller;
import com.lovenav.entity.Attachment;
import com.lovenav.entity.Config;
import com.lovenav.service.AttachmentService;
import com.lovenav.service.ConfigService;
import org.apache.catalina.core.ApplicationContext;
import org.apache.commons.io.FileUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.context.support.ServletContextResource;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.imageio.ImageIO;
import javax.servlet.ServletContext;
import java.io.*;
import java.util.HashMap;
import static java.lang.System.out;
@RestController
public class AttachmentController {
//附件上传
@Autowired
AttachmentService attachmentService;
@Autowired
ConfigService configService;
//上传附件
@RequestMapping("/uploadfile")
public HashMap<String, String> uploadFile(MultipartFile multipartFile,String cate,Config config) throws IOException {//@RequestPart("photos") MultipartFile multipartFile
HashMap<String,String> map=new HashMap<>();
Long id=null;
if (multipartFile==null){
map.put("msg","文件不能为空!");
return map;
}
out.println(multipartFile.getOriginalFilename());
map=attachmentService.upload(multipartFile,cate,id);
config.setValue(map.get("id"));
config.setType("image");
map.put("msg",configService.addConfig(config));
return map;
}
@GetMapping(value = "/getAttachment",produces =MediaType.IMAGE_JPEG_VALUE)//,produces = MediaType.IMAGE_JPEG_VALUE
@ResponseBody
public ResponseEntity getAttachment(Config config) throws Exception {
byte[] bytes1 ;
Config config1=configService.selectAlreadyExist(config);
HttpHeaders headers = new HttpHeaders();
if (config1==null){
bytes1= "没有该Config!".getBytes();
headers.setContentType(MediaType.APPLICATION_JSON);
return new ResponseEntity<byte[]>(bytes1, headers, HttpStatus.NOT_FOUND);
}
Attachment attachment =attachmentService.selectAttachment(Long.valueOf(config1.getValue()));
if (attachment==null){
bytes1= "没有该Attachment!".getBytes();
headers.setContentType(MediaType.APPLICATION_JSON);
return new ResponseEntity<byte[]>(bytes1, headers, HttpStatus.NOT_FOUND);
}
String fileUrl=attachment.getPath()+attachment.getFileName()+attachment.getSuffix();
out.println(fileUrl);
out.println(attachment.getSuffix().replace(".",""));
File file = new File(fileUrl);
FileInputStream inputStream = new FileInputStream(file);
byte[] bytes = new byte[inputStream.available()];
inputStream.read(bytes, 0, inputStream.available());
//设置ContentType的值 IMAGE_JPEG在浏览器返回图片
if(attachment.getSuffix().replace(".","").equals("png")){
headers.setContentType(MediaType.IMAGE_PNG);
}else if (attachment.getSuffix().replace(".","").equals("jpeg")){
headers.setContentType(MediaType.IMAGE_JPEG);
}else{
bytes= "没有该文件!".getBytes();
headers.setContentType(MediaType.APPLICATION_JSON);
return new ResponseEntity<byte[]>(bytes, headers, HttpStatus.NOT_FOUND);
}
// 内容是字节流
return new ResponseEntity<byte[]>(bytes, headers, HttpStatus.OK);
}
}

View File

@ -1,30 +1,47 @@
package com.lovenav.controller;
import com.lovenav.entity.Config;
import com.lovenav.service.AttachmentService;
import com.lovenav.service.ConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
@RestController
public class ConfigController {
//配置文件操作
@Autowired
ConfigService configService;
@Autowired
AttachmentService attachmentService;
@RequestMapping("/updateConfig")
public String updateConfig(Config config){
if (configService.updateConfis(config)==1){
return "更新成功";
Date date=new Date();
int date1=Integer.valueOf(date.toString());
config.setUpdatetime(date1);
if (config==null){
return "配置文件不能为空!";
}
else {
return "更新配置失败";
if (configService.updateConfig(config)==1){
return "更新成功!";
}
else if (configService.updateConfig(config)==2){
return "不存在名称为"+config.getName()+"的配置文件,请先添加!";
}
return "更新失败!";
}
@RequestMapping("/addConfig")
@RequestMapping("/addConfigString")
public String addConfig(Config config){
if (config.getName()==null||config.getValue()==null){
return "属性值不能为空";
}else {
Date date=new Date();
int date1=Integer.valueOf(date.toString());
config.setUpdatetime(date1);
return configService.addConfig(config);
}

View File

@ -0,0 +1,36 @@
package com.lovenav.controller;
import com.lovenav.entity.UrlAccess;
import com.lovenav.service.UrlAccessService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
import java.util.HashMap;
@RestController
public class UrlAccessController {
@Autowired
UrlAccessService urlAccessService;
//浏览url访问量加1
@RequestMapping("/addUrlAccessViews")
public String addUrlAccessViews(UrlAccess urlAccess){
String result=urlAccessService.inreaseUrlViews(urlAccess);
return result;
}
@RequestMapping("/getUrlAccess")
public HashMap<Date, Object> getUrlAccess(UrlAccess urlAccess){
HashMap<Date,Object> map=new HashMap<>();
map=urlAccessService.getUrlAccess(urlAccess);
if (map.isEmpty()){
Date date=new Date();
map.put(date,"查不到该数据");
return map;
}
return map;
}
}

View File

@ -13,6 +13,7 @@ import com.lovenav.entity.UrlList;
import com.lovenav.service.UrlCateListService;
import com.lovenav.service.UrlListService;
import com.lovenav.vo.CateAndUrl;
import io.swagger.models.auth.In;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
@ -53,15 +54,15 @@ public class UrlAndCateController {
UserDao userDao;
//处理JSON
@RequestMapping("/disposeJson")
public String disposeJson(@RequestBody String data2 ,String email)
public String disposeJson(@RequestBody String data2 ,Integer userId)
{
String jsonString;
//先转换成ObjectMapper类型
ObjectNode objectNode = objectMapper.createObjectNode();
try {
JsonNode rootNode = objectMapper.readTree(data2);
disposeBookmarkFunction1(rootNode,"top",email);
countCateContainUrlNumber(email);
disposeBookmarkFunction1(rootNode,"top",userId);
countCateContainUrlNumber(userId);
HashMap<String, Object> result = new HashMap<>();
result.put("code", 200);
result.put("msg", "查询成功");
@ -71,23 +72,35 @@ public class UrlAndCateController {
}
return jsonString;
}
public void disposeBookmarkFunction1(JsonNode rootNode,String parent,String email)
public void disposeBookmarkFunction1(JsonNode rootNode,String parent,Integer userId)
{
for(int i=0;i<rootNode.size();i++)
{
JsonNode sonNode = rootNode.get(i);
if(String.valueOf(sonNode.get("folder")).equals("true")){
urlCateListService.selectAndInsertUrlCate(email,String.valueOf(sonNode.get("name")),parent);
if(String.valueOf(sonNode.get("type")).equals("\"folder\"")){
String icon = String.valueOf(sonNode.get("icon"));
System.out.println(icon.length());
if (icon.length() == 2) icon ="https://imgbed.landaiqing.space/img/1/2023/12/25/1_6588644cb1f03_1703437387965_20231225.webp";
else{
icon=icon.substring(1,icon.length()-1);
}
urlCateListService.selectAndInsertUrlCate(userId,String.valueOf(sonNode.get("name")),parent,icon);
JsonNode children = sonNode.get("children");
disposeBookmarkFunction1(children, String.valueOf(sonNode.get("name")),email);
disposeBookmarkFunction1(children, String.valueOf(sonNode.get("name")),userId);
}else{
String name = String.valueOf(sonNode.get("name"));
String url = String.valueOf(sonNode.get("url"));
String adddata = String.valueOf(sonNode.get("adddata"));
urlListService.selectCateAndInsertUrl(parent,name,"123",url,email);
System.out.println(name +"---" + url + "---" + adddata + "---" + parent );
String url = String.valueOf(sonNode.get("href")).substring(1,String.valueOf(sonNode.get("href")).length()-1);
String icon = String.valueOf(sonNode.get("icon"));
if (icon.length() == 2 )
{
icon="https://imgbed.landaiqing.space/img/1/2023/12/25/1_6588644cb1f03_1703437387965_20231225.webp";
}else{
icon =icon.substring(1,String.valueOf(sonNode.get("icon")).length()-1);
}
urlListService.selectCateAndInsertUrl(parent,name,icon , url,userId);
// System.out.println(name +"---" + url + "---" + parent );
}
}
@ -110,13 +123,14 @@ public class UrlAndCateController {
cateAndUrl.setName(urlCateList.getName());
cateAndUrl.setParentId(urlCateList.getRootCateId());
cateAndUrl.setCateId(urlCateList.getId());
cateAndUrl.setNumber(urlCateList.getUrlNumber());
cateAndUrlList.add(cateAndUrl);
}
for( int i = 0 ; i < urlLists.size() ; i++){
UrlList urlList = urlLists.get(i);
if(urlList.getStatus() == 0 ) continue;
if(urlList.getStatus() == 1 ) continue;
for(CateAndUrl cateAndUrl1 : cateAndUrlList) {
if (urlList.getCateId() == cateAndUrl1.getCateId())
if (String.valueOf(urlList.getCateId()).equals(cateAndUrl1.getCateId()+""))
{
CateAndUrl cateAndUrl = new CateAndUrl();
cateAndUrl.setFloder("false");
@ -169,11 +183,11 @@ public class UrlAndCateController {
List<UrlList> urlLists = urlListService.selectUrListByNeedLogin();
List<CateAndUrl> cateAndUrlList = new ArrayList<>();
Set<String> parentSet = new HashSet<>();
List<Integer> integers = new ArrayList<>();
for( int i = 0 ; i < urlLists.size() ; i++)
{
String parentString = urlCateListService.selectUrListCateByUrlCateId(urlLists.get(i).getCateId());
String [] parentList = parentString.split(",");
System.out.println(parentString);
for(String parent : parentList)
{
if(parent.equals("0")){
@ -182,8 +196,13 @@ public class UrlAndCateController {
parentSet.add(parent);
}
}
for (String str : parentSet) {
for(String str : parentSet)
{
integers.add(Integer.valueOf(str));
}
Collections.sort(integers);
for (Integer str : integers) {
System.out.println(str);
UrlCateList urlCateList =urlCateListService.selectByPrimaryKey(Integer.valueOf(str));
CateAndUrl cateAndUrl = new CateAndUrl();
cateAndUrl.setFloder("true");
@ -283,11 +302,11 @@ public class UrlAndCateController {
}
public String countCateContainUrlNumber(String email){
public String countCateContainUrlNumber(Integer userId){
HashMap<String, Object> result = new HashMap<>();
result.put("code", 200);
result.put("msg", "查询成功");
result.put("data",urlCateListService.countCateContainUrlNumber(email));
result.put("data",urlCateListService.countCateContainUrlNumber(userId));
String jsonString = JSONObject.toJSONString(result);
return jsonString;
}
@ -444,12 +463,13 @@ public class UrlAndCateController {
public String disposeBookmarkExhibitedToJsonNew(){
List<UrlList> urlLists = urlListService.selectUrListByNeedLogin();
List<CateAndUrl> cateAndUrlList = new ArrayList<>();
CateAndUrl pub = new CateAndUrl();
Set<String> parentSet = new HashSet<>();
for( int i = 0 ; i < urlLists.size() ; i++)
{
String parentString = urlCateListService.selectUrListCateByUrlCateId(urlLists.get(i).getCateId());
if(parentString == null) continue;
String [] parentList = parentString.split(",");
System.out.println(parentString);
for(String parent : parentList)
{
if(parent.equals("0")){
@ -458,18 +478,22 @@ public class UrlAndCateController {
parentSet.add(parent);
}
}
for (String str : parentSet) {
List<String> ls=Arrays.asList(parentSet.toArray(new String[0]));
Collections.sort(ls);
for (String str : ls) {
System.out.println(str);
UrlCateList urlCateList =urlCateListService.selectByPrimaryKey(Integer.valueOf(str));
CateAndUrl cateAndUrl = new CateAndUrl();
cateAndUrl.setFloder("true");
cateAndUrl.setName(urlCateList.getName());
cateAndUrl.setParentId(urlCateList.getRootCateId());
cateAndUrl.setCateId(urlCateList.getId());
cateAndUrl.setNumber(urlCateList.getUrlNumber());
cateAndUrlList.add(cateAndUrl);
}
for( int i = 0 ; i < urlLists.size() ; i++){
UrlList urlList = urlLists.get(i);
if(urlList.getStatus() == 0 ) continue ;
if(urlList.getStatus() == 1 ) continue ;
CateAndUrl cateAndUrl = new CateAndUrl();
cateAndUrl.setFloder("false");
cateAndUrl.setName(urlList.getName());
@ -489,13 +513,27 @@ public class UrlAndCateController {
cateAndUrl.setIsAd(urlList.getIsAd());
cateAndUrl.setIsTop(urlList.getIsTop());
cateAndUrl.setIsEncrypt(urlList.getIsEncrypt());
int flag =0 ;
for(CateAndUrl cateAndUrl1 : cateAndUrlList){
if(cateAndUrl.getParentId() == cateAndUrl1.getCateId())
if(String.valueOf(urlList.getCateId()).equals(cateAndUrl1.getCateId()+""))
{
flag = 1;
cateAndUrl1.getChildUC().add(cateAndUrl);
break;
}
}
if(flag == 0)
{
pub.setName("默认文件夹");
pub.getChildUC().add(cateAndUrl);
}
}
if(pub.getChildUC().size()!=0)
{
pub.setNumber(Long.valueOf(pub.getChildUC().size()));
cateAndUrlList.add(pub);
}
return JSONObject.toJSONString(cateAndUrlList);
@ -529,6 +567,7 @@ public class UrlAndCateController {
cateAndUrl.setName(urlCateList.getName());
cateAndUrl.setParentId(urlCateList.getRootCateId());
cateAndUrl.setCateId(urlCateList.getId());
cateAndUrl.setNumber(urlCateList.getUrlNumber());
cateAndUrlList.add(cateAndUrl);
}
@ -630,7 +669,7 @@ public class UrlAndCateController {
}
urlCateListService.countCateContainUrlNumber(userDao.selectByPrimaryKey(Integer.valueOf(userId)).getUserEmail());
urlCateListService.countCateContainUrlNumber(userDao.selectByPrimaryKey(Integer.valueOf(userId)).getId());
result.put("code", 200);
result.put("msg", "处理成功");
return JSONObject.toJSONString(result);

View File

@ -1,15 +1,18 @@
package com.lovenav.controller;
import com.alibaba.fastjson2.JSONObject;
import com.lovenav.entity.LoginLogs;
import com.lovenav.entity.UrlList;
import com.lovenav.entity.User;
import com.lovenav.service.ConfigService;
import com.lovenav.service.LoginLogsService;
import com.lovenav.service.UserService;
import com.lovenav.utils.MD5Utils;
import com.lovenav.utils.RandomValidateCode;
import com.lovenav.utils.TokenUtils;
import com.lovenav.utils.*;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.web.ServerProperties;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpRequest;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
@ -34,6 +37,12 @@ public class UserController {
UserService userService;
@Autowired
TokenUtils tokenUtils;
@Autowired
LoginLogsService loginLogsService;
@Autowired
ConfigService configService;
@Autowired
IPutils iPutils;
//发送邮箱验证码
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(5);
//这个是我用户Service实现类可以自行替换
@ -42,8 +51,14 @@ public class UserController {
@GetMapping("/sendActiveCode")
public String sendActiveCode(HttpSession session, User user){
String activecode=userService.sendEmailActivecode(user);
HashMap<String,String> configMap=new HashMap<>();
configMap=configService.selectEmailConfig();
String activecode=userService.sendEmailActivecode(user,configMap);
if (activecode=="配置文件有错误"){
return "邮箱配置文件有错误,请重新确认!";
} else if (activecode=="该邮箱不存在") {
return "将要发送的邮箱不存在!";
}
session.setAttribute(user.getUserEmail(),activecode);
scheduledExecutorService.schedule(new Runnable() {
@Override
@ -80,7 +95,8 @@ public class UserController {
return "注册成功!";
}
@RequestMapping(value = "/login",produces = {"application/json;charset=UTF-8"})
public Map<String,Object>login(User user,String code,HttpSession session){
public Map<String,Object>login(User user, String code, HttpSession session, HttpServletRequest request){
LoginLogs loginLogs=new LoginLogs();
Map<String,Object> result=new HashMap<>();
Map<String,Object> map=new HashMap<>();
@ -99,9 +115,18 @@ public class UserController {
return result;
}
User user1 = userService.userLogin(user);
String ip=IPutils.getIpAddress(request);
System.out.println(ip);
String locat= String.valueOf(IPutils.getLocation(ip));
User user1 = userService.userLogin(user);
if(user1!=null){
loginLogs.setUserId(user1.getId());
loginLogs.setLoginIp(ip);
loginLogs.setLocation(locat);
loginLogsService.addLoginLogs(loginLogs);
result.put("code",200);
map.put("userEmail",user1.getUserEmail());
map.put("userLogin",user1.getUserLogin());
@ -166,6 +191,9 @@ public class UserController {
return map;
}
@RequestMapping("/getAllUsers")
public HashMap<Integer,Object> getAllUsers(){
return userService.getAllUsers();
}
}

View File

@ -1,9 +1,11 @@
package com.lovenav.dao;
import com.lovenav.entity.Attachment;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@Repository
@Mapper
public interface AttachmentDao {
int deleteByPrimaryKey(Long id);

View File

@ -1,12 +1,14 @@
package com.lovenav.dao;
import com.lovenav.entity.Comment;
import com.lovenav.entity.CommentNode;
import org.apache.ibatis.annotations.Mapper;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
@Mapper
public interface CommentDao {
@ -25,4 +27,7 @@ public interface CommentDao {
List<Comment> selectAllComment();
List<Comment> selectByAllReply(int id);
List<CommentNode> queryFirstCommentList(int urlid);
List<CommentNode> querySecondCommentList(int UrlId);
}

View File

@ -1,8 +1,9 @@
package com.lovenav.dao;
import com.lovenav.entity.LoginLogs;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@Mapper
@Repository
public interface LoginLogsDao {
int deleteByPrimaryKey(Integer id);
@ -16,4 +17,8 @@ public interface LoginLogsDao {
int updateByPrimaryKeySelective(LoginLogs record);
int updateByPrimaryKey(LoginLogs record);
LoginLogs selectAlreadyExist(int userId);
int updateByUserId(LoginLogs record);
}

View File

@ -1,9 +1,15 @@
package com.lovenav.dao;
import com.lovenav.entity.UrlAccess;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.Date;
import java.util.HashMap;
@Repository
@Mapper
public interface UrlAccessDao {
int deleteByPrimaryKey(Integer id);
@ -14,6 +20,11 @@ public interface UrlAccessDao {
UrlAccess selectByPrimaryKey(Integer id);
int updateByPrimaryKeySelective(UrlAccess record);
UrlAccess selectAlreadyExist(UrlAccess urlAccess);
int updateByPrimaryKey(UrlAccess record);
int updateByUrlId(UrlAccess record);
@MapKey("time")
HashMap<Date,Object> selectUrlAccess(UrlAccess urlAccess);
}

View File

@ -1,10 +1,13 @@
package com.lovenav.dao;
import com.lovenav.entity.User;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
import java.util.HashMap;
@Mapper
@Repository
public interface UserDao {
@ -26,6 +29,7 @@ public interface UserDao {
User selectByUserLogin(String user_login);
int updateByEmail(User user);
@MapKey("id")
HashMap<Integer,Object> selectAllUsers();
}

View File

@ -1,6 +1,7 @@
package com.lovenav.entity;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
/**
@ -57,7 +58,7 @@ public class Attachment implements Serializable {
/**
* 创建时间
*/
private Integer createtime;
private Date createtime;
private static final long serialVersionUID = 1L;
}

View File

@ -0,0 +1,44 @@
package com.lovenav.entity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.ArrayList;
import java.util.List;
/**
* 功能描述封装博客评论的BO <br>
* 采用链表结构实现
**/
@EqualsAndHashCode(callSuper = true)
@Data
@NoArgsConstructor
public class CommentNode extends Comment {
/**
* 评论的用户信息
*/
private User user;
/**
* 下一条回复
*/
private List<CommentNode> nextNodes = new ArrayList<>();
public CommentNode ( CommentNode commentNode ) {
super();
setId(commentNode.getId());
setUrlId(commentNode.getUrlId());
setUserId(commentNode.getUserId());
setContent(commentNode.getContent());
setRootCommentId(commentNode.getRootCommentId());
setCommentStatus(commentNode.getCommentStatus());
setCommentTime(commentNode.getCommentTime());
setUpdateTime(commentNode.getUpdateTime());
setRating(commentNode.getRating());
setLikeCount(commentNode.getLikeCount());
this.user = commentNode.getUser();
}
}

View File

@ -0,0 +1,23 @@
package com.lovenav.entity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
public class IpLocation implements Serializable {
@ApiModelProperty("ip地址")
private String ip;
@ApiModelProperty("国家")
private String country;
@ApiModelProperty("")
private String province;
@ApiModelProperty("")
private String city;
@ApiModelProperty("服务商")
private String isp;
}

View File

@ -22,7 +22,7 @@ public class LoginLogs implements Serializable {
/**
* 用户id
*/
private Byte userId;
private Integer userId;
/**
* 登录时间

View File

@ -2,6 +2,8 @@ package com.lovenav.entity;
import java.io.Serializable;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
/**
@ -22,6 +24,7 @@ public class UrlAccess implements Serializable {
/**
* 日期
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date time;
/**

View File

@ -1,9 +1,18 @@
package com.lovenav.service;
import com.lovenav.dao.AttachmentDao;
import com.lovenav.entity.Attachment;
import com.lovenav.entity.Config;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public interface AttachmentService {
// public HashMap<String,String>storeFile(MultipartFile multipartFile);
HashMap<String,String> upload(MultipartFile file,String cate,Long id) throws IOException;
public HashMap<String,String>storeFile(MultipartFile multipartFile,String cate,Long id) throws IOException;
public Attachment selectAttachment(Long id);
}

View File

@ -6,7 +6,15 @@ import java.util.HashMap;
public interface ConfigService {
public HashMap<String,Object>getAllConfig();
public int updateConfis(Config config);
public int updateConfig(Config config);
public String addConfig(Config config);
HashMap<String, String> selectEmailConfig();
public Config selectAlreadyExist(Config config);
}

View File

@ -0,0 +1,9 @@
package com.lovenav.service;
import com.lovenav.entity.LoginLogs;
public interface LoginLogsService {
public String addLoginLogs(LoginLogs loginLogs);
}

View File

@ -0,0 +1,13 @@
package com.lovenav.service;
import com.lovenav.entity.UrlAccess;
import java.text.ParseException;
import java.util.Date;
import java.util.HashMap;
public interface UrlAccessService {
public String inreaseUrlViews(UrlAccess urlAccess);
public HashMap<Date,Object> getUrlAccess(UrlAccess urlAccess);
}

View File

@ -8,10 +8,10 @@ import java.util.List;
public interface UrlCateListService {
public int selectAndInsertUrlCate(String email , String cateName , String parent);
public int selectAndInsertUrlCate(Integer userId , String cateName , String parent,String icon);
public List<UrlCateList> selectUrListByUserId(Integer userId);
public String countCateContainUrlNumber(String userId);
public String countCateContainUrlNumber(Integer userId);
public JSONArray getUrl(String userId);
public String selectUrListCateByUrlCateId(Integer cateId);

View File

@ -6,7 +6,7 @@ import java.util.List;
public interface UrlListService {
public int selectCateAndInsertUrl(String parent,String name , String icon ,String url ,String email );
public int selectCateAndInsertUrl(String parent,String name , String icon ,String url ,Integer userId );
public List<UrlList> selectUrList();
public UrlList selectUrListByInput(String input);
public UrlList selectUrlListByUrlId(Long urlId);

View File

@ -2,12 +2,12 @@ package com.lovenav.service;
import com.lovenav.entity.User;
import java.util.HashMap;
public interface UserService {
public String sendEmailActivecode(User user);
public String sendEmailActivecode(User user, HashMap<String,String>configMap);
public int UserRegister(User user);
public User selectUserAlreadyExist(User user);
@ -16,4 +16,6 @@ public interface UserService {
public int updatePassword(User user);
HashMap<Integer,Object> getAllUsers();
}

View File

@ -1,6 +1,14 @@
package com.lovenav.service.serviceImpl;
import com.lovenav.dao.AttachmentDao;
import com.lovenav.dao.ConfigDao;
import com.lovenav.entity.Attachment;
import com.lovenav.entity.Config;
import com.lovenav.service.AttachmentService;
import com.lovenav.utils.MD5Utils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ResourceUtils;
import org.springframework.web.multipart.MultipartFile;
@ -14,45 +22,72 @@ import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
@Slf4j
@Service
public class AttachmentServiceImpl implements AttachmentService {
// @Override
// public HashMap<String, String> storeFile(MultipartFile multipartFile) {
// HashMap<String,String> map = new HashMap<>();
// }
// File path = null;
//// try {
// path = new File(ResourceUtils.getURL("classpath:").getPath());
// File upload = new File(path.getAbsolutePath(),"static/img/");
// Date date=new Date();
//
// DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// String date1=format.format(date);
// String fileName = multipartFile.getOriginalFilename();//文件全名
// File parentDir = new File(upload.getAbsolutePath()+"/" + date1);
// System.out.println(upload.getAbsolutePath());
// System.out.println(fileName);
// map
// return
// if(!upload.exists()){
// upload.mkdirs();
// }
// if(!parentDir.exists()){
// parentDir.mkdirs();
// }
// String suffix = suffix(fileName);//文件后缀
// String relPath = "/" + yearMonth + "/" + "-" + UUID.randomUUID().toString().replaceAll("-","") + suffix;
// File fileUp = new File(upload.getAbsolutePath()+ relPath);
// file.transferTo(fileUp);
// Map<String, String> map = new HashMap();
// map.put("url", "/img" + relPath);
// log.info(relPath);
// return map;
// } catch (FileNotFoundException e) {
// throw e;
// } catch (IOException e) {
// throw e;
// }
// }
@Autowired
AttachmentDao attachmentDao;
@Override
public HashMap<String,String> upload(MultipartFile file,String cate,Long id) throws IOException {
HashMap<String, String> map = storeFile(file,cate,id);
return map;
}
@Override
public HashMap<String, String> storeFile(MultipartFile multipartFile,String cate,Long id) throws IOException {
HashMap<String,String> map = new HashMap<>();
Attachment attachment=new Attachment();
File path = null;
try {
path = new File(ResourceUtils.getURL("classpath:").getPath());
File upload = new File(path.getAbsolutePath(),"static/"+cate+"/");
Date date=new Date();
DateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
DateFormat format1 = new SimpleDateFormat("yyyyMM");
String date1=format.format(date);
String fileName = multipartFile.getOriginalFilename();//文件全名
String date2=format1.format(date);
File parentDir = new File(upload.getAbsolutePath()+"/" + date2);
if(!upload.exists()){
upload.mkdirs();
}
if(!parentDir.exists()){
parentDir.mkdirs();
}
String suffix = suffix(fileName);//文件后缀
String finalFileName=UUID.randomUUID().toString().replaceAll("-","");
String relPath = "/" + date2 + "/" + finalFileName + suffix;
File fileUp = new File(upload.getAbsolutePath()+ relPath);
attachment.setCreatetime(date);
attachment.setFileName(finalFileName);
attachment.setPath(upload.getAbsolutePath()+ "/" + date2 + "/");
attachment.setSuffix(suffix);
attachment.setMd5(MD5Utils.md5(upload.getAbsolutePath()+ relPath));
attachment.setStorage("local");
attachment.setId(id);
attachmentDao.insertSelective(attachment);
map.put("id", String.valueOf(attachment.getId()));
multipartFile.transferTo(fileUp);
map.put("url", "/img" + relPath);
log.info(relPath);
return map;
} catch (FileNotFoundException e) {
throw e;
} catch (IOException e) {
throw e;
}
}
@Override
public Attachment selectAttachment(Long id) {
Attachment attachment=attachmentDao.selectByPrimaryKey(id);
return attachment;
}
private static String suffix(String fileName) {
int i = fileName.lastIndexOf('.');
return i == -1 ? "" : fileName.substring(i);
}
}

View File

@ -5,6 +5,8 @@ import com.alibaba.fastjson2.JSONObject;
import com.lovenav.dao.CommentDao;
import com.lovenav.dao.UserDao;
import com.lovenav.entity.Comment;
import com.lovenav.entity.CommentNode;
import com.lovenav.entity.User;
import com.lovenav.service.CommentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -64,10 +66,16 @@ public class CommentServiceImpl implements CommentService {
return JSON.toJSONString(hashMap);
}
// 显示评论
// 显示一级评论和用户信息
public String View_comment(){
List<Comment> list = commentDao.selectAllComment();
return JSON.toJSONString(list);
List<Comment> list_comment = commentDao.selectAllComment();
HashMap<Comment, User> result = new HashMap<>();
for(int i=0;i<list_comment.size();++i){
int user_id = list_comment.get(i).getUserId();
User user = userDao.selectByPrimaryKey(user_id);
result.put(list_comment.get(i),user );
}
return JSON.toJSONString(result);
}
// 显示回复
@ -75,4 +83,57 @@ public class CommentServiceImpl implements CommentService {
List<Comment> list = commentDao.selectByAllReply(id);
return JSON.toJSONString(list);
}
private boolean addNode (List<CommentNode> firstList, CommentNode commentNode ) {
//循环添加
for (CommentNode node : firstList) {
//判断留言的上一段是否是这条留言判断这条回复是否是当前评论的回复
if (node.getId().equals(commentNode.getRootCommentId())) {
//添加返回true
node.getNextNodes().add(commentNode);
return true;
} else {
//否则递归继续判断
if (node.getNextNodes().size() != 0) {
if (addNode(node.getNextNodes(), commentNode)) {
return true;
}
}
}
}
return false;
}
/**
* 功能描述将查出来的lastId不为null的回复都添加到第一层Node集合中
*
* @param firstList 第一层评论集合链表
* @param thenList 非第一层评论集合链表
* @return 所有评论集合非第一层评论集合对应添加到第一层评论集合返回
*/
private List<CommentNode> addAllNode ( List<CommentNode> firstList, List<CommentNode> thenList ) {
while (thenList.size() != 0) {
int size = thenList.size();
for (int i = 0; i < size; i++) {
if (addNode(firstList, new CommentNode(thenList.get(i)))) {
thenList.remove(i);
i--;
size--;
}
}
}
return firstList;
}
public List<CommentNode> queryObserveByBlogId ( Integer UrlId ) {
//所有未处理的一级评论集合
List<CommentNode> firstCommentList = commentDao.queryFirstCommentList(UrlId);
//所有未处理的二级评论集合
List<CommentNode> secondCommentList = commentDao.querySecondCommentList(UrlId);
//将二级评论用链表的方式添加到一级评论
List<CommentNode> list = addAllNode(firstCommentList, secondCommentList);
return list;
}
}

View File

@ -17,7 +17,10 @@ public class ConfigServiceImpl implements ConfigService {
}
@Override
public int updateConfis(Config config) {
public int updateConfig(Config config) {
if (configDao.selectByName(config.getName())==null){
return 2;
}
return configDao.updateByName(config);
}
@ -35,5 +38,36 @@ public class ConfigServiceImpl implements ConfigService {
}
}
//获得邮箱配置的信息若没有值则采用默认信息
@Override
public HashMap<String, String> selectEmailConfig() {
HashMap<String,String> configMap= new HashMap<>();
if (configDao.selectByName("email_sendEmail").getValue()!=null){
configMap.put("email_sendEmail",configDao.selectByName("email_sendEmail").getValue());
}else {
configMap.put("email_sendEmail","482370576@qq.com");
return configMap;
}
if (configDao.selectByName("email_host").getValue()!=null){
configMap.put("email_host",configDao.selectByName("email_host").getValue());
}else {
configMap.put("email_host","smtp.qq.com");
return configMap;
}
if (configDao.selectByName("email_password").getValue()!=null){
configMap.put("email_password",configDao.selectByName("email_password").getValue());
}else {
configMap.put("email_password","ksuebkfenixhdbbh");
return configMap;
}
return configMap;
}
@Override
public Config selectAlreadyExist(Config config) {
return configDao.selectByName(config.getName());
}
}

View File

@ -0,0 +1,30 @@
package com.lovenav.service.serviceImpl;
import com.lovenav.dao.LoginLogsDao;
import com.lovenav.entity.LoginLogs;
import com.lovenav.service.LoginLogsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
@Service
public class LoginLogsServiceImpl implements LoginLogsService {
@Autowired
LoginLogsDao loginLogsDao;
@Override
public String addLoginLogs(LoginLogs loginLogs) {
Date date=new Date();
loginLogs.setLoginTime(date);
if (loginLogsDao.selectAlreadyExist(loginLogs.getUserId())==null){
if (loginLogsDao.insertSelective(loginLogs)!=1){
return "登录日志更新成功!";
}
}else {
if (loginLogsDao.updateByUserId(loginLogs)!=1){
return "登录日志更新失败!";
}
}
return "更新登录日志失败";
}
}

View File

@ -22,39 +22,80 @@ public class QRCServiceImpl implements QRCService{
private CollectIconListDao collectIconListDao;
public String QR(CollectIconList collect) throws Exception {
String logoPath ="src/main/resources/static/logo/NAV.png";
String logoPath = "src/main/resources/static/logo/NAV.png";
String destPath = "src/main/resources/static/qr";
// 通过传入collect的url_id查找相同网址图片列表
// List<CollectIconList> collectIconList = collectIconListDao.selectByUrlid(collect.getUrl_id());
// 通过collect的url_id查找网址id对应网址
UrlList urlList = urlListDao.selectByPrimaryKey(Long.valueOf(collect.getUrl_id()));
List<CollectIconList> list = collectIconListDao.selectByUrlid(collect.getUrl_id());
if(list.size()==0){
if(urlList != null){
// 将icon下载到本地并存储本地路径
// 如果表中没有可以插入
if (list.size() == 0) {
// 如果icon是url
if(QRCodeUtil.notBase64(collect.getIcon_url())){
String icon_url = QRCodeUtil.downloadPicture(collect.getIcon_url());
collect.setIcon_url(icon_url);
// 获取网址url
String url = urlList.getUrl();
// 将网址生成二维码并返回本地路径
// 将网址生成二维码并返回本地路径
String url_wait = QRCodeUtil.encode(url, logoPath, destPath, true);
// 为collect设置二维码本地路径
collect.setQr_url(url_wait);
collectIconListDao.insert(collect);
String base64 = QRCodeUtil.ImageToBase64(url_wait);
collectIconListDao.insert(collect);
return JSON.toJSONString(base64);
}else{
HashMap<String,Object> result = new HashMap<>();
result.put("code",500);
result.put("msg", "找不到对应网址");
return JSON.toJSONString(result);
}
}else{
String url_wait = list.get(0).getQr_url();
String base64 = QRCodeUtil.ImageToBase64(url_wait);
return JSON.toJSONString(base64);
else {
String base64str = QRCodeUtil.delete_profix(collect.getIcon_url());
String icon_url = QRCodeUtil.GenerateImage(base64str,"src/main/resources/static/icon");
collect.setIcon_url(icon_url);
String url = urlList.getUrl();
String url_wait = QRCodeUtil.encode(url, logoPath, destPath, true);
collect.setQr_url(url_wait);
String base64 = QRCodeUtil.ImageToBase64(url_wait);
collectIconListDao.insert(collect);
return JSON.toJSONString(base64);
}
} else {
return JSON.toJSONString(QRCodeUtil.ImageToBase64(list.get(0).getQr_url()));
}
}
//// 通过传入collect的url_id查找相同网址图片列表
//// List<CollectIconList> collectIconList = collectIconListDao.selectByUrlid(collect.getUrl_id());
//
//// 通过collect的url_id查找网址id对应网址
// UrlList urlList = urlListDao.selectByPrimaryKey(Long.valueOf(collect.getUrl_id()));
//
// List<CollectIconList> list = collectIconListDao.selectByUrlid(collect.getUrl_id());
// if(list.size()==0){
// if(urlList != null && collect.getIcon_url()!=null){
//// 将icon下载到本地并存储本地路径
// String icon_url = QRCodeUtil.downloadPicture(collect.getIcon_url());
// collect.setIcon_url(icon_url);
//
//
//// 为collect设置二维码本地路径
// collect.setQr_url(url_wait);
// collectIconListDao.insert(collect);
// String base64 = QRCodeUtil.ImageToBase64(url_wait);
// return JSON.toJSONString(base64);
// }else if(urlList != null && collect.getIcon_url()==null){
//// 获取网址url
// String url = urlList.getUrl();
// String url_wait = QRCodeUtil.encode(url, logoPath, destPath, true);
//// 为collect设置二维码本地路径
// collect.setQr_url(url_wait);
// collectIconListDao.insert(collect);
// String base64 = QRCodeUtil.ImageToBase64(url_wait);
// return JSON.toJSONString(base64);
// }
// }else{
// String url_wait = list.get(0).getQr_url();
// String base64 = QRCodeUtil.ImageToBase64(url_wait);
// return JSON.toJSONString(base64);
// }
// return null;
// }
}

View File

@ -0,0 +1,44 @@
package com.lovenav.service.serviceImpl;
import com.lovenav.dao.UrlAccessDao;
import com.lovenav.entity.UrlAccess;
import com.lovenav.service.UrlAccessService;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
@Service
public class UrlAccessServiceImpl implements UrlAccessService {
@Autowired
UrlAccessDao urlAccessDao;
@Override
public String inreaseUrlViews(UrlAccess urlAccess){
if (urlAccess.getUrlId()==null){
return "url的Id不能为空";
}
Date date=new Date();
urlAccess.setTime(date);
urlAccess.setUrlId(2);
UrlAccess urlAccess1=urlAccessDao.selectAlreadyExist(urlAccess);
if (urlAccess1==null){
urlAccess.setViews(1L);
urlAccessDao.insertSelective(urlAccess);
}else {
urlAccess.setViews(urlAccess1.getViews()+1);
urlAccessDao.updateByUrlId(urlAccess);
}
return "更新成功!";
}
@Override
public HashMap<Date, Object> getUrlAccess(UrlAccess urlAccess) {
HashMap<Date, Object> map=new HashMap<>();
map=urlAccessDao.selectUrlAccess(urlAccess);
return map;
}
}

View File

@ -27,22 +27,24 @@ public class UrlCateListServiceImpl implements UrlCateListService {
UrlListDao urlListDao;
@Autowired
UserDao userDao;
public int selectAndInsertUrlCate(String email , String cateName , String parent )
public int selectAndInsertUrlCate(Integer userId , String cateName , String parent,String icon )
{
//找用户ID
User user = userDao.selectByEmail(email);
int userId = user.getId();
parent = parent.substring(1,parent.length()-1);
//找父标签有没有
UrlCateList cateParent = urlCateListDao.selectCateByNameAnduserId(parent,userId);
UrlCateList targetCate = new UrlCateList();
//设置属性
targetCate.setName(cateName);
targetCate.setName(cateName.substring(1,cateName.length()-1));
targetCate.setUserId(userId);
Date date = new Date();
targetCate.setCreatetime(date.getTime());
targetCate.setWeigh(Long.valueOf(0));
targetCate.setStatus(Byte.valueOf(0+""));
targetCate.setNeedLogin(Byte.valueOf(0+""));
targetCate.setIco(icon);
if(cateParent != null)
{
targetCate.setRootCateId(cateParent.getId());
@ -85,10 +87,9 @@ public class UrlCateListServiceImpl implements UrlCateListService {
return urlCateListDao.selectByPrimaryKey(id);
}
public String countCateContainUrlNumber(String email){
User user = userDao.selectByEmail(email);
int userId = user.getId();
List<UrlCateList> urlCateLists =urlCateListDao.selectUrListByUserId(userId);
public String countCateContainUrlNumber(Integer userId){
List<UrlCateList> urlCateLists =urlCateListDao.selectUrListByUserId(3);
List<UrlList> urlLists = urlListDao.selectUrList();
HashMap<String,Integer> CateNumber = new HashMap<>();
@ -96,24 +97,27 @@ public class UrlCateListServiceImpl implements UrlCateListService {
{
CateNumber.put(urlCateList.getName(),0);
}
for(UrlList urlList : urlLists){
Long id = Long.valueOf(urlList.getCateId());
while(id!= 0)
for(UrlList urlList : urlLists){
String parentString = urlCateListDao.selectUrListCateByUrlCateId(urlList.getCateId());
if (parentString == null) continue;
String [] strings = parentString.split(",");
for(String str :strings)
{
if(str.equals("0")) continue;
for(UrlCateList urlCateList :urlCateLists)
{
if(id == Long.valueOf(urlCateList.getId())){
if(urlCateList.getId() == Integer.valueOf(str)){
int cateNum = CateNumber.get(urlCateList.getName())+1;
CateNumber.put(urlCateList.getName(),cateNum);
id=Long.valueOf(urlCateList.getRootCateId());
System.out.println(urlCateList.getName());
break;
}
}
}
}
Iterator iterator = CateNumber.entrySet().iterator();
while(iterator.hasNext()) {

View File

@ -25,22 +25,29 @@ public class UrlLiserServiceImpl implements UrlListService {
UrlListDao urlListDao;
@Autowired
UserDao userDao;
public int selectCateAndInsertUrl(String parent,String name , String icon ,String url ,String email)
public int selectCateAndInsertUrl(String parent,String name , String icon ,String url ,Integer userId)
{
//找用户ID
User user = userDao.selectByEmail(email);
int userId = user.getId();
parent = parent.substring(1,parent.length()-1);
UrlCateList urlCateList = urlCateListDao.selectCateByNameAnduserId(parent,userId);
UrlList urlList = new UrlList();
if (urlCateList == null)
{
urlList.setCateId(0);
}else{
urlList.setCateId(urlCateList.getId());
}
//设置属性
urlList.setCateId(urlCateList.getId());
urlList.setUrl(url);
urlList.setIcon(icon);
urlList.setName(name);
urlList.setName(name.substring(1,name.length()-1));
Date date = new Date();
urlList.setCreatetime(date.getTime());
urlList.setViews(Long.valueOf("0"));
urlList.setIsNeedAgent(Byte.valueOf(0+""));
urlList.setIsAd(Byte.valueOf(0+""));
urlList.setIsTop(Byte.valueOf(0+""));
urlList.setStatus(Byte.valueOf(0+""));
Byte b = 0;
urlList.setNeedLogin(b);
int flag = urlListDao.insert(urlList);

View File

@ -12,6 +12,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.Date;
import java.util.HashMap;
import java.util.regex.Pattern;
@ -59,8 +60,15 @@ public class UserServiceImpl implements UserService {
}
@Override
public String sendEmailActivecode(User user) {
return EmailUtils.sendEmail(user);
public HashMap<Integer, Object> getAllUsers() {
HashMap<Integer, Object> map=new HashMap<>();
map=userDao.selectAllUsers();
return map;
}
@Override
public String sendEmailActivecode(User user, HashMap<String,String>configMap) {
return EmailUtils.sendEmail(user,configMap);
}
@Override

View File

@ -5,6 +5,8 @@ package com.lovenav.utils;
import com.lovenav.entity.User;
import com.sun.mail.smtp.SMTPSendFailedException;
import com.sun.mail.util.MailConnectException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
@ -14,6 +16,7 @@ import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.File;
import java.util.Date;
import java.util.HashMap;
import java.util.Properties;
/*
@ -22,14 +25,18 @@ import java.util.Properties;
* */
public class EmailUtils {
public static String sendEmail(User user) {
public static String sendEmail(User user, HashMap<String,String> configMap) {
//邮箱 lx_teach@163.com
String myAccount = "482370576@qq.com";
//授权码 java168
String myPass = "hlilinclupppbice";
//邮箱服务器
String SMTPHost = "smtp.qq.com";
// String myAccount = "482370576@qq.com";
// //授权码 java168
// String myPass = "hlilinclupppbice";
// //邮箱服务器
// String SMTPHost = "smtp.qq.com";
String myAccount=configMap.get("email_sendEmail");
String myPass=configMap.get("email_password");
String SMTPHost = configMap.get("email_host");
//设置属性信息
Properties prop = new Properties();
//设置协议
@ -44,9 +51,13 @@ public class EmailUtils {
//设置是否需要调试
session.setDebug(false);
//2创建发送信息
MimeMessage message = createMsg(session, myAccount, user, activecode);
//4发送信息操作
try {
MimeMessage message = createMsg(session, myAccount, user, activecode);
Transport tran = session.getTransport();
//连接
tran.connect(myAccount, myPass);
@ -54,10 +65,18 @@ public class EmailUtils {
tran.sendMessage(message, message.getAllRecipients());
//关闭
tran.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}catch (SMTPSendFailedException s){
s.printStackTrace();
return "该邮箱不存在";
}catch (MailConnectException m){
m.printStackTrace();
return "配置文件有错误";
}catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "配置文件有错误";}
return activecode;
}

View File

@ -0,0 +1,105 @@
package com.lovenav.utils;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.StrUtil;
import com.lovenav.entity.IpLocation;
import lombok.extern.slf4j.Slf4j;
import org.lionsoul.ip2region.xdb.Searcher;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.apache.commons.io.FileUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.FileCopyUtils;
import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@Slf4j
@Service
public class IPutils {
/**
* 字符常量0
*/
private static final String ZERO="0";
/**
* 本级ip
*/
private static final String LOCALHOST="127.0.0.1";
/**
* 获取客户端的IP地址
*/
public static String getIpAddress(HttpServletRequest request) {
String ipAddress = request.getHeader("X-Forwarded-For");
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("Proxy-Client-IP");
}
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("WL-Proxy-Client-IP");
}
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getRemoteAddr();
if (LOCALHOST.equals(ipAddress)) {
// 根据网卡取本机配置的IP
InetAddress inet = null;
try {
inet = InetAddress.getLocalHost();
ipAddress = inet.getHostAddress();
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}
// 对于通过多个代理转发的情况取第一个非unknown的IP地址
// 这里假设第一个IP为真实IP后面的为代理IP
if (ipAddress != null && ipAddress.length() > 15) {
if (ipAddress.indexOf(",") > 0) {
ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));
}
}
return ipAddress;
}
/**
* 根据iP获取归属地信息
* @return
*/
public static IpLocation getLocation(String ip) {
IpLocation location = new IpLocation();
location.setIp(ip);
try (InputStream inputStream = IPutils.class.getResourceAsStream("/ip2region.xdb");) {
byte[] bytes = IoUtil.readBytes(inputStream);
Searcher searcher = Searcher.newWithBuffer(bytes);
String region = searcher.search(ip);
if (StrUtil.isAllNotBlank(region)) {
// xdb返回格式 国家|区域|省份|城市|ISP
// 只有中国的数据绝大部分精确到了城市其他国家部分数据只能定位到国家后前的选项全部是0
String[] result = region.split("\\|");
location.setCountry(ZERO.equals(result[0])?StrUtil.EMPTY:result[0]);
location.setProvince(ZERO.equals(result[2])?StrUtil.EMPTY:result[2]);
location.setCity(ZERO.equals(result[3])?StrUtil.EMPTY:result[3]);
location.setIsp(ZERO.equals(result[4])?StrUtil.EMPTY:result[4]);
}
searcher.close();
} catch (Exception e) {
log.error("ip地址解析异常,error:{}",e);
return location;
}
return location;
}
}

File diff suppressed because one or more lines are too long

View File

@ -250,4 +250,14 @@ public class CateAndUrl {
public void setIsEncrypt(Byte isEncrypt) {
this.isEncrypt = isEncrypt;
}
Long number ;
public Long getNumber() {
return number;
}
public void setNumber(Long number) {
this.number = number;
}
}

Binary file not shown.

View File

@ -11,7 +11,7 @@
<result column="width" jdbcType="DOUBLE" property="width" />
<result column="height" jdbcType="DOUBLE" property="height" />
<result column="storage" jdbcType="OTHER" property="storage" />
<result column="createtime" jdbcType="INTEGER" property="createtime" />
<result column="createtime" jdbcType="TIMESTAMP" property="createtime" />
</resultMap>
<sql id="Base_Column_List">
id, `path`, suffix, file_name, `size`, md5, width, height, `storage`, createtime
@ -32,9 +32,9 @@
`storage`, createtime)
values (#{path,jdbcType=VARCHAR}, #{suffix,jdbcType=VARCHAR}, #{fileName,jdbcType=VARCHAR},
#{size,jdbcType=DOUBLE}, #{md5,jdbcType=VARCHAR}, #{width,jdbcType=DOUBLE}, #{height,jdbcType=DOUBLE},
#{storage,jdbcType=OTHER}, #{createtime,jdbcType=INTEGER})
#{storage,jdbcType=OTHER}, #{createtime,jdbcType=TIMESTAMP})
</insert>
<insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="com.lovenav.entity.Attachment" useGeneratedKeys="true">
<insert id="insertSelective" keyProperty="id" parameterType="com.lovenav.entity.Attachment" useGeneratedKeys="true">
insert into ln_attachment
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="path != null">
@ -91,7 +91,7 @@
#{storage,jdbcType=OTHER},
</if>
<if test="createtime != null">
#{createtime,jdbcType=INTEGER},
#{createtime,jdbcType=TIMESTAMP},
</if>
</trim>
</insert>
@ -123,7 +123,7 @@
`storage` = #{storage,jdbcType=OTHER},
</if>
<if test="createtime != null">
createtime = #{createtime,jdbcType=INTEGER},
createtime = #{createtime,jdbcType=TIMESTAMP},
</if>
</set>
where id = #{id,jdbcType=BIGINT}
@ -138,9 +138,7 @@
width = #{width,jdbcType=DOUBLE},
height = #{height,jdbcType=DOUBLE},
`storage` = #{storage,jdbcType=OTHER},
createtime = #{createtime,jdbcType=INTEGER}
createtime = #{createtime,jdbcType=TIMESTAMP}
where id = #{id,jdbcType=BIGINT}
</update>
</mapper>

View File

@ -159,4 +159,39 @@
from ln_comment
where root_comment_id = #{rootCommentId,jdbcType=INTEGER} and comment_status = 0
</select>
<select id="queryFirstCommentList" parameterType="java.lang.Integer" resultMap="ResultMap">
SELECT * FROM ln_comment o LEFT JOIN ln_user u
ON o.user_id=u.id
WHERE o.url_id=#{urlId,jdbcType=INTEGER} AND o.root_comment_id is null
</select>
<resultMap id="ResultMap" type="com.lovenav.entity.Comment">
<id column="id" jdbcType="INTEGER" property="id" />
<result column="url_id" jdbcType="INTEGER" property="urlId" />
<result column="user_id" jdbcType="INTEGER" property="userId" />
<result column="content" jdbcType="VARCHAR" property="content" />
<result column="root_comment_id" jdbcType="INTEGER" property="rootCommentId" />
<result column="like_count" jdbcType="BIGINT" property="likeCount" />
<result column="comment_time" jdbcType="TIMESTAMP" property="commentTime" />
<result column="comment_status" jdbcType="TINYINT" property="commentStatus" />
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
<result column="rating" jdbcType="INTEGER" property="rating" />
</resultMap>
<select id="querySecondCommentList" parameterType="java.lang.Integer" resultMap="ResultMap">
SELECT * FROM ln_comment o LEFT JOIN ln_user u
ON o.user_id=u.id
WHERE o.url_id=#{urlId,jdbcType=INTEGER} AND o.root_comment_id is not null
</select>
</mapper>

View File

@ -4,7 +4,7 @@
<resultMap id="BaseResultMap" type="com.lovenav.entity.LoginLogs">
<id column="id" jdbcType="INTEGER" property="id" />
<result column="login_ip" jdbcType="VARCHAR" property="loginIp" />
<result column="user_id" jdbcType="TINYINT" property="userId" />
<result column="user_id" jdbcType="INTEGER" property="userId" />
<result column="login_time" jdbcType="TIMESTAMP" property="loginTime" />
<result column="location" jdbcType="VARCHAR" property="location" />
</resultMap>
@ -17,6 +17,12 @@
from ln_login_logs
where id = #{id,jdbcType=INTEGER}
</select>
<select id="selectAlreadyExist" resultType="com.lovenav.entity.LoginLogs">
select
<include refid="Base_Column_List" />
from ln_login_logs
where user_id = #{userId,jdbcType=INTEGER}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
delete from ln_login_logs
where id = #{id,jdbcType=INTEGER}
@ -24,7 +30,7 @@
<insert id="insert" keyColumn="id" keyProperty="id" parameterType="com.lovenav.entity.LoginLogs" useGeneratedKeys="true">
insert into ln_login_logs (login_ip, user_id, login_time,
`location`)
values (#{loginIp,jdbcType=VARCHAR}, #{userId,jdbcType=TINYINT}, #{loginTime,jdbcType=TIMESTAMP},
values (#{loginIp,jdbcType=VARCHAR}, #{userId,jdbcType=INTEGER}, #{loginTime,jdbcType=TIMESTAMP},
#{location,jdbcType=VARCHAR})
</insert>
<insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="com.lovenav.entity.LoginLogs" useGeneratedKeys="true">
@ -48,7 +54,7 @@
#{loginIp,jdbcType=VARCHAR},
</if>
<if test="userId != null">
#{userId,jdbcType=TINYINT},
#{userId,jdbcType=INTEGER},
</if>
<if test="loginTime != null">
#{loginTime,jdbcType=TIMESTAMP},
@ -65,7 +71,7 @@
login_ip = #{loginIp,jdbcType=VARCHAR},
</if>
<if test="userId != null">
user_id = #{userId,jdbcType=TINYINT},
user_id = #{userId,jdbcType=INTEGER},
</if>
<if test="loginTime != null">
login_time = #{loginTime,jdbcType=TIMESTAMP},
@ -79,9 +85,24 @@
<update id="updateByPrimaryKey" parameterType="com.lovenav.entity.LoginLogs">
update ln_login_logs
set login_ip = #{loginIp,jdbcType=VARCHAR},
user_id = #{userId,jdbcType=TINYINT},
user_id = #{userId,jdbcType=INTEGER},
login_time = #{loginTime,jdbcType=TIMESTAMP},
`location` = #{location,jdbcType=VARCHAR}
where id = #{id,jdbcType=INTEGER}
</update>
<update id="updateByUserId" parameterType="com.lovenav.entity.LoginLogs">
update ln_login_logs
<set>
<if test="loginIp != null">
login_ip = #{loginIp,jdbcType=VARCHAR},
</if>
<if test="loginTime != null">
login_time = #{loginTime,jdbcType=TIMESTAMP},
</if>
<if test="location != null">
`location` = #{location,jdbcType=VARCHAR},
</if>
</set>
where user_id = #{userId,jdbcType=INTEGER}
</update>
</mapper>

View File

@ -15,6 +15,18 @@
<include refid="Base_Column_List" />
from ln_url_access
where id = #{id,jdbcType=INTEGER}
</select>
<select id="selectAlreadyExist" resultType="com.lovenav.entity.UrlAccess">
select
<include refid="Base_Column_List" />
from ln_url_access
where url_id = #{urlId,jdbcType=INTEGER} and date_format(time,'%y%m%d') &gt;= date_format(#{time},'%y%m%d')
</select>
<select id="selectUrlAccess" resultType="java.util.HashMap">
select
<include refid="Base_Column_List" />
from ln_url_access
where url_id = #{urlId,jdbcType=INTEGER}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
delete from ln_url_access
@ -73,4 +85,16 @@
views = #{views,jdbcType=BIGINT}
where id = #{id,jdbcType=INTEGER}
</update>
<update id="updateByUrlId" parameterType="com.lovenav.entity.UrlAccess">
update ln_url_access
<set>
<if test="time != null">
`time` = #{time,jdbcType=TIMESTAMP},
</if>
<if test="views != null">
views = #{views,jdbcType=BIGINT},
</if>
</set>
where url_id = #{urlId,jdbcType=INTEGER} and date_format(time,'%y%m%d') &gt;= date_format(#{time},'%y%m%d')
</update>
</mapper>

View File

@ -32,7 +32,7 @@
select
<include refid="Base_Column_List" />
from ln_url_cate_list
where user_id = #{userId,jdbcType=INTEGER}
where user_id = #{userId,jdbcType=INTEGER} order by id
</select>
<select id="selectCateByNameAnduserId" resultMap="BaseResultMap">

View File

@ -190,7 +190,11 @@
from ln_user
where user_login = #{user_login,jdbcType=VARCHAR}
</select>
<select id="selectAllUsers" resultType="java.util.HashMap">
select
<include refid="Base_Column_List" />
from ln_user
</select>
</mapper>

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

View File

@ -1,21 +1,21 @@
package com.lovenav;
import com.alibaba.fastjson2.JSON;
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.dao.UrlCateListDao;
import com.lovenav.dao.UrlListDao;
import com.lovenav.dao.UserDao;
import com.lovenav.dao.*;
import com.lovenav.entity.Nav;
import com.lovenav.entity.UrlAccess;
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.service.*;
import com.lovenav.vo.CateAndUrl;
import org.junit.jupiter.api.Test;
import org.mybatis.spring.annotation.MapperScan;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@ -24,303 +24,34 @@ import org.springframework.data.redis.core.StringRedisTemplate;
import org.slf4j.Logger;
import java.io.IOException;
import java.io.InputStream;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
@SpringBootTest
class LoveNavApplicationTests {
@Autowired
private RedisTemplate<String, Object> 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);
@Autowired
UrlAccessService urlAccessService;
@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);
}
void contextLoads() throws ParseException {
UrlAccess urlAccess=new UrlAccess();
urlAccess.setUrlId(2);
// urlAccess
System.out.println(urlAccessService.getUrlAccess(urlAccess));
}
@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<rootNode.size();i++)
{
JsonNode sonNode = rootNode.get(i);
if(String.valueOf(sonNode.get("folder")).equals("true")){
urlCateListService.selectAndInsertUrlCate(email,String.valueOf(sonNode.get("name")),parent);
JsonNode children = sonNode.get("children");
disposeBookmarkFunction1(children, String.valueOf(sonNode.get("name")),email);
}else{
String name = String.valueOf(sonNode.get("name"));
String url = String.valueOf(sonNode.get("url"));
String adddata = String.valueOf(sonNode.get("adddata"));
urlListService.selectCateAndInsertUrl(parent,name,"123",url,email);
System.out.println(name +"---" + url + "---" + adddata + "---" + parent );
}
}
return ;
}
@Test
public void disposeBookmarkToJson()
{
List<UrlCateList> urlCateLists = urlCateListDao.selectUrListByUserId(1);
List<UrlList> urlLists = urlListDao.selectUrList();
List<CateAndUrl> 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<CateAndUrl> parentsList = new ArrayList<>();
//声明返回集合
List<CateAndUrl> 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 ;
}
}