🔥 删除无效文件
This commit is contained in:
parent
7a39eb3293
commit
ee3afcd7f8
@ -1,4 +1,4 @@
|
|||||||
package com.rymcu.vertical.dto;
|
package com.rymcu.forest.dto;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package com.rymcu.vertical.dto;
|
package com.rymcu.forest.dto;
|
||||||
|
|
||||||
import com.rymcu.vertical.entity.Notification;
|
import com.rymcu.forest.entity.Notification;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
@ -1,23 +0,0 @@
|
|||||||
package com.rymcu.vertical.service;
|
|
||||||
|
|
||||||
import com.rymcu.vertical.core.service.Service;
|
|
||||||
import com.rymcu.vertical.entity.Permission;
|
|
||||||
import com.rymcu.vertical.entity.User;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author CodeGenerator
|
|
||||||
* @date 2018/05/29
|
|
||||||
*/
|
|
||||||
public interface PermissionService extends Service<Permission> {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取用户权限
|
|
||||||
* @param sysUser
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
List<Permission> selectPermissionByUser(User sysUser);
|
|
||||||
}
|
|
@ -1,135 +0,0 @@
|
|||||||
package com.rymcu.vertical.service.impl;
|
|
||||||
|
|
||||||
import com.rymcu.vertical.core.service.AbstractService;
|
|
||||||
import com.rymcu.vertical.dto.ArticleDTO;
|
|
||||||
import com.rymcu.vertical.dto.Author;
|
|
||||||
import com.rymcu.vertical.dto.NotificationDTO;
|
|
||||||
import com.rymcu.vertical.entity.Comment;
|
|
||||||
import com.rymcu.vertical.entity.Follow;
|
|
||||||
import com.rymcu.vertical.entity.Notification;
|
|
||||||
import com.rymcu.vertical.entity.User;
|
|
||||||
import com.rymcu.vertical.mapper.NotificationMapper;
|
|
||||||
import com.rymcu.vertical.service.*;
|
|
||||||
import com.rymcu.vertical.util.BeanCopierUtil;
|
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author ronger
|
|
||||||
*/
|
|
||||||
@Service
|
|
||||||
public class NotificationServiceImpl extends AbstractService<Notification> implements NotificationService {
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private NotificationMapper notificationMapper;
|
|
||||||
@Resource
|
|
||||||
private ArticleService articleService;
|
|
||||||
@Resource
|
|
||||||
private CommentService commentService;
|
|
||||||
@Resource
|
|
||||||
private UserService userService;
|
|
||||||
@Resource
|
|
||||||
private FollowService followService;
|
|
||||||
@Value("${resource.domain}")
|
|
||||||
private String domain;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<Notification> findUnreadNotifications(Integer idUser) {
|
|
||||||
List<Notification> list = notificationMapper.selectUnreadNotifications(idUser);
|
|
||||||
return list;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<NotificationDTO> findNotifications(Integer idUser) {
|
|
||||||
List<Notification> list = notificationMapper.selectNotifications(idUser);
|
|
||||||
List<NotificationDTO> notifications = new ArrayList<>();
|
|
||||||
list.forEach(notification -> {
|
|
||||||
NotificationDTO notificationDTO = genNotification(notification);
|
|
||||||
notifications.add(notificationDTO);
|
|
||||||
});
|
|
||||||
return notifications;
|
|
||||||
}
|
|
||||||
|
|
||||||
private NotificationDTO genNotification(Notification notification) {
|
|
||||||
NotificationDTO notificationDTO = new NotificationDTO();
|
|
||||||
BeanCopierUtil.copy(notification, notificationDTO);
|
|
||||||
ArticleDTO article;
|
|
||||||
Comment comment;
|
|
||||||
User user;
|
|
||||||
Follow follow;
|
|
||||||
switch (notification.getDataType()) {
|
|
||||||
case "0":
|
|
||||||
// 系统公告/帖子
|
|
||||||
article = articleService.findArticleDTOById(notification.getDataId(), 0);
|
|
||||||
notificationDTO.setDataTitle("系统公告");
|
|
||||||
notificationDTO.setDataUrl(article.getArticlePermalink());
|
|
||||||
user = userService.findById(article.getArticleAuthorId().toString());
|
|
||||||
notificationDTO.setAuthor(genAuthor(user));
|
|
||||||
break;
|
|
||||||
case "1":
|
|
||||||
// 关注
|
|
||||||
follow = followService.findById(notification.getDataId().toString());
|
|
||||||
notificationDTO.setDataTitle("关注提醒");
|
|
||||||
user = userService.findById(follow.getFollowerId().toString());
|
|
||||||
notificationDTO.setDataUrl(getFollowLink(follow.getFollowingType(), user.getNickname()));
|
|
||||||
notificationDTO.setAuthor(genAuthor(user));
|
|
||||||
break;
|
|
||||||
case "2":
|
|
||||||
// 回帖
|
|
||||||
comment = commentService.findById(notification.getDataId().toString());
|
|
||||||
article = articleService.findArticleDTOById(comment.getCommentArticleId(), 0);
|
|
||||||
notificationDTO.setDataTitle(article.getArticleTitle());
|
|
||||||
notificationDTO.setDataUrl(comment.getCommentSharpUrl());
|
|
||||||
user = userService.findById(comment.getCommentAuthorId().toString());
|
|
||||||
notificationDTO.setAuthor(genAuthor(user));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return notificationDTO;
|
|
||||||
}
|
|
||||||
|
|
||||||
private String getFollowLink(String followingType, String id) {
|
|
||||||
StringBuilder url = new StringBuilder();
|
|
||||||
url.append(domain);
|
|
||||||
switch (followingType) {
|
|
||||||
case "0":
|
|
||||||
url = url.append("/user/").append(id);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
url.append("/notification");
|
|
||||||
}
|
|
||||||
return url.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
private Author genAuthor(User user) {
|
|
||||||
Author author = new Author();
|
|
||||||
author.setUserNickname(user.getNickname());
|
|
||||||
author.setUserAvatarURL(user.getAvatarUrl());
|
|
||||||
author.setIdUser(user.getIdUser());
|
|
||||||
return author;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Notification findNotification(Integer idUser, Integer dataId, String dataType) {
|
|
||||||
return notificationMapper.selectNotification(idUser, dataId, dataType);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
|
||||||
public Integer save(Integer idUser, Integer dataId, String dataType, String dataSummary) {
|
|
||||||
return notificationMapper.insertNotification(idUser, dataId, dataType, dataSummary);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
|
||||||
public Integer readNotification(Integer id) {
|
|
||||||
return notificationMapper.readNotification(id);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,174 +0,0 @@
|
|||||||
package com.rymcu.vertical.web.api.common;
|
|
||||||
|
|
||||||
import com.rymcu.vertical.core.result.GlobalResult;
|
|
||||||
import com.rymcu.vertical.core.result.GlobalResultGenerator;
|
|
||||||
import com.rymcu.vertical.dto.TokenUser;
|
|
||||||
import com.rymcu.vertical.jwt.def.JwtConstants;
|
|
||||||
import com.rymcu.vertical.util.FileUtils;
|
|
||||||
import com.rymcu.vertical.util.UserUtils;
|
|
||||||
import com.rymcu.vertical.util.Utils;
|
|
||||||
import com.rymcu.vertical.web.api.exception.ErrorCode;
|
|
||||||
import com.rymcu.vertical.web.api.exception.BaseApiException;
|
|
||||||
import org.apache.commons.codec.binary.Base64;
|
|
||||||
import org.apache.commons.lang.StringUtils;
|
|
||||||
import org.springframework.util.FileCopyUtils;
|
|
||||||
import org.springframework.web.bind.annotation.*;
|
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 文件上传控制器
|
|
||||||
*
|
|
||||||
* @author ronger
|
|
||||||
*/
|
|
||||||
@RestController
|
|
||||||
@RequestMapping("/api/v1/upload")
|
|
||||||
public class UploadController {
|
|
||||||
|
|
||||||
private final static String UPLOAD_SIMPLE_URL = "/api/upload/file";
|
|
||||||
private final static String UPLOAD_URL = "/api/upload/file/batch";
|
|
||||||
public static final String ctxHeadPicPath = "/usr/local/src/nebula/static";
|
|
||||||
|
|
||||||
@PostMapping("/file")
|
|
||||||
public GlobalResult uploadPicture(@RequestParam(value = "file", required = false) MultipartFile multipartFile, @RequestParam(defaultValue = "1") Integer type, HttpServletRequest request) {
|
|
||||||
if (multipartFile == null) {
|
|
||||||
return GlobalResultGenerator.genErrorResult("请选择要上传的文件");
|
|
||||||
}
|
|
||||||
String typePath = getTypePath(type);
|
|
||||||
//图片存储路径
|
|
||||||
String dir = ctxHeadPicPath + "/" + typePath;
|
|
||||||
File file = new File(dir);
|
|
||||||
if (!file.exists()) {
|
|
||||||
file.mkdirs();// 创建文件根目录
|
|
||||||
}
|
|
||||||
|
|
||||||
String localPath = Utils.getProperty("resource.file-path") + "/" + typePath + "/";
|
|
||||||
|
|
||||||
String orgName = multipartFile.getOriginalFilename();
|
|
||||||
String fileName = System.currentTimeMillis() + "." + FileUtils.getExtend(orgName).toLowerCase();
|
|
||||||
|
|
||||||
String savePath = file.getPath() + File.separator + fileName;
|
|
||||||
|
|
||||||
Map data = new HashMap(2);
|
|
||||||
File saveFile = new File(savePath);
|
|
||||||
try {
|
|
||||||
FileCopyUtils.copy(multipartFile.getBytes(), saveFile);
|
|
||||||
data.put("url", localPath + fileName);
|
|
||||||
} catch (IOException e) {
|
|
||||||
data.put("message", "上传失败!");
|
|
||||||
}
|
|
||||||
return GlobalResultGenerator.genSuccessResult(data);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@PostMapping("/file/batch")
|
|
||||||
public GlobalResult batchFileUpload(@RequestParam(value = "file[]", required = false) MultipartFile[] multipartFiles, @RequestParam(defaultValue = "1") Integer type, HttpServletRequest request) {
|
|
||||||
String typePath = getTypePath(type);
|
|
||||||
//图片存储路径
|
|
||||||
String dir = ctxHeadPicPath + "/" + typePath;
|
|
||||||
File file = new File(dir);
|
|
||||||
if (!file.exists()) {
|
|
||||||
file.mkdirs();// 创建文件根目录
|
|
||||||
}
|
|
||||||
|
|
||||||
String localPath = Utils.getProperty("resource.file-path") + "/" + typePath + "/";
|
|
||||||
Map succMap = new HashMap(10);
|
|
||||||
Set errFiles = new HashSet();
|
|
||||||
|
|
||||||
for (int i = 0, len = multipartFiles.length; i < len; i++) {
|
|
||||||
MultipartFile multipartFile = multipartFiles[i];
|
|
||||||
String orgName = multipartFile.getOriginalFilename();
|
|
||||||
String fileName = System.currentTimeMillis() + "." + FileUtils.getExtend(orgName).toLowerCase();
|
|
||||||
|
|
||||||
String savePath = file.getPath() + File.separator + fileName;
|
|
||||||
|
|
||||||
File saveFile = new File(savePath);
|
|
||||||
try {
|
|
||||||
FileCopyUtils.copy(multipartFile.getBytes(), saveFile);
|
|
||||||
succMap.put(orgName, localPath + fileName);
|
|
||||||
} catch (IOException e) {
|
|
||||||
errFiles.add(orgName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Map data = new HashMap(2);
|
|
||||||
data.put("errFiles", errFiles);
|
|
||||||
data.put("succMap", succMap);
|
|
||||||
return GlobalResultGenerator.genSuccessResult(data);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static String getTypePath(Integer type) {
|
|
||||||
String typePath;
|
|
||||||
switch (type) {
|
|
||||||
case 0:
|
|
||||||
typePath = "avatar";
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
typePath = "article";
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
typePath = "tags";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
typePath = "images";
|
|
||||||
}
|
|
||||||
return typePath;
|
|
||||||
}
|
|
||||||
|
|
||||||
@GetMapping("/simple/token")
|
|
||||||
public GlobalResult uploadSimpleToken(HttpServletRequest request) throws BaseApiException {
|
|
||||||
String authHeader = request.getHeader(JwtConstants.AUTHORIZATION);
|
|
||||||
if (StringUtils.isBlank(authHeader)) {
|
|
||||||
throw new BaseApiException(ErrorCode.UNAUTHORIZED);
|
|
||||||
}
|
|
||||||
TokenUser tokenUser = UserUtils.getTokenUser(authHeader);
|
|
||||||
Map map = new HashMap(2);
|
|
||||||
map.put("uploadToken", tokenUser.getToken());
|
|
||||||
map.put("uploadURL", UPLOAD_SIMPLE_URL);
|
|
||||||
return GlobalResultGenerator.genSuccessResult(map);
|
|
||||||
}
|
|
||||||
|
|
||||||
@GetMapping("/token")
|
|
||||||
public GlobalResult uploadToken(HttpServletRequest request) throws BaseApiException {
|
|
||||||
String authHeader = request.getHeader(JwtConstants.AUTHORIZATION);
|
|
||||||
if (StringUtils.isBlank(authHeader)) {
|
|
||||||
throw new BaseApiException(ErrorCode.UNAUTHORIZED);
|
|
||||||
}
|
|
||||||
TokenUser tokenUser = UserUtils.getTokenUser(authHeader);
|
|
||||||
Map map = new HashMap(2);
|
|
||||||
map.put("uploadToken", tokenUser.getToken());
|
|
||||||
map.put("uploadURL", UPLOAD_URL);
|
|
||||||
return GlobalResultGenerator.genSuccessResult(map);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String uploadBase64File(String fileStr, Integer type) {
|
|
||||||
if (StringUtils.isBlank(fileStr)) {
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
String typePath = getTypePath(type);
|
|
||||||
//图片存储路径
|
|
||||||
String dir = ctxHeadPicPath + "/" + typePath;
|
|
||||||
File file = new File(dir);
|
|
||||||
if (!file.exists()) {
|
|
||||||
file.mkdirs();// 创建文件根目录
|
|
||||||
}
|
|
||||||
|
|
||||||
String localPath = Utils.getProperty("resource.file-path") + "/" + typePath + "/";
|
|
||||||
String fileName = System.currentTimeMillis() + ".png";
|
|
||||||
String savePath = file.getPath() + File.separator + fileName;
|
|
||||||
File saveFile = new File(savePath);
|
|
||||||
try {
|
|
||||||
FileCopyUtils.copy(Base64.decodeBase64(fileStr.substring(fileStr.indexOf(",") + 1)), saveFile);
|
|
||||||
fileStr = localPath + fileName;
|
|
||||||
} catch (IOException e) {
|
|
||||||
fileStr = "上传失败!";
|
|
||||||
}
|
|
||||||
return fileStr;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,72 +0,0 @@
|
|||||||
package com.rymcu.vertical.web.api.user;
|
|
||||||
|
|
||||||
import com.github.pagehelper.PageHelper;
|
|
||||||
import com.github.pagehelper.PageInfo;
|
|
||||||
import com.rymcu.vertical.core.result.GlobalResult;
|
|
||||||
import com.rymcu.vertical.core.result.GlobalResultGenerator;
|
|
||||||
import com.rymcu.vertical.core.service.log.annotation.VisitLogger;
|
|
||||||
import com.rymcu.vertical.dto.ArticleDTO;
|
|
||||||
import com.rymcu.vertical.dto.PortfolioDTO;
|
|
||||||
import com.rymcu.vertical.dto.UserDTO;
|
|
||||||
import com.rymcu.vertical.service.ArticleService;
|
|
||||||
import com.rymcu.vertical.service.PortfolioService;
|
|
||||||
import com.rymcu.vertical.service.UserService;
|
|
||||||
import com.rymcu.vertical.util.Utils;
|
|
||||||
import org.springframework.web.bind.annotation.*;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author ronger
|
|
||||||
*/
|
|
||||||
@RestController
|
|
||||||
@RequestMapping("/api/v1/user")
|
|
||||||
public class UserController {
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private UserService userService;
|
|
||||||
@Resource
|
|
||||||
private ArticleService articleService;
|
|
||||||
@Resource
|
|
||||||
private PortfolioService portfolioService;
|
|
||||||
|
|
||||||
@GetMapping("/{nickname}")
|
|
||||||
@VisitLogger
|
|
||||||
public GlobalResult detail(@PathVariable String nickname){
|
|
||||||
UserDTO userDTO = userService.findUserDTOByNickname(nickname);
|
|
||||||
return GlobalResultGenerator.genSuccessResult(userDTO);
|
|
||||||
}
|
|
||||||
|
|
||||||
@GetMapping("/{nickname}/articles")
|
|
||||||
public GlobalResult userArticles(@RequestParam(defaultValue = "0") Integer page, @RequestParam(defaultValue = "12") Integer rows, @PathVariable String nickname){
|
|
||||||
UserDTO userDTO = userService.findUserDTOByNickname(nickname);
|
|
||||||
if (userDTO == null){
|
|
||||||
return GlobalResultGenerator.genErrorResult("用户不存在!");
|
|
||||||
}
|
|
||||||
PageHelper.startPage(page, rows);
|
|
||||||
List<ArticleDTO> list = articleService.findUserArticlesByIdUser(userDTO.getIdUser());
|
|
||||||
PageInfo<ArticleDTO> pageInfo = new PageInfo(list);
|
|
||||||
Map map = Utils.getArticlesGlobalResult(pageInfo);
|
|
||||||
return GlobalResultGenerator.genSuccessResult(map);
|
|
||||||
}
|
|
||||||
|
|
||||||
@GetMapping("/{nickname}/portfolios")
|
|
||||||
public GlobalResult userPortfolios(@RequestParam(defaultValue = "0") Integer page, @RequestParam(defaultValue = "12") Integer rows, @PathVariable String nickname){
|
|
||||||
UserDTO userDTO = userService.findUserDTOByNickname(nickname);
|
|
||||||
if (userDTO == null){
|
|
||||||
return GlobalResultGenerator.genErrorResult("用户不存在!");
|
|
||||||
}
|
|
||||||
PageHelper.startPage(page, rows);
|
|
||||||
List<PortfolioDTO> list = portfolioService.findUserPortfoliosByUser(userDTO);
|
|
||||||
PageInfo<PortfolioDTO> pageInfo = new PageInfo(list);
|
|
||||||
Map map = new HashMap(2);
|
|
||||||
map.put("portfolios", list);
|
|
||||||
Map pagination = Utils.getPagination(pageInfo);
|
|
||||||
map.put("pagination", pagination);
|
|
||||||
return GlobalResultGenerator.genSuccessResult(map);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user