diff --git a/pom.xml b/pom.xml index c7566ea..cd18ed8 100644 --- a/pom.xml +++ b/pom.xml @@ -48,6 +48,12 @@ org.springframework.boot spring-boot-starter-mail + + + cn.hutool + hutool-all + 5.3.7 + org.jsoup @@ -72,6 +78,17 @@ java-jwt 3.4.0 + + + commons-fileupload + commons-fileupload + 1.4 + + + commons-io + commons-io + 2.5 + @@ -111,11 +128,24 @@ fastjson 1.2.47 + - org.apache.commons - commons-lang3 - 3.4 + org.lionsoul + ip2region + 2.6.5 + + io.springfox + springfox-swagger2 + 2.7.0 + + + io.springfox + springfox-swagger-ui + 2.7.0 + + + com.alibaba.fastjson2 diff --git a/src/main/java/com/lovenav/configuration/MyWebConfigurer.java b/src/main/java/com/lovenav/configuration/MyWebConfigurer.java index f366cba..b13b3a7 100644 --- a/src/main/java/com/lovenav/configuration/MyWebConfigurer.java +++ b/src/main/java/com/lovenav/configuration/MyWebConfigurer.java @@ -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); } } diff --git a/src/main/java/com/lovenav/controller/AttachmentController.java b/src/main/java/com/lovenav/controller/AttachmentController.java new file mode 100644 index 0000000..504cef1 --- /dev/null +++ b/src/main/java/com/lovenav/controller/AttachmentController.java @@ -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 uploadFile(MultipartFile multipartFile,String cate,Config config) throws IOException {//@RequestPart("photos") MultipartFile multipartFile + HashMap 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(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(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(bytes, headers, HttpStatus.NOT_FOUND); + } + // 内容是字节流 + return new ResponseEntity(bytes, headers, HttpStatus.OK); + + } + + +} diff --git a/src/main/java/com/lovenav/controller/ConfigController.java b/src/main/java/com/lovenav/controller/ConfigController.java index 3263842..39d8dc0 100644 --- a/src/main/java/com/lovenav/controller/ConfigController.java +++ b/src/main/java/com/lovenav/controller/ConfigController.java @@ -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); } diff --git a/src/main/java/com/lovenav/controller/UrlAccessController.java b/src/main/java/com/lovenav/controller/UrlAccessController.java new file mode 100644 index 0000000..63c68a2 --- /dev/null +++ b/src/main/java/com/lovenav/controller/UrlAccessController.java @@ -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 getUrlAccess(UrlAccess urlAccess){ + HashMap map=new HashMap<>(); + map=urlAccessService.getUrlAccess(urlAccess); + if (map.isEmpty()){ + Date date=new Date(); + map.put(date,"查不到该数据"); + return map; + } + return map; + } +} diff --git a/src/main/java/com/lovenav/controller/UserController.java b/src/main/java/com/lovenav/controller/UserController.java index a488015..e3a68b4 100644 --- a/src/main/java/com/lovenav/controller/UserController.java +++ b/src/main/java/com/lovenav/controller/UserController.java @@ -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 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 Maplogin(User user,String code,HttpSession session){ + public Maplogin(User user, String code, HttpSession session, HttpServletRequest request){ + LoginLogs loginLogs=new LoginLogs(); Map result=new HashMap<>(); Map 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 getAllUsers(){ + return userService.getAllUsers(); + } } diff --git a/src/main/java/com/lovenav/dao/AttachmentDao.java b/src/main/java/com/lovenav/dao/AttachmentDao.java index 3e05f43..833d60a 100644 --- a/src/main/java/com/lovenav/dao/AttachmentDao.java +++ b/src/main/java/com/lovenav/dao/AttachmentDao.java @@ -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); diff --git a/src/main/java/com/lovenav/dao/LoginLogsDao.java b/src/main/java/com/lovenav/dao/LoginLogsDao.java index 45cceb2..db618a9 100644 --- a/src/main/java/com/lovenav/dao/LoginLogsDao.java +++ b/src/main/java/com/lovenav/dao/LoginLogsDao.java @@ -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); } \ No newline at end of file diff --git a/src/main/java/com/lovenav/dao/UrlAccessDao.java b/src/main/java/com/lovenav/dao/UrlAccessDao.java index 3322203..d0b0f18 100644 --- a/src/main/java/com/lovenav/dao/UrlAccessDao.java +++ b/src/main/java/com/lovenav/dao/UrlAccessDao.java @@ -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 selectUrlAccess(UrlAccess urlAccess); } \ 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 09e0bd6..a5fcb47 100644 --- a/src/main/java/com/lovenav/dao/UserDao.java +++ b/src/main/java/com/lovenav/dao/UserDao.java @@ -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 selectAllUsers(); } \ No newline at end of file diff --git a/src/main/java/com/lovenav/entity/Attachment.java b/src/main/java/com/lovenav/entity/Attachment.java index a4dc887..d4e0975 100644 --- a/src/main/java/com/lovenav/entity/Attachment.java +++ b/src/main/java/com/lovenav/entity/Attachment.java @@ -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; } \ No newline at end of file diff --git a/src/main/java/com/lovenav/entity/IpLocation.java b/src/main/java/com/lovenav/entity/IpLocation.java new file mode 100644 index 0000000..a8fae80 --- /dev/null +++ b/src/main/java/com/lovenav/entity/IpLocation.java @@ -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; +} diff --git a/src/main/java/com/lovenav/entity/LoginLogs.java b/src/main/java/com/lovenav/entity/LoginLogs.java index 9c98a67..fc86e75 100644 --- a/src/main/java/com/lovenav/entity/LoginLogs.java +++ b/src/main/java/com/lovenav/entity/LoginLogs.java @@ -22,7 +22,7 @@ public class LoginLogs implements Serializable { /** * 用户id */ - private Byte userId; + private Integer userId; /** * 登录时间 diff --git a/src/main/java/com/lovenav/entity/UrlAccess.java b/src/main/java/com/lovenav/entity/UrlAccess.java index fed82d1..896bc71 100644 --- a/src/main/java/com/lovenav/entity/UrlAccess.java +++ b/src/main/java/com/lovenav/entity/UrlAccess.java @@ -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; /** diff --git a/src/main/java/com/lovenav/service/AttachmentService.java b/src/main/java/com/lovenav/service/AttachmentService.java index 6fae390..e7c336e 100644 --- a/src/main/java/com/lovenav/service/AttachmentService.java +++ b/src/main/java/com/lovenav/service/AttachmentService.java @@ -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 HashMapstoreFile(MultipartFile multipartFile); + HashMap upload(MultipartFile file,String cate,Long id) throws IOException; + + public HashMapstoreFile(MultipartFile multipartFile,String cate,Long id) throws IOException; + + public Attachment selectAttachment(Long id); } diff --git a/src/main/java/com/lovenav/service/ConfigService.java b/src/main/java/com/lovenav/service/ConfigService.java index b34ca8b..57b629d 100644 --- a/src/main/java/com/lovenav/service/ConfigService.java +++ b/src/main/java/com/lovenav/service/ConfigService.java @@ -6,7 +6,15 @@ import java.util.HashMap; public interface ConfigService { public HashMapgetAllConfig(); - public int updateConfis(Config config); + public int updateConfig(Config config); + + public String addConfig(Config config); + + HashMap selectEmailConfig(); + + public Config selectAlreadyExist(Config config); + + } diff --git a/src/main/java/com/lovenav/service/LoginLogsService.java b/src/main/java/com/lovenav/service/LoginLogsService.java new file mode 100644 index 0000000..c0aa79a --- /dev/null +++ b/src/main/java/com/lovenav/service/LoginLogsService.java @@ -0,0 +1,9 @@ +package com.lovenav.service; + + +import com.lovenav.entity.LoginLogs; + +public interface LoginLogsService { + public String addLoginLogs(LoginLogs loginLogs); + +} diff --git a/src/main/java/com/lovenav/service/UrlAccessService.java b/src/main/java/com/lovenav/service/UrlAccessService.java new file mode 100644 index 0000000..6c3e357 --- /dev/null +++ b/src/main/java/com/lovenav/service/UrlAccessService.java @@ -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 getUrlAccess(UrlAccess urlAccess); +} diff --git a/src/main/java/com/lovenav/service/UserService.java b/src/main/java/com/lovenav/service/UserService.java index 2e3e0c2..8c0feb1 100644 --- a/src/main/java/com/lovenav/service/UserService.java +++ b/src/main/java/com/lovenav/service/UserService.java @@ -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, HashMapconfigMap); public int UserRegister(User user); public User selectUserAlreadyExist(User user); @@ -16,4 +16,6 @@ public interface UserService { public int updatePassword(User user); + HashMap getAllUsers(); + } diff --git a/src/main/java/com/lovenav/service/serviceImpl/AttachmentServiceImpl.java b/src/main/java/com/lovenav/service/serviceImpl/AttachmentServiceImpl.java index 68de3f8..f98b683 100644 --- a/src/main/java/com/lovenav/service/serviceImpl/AttachmentServiceImpl.java +++ b/src/main/java/com/lovenav/service/serviceImpl/AttachmentServiceImpl.java @@ -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 storeFile(MultipartFile multipartFile) { -// HashMap 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 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 upload(MultipartFile file,String cate,Long id) throws IOException { + HashMap map = storeFile(file,cate,id); + return map; + } + @Override + public HashMap storeFile(MultipartFile multipartFile,String cate,Long id) throws IOException { + HashMap 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); + } } diff --git a/src/main/java/com/lovenav/service/serviceImpl/ConfigServiceImpl.java b/src/main/java/com/lovenav/service/serviceImpl/ConfigServiceImpl.java index 3c4075a..752d475 100644 --- a/src/main/java/com/lovenav/service/serviceImpl/ConfigServiceImpl.java +++ b/src/main/java/com/lovenav/service/serviceImpl/ConfigServiceImpl.java @@ -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 selectEmailConfig() { + HashMap 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()); + } + } diff --git a/src/main/java/com/lovenav/service/serviceImpl/LoginLogsServiceImpl.java b/src/main/java/com/lovenav/service/serviceImpl/LoginLogsServiceImpl.java new file mode 100644 index 0000000..98e84f3 --- /dev/null +++ b/src/main/java/com/lovenav/service/serviceImpl/LoginLogsServiceImpl.java @@ -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 "更新登录日志失败"; + } +} diff --git a/src/main/java/com/lovenav/service/serviceImpl/UrlAccessServiceImpl.java b/src/main/java/com/lovenav/service/serviceImpl/UrlAccessServiceImpl.java new file mode 100644 index 0000000..bc868f5 --- /dev/null +++ b/src/main/java/com/lovenav/service/serviceImpl/UrlAccessServiceImpl.java @@ -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 getUrlAccess(UrlAccess urlAccess) { + HashMap map=new HashMap<>(); + map=urlAccessDao.selectUrlAccess(urlAccess); + return map; + } +} diff --git a/src/main/java/com/lovenav/service/serviceImpl/UserServiceImpl.java b/src/main/java/com/lovenav/service/serviceImpl/UserServiceImpl.java index 7528b37..b5931cf 100644 --- a/src/main/java/com/lovenav/service/serviceImpl/UserServiceImpl.java +++ b/src/main/java/com/lovenav/service/serviceImpl/UserServiceImpl.java @@ -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 getAllUsers() { + HashMap map=new HashMap<>(); + map=userDao.selectAllUsers(); + return map; + } + + @Override + public String sendEmailActivecode(User user, HashMapconfigMap) { + return EmailUtils.sendEmail(user,configMap); } @Override diff --git a/src/main/java/com/lovenav/utils/EmailUtils.java b/src/main/java/com/lovenav/utils/EmailUtils.java index e13c8d5..1e6c9bc 100644 --- a/src/main/java/com/lovenav/utils/EmailUtils.java +++ b/src/main/java/com/lovenav/utils/EmailUtils.java @@ -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 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; } diff --git a/src/main/java/com/lovenav/utils/IPutils.java b/src/main/java/com/lovenav/utils/IPutils.java new file mode 100644 index 0000000..eb3343b --- /dev/null +++ b/src/main/java/com/lovenav/utils/IPutils.java @@ -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; + } +} diff --git a/src/main/resources/ip2region.xdb b/src/main/resources/ip2region.xdb new file mode 100644 index 0000000..c78b792 Binary files /dev/null and b/src/main/resources/ip2region.xdb differ diff --git a/src/main/resources/mybatis/AttachmentDao.xml b/src/main/resources/mybatis/AttachmentDao.xml index 22379e0..ff8c27a 100644 --- a/src/main/resources/mybatis/AttachmentDao.xml +++ b/src/main/resources/mybatis/AttachmentDao.xml @@ -11,7 +11,7 @@ - + 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 into ln_attachment @@ -91,7 +91,7 @@ #{storage,jdbcType=OTHER}, - #{createtime,jdbcType=INTEGER}, + #{createtime,jdbcType=TIMESTAMP}, @@ -123,7 +123,7 @@ `storage` = #{storage,jdbcType=OTHER}, - createtime = #{createtime,jdbcType=INTEGER}, + createtime = #{createtime,jdbcType=TIMESTAMP}, 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} - - \ No newline at end of file diff --git a/src/main/resources/mybatis/LoginLogsDao.xml b/src/main/resources/mybatis/LoginLogsDao.xml index 9f936e6..6c2dfb7 100644 --- a/src/main/resources/mybatis/LoginLogsDao.xml +++ b/src/main/resources/mybatis/LoginLogsDao.xml @@ -4,7 +4,7 @@ - + @@ -12,11 +12,17 @@ id, login_ip, user_id, login_time, `location` + delete from ln_login_logs where id = #{id,jdbcType=INTEGER} @@ -24,7 +30,7 @@ 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}) @@ -48,7 +54,7 @@ #{loginIp,jdbcType=VARCHAR}, - #{userId,jdbcType=TINYINT}, + #{userId,jdbcType=INTEGER}, #{loginTime,jdbcType=TIMESTAMP}, @@ -65,7 +71,7 @@ login_ip = #{loginIp,jdbcType=VARCHAR}, - user_id = #{userId,jdbcType=TINYINT}, + user_id = #{userId,jdbcType=INTEGER}, login_time = #{loginTime,jdbcType=TIMESTAMP}, @@ -79,9 +85,24 @@ 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 ln_login_logs + + + login_ip = #{loginIp,jdbcType=VARCHAR}, + + + login_time = #{loginTime,jdbcType=TIMESTAMP}, + + + `location` = #{location,jdbcType=VARCHAR}, + + + where user_id = #{userId,jdbcType=INTEGER} + \ No newline at end of file diff --git a/src/main/resources/mybatis/UrlAccessDao.xml b/src/main/resources/mybatis/UrlAccessDao.xml index 2cea41d..3e01b75 100644 --- a/src/main/resources/mybatis/UrlAccessDao.xml +++ b/src/main/resources/mybatis/UrlAccessDao.xml @@ -15,6 +15,18 @@ from ln_url_access where id = #{id,jdbcType=INTEGER} + + + delete from ln_url_access @@ -73,4 +85,16 @@ views = #{views,jdbcType=BIGINT} where id = #{id,jdbcType=INTEGER} + + update ln_url_access + + + `time` = #{time,jdbcType=TIMESTAMP}, + + + views = #{views,jdbcType=BIGINT}, + + + where url_id = #{urlId,jdbcType=INTEGER} and date_format(time,'%y%m%d') >= date_format(#{time},'%y%m%d') + \ No newline at end of file diff --git a/src/main/resources/mybatis/UserDao.xml b/src/main/resources/mybatis/UserDao.xml index 22ac63c..b13b87e 100644 --- a/src/main/resources/mybatis/UserDao.xml +++ b/src/main/resources/mybatis/UserDao.xml @@ -190,7 +190,11 @@ from ln_user where user_login = #{user_login,jdbcType=VARCHAR} - + \ No newline at end of file diff --git a/src/test/java/com/lovenav/LoveNavApplicationTests.java b/src/test/java/com/lovenav/LoveNavApplicationTests.java index 1dcdaef..20eb02e 100644 --- a/src/test/java/com/lovenav/LoveNavApplicationTests.java +++ b/src/test/java/com/lovenav/LoveNavApplicationTests.java @@ -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 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 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 ; - - } - }