!5 一些lombok的使用
使用 @RequiredArgsConstructor 进行注入 使用 @jav 替换logger 优化了import,不导入* idea自动整理了下代码格式
This commit is contained in:
@@ -19,15 +19,14 @@ import com.zyplayer.doc.data.service.manage.WikiPageFileService;
|
||||
import com.zyplayer.doc.data.service.manage.WikiPageService;
|
||||
import com.zyplayer.doc.data.service.manage.WikiSpaceService;
|
||||
import com.zyplayer.doc.wiki.framework.consts.Const;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
@@ -42,87 +41,83 @@ import java.util.Optional;
|
||||
* @author 暮光:城中城
|
||||
* @since 2019年2月17日
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequestMapping("/zyplayer-doc-wiki/common")
|
||||
@RequiredArgsConstructor
|
||||
public class WikiCommonController {
|
||||
private static Logger logger = LoggerFactory.getLogger(WikiCommonController.class);
|
||||
|
||||
@Resource
|
||||
WikiPageFileService wikiPageFileService;
|
||||
@Resource
|
||||
WikiPageService wikiPageService;
|
||||
@Resource
|
||||
WikiSpaceService wikiSpaceService;
|
||||
@Resource
|
||||
UserInfoService userInfoService;
|
||||
@Resource
|
||||
WikiPageFileMapper wikiPageFileMapper;
|
||||
|
||||
@AuthMan
|
||||
@PostMapping("/user/base")
|
||||
public ResponseJson<Object> userBaseInfo(String search) {
|
||||
if (StringUtils.isBlank(search)) {
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.and(con -> con.and(conSub -> conSub.like("user_name", search).or().like("user_no", search)
|
||||
.or().like("email", search)).and(conSub -> conSub.eq("del_flag", 0)));
|
||||
queryWrapper.select("id", "user_name");
|
||||
// 搜索最多返回20条
|
||||
IPage<UserInfo> page = new Page<>(1, 20, false);
|
||||
userInfoService.page(page, queryWrapper);
|
||||
return DocResponseJson.ok(page);
|
||||
}
|
||||
|
||||
@GetMapping("/file")
|
||||
public ResponseJson<Object> file(HttpServletResponse response, String uuid) {
|
||||
if (StringUtils.isBlank(uuid)) {
|
||||
return DocResponseJson.warn("请指定文件ID");
|
||||
}
|
||||
UpdateWrapper<WikiPageFile> wrapperFile = new UpdateWrapper<>();
|
||||
wrapperFile.eq("uuid", uuid);
|
||||
WikiPageFile pageFile = wikiPageFileService.getOne(wrapperFile);
|
||||
if (pageFile == null) {
|
||||
return DocResponseJson.warn("未找到指定文件");
|
||||
}
|
||||
// 未登录访问文件,需要判断是否是开放空间的文件
|
||||
Long pageId = Optional.ofNullable(pageFile.getPageId()).orElse(0L);
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
if (pageId > 0 && currentUser == null) {
|
||||
WikiPage wikiPage = wikiPageService.getById(pageId);
|
||||
WikiSpace wikiSpace = wikiSpaceService.getById(wikiPage.getSpaceId());
|
||||
if (wikiSpace.getOpenDoc() == 0) {
|
||||
return DocResponseJson.warn("登陆后才可访问此文件");
|
||||
}
|
||||
}
|
||||
// 增加下载次数
|
||||
wikiPageFileMapper.addDownloadNum(pageFile.getId());
|
||||
try {
|
||||
String fileName = Optional.ofNullable(pageFile.getFileName()).orElse("");
|
||||
File file = new File(pageFile.getFileUrl());
|
||||
String fileSuffix = "";
|
||||
if (fileName.lastIndexOf(".") >= 0) {
|
||||
fileSuffix = fileName.substring(fileName.lastIndexOf("."));
|
||||
}
|
||||
String mimeStr = Optional.ofNullable(Const.mimeMap.get(fileSuffix)).orElse("text/plain");
|
||||
response.setContentType(mimeStr);
|
||||
response.setHeader("Content-disposition", "inline;filename=" + URLEncoder.encode(fileName, "UTF-8"));
|
||||
|
||||
private final WikiPageFileService wikiPageFileService;
|
||||
private final WikiPageService wikiPageService;
|
||||
private final WikiSpaceService wikiSpaceService;
|
||||
private final UserInfoService userInfoService;
|
||||
private final WikiPageFileMapper wikiPageFileMapper;
|
||||
|
||||
@AuthMan
|
||||
@PostMapping("/user/base")
|
||||
public ResponseJson<Object> userBaseInfo(String search) {
|
||||
if (StringUtils.isBlank(search)) {
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.and(con -> con.and(conSub -> conSub.like("user_name", search).or().like("user_no", search)
|
||||
.or().like("email", search)).and(conSub -> conSub.eq("del_flag", 0)));
|
||||
queryWrapper.select("id", "user_name");
|
||||
// 搜索最多返回20条
|
||||
IPage<UserInfo> page = new Page<>(1, 20, false);
|
||||
userInfoService.page(page, queryWrapper);
|
||||
return DocResponseJson.ok(page);
|
||||
}
|
||||
|
||||
@GetMapping("/file")
|
||||
public ResponseJson<Object> file(HttpServletResponse response, String uuid) {
|
||||
if (StringUtils.isBlank(uuid)) {
|
||||
return DocResponseJson.warn("请指定文件ID");
|
||||
}
|
||||
UpdateWrapper<WikiPageFile> wrapperFile = new UpdateWrapper<>();
|
||||
wrapperFile.eq("uuid", uuid);
|
||||
WikiPageFile pageFile = wikiPageFileService.getOne(wrapperFile);
|
||||
if (pageFile == null) {
|
||||
return DocResponseJson.warn("未找到指定文件");
|
||||
}
|
||||
// 未登录访问文件,需要判断是否是开放空间的文件
|
||||
Long pageId = Optional.ofNullable(pageFile.getPageId()).orElse(0L);
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
if (pageId > 0 && currentUser == null) {
|
||||
WikiPage wikiPage = wikiPageService.getById(pageId);
|
||||
WikiSpace wikiSpace = wikiSpaceService.getById(wikiPage.getSpaceId());
|
||||
if (wikiSpace.getOpenDoc() == 0) {
|
||||
return DocResponseJson.warn("登陆后才可访问此文件");
|
||||
}
|
||||
}
|
||||
// 增加下载次数
|
||||
wikiPageFileMapper.addDownloadNum(pageFile.getId());
|
||||
try {
|
||||
String fileName = Optional.ofNullable(pageFile.getFileName()).orElse("");
|
||||
File file = new File(pageFile.getFileUrl());
|
||||
String fileSuffix = "";
|
||||
if (fileName.lastIndexOf(".") >= 0) {
|
||||
fileSuffix = fileName.substring(fileName.lastIndexOf("."));
|
||||
}
|
||||
String mimeStr = Optional.ofNullable(Const.mimeMap.get(fileSuffix)).orElse("text/plain");
|
||||
response.setContentType(mimeStr);
|
||||
response.setHeader("Content-disposition", "inline;filename=" + URLEncoder.encode(fileName, "UTF-8"));
|
||||
// response.setHeader("Content-disposition", "inline;filename=" + fileName);
|
||||
// response.setHeader("Content-Disposition", "inline; fileName=" + fileName + ";filename*=utf-8''" + URLEncoder.encode(fileName, "UTF-8"));
|
||||
InputStream inputStream = new FileInputStream(file);
|
||||
OutputStream os = response.getOutputStream();
|
||||
byte[] b = new byte[2048];
|
||||
int length;
|
||||
while ((length = inputStream.read(b)) > 0) {
|
||||
os.write(b, 0, length);
|
||||
}
|
||||
os.close();
|
||||
inputStream.close();
|
||||
return null;
|
||||
} catch (Exception e) {
|
||||
logger.info("失败:{}", e.getMessage());
|
||||
}
|
||||
return DocResponseJson.warn("获取文件失败");
|
||||
}
|
||||
InputStream inputStream = new FileInputStream(file);
|
||||
OutputStream os = response.getOutputStream();
|
||||
byte[] b = new byte[2048];
|
||||
int length;
|
||||
while ((length = inputStream.read(b)) > 0) {
|
||||
os.write(b, 0, length);
|
||||
}
|
||||
os.close();
|
||||
inputStream.close();
|
||||
return null;
|
||||
} catch (Exception e) {
|
||||
log.info("失败:{}", e.getMessage());
|
||||
}
|
||||
return DocResponseJson.warn("获取文件失败");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,16 +17,20 @@ import com.zyplayer.doc.data.service.manage.WikiPageService;
|
||||
import com.zyplayer.doc.data.service.manage.WikiSpaceService;
|
||||
import com.zyplayer.doc.wiki.controller.vo.WikiPageContentVo;
|
||||
import com.zyplayer.doc.wiki.controller.vo.WikiPageVo;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.*;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@@ -35,155 +39,152 @@ import java.util.stream.Collectors;
|
||||
* @author 暮光:城中城
|
||||
* @since 2019年2月17日
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequestMapping("/zyplayer-doc-wiki/open-api")
|
||||
@RequiredArgsConstructor
|
||||
public class WikiOpenApiController {
|
||||
private static Logger logger = LoggerFactory.getLogger(WikiOpenApiController.class);
|
||||
|
||||
@Resource
|
||||
WikiPageService wikiPageService;
|
||||
@Resource
|
||||
WikiSpaceService wikiSpaceService;
|
||||
@Resource
|
||||
WikiPageContentService wikiPageContentService;
|
||||
@Resource
|
||||
WikiPageFileService wikiPageFileService;
|
||||
@Resource
|
||||
WikiPageContentMapper wikiPageContentMapper;
|
||||
|
||||
@PostMapping("/space/info")
|
||||
public ResponseJson<WikiSpace> spaceInfo(String space) {
|
||||
WikiSpace wikiSpace = this.getWikiSpace(space);
|
||||
if (wikiSpace == null) {
|
||||
return DocResponseJson.warn("未找到该文档");
|
||||
}
|
||||
return DocResponseJson.ok(wikiSpace);
|
||||
}
|
||||
|
||||
@PostMapping("/page/news")
|
||||
public ResponseJson<List<WikiPageVo>> news(SearchByEsParam param, String space) {
|
||||
WikiSpace wikiSpace = this.getWikiSpace(space);
|
||||
if (wikiSpace == null) {
|
||||
return DocResponseJson.warn("未找到该文档");
|
||||
}
|
||||
String keywords = param.getKeywords();
|
||||
if (StringUtils.isNotBlank(keywords)) {
|
||||
param.setKeywords("%" + keywords + "%");
|
||||
}
|
||||
// 分页查询
|
||||
param.setSpaceIds(Collections.singletonList(wikiSpace.getId()));
|
||||
List<SpaceNewsVo> spaceNewsVoList = wikiPageContentMapper.getNewsList(param);
|
||||
if (CollectionUtils.isNotEmpty(spaceNewsVoList)) {
|
||||
spaceNewsVoList.forEach(val -> {
|
||||
val.setSpace(wikiSpace.getUuid());
|
||||
val.setSpaceName(wikiSpace.getName());
|
||||
String preview = val.getPreviewContent();
|
||||
if (preview != null) {
|
||||
if (preview.length() > 200) {
|
||||
preview = preview.substring(0, 200);
|
||||
}
|
||||
if (keywords != null) {
|
||||
preview = StringUtils.replaceIgnoreCase(preview, keywords, "<span style=\"color:red\">" + keywords + "</span>");
|
||||
}
|
||||
}
|
||||
val.setPreviewContent(preview);
|
||||
String pageTitle = val.getPageTitle();
|
||||
if (pageTitle != null && keywords != null) {
|
||||
pageTitle = StringUtils.replaceIgnoreCase(pageTitle, keywords, "<span style=\"color:red\">" + keywords + "</span>");
|
||||
}
|
||||
val.setPageTitle(pageTitle);
|
||||
});
|
||||
}
|
||||
return DocResponseJson.ok(spaceNewsVoList);
|
||||
}
|
||||
|
||||
@PostMapping("/page/list")
|
||||
public ResponseJson<List<WikiPageVo>> list(String space) {
|
||||
WikiSpace wikiSpace = this.getWikiSpace(space);
|
||||
if (wikiSpace == null) {
|
||||
return DocResponseJson.warn("未找到该文档");
|
||||
}
|
||||
QueryWrapper<WikiPage> wrapper = new QueryWrapper<>();
|
||||
wrapper.eq("del_flag", 0);
|
||||
wrapper.eq("space_id", wikiSpace.getId());
|
||||
List<WikiPage> wikiPageList = wikiPageService.list(wrapper);
|
||||
if (CollectionUtils.isEmpty(wikiPageList)) {
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
Map<Long, List<WikiPageVo>> listMap = wikiPageList.stream().map(WikiPageVo::new).collect(Collectors.groupingBy(WikiPageVo::getParentId));
|
||||
List<WikiPageVo> nodePageList = listMap.get(0L);
|
||||
if (CollectionUtils.isNotEmpty(nodePageList)) {
|
||||
nodePageList = nodePageList.stream().sorted(Comparator.comparingInt(WikiPageVo::getSeqNo)).collect(Collectors.toList());
|
||||
this.setChildren(listMap, nodePageList);
|
||||
}
|
||||
return DocResponseJson.ok(nodePageList);
|
||||
}
|
||||
|
||||
@PostMapping("/page/detail")
|
||||
public ResponseJson<WikiPageContentVo> detail(String space, Long pageId) {
|
||||
WikiSpace wikiSpace = this.getWikiSpace(space);
|
||||
if (wikiSpace == null) {
|
||||
return DocResponseJson.warn("未找到该文档");
|
||||
}
|
||||
WikiPage wikiPageSel = wikiPageService.getById(pageId);
|
||||
// 不存在或不属于该空间
|
||||
if (wikiPageSel == null || !Objects.equals(wikiPageSel.getSpaceId(), wikiSpace.getId())) {
|
||||
return DocResponseJson.warn("未找到该文档");
|
||||
}
|
||||
UpdateWrapper<WikiPageContent> wrapper = new UpdateWrapper<>();
|
||||
wrapper.eq("page_id", pageId);
|
||||
WikiPageContent pageContent = wikiPageContentService.getOne(wrapper);
|
||||
UpdateWrapper<WikiPageFile> wrapperFile = new UpdateWrapper<>();
|
||||
wrapperFile.eq("page_id", pageId);
|
||||
wrapperFile.eq("del_flag", 0);
|
||||
List<WikiPageFile> pageFiles = wikiPageFileService.list(wrapperFile);
|
||||
for (WikiPageFile pageFile : pageFiles) {
|
||||
pageFile.setFileUrl("zyplayer-doc-wiki/common/file?uuid=" + pageFile.getUuid());
|
||||
}
|
||||
// 高并发下会有覆盖问题,但不重要~
|
||||
Integer viewNum = Optional.ofNullable(wikiPageSel.getViewNum()).orElse(0);
|
||||
WikiPage wikiPageUp = new WikiPage();
|
||||
wikiPageUp.setId(wikiPageSel.getId());
|
||||
wikiPageUp.setViewNum(viewNum + 1);
|
||||
wikiPageService.updateById(wikiPageUp);
|
||||
// 修改返回值里的查看数+1
|
||||
wikiPageSel.setViewNum(viewNum + 1);
|
||||
WikiPageContentVo vo = new WikiPageContentVo();
|
||||
vo.setWikiPage(wikiPageSel);
|
||||
vo.setPageContent(pageContent);
|
||||
vo.setFileList(pageFiles);
|
||||
return DocResponseJson.ok(vo);
|
||||
}
|
||||
|
||||
private void setChildren(Map<Long, List<WikiPageVo>> listMap, List<WikiPageVo> nodePageList) {
|
||||
if (nodePageList == null || listMap == null) {
|
||||
return;
|
||||
}
|
||||
for (WikiPageVo page : nodePageList) {
|
||||
List<WikiPageVo> wikiPageVos = listMap.get(page.getId());
|
||||
if (CollectionUtils.isNotEmpty(wikiPageVos)) {
|
||||
wikiPageVos = wikiPageVos.stream().sorted(Comparator.comparingInt(WikiPageVo::getSeqNo)).collect(Collectors.toList());
|
||||
page.setChildren(wikiPageVos);
|
||||
this.setChildren(listMap, wikiPageVos);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取空间信息
|
||||
* @param space
|
||||
* @return
|
||||
*/
|
||||
private WikiSpace getWikiSpace(String space) {
|
||||
QueryWrapper<WikiSpace> wrapperSpace = new QueryWrapper<>();
|
||||
wrapperSpace.eq("uuid", space);
|
||||
wrapperSpace.eq("del_flag", 0);
|
||||
WikiSpace wikiSpace = wikiSpaceService.getOne(wrapperSpace);
|
||||
// 不存在或未开放
|
||||
if (wikiSpace == null || wikiSpace.getOpenDoc() != 1) {
|
||||
return null;
|
||||
}
|
||||
return wikiSpace;
|
||||
}
|
||||
|
||||
private final WikiPageService wikiPageService;
|
||||
private final WikiSpaceService wikiSpaceService;
|
||||
private final WikiPageContentService wikiPageContentService;
|
||||
private final WikiPageFileService wikiPageFileService;
|
||||
private final WikiPageContentMapper wikiPageContentMapper;
|
||||
|
||||
@PostMapping("/space/info")
|
||||
public ResponseJson<WikiSpace> spaceInfo(String space) {
|
||||
WikiSpace wikiSpace = this.getWikiSpace(space);
|
||||
if (wikiSpace == null) {
|
||||
return DocResponseJson.warn("未找到该文档");
|
||||
}
|
||||
return DocResponseJson.ok(wikiSpace);
|
||||
}
|
||||
|
||||
@PostMapping("/page/news")
|
||||
public ResponseJson<List<WikiPageVo>> news(SearchByEsParam param, String space) {
|
||||
WikiSpace wikiSpace = this.getWikiSpace(space);
|
||||
if (wikiSpace == null) {
|
||||
return DocResponseJson.warn("未找到该文档");
|
||||
}
|
||||
String keywords = param.getKeywords();
|
||||
if (StringUtils.isNotBlank(keywords)) {
|
||||
param.setKeywords("%" + keywords + "%");
|
||||
}
|
||||
// 分页查询
|
||||
param.setSpaceIds(Collections.singletonList(wikiSpace.getId()));
|
||||
List<SpaceNewsVo> spaceNewsVoList = wikiPageContentMapper.getNewsList(param);
|
||||
if (CollectionUtils.isNotEmpty(spaceNewsVoList)) {
|
||||
spaceNewsVoList.forEach(val -> {
|
||||
val.setSpace(wikiSpace.getUuid());
|
||||
val.setSpaceName(wikiSpace.getName());
|
||||
String preview = val.getPreviewContent();
|
||||
if (preview != null) {
|
||||
if (preview.length() > 200) {
|
||||
preview = preview.substring(0, 200);
|
||||
}
|
||||
if (keywords != null) {
|
||||
preview = StringUtils.replaceIgnoreCase(preview, keywords, "<span style=\"color:red\">" + keywords + "</span>");
|
||||
}
|
||||
}
|
||||
val.setPreviewContent(preview);
|
||||
String pageTitle = val.getPageTitle();
|
||||
if (pageTitle != null && keywords != null) {
|
||||
pageTitle = StringUtils.replaceIgnoreCase(pageTitle, keywords, "<span style=\"color:red\">" + keywords + "</span>");
|
||||
}
|
||||
val.setPageTitle(pageTitle);
|
||||
});
|
||||
}
|
||||
return DocResponseJson.ok(spaceNewsVoList);
|
||||
}
|
||||
|
||||
@PostMapping("/page/list")
|
||||
public ResponseJson<List<WikiPageVo>> list(String space) {
|
||||
WikiSpace wikiSpace = this.getWikiSpace(space);
|
||||
if (wikiSpace == null) {
|
||||
return DocResponseJson.warn("未找到该文档");
|
||||
}
|
||||
QueryWrapper<WikiPage> wrapper = new QueryWrapper<>();
|
||||
wrapper.eq("del_flag", 0);
|
||||
wrapper.eq("space_id", wikiSpace.getId());
|
||||
List<WikiPage> wikiPageList = wikiPageService.list(wrapper);
|
||||
if (CollectionUtils.isEmpty(wikiPageList)) {
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
Map<Long, List<WikiPageVo>> listMap = wikiPageList.stream().map(WikiPageVo::new).collect(Collectors.groupingBy(WikiPageVo::getParentId));
|
||||
List<WikiPageVo> nodePageList = listMap.get(0L);
|
||||
if (CollectionUtils.isNotEmpty(nodePageList)) {
|
||||
nodePageList = nodePageList.stream().sorted(Comparator.comparingInt(WikiPageVo::getSeqNo)).collect(Collectors.toList());
|
||||
this.setChildren(listMap, nodePageList);
|
||||
}
|
||||
return DocResponseJson.ok(nodePageList);
|
||||
}
|
||||
|
||||
@PostMapping("/page/detail")
|
||||
public ResponseJson<WikiPageContentVo> detail(String space, Long pageId) {
|
||||
WikiSpace wikiSpace = this.getWikiSpace(space);
|
||||
if (wikiSpace == null) {
|
||||
return DocResponseJson.warn("未找到该文档");
|
||||
}
|
||||
WikiPage wikiPageSel = wikiPageService.getById(pageId);
|
||||
// 不存在或不属于该空间
|
||||
if (wikiPageSel == null || !Objects.equals(wikiPageSel.getSpaceId(), wikiSpace.getId())) {
|
||||
return DocResponseJson.warn("未找到该文档");
|
||||
}
|
||||
UpdateWrapper<WikiPageContent> wrapper = new UpdateWrapper<>();
|
||||
wrapper.eq("page_id", pageId);
|
||||
WikiPageContent pageContent = wikiPageContentService.getOne(wrapper);
|
||||
UpdateWrapper<WikiPageFile> wrapperFile = new UpdateWrapper<>();
|
||||
wrapperFile.eq("page_id", pageId);
|
||||
wrapperFile.eq("del_flag", 0);
|
||||
List<WikiPageFile> pageFiles = wikiPageFileService.list(wrapperFile);
|
||||
for (WikiPageFile pageFile : pageFiles) {
|
||||
pageFile.setFileUrl("zyplayer-doc-wiki/common/file?uuid=" + pageFile.getUuid());
|
||||
}
|
||||
// 高并发下会有覆盖问题,但不重要~
|
||||
Integer viewNum = Optional.ofNullable(wikiPageSel.getViewNum()).orElse(0);
|
||||
WikiPage wikiPageUp = new WikiPage();
|
||||
wikiPageUp.setId(wikiPageSel.getId());
|
||||
wikiPageUp.setViewNum(viewNum + 1);
|
||||
wikiPageService.updateById(wikiPageUp);
|
||||
// 修改返回值里的查看数+1
|
||||
wikiPageSel.setViewNum(viewNum + 1);
|
||||
WikiPageContentVo vo = new WikiPageContentVo();
|
||||
vo.setWikiPage(wikiPageSel);
|
||||
vo.setPageContent(pageContent);
|
||||
vo.setFileList(pageFiles);
|
||||
return DocResponseJson.ok(vo);
|
||||
}
|
||||
|
||||
private void setChildren(Map<Long, List<WikiPageVo>> listMap, List<WikiPageVo> nodePageList) {
|
||||
if (nodePageList == null || listMap == null) {
|
||||
return;
|
||||
}
|
||||
for (WikiPageVo page : nodePageList) {
|
||||
List<WikiPageVo> wikiPageVos = listMap.get(page.getId());
|
||||
if (CollectionUtils.isNotEmpty(wikiPageVos)) {
|
||||
wikiPageVos = wikiPageVos.stream().sorted(Comparator.comparingInt(WikiPageVo::getSeqNo)).collect(Collectors.toList());
|
||||
page.setChildren(wikiPageVos);
|
||||
this.setChildren(listMap, wikiPageVos);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取空间信息
|
||||
*
|
||||
* @param space
|
||||
* @return
|
||||
*/
|
||||
private WikiSpace getWikiSpace(String space) {
|
||||
QueryWrapper<WikiSpace> wrapperSpace = new QueryWrapper<>();
|
||||
wrapperSpace.eq("uuid", space);
|
||||
wrapperSpace.eq("del_flag", 0);
|
||||
WikiSpace wikiSpace = wikiSpaceService.getOne(wrapperSpace);
|
||||
// 不存在或未开放
|
||||
if (wikiSpace == null || wikiSpace.getOpenDoc() != 1) {
|
||||
return null;
|
||||
}
|
||||
return wikiSpace;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -8,24 +8,41 @@ import com.zyplayer.doc.core.json.ResponseJson;
|
||||
import com.zyplayer.doc.data.config.security.DocUserDetails;
|
||||
import com.zyplayer.doc.data.config.security.DocUserUtil;
|
||||
import com.zyplayer.doc.data.config.security.UserAuthVo;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.*;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.AuthInfo;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.UserAuth;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.UserInfo;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.UserMessage;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.WikiPage;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.WikiPageZan;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.WikiSpace;
|
||||
import com.zyplayer.doc.data.repository.manage.mapper.UserGroupAuthMapper;
|
||||
import com.zyplayer.doc.data.repository.support.consts.DocSysModuleType;
|
||||
import com.zyplayer.doc.data.repository.support.consts.DocSysType;
|
||||
import com.zyplayer.doc.data.repository.support.consts.UserMsgType;
|
||||
import com.zyplayer.doc.data.service.manage.*;
|
||||
import com.zyplayer.doc.data.service.manage.AuthInfoService;
|
||||
import com.zyplayer.doc.data.service.manage.UserAuthService;
|
||||
import com.zyplayer.doc.data.service.manage.UserInfoService;
|
||||
import com.zyplayer.doc.data.service.manage.UserMessageService;
|
||||
import com.zyplayer.doc.data.service.manage.WikiPageService;
|
||||
import com.zyplayer.doc.data.service.manage.WikiPageZanService;
|
||||
import com.zyplayer.doc.data.service.manage.WikiSpaceService;
|
||||
import com.zyplayer.doc.wiki.controller.vo.UserPageAuthVo;
|
||||
import com.zyplayer.doc.wiki.framework.consts.WikiAuthType;
|
||||
import com.zyplayer.doc.wiki.service.common.WikiPageAuthService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.*;
|
||||
import java.util.Collection;
|
||||
import java.util.Date;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
@@ -35,146 +52,138 @@ import java.util.stream.Stream;
|
||||
* @author 暮光:城中城
|
||||
* @since 2019年2月17日
|
||||
*/
|
||||
@Slf4j
|
||||
@AuthMan
|
||||
@RestController
|
||||
@RequestMapping("/zyplayer-doc-wiki/page/auth")
|
||||
@RequiredArgsConstructor
|
||||
public class WikiPageAuthController {
|
||||
private static Logger logger = LoggerFactory.getLogger(WikiPageAuthController.class);
|
||||
|
||||
@Resource
|
||||
WikiPageZanService wikiPageZanService;
|
||||
@Resource
|
||||
WikiSpaceService wikiSpaceService;
|
||||
@Resource
|
||||
UserInfoService userInfoService;
|
||||
@Resource
|
||||
WikiPageService wikiPageService;
|
||||
@Resource
|
||||
UserAuthService userAuthService;
|
||||
@Resource
|
||||
AuthInfoService authInfoService;
|
||||
@Resource
|
||||
WikiPageAuthService wikiPageAuthService;
|
||||
@Resource
|
||||
UserMessageService userMessageService;
|
||||
@Resource
|
||||
UserGroupAuthMapper userGroupAuthMapper;
|
||||
|
||||
@PostMapping("/assign")
|
||||
public ResponseJson<List<WikiPageZan>> assign(Long pageId, String authList) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
WikiPage wikiPageSel = wikiPageService.getById(pageId);
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
|
||||
String canConfigAuth = wikiPageAuthService.canConfigAuth(wikiSpaceSel, pageId, currentUser.getUserId());
|
||||
if (canConfigAuth != null) {
|
||||
return DocResponseJson.warn(canConfigAuth);
|
||||
}
|
||||
List<String> authNameList = Stream.of(WikiAuthType.values()).map(WikiAuthType::getCode).collect(Collectors.toList());
|
||||
QueryWrapper<AuthInfo> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.in("auth_name", authNameList);
|
||||
Collection<AuthInfo> authInfoList = authInfoService.list(queryWrapper);
|
||||
Map<String, Long> authInfoMap = authInfoList.stream().collect(Collectors.toMap(AuthInfo::getAuthName, AuthInfo::getId));
|
||||
// 先删除页面的所有用户的权限
|
||||
userAuthService.deleteModuleAuth(DocSysType.WIKI.getType(), DocSysModuleType.Wiki.PAGE.getType(), pageId);
|
||||
|
||||
List<UserPageAuthVo> authVoList = JSON.parseArray(authList, UserPageAuthVo.class);
|
||||
for (UserPageAuthVo authVo : authVoList) {
|
||||
List<UserAuth> userAuthList = new LinkedList<>();
|
||||
if (Objects.equals(authVo.getEditPage(), 1)) {
|
||||
Long authId = authInfoMap.get(WikiAuthType.EDIT_PAGE.getCode());
|
||||
UserAuth userAuth = this.createUserAuth(pageId, currentUser.getUserId(), authVo.getUserId(), authId);
|
||||
userAuthList.add(userAuth);
|
||||
}
|
||||
if (Objects.equals(authVo.getDeletePage(), 1)) {
|
||||
Long authId = authInfoMap.get(WikiAuthType.DELETE_PAGE.getCode());
|
||||
UserAuth userAuth = this.createUserAuth(pageId, currentUser.getUserId(), authVo.getUserId(), authId);
|
||||
userAuthList.add(userAuth);
|
||||
}
|
||||
if (Objects.equals(authVo.getPageFileUpload(), 1)) {
|
||||
Long authId = authInfoMap.get(WikiAuthType.PAGE_FILE_UPLOAD.getCode());
|
||||
UserAuth userAuth = this.createUserAuth(pageId, currentUser.getUserId(), authVo.getUserId(), authId);
|
||||
userAuthList.add(userAuth);
|
||||
}
|
||||
if (Objects.equals(authVo.getPageFileDelete(), 1)) {
|
||||
Long authId = authInfoMap.get(WikiAuthType.PAGE_FILE_DELETE.getCode());
|
||||
UserAuth userAuth = this.createUserAuth(pageId, currentUser.getUserId(), authVo.getUserId(), authId);
|
||||
userAuthList.add(userAuth);
|
||||
}
|
||||
if (Objects.equals(authVo.getPageAuthManage(), 1)) {
|
||||
Long authId = authInfoMap.get(WikiAuthType.PAGE_AUTH_MANAGE.getCode());
|
||||
UserAuth userAuth = this.createUserAuth(pageId, currentUser.getUserId(), authVo.getUserId(), authId);
|
||||
userAuthList.add(userAuth);
|
||||
}
|
||||
if (userAuthList.size() <= 0) {
|
||||
continue;
|
||||
}
|
||||
// 保存权限,重新登录后可用,后期可以考虑在这里直接修改缓存里的用户权限
|
||||
userAuthService.saveBatch(userAuthList);
|
||||
// 给相关人发送消息
|
||||
UserInfo userInfo = userInfoService.getById(authVo.getUserId());
|
||||
UserMessage userMessage = userMessageService.createUserMessage(currentUser, pageId, wikiPageSel.getName(), DocSysType.WIKI, UserMsgType.WIKI_PAGE_AUTH);
|
||||
userMessage.setAffectUserId(userInfo.getId());
|
||||
userMessage.setAffectUserName(userInfo.getUserName());
|
||||
userMessageService.addWikiMessage(userMessage);
|
||||
// 刷新用户权限
|
||||
List<UserAuthVo> userAuthListNew = userAuthService.getUserAuthSet(authVo.getUserId());
|
||||
DocUserUtil.setUserAuth(authVo.getUserId(), userAuthListNew);
|
||||
}
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
|
||||
@PostMapping("/list")
|
||||
public ResponseJson<Object> list(Long pageId) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
WikiPage wikiPageSel = wikiPageService.getById(pageId);
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
|
||||
String canConfigAuth = wikiPageAuthService.canConfigAuth(wikiSpaceSel, pageId, currentUser.getUserId());
|
||||
if (canConfigAuth != null) {
|
||||
return DocResponseJson.warn(canConfigAuth);
|
||||
}
|
||||
List<UserAuth> authList = userAuthService.getModuleAuthList(DocSysType.WIKI.getType(), DocSysModuleType.Wiki.PAGE.getType(), pageId);
|
||||
if (CollectionUtils.isEmpty(authList)) {
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
// 权限ID对应的权限名
|
||||
Collection<AuthInfo> authInfoList = authInfoService.listByIds(authList.stream().map(UserAuth::getAuthId).collect(Collectors.toSet()));
|
||||
Map<Long, String> authInfoMap = authInfoList.stream().collect(Collectors.toMap(AuthInfo::getId, AuthInfo::getAuthName));
|
||||
// 查询用户信息
|
||||
Map<Long, List<UserAuth>> userAuthGroup = authList.stream().collect(Collectors.groupingBy(UserAuth::getUserId));
|
||||
Collection<UserInfo> userInfos = userInfoService.listByIds(userAuthGroup.keySet());
|
||||
Map<Long, String> userInfoMap = userInfos.stream().collect(Collectors.toMap(UserInfo::getId, UserInfo::getUserName));
|
||||
List<UserPageAuthVo> authVoList = new LinkedList<>();
|
||||
// 组装结果集
|
||||
userAuthGroup.forEach((key, value) -> {
|
||||
Set<String> authNameSet = value.stream().map(auth -> authInfoMap.get(auth.getAuthId())).collect(Collectors.toSet());
|
||||
UserPageAuthVo authVo = new UserPageAuthVo();
|
||||
authVo.setEditPage(this.haveAuth(authNameSet, WikiAuthType.EDIT_PAGE));
|
||||
authVo.setDeletePage(this.haveAuth(authNameSet, WikiAuthType.DELETE_PAGE));
|
||||
authVo.setPageFileUpload(this.haveAuth(authNameSet, WikiAuthType.PAGE_FILE_UPLOAD));
|
||||
authVo.setPageFileDelete(this.haveAuth(authNameSet, WikiAuthType.PAGE_FILE_DELETE));
|
||||
authVo.setPageAuthManage(this.haveAuth(authNameSet, WikiAuthType.PAGE_AUTH_MANAGE));
|
||||
authVo.setUserId(key);
|
||||
authVo.setUserName(userInfoMap.get(key));
|
||||
authVoList.add(authVo);
|
||||
});
|
||||
return DocResponseJson.ok(authVoList);
|
||||
}
|
||||
|
||||
private Integer haveAuth(Set<String> authNameSet, WikiAuthType wikiAuthType) {
|
||||
return authNameSet.contains(wikiAuthType.getCode()) ? 1 : 0;
|
||||
}
|
||||
|
||||
private UserAuth createUserAuth(Long pageId, Long loginUserId, Long userId, Long authId) {
|
||||
UserAuth userAuth = new UserAuth();
|
||||
userAuth.setSysType(DocSysType.WIKI.getType());
|
||||
userAuth.setSysModuleType(DocSysModuleType.Wiki.PAGE.getType());
|
||||
userAuth.setSysModuleId(pageId);
|
||||
userAuth.setCreationTime(new Date());
|
||||
userAuth.setCreateUid(loginUserId);
|
||||
userAuth.setDelFlag(0);
|
||||
userAuth.setUserId(userId);
|
||||
userAuth.setAuthId(authId);
|
||||
return userAuth;
|
||||
}
|
||||
|
||||
private final WikiPageZanService wikiPageZanService;
|
||||
private final WikiSpaceService wikiSpaceService;
|
||||
private final UserInfoService userInfoService;
|
||||
private final WikiPageService wikiPageService;
|
||||
private final UserAuthService userAuthService;
|
||||
private final AuthInfoService authInfoService;
|
||||
private final WikiPageAuthService wikiPageAuthService;
|
||||
private final UserMessageService userMessageService;
|
||||
private final UserGroupAuthMapper userGroupAuthMapper;
|
||||
|
||||
@PostMapping("/assign")
|
||||
public ResponseJson<List<WikiPageZan>> assign(Long pageId, String authList) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
WikiPage wikiPageSel = wikiPageService.getById(pageId);
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
|
||||
String canConfigAuth = wikiPageAuthService.canConfigAuth(wikiSpaceSel, pageId, currentUser.getUserId());
|
||||
if (canConfigAuth != null) {
|
||||
return DocResponseJson.warn(canConfigAuth);
|
||||
}
|
||||
List<String> authNameList = Stream.of(WikiAuthType.values()).map(WikiAuthType::getCode).collect(Collectors.toList());
|
||||
QueryWrapper<AuthInfo> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.in("auth_name", authNameList);
|
||||
Collection<AuthInfo> authInfoList = authInfoService.list(queryWrapper);
|
||||
Map<String, Long> authInfoMap = authInfoList.stream().collect(Collectors.toMap(AuthInfo::getAuthName, AuthInfo::getId));
|
||||
// 先删除页面的所有用户的权限
|
||||
userAuthService.deleteModuleAuth(DocSysType.WIKI.getType(), DocSysModuleType.Wiki.PAGE.getType(), pageId);
|
||||
|
||||
List<UserPageAuthVo> authVoList = JSON.parseArray(authList, UserPageAuthVo.class);
|
||||
for (UserPageAuthVo authVo : authVoList) {
|
||||
List<UserAuth> userAuthList = new LinkedList<>();
|
||||
if (Objects.equals(authVo.getEditPage(), 1)) {
|
||||
Long authId = authInfoMap.get(WikiAuthType.EDIT_PAGE.getCode());
|
||||
UserAuth userAuth = this.createUserAuth(pageId, currentUser.getUserId(), authVo.getUserId(), authId);
|
||||
userAuthList.add(userAuth);
|
||||
}
|
||||
if (Objects.equals(authVo.getDeletePage(), 1)) {
|
||||
Long authId = authInfoMap.get(WikiAuthType.DELETE_PAGE.getCode());
|
||||
UserAuth userAuth = this.createUserAuth(pageId, currentUser.getUserId(), authVo.getUserId(), authId);
|
||||
userAuthList.add(userAuth);
|
||||
}
|
||||
if (Objects.equals(authVo.getPageFileUpload(), 1)) {
|
||||
Long authId = authInfoMap.get(WikiAuthType.PAGE_FILE_UPLOAD.getCode());
|
||||
UserAuth userAuth = this.createUserAuth(pageId, currentUser.getUserId(), authVo.getUserId(), authId);
|
||||
userAuthList.add(userAuth);
|
||||
}
|
||||
if (Objects.equals(authVo.getPageFileDelete(), 1)) {
|
||||
Long authId = authInfoMap.get(WikiAuthType.PAGE_FILE_DELETE.getCode());
|
||||
UserAuth userAuth = this.createUserAuth(pageId, currentUser.getUserId(), authVo.getUserId(), authId);
|
||||
userAuthList.add(userAuth);
|
||||
}
|
||||
if (Objects.equals(authVo.getPageAuthManage(), 1)) {
|
||||
Long authId = authInfoMap.get(WikiAuthType.PAGE_AUTH_MANAGE.getCode());
|
||||
UserAuth userAuth = this.createUserAuth(pageId, currentUser.getUserId(), authVo.getUserId(), authId);
|
||||
userAuthList.add(userAuth);
|
||||
}
|
||||
if (userAuthList.size() <= 0) {
|
||||
continue;
|
||||
}
|
||||
// 保存权限,重新登录后可用,后期可以考虑在这里直接修改缓存里的用户权限
|
||||
userAuthService.saveBatch(userAuthList);
|
||||
// 给相关人发送消息
|
||||
UserInfo userInfo = userInfoService.getById(authVo.getUserId());
|
||||
UserMessage userMessage = userMessageService.createUserMessage(currentUser, pageId, wikiPageSel.getName(), DocSysType.WIKI, UserMsgType.WIKI_PAGE_AUTH);
|
||||
userMessage.setAffectUserId(userInfo.getId());
|
||||
userMessage.setAffectUserName(userInfo.getUserName());
|
||||
userMessageService.addWikiMessage(userMessage);
|
||||
// 刷新用户权限
|
||||
List<UserAuthVo> userAuthListNew = userAuthService.getUserAuthSet(authVo.getUserId());
|
||||
DocUserUtil.setUserAuth(authVo.getUserId(), userAuthListNew);
|
||||
}
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
|
||||
@PostMapping("/list")
|
||||
public ResponseJson<Object> list(Long pageId) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
WikiPage wikiPageSel = wikiPageService.getById(pageId);
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
|
||||
String canConfigAuth = wikiPageAuthService.canConfigAuth(wikiSpaceSel, pageId, currentUser.getUserId());
|
||||
if (canConfigAuth != null) {
|
||||
return DocResponseJson.warn(canConfigAuth);
|
||||
}
|
||||
List<UserAuth> authList = userAuthService.getModuleAuthList(DocSysType.WIKI.getType(), DocSysModuleType.Wiki.PAGE.getType(), pageId);
|
||||
if (CollectionUtils.isEmpty(authList)) {
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
// 权限ID对应的权限名
|
||||
Collection<AuthInfo> authInfoList = authInfoService.listByIds(authList.stream().map(UserAuth::getAuthId).collect(Collectors.toSet()));
|
||||
Map<Long, String> authInfoMap = authInfoList.stream().collect(Collectors.toMap(AuthInfo::getId, AuthInfo::getAuthName));
|
||||
// 查询用户信息
|
||||
Map<Long, List<UserAuth>> userAuthGroup = authList.stream().collect(Collectors.groupingBy(UserAuth::getUserId));
|
||||
Collection<UserInfo> userInfos = userInfoService.listByIds(userAuthGroup.keySet());
|
||||
Map<Long, String> userInfoMap = userInfos.stream().collect(Collectors.toMap(UserInfo::getId, UserInfo::getUserName));
|
||||
List<UserPageAuthVo> authVoList = new LinkedList<>();
|
||||
// 组装结果集
|
||||
userAuthGroup.forEach((key, value) -> {
|
||||
Set<String> authNameSet = value.stream().map(auth -> authInfoMap.get(auth.getAuthId())).collect(Collectors.toSet());
|
||||
UserPageAuthVo authVo = new UserPageAuthVo();
|
||||
authVo.setEditPage(this.haveAuth(authNameSet, WikiAuthType.EDIT_PAGE));
|
||||
authVo.setDeletePage(this.haveAuth(authNameSet, WikiAuthType.DELETE_PAGE));
|
||||
authVo.setPageFileUpload(this.haveAuth(authNameSet, WikiAuthType.PAGE_FILE_UPLOAD));
|
||||
authVo.setPageFileDelete(this.haveAuth(authNameSet, WikiAuthType.PAGE_FILE_DELETE));
|
||||
authVo.setPageAuthManage(this.haveAuth(authNameSet, WikiAuthType.PAGE_AUTH_MANAGE));
|
||||
authVo.setUserId(key);
|
||||
authVo.setUserName(userInfoMap.get(key));
|
||||
authVoList.add(authVo);
|
||||
});
|
||||
return DocResponseJson.ok(authVoList);
|
||||
}
|
||||
|
||||
private Integer haveAuth(Set<String> authNameSet, WikiAuthType wikiAuthType) {
|
||||
return authNameSet.contains(wikiAuthType.getCode()) ? 1 : 0;
|
||||
}
|
||||
|
||||
private UserAuth createUserAuth(Long pageId, Long loginUserId, Long userId, Long authId) {
|
||||
UserAuth userAuth = new UserAuth();
|
||||
userAuth.setSysType(DocSysType.WIKI.getType());
|
||||
userAuth.setSysModuleType(DocSysModuleType.Wiki.PAGE.getType());
|
||||
userAuth.setSysModuleId(pageId);
|
||||
userAuth.setCreationTime(new Date());
|
||||
userAuth.setCreateUid(loginUserId);
|
||||
userAuth.setDelFlag(0);
|
||||
userAuth.setUserId(userId);
|
||||
userAuth.setAuthId(authId);
|
||||
return userAuth;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -18,8 +18,8 @@ import com.zyplayer.doc.data.service.manage.WikiPageService;
|
||||
import com.zyplayer.doc.data.service.manage.WikiSpaceService;
|
||||
import com.zyplayer.doc.wiki.controller.vo.WikiPageCommentVo;
|
||||
import com.zyplayer.doc.wiki.framework.consts.SpaceType;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
@@ -35,20 +35,21 @@ import java.util.Objects;
|
||||
* @author 暮光:城中城
|
||||
* @since 2019年2月17日
|
||||
*/
|
||||
@Slf4j
|
||||
@AuthMan
|
||||
@RestController
|
||||
@RequestMapping("/zyplayer-doc-wiki/page/comment")
|
||||
@RequiredArgsConstructor
|
||||
public class WikiPageCommentController {
|
||||
private static Logger logger = LoggerFactory.getLogger(WikiPageCommentController.class);
|
||||
|
||||
|
||||
@Resource
|
||||
WikiPageCommentService wikiPageCommentService;
|
||||
private final WikiPageCommentService wikiPageCommentService;
|
||||
@Resource
|
||||
WikiSpaceService wikiSpaceService;
|
||||
private final WikiSpaceService wikiSpaceService;
|
||||
@Resource
|
||||
WikiPageService wikiPageService;
|
||||
private final WikiPageService wikiPageService;
|
||||
@Resource
|
||||
UserMessageService userMessageService;
|
||||
private final UserMessageService userMessageService;
|
||||
|
||||
@PostMapping("/list")
|
||||
public ResponseJson<List<WikiPageCommentVo>> list(WikiPageComment pageComment) {
|
||||
|
||||
@@ -8,14 +8,24 @@ import com.zyplayer.doc.core.json.DocResponseJson;
|
||||
import com.zyplayer.doc.core.json.ResponseJson;
|
||||
import com.zyplayer.doc.data.config.security.DocUserDetails;
|
||||
import com.zyplayer.doc.data.config.security.DocUserUtil;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.*;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.UserMessage;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.WikiPage;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.WikiPageContent;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.WikiPageFile;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.WikiPageZan;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.WikiSpace;
|
||||
import com.zyplayer.doc.data.repository.manage.mapper.WikiPageContentMapper;
|
||||
import com.zyplayer.doc.data.repository.manage.mapper.WikiPageMapper;
|
||||
import com.zyplayer.doc.data.repository.manage.param.SearchByEsParam;
|
||||
import com.zyplayer.doc.data.repository.manage.vo.SpaceNewsVo;
|
||||
import com.zyplayer.doc.data.repository.support.consts.DocSysType;
|
||||
import com.zyplayer.doc.data.repository.support.consts.UserMsgType;
|
||||
import com.zyplayer.doc.data.service.manage.*;
|
||||
import com.zyplayer.doc.data.service.manage.UserMessageService;
|
||||
import com.zyplayer.doc.data.service.manage.WikiPageContentService;
|
||||
import com.zyplayer.doc.data.service.manage.WikiPageFileService;
|
||||
import com.zyplayer.doc.data.service.manage.WikiPageService;
|
||||
import com.zyplayer.doc.data.service.manage.WikiPageZanService;
|
||||
import com.zyplayer.doc.data.service.manage.WikiSpaceService;
|
||||
import com.zyplayer.doc.data.utils.CachePrefix;
|
||||
import com.zyplayer.doc.data.utils.CacheUtil;
|
||||
import com.zyplayer.doc.wiki.controller.vo.WikiPageContentVo;
|
||||
@@ -23,22 +33,28 @@ import com.zyplayer.doc.wiki.controller.vo.WikiPageVo;
|
||||
import com.zyplayer.doc.wiki.framework.consts.SpaceType;
|
||||
import com.zyplayer.doc.wiki.service.common.WikiPageAuthService;
|
||||
import com.zyplayer.doc.wiki.service.git.GitService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.poi.poifs.filesystem.DirectoryEntry;
|
||||
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.ServletOutputStream;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.net.URLEncoder;
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@@ -47,389 +63,380 @@ import java.util.stream.Collectors;
|
||||
* @author 暮光:城中城
|
||||
* @since 2019年2月17日
|
||||
*/
|
||||
@Slf4j
|
||||
@AuthMan
|
||||
@RestController
|
||||
@RequestMapping("/zyplayer-doc-wiki/page")
|
||||
@RequiredArgsConstructor
|
||||
public class WikiPageController {
|
||||
private static Logger logger = LoggerFactory.getLogger(WikiPageController.class);
|
||||
|
||||
@Resource
|
||||
WikiPageService wikiPageService;
|
||||
@Resource
|
||||
WikiPageContentService wikiPageContentService;
|
||||
@Resource
|
||||
WikiPageContentMapper wikiPageContentMapper;
|
||||
@Resource
|
||||
WikiPageFileService wikiPageFileService;
|
||||
@Resource
|
||||
WikiPageZanService wikiPageZanService;
|
||||
@Resource
|
||||
WikiSpaceService wikiSpaceService;
|
||||
@Resource
|
||||
WikiPageMapper wikiPageMapper;
|
||||
@Resource
|
||||
WikiPageAuthService wikiPageAuthService;
|
||||
@Resource
|
||||
UserMessageService userMessageService;
|
||||
@Resource
|
||||
GitService gitService;
|
||||
|
||||
@PostMapping("/list")
|
||||
public ResponseJson<List<WikiPageVo>> list(WikiPage wikiPage) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPage.getSpaceId());
|
||||
// 私人空间
|
||||
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
|
||||
return DocResponseJson.warn("您没有权限查看该空间的文章列表!");
|
||||
}
|
||||
UpdateWrapper<WikiPage> wrapper = new UpdateWrapper<>();
|
||||
wrapper.eq("del_flag", 0);
|
||||
wrapper.eq("space_id", wikiPage.getSpaceId());
|
||||
List<WikiPage> wikiPageList = wikiPageService.list(wrapper);
|
||||
Map<Long, List<WikiPageVo>> listMap = wikiPageList.stream().map(WikiPageVo::new).collect(Collectors.groupingBy(WikiPageVo::getParentId));
|
||||
List<WikiPageVo> nodePageList = listMap.get(0L);
|
||||
if (CollectionUtils.isNotEmpty(nodePageList)) {
|
||||
nodePageList = nodePageList.stream().sorted(Comparator.comparingInt(WikiPageVo::getSeqNo)).collect(Collectors.toList());
|
||||
this.setChildren(listMap, nodePageList, "");
|
||||
}
|
||||
return DocResponseJson.ok(nodePageList);
|
||||
}
|
||||
|
||||
@PostMapping("/detail")
|
||||
public ResponseJson<WikiPageContentVo> detail(WikiPage wikiPage) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
WikiPage wikiPageSel = wikiPageService.getById(wikiPage.getId());
|
||||
// 页面已删除
|
||||
if (wikiPageSel == null || Objects.equals(wikiPageSel.getDelFlag(), 1)) {
|
||||
return DocResponseJson.warn("该页面不存在或已删除!");
|
||||
}
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
|
||||
// 空间已删除
|
||||
if (wikiSpaceSel == null || Objects.equals(wikiSpaceSel.getDelFlag(), 1)) {
|
||||
return DocResponseJson.warn("该页面不存在或已删除!");
|
||||
}
|
||||
// 私人空间
|
||||
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
|
||||
return DocResponseJson.warn("您没有权限查看该空间的文章详情!");
|
||||
}
|
||||
UpdateWrapper<WikiPageContent> wrapper = new UpdateWrapper<>();
|
||||
wrapper.eq("page_id", wikiPage.getId());
|
||||
WikiPageContent pageContent = wikiPageContentService.getOne(wrapper);
|
||||
|
||||
UpdateWrapper<WikiPageFile> wrapperFile = new UpdateWrapper<>();
|
||||
wrapperFile.eq("page_id", wikiPage.getId());
|
||||
wrapperFile.eq("del_flag", 0);
|
||||
List<WikiPageFile> pageFiles = wikiPageFileService.list(wrapperFile);
|
||||
for (WikiPageFile pageFile : pageFiles) {
|
||||
pageFile.setFileUrl("zyplayer-doc-wiki/common/file?uuid=" + pageFile.getUuid());
|
||||
}
|
||||
UpdateWrapper<WikiPageZan> wrapperZan = new UpdateWrapper<>();
|
||||
wrapperZan.eq("page_id", wikiPage.getId());
|
||||
wrapperZan.eq("create_user_id", currentUser.getUserId());
|
||||
wrapperZan.eq("yn", 1);
|
||||
WikiPageZan pageZan = wikiPageZanService.getOne(wrapperZan);
|
||||
WikiPageContentVo vo = new WikiPageContentVo();
|
||||
vo.setWikiPage(wikiPageSel);
|
||||
vo.setPageContent(pageContent);
|
||||
vo.setFileList(pageFiles);
|
||||
vo.setSelfZan((pageZan != null) ? 1 : 0);
|
||||
vo.setSelfUserId(currentUser.getUserId());
|
||||
// 上传附件、编辑、权限设置、删除 的权限
|
||||
String canEdit = wikiPageAuthService.canEdit(wikiSpaceSel, wikiPageSel.getEditType(), wikiPageSel.getId(), currentUser.getUserId());
|
||||
String canDelete = wikiPageAuthService.canDelete(wikiSpaceSel, wikiPageSel.getEditType(), wikiPageSel.getId(), currentUser.getUserId());
|
||||
String canUploadFile = wikiPageAuthService.canUploadFile(wikiSpaceSel, wikiPageSel.getId(), currentUser.getUserId());
|
||||
String canDeleteFile = wikiPageAuthService.canDeleteFile(wikiSpaceSel, wikiPageSel.getId(), currentUser.getUserId());
|
||||
String canConfigAuth = wikiPageAuthService.canConfigAuth(wikiSpaceSel, wikiPageSel.getId(), currentUser.getUserId());
|
||||
vo.setCanEdit((canEdit == null) ? 1 : 0);
|
||||
vo.setCanDelete((canDelete == null) ? 1 : 0);
|
||||
vo.setCanDeleteFile((canDeleteFile == null) ? 1 : 0);
|
||||
vo.setCanUploadFile((canUploadFile == null) ? 1 : 0);
|
||||
vo.setCanConfigAuth((canConfigAuth == null) ? 1 : 0);
|
||||
// 高并发下会有覆盖问题,但不重要~
|
||||
Integer viewNum = Optional.ofNullable(wikiPageSel.getViewNum()).orElse(0);
|
||||
WikiPage wikiPageUp = new WikiPage();
|
||||
wikiPageUp.setId(wikiPageSel.getId());
|
||||
wikiPageUp.setViewNum(viewNum + 1);
|
||||
wikiPageService.updateById(wikiPageUp);
|
||||
// 修改返回值里的查看数+1
|
||||
wikiPageSel.setViewNum(viewNum + 1);
|
||||
return DocResponseJson.ok(vo);
|
||||
}
|
||||
|
||||
@PostMapping("/changeParent")
|
||||
public ResponseJson<Object> changeParent(WikiPage wikiPage, Integer beforeSeq, Integer afterSeq) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
WikiPage wikiPageSel = wikiPageService.getById(wikiPage.getId());
|
||||
// 编辑权限判断
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
|
||||
String canEdit = wikiPageAuthService.canEdit(wikiSpaceSel, wikiPageSel.getEditType(), wikiPageSel.getId(), currentUser.getUserId());
|
||||
if (canEdit != null) {
|
||||
return DocResponseJson.warn(canEdit);
|
||||
}
|
||||
WikiPage wikiPageUp = new WikiPage();
|
||||
wikiPageUp.setId(wikiPage.getId());
|
||||
wikiPageUp.setParentId(wikiPage.getParentId());
|
||||
wikiPageUp.setUpdateTime(new Date());
|
||||
wikiPageUp.setUpdateUserId(currentUser.getUserId());
|
||||
wikiPageUp.setUpdateUserName(currentUser.getUsername());
|
||||
wikiPageService.changeParent(wikiPageUp, beforeSeq, afterSeq);
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
|
||||
@PostMapping("/delete")
|
||||
public ResponseJson<Object> delete(Long pageId) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
WikiPage wikiPageSel = wikiPageService.getById(pageId);
|
||||
// 删除权限判断
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
|
||||
String canDelete = wikiPageAuthService.canDelete(wikiSpaceSel, wikiPageSel.getEditType(), wikiPageSel.getId(), currentUser.getUserId());
|
||||
if (canDelete != null) {
|
||||
return DocResponseJson.warn(canDelete);
|
||||
}
|
||||
// 执行删除
|
||||
WikiPage wikiPage = new WikiPage();
|
||||
wikiPage.setId(pageId);
|
||||
wikiPage.setDelFlag(1);
|
||||
wikiPage.setName(wikiPageSel.getName());
|
||||
wikiPage.setUpdateTime(new Date());
|
||||
wikiPage.setUpdateUserId(currentUser.getUserId());
|
||||
wikiPage.setUpdateUserName(currentUser.getUsername());
|
||||
wikiPageService.deletePage(wikiPage);
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
|
||||
@PostMapping("/update")
|
||||
public ResponseJson<Object> update(WikiPage wikiPage, String content, String preview) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
WikiPageContent pageContent = new WikiPageContent();
|
||||
pageContent.setContent(content);
|
||||
pageContent.setPreview(preview);
|
||||
// 数据库是varchar(16000),所以如果不开启es的话搜索超过16000的文章就搜不到~,es存preview不截断
|
||||
if (StringUtils.isNotBlank(preview) && preview.length() > 16000) {
|
||||
pageContent.setPreview(preview.substring(0, 16000));
|
||||
}
|
||||
if (StringUtils.isBlank(wikiPage.getName())) {
|
||||
return DocResponseJson.warn("标题不能为空!");
|
||||
}
|
||||
Long pageId = wikiPage.getId();
|
||||
if (pageId != null && pageId > 0) {
|
||||
WikiPage wikiPageSel = wikiPageService.getById(pageId);
|
||||
// 编辑权限判断
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
|
||||
String canEdit = wikiPageAuthService.canEdit(wikiSpaceSel, wikiPageSel.getEditType(), wikiPageSel.getId(), currentUser.getUserId());
|
||||
if (canEdit != null) {
|
||||
return DocResponseJson.warn(canEdit);
|
||||
}
|
||||
wikiPage.setSpaceId(null);
|
||||
wikiPage.setEditType(null);
|
||||
wikiPage.setUpdateTime(new Date());
|
||||
wikiPage.setUpdateUserId(currentUser.getUserId());
|
||||
wikiPage.setUpdateUserName(currentUser.getUsername());
|
||||
wikiPageService.updateById(wikiPage);
|
||||
// 详情
|
||||
pageContent.setUpdateTime(new Date());
|
||||
pageContent.setUpdateUserId(currentUser.getUserId());
|
||||
pageContent.setUpdateUserName(currentUser.getUsername());
|
||||
UpdateWrapper<WikiPageContent> wrapper = new UpdateWrapper<>();
|
||||
wrapper.eq("page_id", pageId);
|
||||
wikiPageContentService.update(pageContent, wrapper);
|
||||
// 给相关人发送消息
|
||||
UserMessage userMessage = userMessageService.createUserMessage(currentUser, wikiPageSel.getId(), wikiPageSel.getName(), DocSysType.WIKI, UserMsgType.WIKI_PAGE_UPDATE);
|
||||
userMessageService.addWikiMessage(userMessage);
|
||||
} else {
|
||||
Long parentId = Optional.ofNullable(wikiPage.getParentId()).orElse(0L);
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPage.getSpaceId());
|
||||
if (wikiSpaceSel == null) {
|
||||
return DocResponseJson.warn("未找到指定的空间!");
|
||||
}
|
||||
// 空间不是自己的
|
||||
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
|
||||
return DocResponseJson.warn("您没有权限新增该空间的文章!");
|
||||
}
|
||||
// 空间不是自己的
|
||||
if (SpaceType.isOthersPersonal(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
|
||||
return DocResponseJson.warn("您没有权限新增该空间的文章!");
|
||||
}
|
||||
if (parentId> 0) {
|
||||
WikiPage wikiPageParent = wikiPageService.getById(parentId);
|
||||
if (!Objects.equals(wikiPage.getSpaceId(), wikiPageParent.getSpaceId())) {
|
||||
return DocResponseJson.warn("当前空间和父页面的空间不一致,请重新选择父页面!");
|
||||
}
|
||||
}
|
||||
Integer lastSeq = wikiPageMapper.getLastSeq(wikiPage.getSpaceId(), parentId);
|
||||
lastSeq = Optional.ofNullable(lastSeq).orElse(99999);
|
||||
wikiPage.setSeqNo(lastSeq + 1);
|
||||
wikiPage.setCreateTime(new Date());
|
||||
wikiPage.setUpdateTime(new Date());
|
||||
wikiPage.setCreateUserId(currentUser.getUserId());
|
||||
wikiPage.setCreateUserName(currentUser.getUsername());
|
||||
wikiPageService.save(wikiPage);
|
||||
// 重置当前分支的所有节点seq值
|
||||
wikiPageMapper.updateChildrenSeq(wikiPage.getSpaceId(), parentId);
|
||||
// 详情
|
||||
pageContent.setPageId(wikiPage.getId());
|
||||
pageContent.setCreateTime(new Date());
|
||||
pageContent.setCreateUserId(currentUser.getUserId());
|
||||
pageContent.setCreateUserName(currentUser.getUsername());
|
||||
wikiPageContentService.save(pageContent);
|
||||
// 给相关人发送消息
|
||||
UserMessage userMessage = userMessageService.createUserMessage(currentUser, wikiPage.getId(), wikiPage.getName(), DocSysType.WIKI, UserMsgType.WIKI_PAGE_CREATE);
|
||||
userMessageService.addWikiMessage(userMessage);
|
||||
}
|
||||
try {
|
||||
// 提交历史版本记录
|
||||
gitService.commitAndAddHistory(wikiPage.getId(), content);
|
||||
} catch (ConfirmException e) {
|
||||
return DocResponseJson.warn(e.getMessage());
|
||||
}
|
||||
return DocResponseJson.ok(wikiPage);
|
||||
}
|
||||
|
||||
@PostMapping("/unlock")
|
||||
public ResponseJson<Object> unlock(Long pageId) {
|
||||
String lockKey = CachePrefix.WIKI_LOCK_PAGE + pageId;
|
||||
DocUserDetails pageLockUser = CacheUtil.get(lockKey);
|
||||
if (pageLockUser != null) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
if (Objects.equals(pageLockUser.getUserId(), currentUser.getUserId())) {
|
||||
CacheUtil.remove(lockKey);
|
||||
}
|
||||
}
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
|
||||
@PostMapping("/lock")
|
||||
public ResponseJson<Object> editLock(Long pageId) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
String lockKey = CachePrefix.WIKI_LOCK_PAGE + pageId;
|
||||
DocUserDetails pageLockUser = CacheUtil.get(lockKey);
|
||||
if (pageLockUser != null) {
|
||||
if (!Objects.equals(pageLockUser.getUserId(), currentUser.getUserId())) {
|
||||
return DocResponseJson.warn("当前页面正在被:" + pageLockUser.getUsername() + " 编辑");
|
||||
}
|
||||
}
|
||||
CacheUtil.put(lockKey, new DocUserDetails(currentUser.getUserId(), currentUser.getUsername()));
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
|
||||
@PostMapping("/searchByEs")
|
||||
public ResponseJson<Object> searchByEs(SearchByEsParam param) {
|
||||
param.setNewsType(1);
|
||||
return this.news(param);
|
||||
}
|
||||
|
||||
@PostMapping("/download")
|
||||
public ResponseJson<Object> download(Long pageId, HttpServletResponse response) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
WikiPage wikiPageSel = wikiPageService.getById(pageId);
|
||||
// 页面已删除
|
||||
if (wikiPageSel == null || Objects.equals(wikiPageSel.getDelFlag(), 1)) {
|
||||
return DocResponseJson.warn("该页面不存在或已删除!");
|
||||
}
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
|
||||
// 空间已删除
|
||||
if (wikiSpaceSel == null || Objects.equals(wikiSpaceSel.getDelFlag(), 1)) {
|
||||
return DocResponseJson.warn("该页面不存在或已删除!");
|
||||
}
|
||||
// 私人空间
|
||||
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
|
||||
return DocResponseJson.warn("您没有权限查看该空间的文章详情!");
|
||||
}
|
||||
UpdateWrapper<WikiPageContent> wrapper = new UpdateWrapper<>();
|
||||
wrapper.eq("page_id", pageId);
|
||||
WikiPageContent pageContent = wikiPageContentService.getOne(wrapper);
|
||||
try {
|
||||
ByteArrayInputStream bais = new ByteArrayInputStream(pageContent.getContent().getBytes("GBK"));
|
||||
POIFSFileSystem poifs = new POIFSFileSystem();
|
||||
DirectoryEntry directory = poifs.getRoot();
|
||||
directory.createDocument("WordDocument", bais);
|
||||
// 写入流
|
||||
response.setContentType("application/vnd.ms-excel");
|
||||
response.setCharacterEncoding("utf-8");
|
||||
String fileName = URLEncoder.encode(wikiPageSel.getName(), "UTF-8");
|
||||
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".docx");
|
||||
ServletOutputStream outputStream = response.getOutputStream();
|
||||
poifs.writeFilesystem(outputStream);
|
||||
bais.close();
|
||||
outputStream.close();
|
||||
return DocResponseJson.ok();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return DocResponseJson.warn("导出失败");
|
||||
}
|
||||
|
||||
@PostMapping("/news")
|
||||
public ResponseJson<Object> news(SearchByEsParam param) {
|
||||
// 空间不是自己的
|
||||
Map<Long, WikiSpace> wikiSpaceMap = this.getCanVisitWikiSpace(param.getSpaceId());
|
||||
if (wikiSpaceMap.isEmpty()) {
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
param.setSpaceIds(new ArrayList<>(wikiSpaceMap.keySet()));
|
||||
String keywords = param.getKeywords();
|
||||
if (StringUtils.isNotBlank(keywords)) {
|
||||
param.setKeywords("%" + keywords + "%");
|
||||
}
|
||||
// 分页查询
|
||||
List<SpaceNewsVo> spaceNewsVoList = wikiPageContentMapper.getNewsList(param);
|
||||
if (spaceNewsVoList == null || spaceNewsVoList.isEmpty()) {
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
spaceNewsVoList.forEach(val -> {
|
||||
val.setSpaceName(wikiSpaceMap.get(val.getSpaceId()).getName());
|
||||
String preview = val.getPreviewContent();
|
||||
if (preview != null) {
|
||||
if (preview.length() > 200) {
|
||||
preview = preview.substring(0, 200);
|
||||
}
|
||||
if (keywords != null) {
|
||||
preview = StringUtils.replaceIgnoreCase(preview, keywords, "<span style=\"color:red\">" + keywords + "</span>");
|
||||
}
|
||||
}
|
||||
val.setPreviewContent(preview);
|
||||
String pageTitle = val.getPageTitle();
|
||||
if (pageTitle != null && keywords != null) {
|
||||
pageTitle = StringUtils.replaceIgnoreCase(pageTitle, keywords, "<span style=\"color:red\">" + keywords + "</span>");
|
||||
}
|
||||
val.setPageTitle(pageTitle);
|
||||
});
|
||||
return DocResponseJson.ok(spaceNewsVoList);
|
||||
}
|
||||
|
||||
private Map<Long, WikiSpace> getCanVisitWikiSpace(Long spaceId) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
List<WikiSpace> spaceList;
|
||||
// 空间不是自己的
|
||||
if (spaceId == null || spaceId <= 0) {
|
||||
QueryWrapper<WikiSpace> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("del_flag", 0);
|
||||
queryWrapper.ne("type", SpaceType.privateSpace);
|
||||
spaceList = wikiSpaceService.list(queryWrapper);
|
||||
} else {
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(spaceId);
|
||||
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
spaceList = Collections.singletonList(wikiSpaceSel);
|
||||
}
|
||||
return spaceList.stream().collect(Collectors.toMap(WikiSpace::getId, val -> val));
|
||||
}
|
||||
|
||||
private void setChildren(Map<Long, List<WikiPageVo>> listMap, List<WikiPageVo> nodePageList, String path) {
|
||||
if (nodePageList == null || listMap == null) {
|
||||
return;
|
||||
}
|
||||
for (WikiPageVo page : nodePageList) {
|
||||
String nowPath = path + "/" + page.getName();
|
||||
page.setPath(nowPath);
|
||||
List<WikiPageVo> wikiPageVos = listMap.get(page.getId());
|
||||
if (CollectionUtils.isNotEmpty(wikiPageVos)) {
|
||||
wikiPageVos = wikiPageVos.stream().sorted(Comparator.comparingInt(WikiPageVo::getSeqNo)).collect(Collectors.toList());
|
||||
page.setChildren(wikiPageVos);
|
||||
this.setChildren(listMap, wikiPageVos, nowPath);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private final WikiPageService wikiPageService;
|
||||
private final WikiPageContentService wikiPageContentService;
|
||||
private final WikiPageContentMapper wikiPageContentMapper;
|
||||
private final WikiPageFileService wikiPageFileService;
|
||||
private final WikiPageZanService wikiPageZanService;
|
||||
private final WikiSpaceService wikiSpaceService;
|
||||
private final WikiPageMapper wikiPageMapper;
|
||||
private final WikiPageAuthService wikiPageAuthService;
|
||||
private final UserMessageService userMessageService;
|
||||
private final GitService gitService;
|
||||
|
||||
@PostMapping("/list")
|
||||
public ResponseJson<List<WikiPageVo>> list(WikiPage wikiPage) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPage.getSpaceId());
|
||||
// 私人空间
|
||||
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
|
||||
return DocResponseJson.warn("您没有权限查看该空间的文章列表!");
|
||||
}
|
||||
UpdateWrapper<WikiPage> wrapper = new UpdateWrapper<>();
|
||||
wrapper.eq("del_flag", 0);
|
||||
wrapper.eq("space_id", wikiPage.getSpaceId());
|
||||
List<WikiPage> wikiPageList = wikiPageService.list(wrapper);
|
||||
Map<Long, List<WikiPageVo>> listMap = wikiPageList.stream().map(WikiPageVo::new).collect(Collectors.groupingBy(WikiPageVo::getParentId));
|
||||
List<WikiPageVo> nodePageList = listMap.get(0L);
|
||||
if (CollectionUtils.isNotEmpty(nodePageList)) {
|
||||
nodePageList = nodePageList.stream().sorted(Comparator.comparingInt(WikiPageVo::getSeqNo)).collect(Collectors.toList());
|
||||
this.setChildren(listMap, nodePageList, "");
|
||||
}
|
||||
return DocResponseJson.ok(nodePageList);
|
||||
}
|
||||
|
||||
@PostMapping("/detail")
|
||||
public ResponseJson<WikiPageContentVo> detail(WikiPage wikiPage) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
WikiPage wikiPageSel = wikiPageService.getById(wikiPage.getId());
|
||||
// 页面已删除
|
||||
if (wikiPageSel == null || Objects.equals(wikiPageSel.getDelFlag(), 1)) {
|
||||
return DocResponseJson.warn("该页面不存在或已删除!");
|
||||
}
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
|
||||
// 空间已删除
|
||||
if (wikiSpaceSel == null || Objects.equals(wikiSpaceSel.getDelFlag(), 1)) {
|
||||
return DocResponseJson.warn("该页面不存在或已删除!");
|
||||
}
|
||||
// 私人空间
|
||||
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
|
||||
return DocResponseJson.warn("您没有权限查看该空间的文章详情!");
|
||||
}
|
||||
UpdateWrapper<WikiPageContent> wrapper = new UpdateWrapper<>();
|
||||
wrapper.eq("page_id", wikiPage.getId());
|
||||
WikiPageContent pageContent = wikiPageContentService.getOne(wrapper);
|
||||
|
||||
UpdateWrapper<WikiPageFile> wrapperFile = new UpdateWrapper<>();
|
||||
wrapperFile.eq("page_id", wikiPage.getId());
|
||||
wrapperFile.eq("del_flag", 0);
|
||||
List<WikiPageFile> pageFiles = wikiPageFileService.list(wrapperFile);
|
||||
for (WikiPageFile pageFile : pageFiles) {
|
||||
pageFile.setFileUrl("zyplayer-doc-wiki/common/file?uuid=" + pageFile.getUuid());
|
||||
}
|
||||
UpdateWrapper<WikiPageZan> wrapperZan = new UpdateWrapper<>();
|
||||
wrapperZan.eq("page_id", wikiPage.getId());
|
||||
wrapperZan.eq("create_user_id", currentUser.getUserId());
|
||||
wrapperZan.eq("yn", 1);
|
||||
WikiPageZan pageZan = wikiPageZanService.getOne(wrapperZan);
|
||||
WikiPageContentVo vo = new WikiPageContentVo();
|
||||
vo.setWikiPage(wikiPageSel);
|
||||
vo.setPageContent(pageContent);
|
||||
vo.setFileList(pageFiles);
|
||||
vo.setSelfZan((pageZan != null) ? 1 : 0);
|
||||
vo.setSelfUserId(currentUser.getUserId());
|
||||
// 上传附件、编辑、权限设置、删除 的权限
|
||||
String canEdit = wikiPageAuthService.canEdit(wikiSpaceSel, wikiPageSel.getEditType(), wikiPageSel.getId(), currentUser.getUserId());
|
||||
String canDelete = wikiPageAuthService.canDelete(wikiSpaceSel, wikiPageSel.getEditType(), wikiPageSel.getId(), currentUser.getUserId());
|
||||
String canUploadFile = wikiPageAuthService.canUploadFile(wikiSpaceSel, wikiPageSel.getId(), currentUser.getUserId());
|
||||
String canDeleteFile = wikiPageAuthService.canDeleteFile(wikiSpaceSel, wikiPageSel.getId(), currentUser.getUserId());
|
||||
String canConfigAuth = wikiPageAuthService.canConfigAuth(wikiSpaceSel, wikiPageSel.getId(), currentUser.getUserId());
|
||||
vo.setCanEdit((canEdit == null) ? 1 : 0);
|
||||
vo.setCanDelete((canDelete == null) ? 1 : 0);
|
||||
vo.setCanDeleteFile((canDeleteFile == null) ? 1 : 0);
|
||||
vo.setCanUploadFile((canUploadFile == null) ? 1 : 0);
|
||||
vo.setCanConfigAuth((canConfigAuth == null) ? 1 : 0);
|
||||
// 高并发下会有覆盖问题,但不重要~
|
||||
Integer viewNum = Optional.ofNullable(wikiPageSel.getViewNum()).orElse(0);
|
||||
WikiPage wikiPageUp = new WikiPage();
|
||||
wikiPageUp.setId(wikiPageSel.getId());
|
||||
wikiPageUp.setViewNum(viewNum + 1);
|
||||
wikiPageService.updateById(wikiPageUp);
|
||||
// 修改返回值里的查看数+1
|
||||
wikiPageSel.setViewNum(viewNum + 1);
|
||||
return DocResponseJson.ok(vo);
|
||||
}
|
||||
|
||||
@PostMapping("/changeParent")
|
||||
public ResponseJson<Object> changeParent(WikiPage wikiPage, Integer beforeSeq, Integer afterSeq) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
WikiPage wikiPageSel = wikiPageService.getById(wikiPage.getId());
|
||||
// 编辑权限判断
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
|
||||
String canEdit = wikiPageAuthService.canEdit(wikiSpaceSel, wikiPageSel.getEditType(), wikiPageSel.getId(), currentUser.getUserId());
|
||||
if (canEdit != null) {
|
||||
return DocResponseJson.warn(canEdit);
|
||||
}
|
||||
WikiPage wikiPageUp = new WikiPage();
|
||||
wikiPageUp.setId(wikiPage.getId());
|
||||
wikiPageUp.setParentId(wikiPage.getParentId());
|
||||
wikiPageUp.setUpdateTime(new Date());
|
||||
wikiPageUp.setUpdateUserId(currentUser.getUserId());
|
||||
wikiPageUp.setUpdateUserName(currentUser.getUsername());
|
||||
wikiPageService.changeParent(wikiPageUp, beforeSeq, afterSeq);
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
|
||||
@PostMapping("/delete")
|
||||
public ResponseJson<Object> delete(Long pageId) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
WikiPage wikiPageSel = wikiPageService.getById(pageId);
|
||||
// 删除权限判断
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
|
||||
String canDelete = wikiPageAuthService.canDelete(wikiSpaceSel, wikiPageSel.getEditType(), wikiPageSel.getId(), currentUser.getUserId());
|
||||
if (canDelete != null) {
|
||||
return DocResponseJson.warn(canDelete);
|
||||
}
|
||||
// 执行删除
|
||||
WikiPage wikiPage = new WikiPage();
|
||||
wikiPage.setId(pageId);
|
||||
wikiPage.setDelFlag(1);
|
||||
wikiPage.setName(wikiPageSel.getName());
|
||||
wikiPage.setUpdateTime(new Date());
|
||||
wikiPage.setUpdateUserId(currentUser.getUserId());
|
||||
wikiPage.setUpdateUserName(currentUser.getUsername());
|
||||
wikiPageService.deletePage(wikiPage);
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
|
||||
@PostMapping("/update")
|
||||
public ResponseJson<Object> update(WikiPage wikiPage, String content, String preview) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
WikiPageContent pageContent = new WikiPageContent();
|
||||
pageContent.setContent(content);
|
||||
pageContent.setPreview(preview);
|
||||
// 数据库是varchar(16000),所以如果不开启es的话搜索超过16000的文章就搜不到~,es存preview不截断
|
||||
if (StringUtils.isNotBlank(preview) && preview.length() > 16000) {
|
||||
pageContent.setPreview(preview.substring(0, 16000));
|
||||
}
|
||||
if (StringUtils.isBlank(wikiPage.getName())) {
|
||||
return DocResponseJson.warn("标题不能为空!");
|
||||
}
|
||||
Long pageId = wikiPage.getId();
|
||||
if (pageId != null && pageId > 0) {
|
||||
WikiPage wikiPageSel = wikiPageService.getById(pageId);
|
||||
// 编辑权限判断
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
|
||||
String canEdit = wikiPageAuthService.canEdit(wikiSpaceSel, wikiPageSel.getEditType(), wikiPageSel.getId(), currentUser.getUserId());
|
||||
if (canEdit != null) {
|
||||
return DocResponseJson.warn(canEdit);
|
||||
}
|
||||
wikiPage.setSpaceId(null);
|
||||
wikiPage.setEditType(null);
|
||||
wikiPage.setUpdateTime(new Date());
|
||||
wikiPage.setUpdateUserId(currentUser.getUserId());
|
||||
wikiPage.setUpdateUserName(currentUser.getUsername());
|
||||
wikiPageService.updateById(wikiPage);
|
||||
// 详情
|
||||
pageContent.setUpdateTime(new Date());
|
||||
pageContent.setUpdateUserId(currentUser.getUserId());
|
||||
pageContent.setUpdateUserName(currentUser.getUsername());
|
||||
UpdateWrapper<WikiPageContent> wrapper = new UpdateWrapper<>();
|
||||
wrapper.eq("page_id", pageId);
|
||||
wikiPageContentService.update(pageContent, wrapper);
|
||||
// 给相关人发送消息
|
||||
UserMessage userMessage = userMessageService.createUserMessage(currentUser, wikiPageSel.getId(), wikiPageSel.getName(), DocSysType.WIKI, UserMsgType.WIKI_PAGE_UPDATE);
|
||||
userMessageService.addWikiMessage(userMessage);
|
||||
} else {
|
||||
Long parentId = Optional.ofNullable(wikiPage.getParentId()).orElse(0L);
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPage.getSpaceId());
|
||||
if (wikiSpaceSel == null) {
|
||||
return DocResponseJson.warn("未找到指定的空间!");
|
||||
}
|
||||
// 空间不是自己的
|
||||
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
|
||||
return DocResponseJson.warn("您没有权限新增该空间的文章!");
|
||||
}
|
||||
// 空间不是自己的
|
||||
if (SpaceType.isOthersPersonal(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
|
||||
return DocResponseJson.warn("您没有权限新增该空间的文章!");
|
||||
}
|
||||
if (parentId > 0) {
|
||||
WikiPage wikiPageParent = wikiPageService.getById(parentId);
|
||||
if (!Objects.equals(wikiPage.getSpaceId(), wikiPageParent.getSpaceId())) {
|
||||
return DocResponseJson.warn("当前空间和父页面的空间不一致,请重新选择父页面!");
|
||||
}
|
||||
}
|
||||
Integer lastSeq = wikiPageMapper.getLastSeq(wikiPage.getSpaceId(), parentId);
|
||||
lastSeq = Optional.ofNullable(lastSeq).orElse(99999);
|
||||
wikiPage.setSeqNo(lastSeq + 1);
|
||||
wikiPage.setCreateTime(new Date());
|
||||
wikiPage.setUpdateTime(new Date());
|
||||
wikiPage.setCreateUserId(currentUser.getUserId());
|
||||
wikiPage.setCreateUserName(currentUser.getUsername());
|
||||
wikiPageService.save(wikiPage);
|
||||
// 重置当前分支的所有节点seq值
|
||||
wikiPageMapper.updateChildrenSeq(wikiPage.getSpaceId(), parentId);
|
||||
// 详情
|
||||
pageContent.setPageId(wikiPage.getId());
|
||||
pageContent.setCreateTime(new Date());
|
||||
pageContent.setCreateUserId(currentUser.getUserId());
|
||||
pageContent.setCreateUserName(currentUser.getUsername());
|
||||
wikiPageContentService.save(pageContent);
|
||||
// 给相关人发送消息
|
||||
UserMessage userMessage = userMessageService.createUserMessage(currentUser, wikiPage.getId(), wikiPage.getName(), DocSysType.WIKI, UserMsgType.WIKI_PAGE_CREATE);
|
||||
userMessageService.addWikiMessage(userMessage);
|
||||
}
|
||||
try {
|
||||
// 提交历史版本记录
|
||||
gitService.commitAndAddHistory(wikiPage.getId(), content);
|
||||
} catch (ConfirmException e) {
|
||||
return DocResponseJson.warn(e.getMessage());
|
||||
}
|
||||
return DocResponseJson.ok(wikiPage);
|
||||
}
|
||||
|
||||
@PostMapping("/unlock")
|
||||
public ResponseJson<Object> unlock(Long pageId) {
|
||||
String lockKey = CachePrefix.WIKI_LOCK_PAGE + pageId;
|
||||
DocUserDetails pageLockUser = CacheUtil.get(lockKey);
|
||||
if (pageLockUser != null) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
if (Objects.equals(pageLockUser.getUserId(), currentUser.getUserId())) {
|
||||
CacheUtil.remove(lockKey);
|
||||
}
|
||||
}
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
|
||||
@PostMapping("/lock")
|
||||
public ResponseJson<Object> editLock(Long pageId) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
String lockKey = CachePrefix.WIKI_LOCK_PAGE + pageId;
|
||||
DocUserDetails pageLockUser = CacheUtil.get(lockKey);
|
||||
if (pageLockUser != null) {
|
||||
if (!Objects.equals(pageLockUser.getUserId(), currentUser.getUserId())) {
|
||||
return DocResponseJson.warn("当前页面正在被:" + pageLockUser.getUsername() + " 编辑");
|
||||
}
|
||||
}
|
||||
CacheUtil.put(lockKey, new DocUserDetails(currentUser.getUserId(), currentUser.getUsername()));
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
|
||||
@PostMapping("/searchByEs")
|
||||
public ResponseJson<Object> searchByEs(SearchByEsParam param) {
|
||||
param.setNewsType(1);
|
||||
return this.news(param);
|
||||
}
|
||||
|
||||
@PostMapping("/download")
|
||||
public ResponseJson<Object> download(Long pageId, HttpServletResponse response) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
WikiPage wikiPageSel = wikiPageService.getById(pageId);
|
||||
// 页面已删除
|
||||
if (wikiPageSel == null || Objects.equals(wikiPageSel.getDelFlag(), 1)) {
|
||||
return DocResponseJson.warn("该页面不存在或已删除!");
|
||||
}
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
|
||||
// 空间已删除
|
||||
if (wikiSpaceSel == null || Objects.equals(wikiSpaceSel.getDelFlag(), 1)) {
|
||||
return DocResponseJson.warn("该页面不存在或已删除!");
|
||||
}
|
||||
// 私人空间
|
||||
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
|
||||
return DocResponseJson.warn("您没有权限查看该空间的文章详情!");
|
||||
}
|
||||
UpdateWrapper<WikiPageContent> wrapper = new UpdateWrapper<>();
|
||||
wrapper.eq("page_id", pageId);
|
||||
WikiPageContent pageContent = wikiPageContentService.getOne(wrapper);
|
||||
try {
|
||||
ByteArrayInputStream bais = new ByteArrayInputStream(pageContent.getContent().getBytes("GBK"));
|
||||
POIFSFileSystem poifs = new POIFSFileSystem();
|
||||
DirectoryEntry directory = poifs.getRoot();
|
||||
directory.createDocument("WordDocument", bais);
|
||||
// 写入流
|
||||
response.setContentType("application/vnd.ms-excel");
|
||||
response.setCharacterEncoding("utf-8");
|
||||
String fileName = URLEncoder.encode(wikiPageSel.getName(), "UTF-8");
|
||||
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".docx");
|
||||
ServletOutputStream outputStream = response.getOutputStream();
|
||||
poifs.writeFilesystem(outputStream);
|
||||
bais.close();
|
||||
outputStream.close();
|
||||
return DocResponseJson.ok();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return DocResponseJson.warn("导出失败");
|
||||
}
|
||||
|
||||
@PostMapping("/news")
|
||||
public ResponseJson<Object> news(SearchByEsParam param) {
|
||||
// 空间不是自己的
|
||||
Map<Long, WikiSpace> wikiSpaceMap = this.getCanVisitWikiSpace(param.getSpaceId());
|
||||
if (wikiSpaceMap.isEmpty()) {
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
param.setSpaceIds(new ArrayList<>(wikiSpaceMap.keySet()));
|
||||
String keywords = param.getKeywords();
|
||||
if (StringUtils.isNotBlank(keywords)) {
|
||||
param.setKeywords("%" + keywords + "%");
|
||||
}
|
||||
// 分页查询
|
||||
List<SpaceNewsVo> spaceNewsVoList = wikiPageContentMapper.getNewsList(param);
|
||||
if (spaceNewsVoList == null || spaceNewsVoList.isEmpty()) {
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
spaceNewsVoList.forEach(val -> {
|
||||
val.setSpaceName(wikiSpaceMap.get(val.getSpaceId()).getName());
|
||||
String preview = val.getPreviewContent();
|
||||
if (preview != null) {
|
||||
if (preview.length() > 200) {
|
||||
preview = preview.substring(0, 200);
|
||||
}
|
||||
if (keywords != null) {
|
||||
preview = StringUtils.replaceIgnoreCase(preview, keywords, "<span style=\"color:red\">" + keywords + "</span>");
|
||||
}
|
||||
}
|
||||
val.setPreviewContent(preview);
|
||||
String pageTitle = val.getPageTitle();
|
||||
if (pageTitle != null && keywords != null) {
|
||||
pageTitle = StringUtils.replaceIgnoreCase(pageTitle, keywords, "<span style=\"color:red\">" + keywords + "</span>");
|
||||
}
|
||||
val.setPageTitle(pageTitle);
|
||||
});
|
||||
return DocResponseJson.ok(spaceNewsVoList);
|
||||
}
|
||||
|
||||
private Map<Long, WikiSpace> getCanVisitWikiSpace(Long spaceId) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
List<WikiSpace> spaceList;
|
||||
// 空间不是自己的
|
||||
if (spaceId == null || spaceId <= 0) {
|
||||
QueryWrapper<WikiSpace> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("del_flag", 0);
|
||||
queryWrapper.ne("type", SpaceType.privateSpace);
|
||||
spaceList = wikiSpaceService.list(queryWrapper);
|
||||
} else {
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(spaceId);
|
||||
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
spaceList = Collections.singletonList(wikiSpaceSel);
|
||||
}
|
||||
return spaceList.stream().collect(Collectors.toMap(WikiSpace::getId, val -> val));
|
||||
}
|
||||
|
||||
private void setChildren(Map<Long, List<WikiPageVo>> listMap, List<WikiPageVo> nodePageList, String path) {
|
||||
if (nodePageList == null || listMap == null) {
|
||||
return;
|
||||
}
|
||||
for (WikiPageVo page : nodePageList) {
|
||||
String nowPath = path + "/" + page.getName();
|
||||
page.setPath(nowPath);
|
||||
List<WikiPageVo> wikiPageVos = listMap.get(page.getId());
|
||||
if (CollectionUtils.isNotEmpty(wikiPageVos)) {
|
||||
wikiPageVos = wikiPageVos.stream().sorted(Comparator.comparingInt(WikiPageVo::getSeqNo)).collect(Collectors.toList());
|
||||
page.setChildren(wikiPageVos);
|
||||
this.setChildren(listMap, wikiPageVos, nowPath);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -19,8 +19,8 @@ import com.zyplayer.doc.data.service.manage.WikiPageFileService;
|
||||
import com.zyplayer.doc.data.service.manage.WikiPageService;
|
||||
import com.zyplayer.doc.data.service.manage.WikiSpaceService;
|
||||
import com.zyplayer.doc.wiki.service.common.WikiPageAuthService;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
@@ -28,7 +28,6 @@ import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.io.File;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
@@ -40,26 +39,22 @@ import java.util.Map;
|
||||
* @author 暮光:城中城
|
||||
* @since 2019年2月17日
|
||||
*/
|
||||
@Slf4j
|
||||
@AuthMan
|
||||
@RestController
|
||||
@RequestMapping("/zyplayer-doc-wiki/page/file")
|
||||
@RequiredArgsConstructor
|
||||
public class WikiPageFileController {
|
||||
private static Logger logger = LoggerFactory.getLogger(WikiPageFileController.class);
|
||||
|
||||
@Value("${zyplayer.doc.wiki.upload-path:}")
|
||||
private String uploadPath;
|
||||
|
||||
@Resource
|
||||
WikiPageFileService wikiPageFileService;
|
||||
@Resource
|
||||
WikiSpaceService wikiSpaceService;
|
||||
@Resource
|
||||
WikiPageService wikiPageService;
|
||||
@Resource
|
||||
WikiPageAuthService wikiPageAuthService;
|
||||
@Resource
|
||||
UserMessageService userMessageService;
|
||||
|
||||
|
||||
@Value("${zyplayer.doc.wiki.upload-path:}")
|
||||
private String uploadPath;
|
||||
|
||||
private final WikiPageFileService wikiPageFileService;
|
||||
private final WikiSpaceService wikiSpaceService;
|
||||
private final WikiPageService wikiPageService;
|
||||
private final WikiPageAuthService wikiPageAuthService;
|
||||
private final UserMessageService userMessageService;
|
||||
|
||||
// @PostMapping("/list")
|
||||
// public ResponseJson<List<WikiPageFile>> list(WikiPageFile wikiPageFile) {
|
||||
// // TODO 检查space是否开放访问
|
||||
@@ -72,113 +67,114 @@ public class WikiPageFileController {
|
||||
// }
|
||||
// return DocResponseJson.ok(fileList);
|
||||
// }
|
||||
|
||||
@PostMapping("/delete")
|
||||
public ResponseJson<Object> delete(WikiPageFile wikiPageFile) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
Long id = wikiPageFile.getId();
|
||||
if (id == null || id <= 0) {
|
||||
return DocResponseJson.warn("需指定删除的附件!");
|
||||
}
|
||||
WikiPageFile pageFileSel = wikiPageFileService.getById(wikiPageFile.getId());
|
||||
WikiPage wikiPageSel = wikiPageService.getById(pageFileSel.getPageId());
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
|
||||
// 权限判断
|
||||
String canDeleteFile = wikiPageAuthService.canDeleteFile(wikiSpaceSel, pageFileSel.getPageId(), currentUser.getUserId());
|
||||
if (canDeleteFile != null) {
|
||||
return DocResponseJson.warn(canDeleteFile);
|
||||
}
|
||||
wikiPageFile.setDelFlag(1);
|
||||
wikiPageFile.setUpdateUserId(currentUser.getUserId());
|
||||
wikiPageFile.setUpdateUserName(currentUser.getUsername());
|
||||
wikiPageFile.setUpdateTime(new Date());
|
||||
wikiPageFileService.updateById(wikiPageFile);
|
||||
// 给相关人发送消息
|
||||
UserMessage userMessage = userMessageService.createUserMessage(currentUser, wikiPageSel.getId(), wikiPageSel.getName(), DocSysType.WIKI, UserMsgType.WIKI_PAGE_FILE_DEL);
|
||||
userMessage.setAffectUserId(wikiPageSel.getCreateUserId());
|
||||
userMessage.setAffectUserName(wikiPageSel.getCreateUserName());
|
||||
userMessageService.addWikiMessage(userMessage);
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
|
||||
@PostMapping("/wangEditor/upload")
|
||||
public Map<String, Object> wangEditorUpload(WikiPageFile wikiPageFile, @RequestParam("files") MultipartFile file) {
|
||||
Map<String, Object> resultMap = new HashMap<>();
|
||||
DocResponseJson docResponseJson = this.uploadFile(wikiPageFile, file);
|
||||
if (!docResponseJson.isOk()) {
|
||||
resultMap.put("errno", 1);
|
||||
resultMap.put("message", docResponseJson.getErrMsg());
|
||||
} else {
|
||||
resultMap.put("errno", 0);
|
||||
resultMap.put("data", new JSONObject().fluentPut("url", wikiPageFile.getFileUrl()));
|
||||
}
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
@PostMapping("/upload")
|
||||
public ResponseJson upload(WikiPageFile wikiPageFile, @RequestParam("files") MultipartFile file) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
Long pageId = wikiPageFile.getPageId();
|
||||
if (pageId == null || pageId <= 0) {
|
||||
return DocResponseJson.warn("未指定附件关联的文档");
|
||||
}
|
||||
WikiPage wikiPageSel = wikiPageService.getById(pageId);
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
|
||||
// 权限判断
|
||||
String canUploadFile = wikiPageAuthService.canUploadFile(wikiSpaceSel, wikiPageSel.getId(), currentUser.getUserId());
|
||||
if (canUploadFile != null) {
|
||||
return DocResponseJson.warn(canUploadFile);
|
||||
}
|
||||
DocResponseJson docResponseJson = this.uploadFile(wikiPageFile, file);
|
||||
if (!docResponseJson.isOk()) {
|
||||
return docResponseJson;
|
||||
}
|
||||
// 给相关人发送消息
|
||||
UserMessage userMessage = userMessageService.createUserMessage(currentUser, pageId, wikiPageSel.getName(), DocSysType.WIKI, UserMsgType.WIKI_PAGE_UPLOAD);
|
||||
userMessage.setAffectUserId(wikiPageSel.getCreateUserId());
|
||||
userMessage.setAffectUserName(wikiPageSel.getCreateUserName());
|
||||
userMessageService.addWikiMessage(userMessage);
|
||||
return DocResponseJson.ok(wikiPageFile);
|
||||
}
|
||||
|
||||
/**
|
||||
* 单纯的文件上传方法
|
||||
* @param wikiPageFile
|
||||
* @param file
|
||||
* @return
|
||||
*/
|
||||
private DocResponseJson uploadFile(WikiPageFile wikiPageFile, MultipartFile file) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
String fileName = file.getOriginalFilename();
|
||||
String fileSuffix = "";
|
||||
if (fileName != null && fileName.lastIndexOf(".") >= 0) {
|
||||
fileSuffix = fileName.substring(fileName.lastIndexOf("."));
|
||||
}
|
||||
String path = uploadPath + "/" + DateTime.now().toString("yyyy/MM/dd") + "/";
|
||||
File newFile = new File(path);
|
||||
if (!newFile.exists() && !newFile.mkdirs()) {
|
||||
return DocResponseJson.warn("创建文件夹失败");
|
||||
}
|
||||
String simpleUUID = IdUtil.simpleUUID();
|
||||
path += simpleUUID + fileSuffix;
|
||||
newFile = new File(path);
|
||||
try {
|
||||
file.transferTo(newFile);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return DocResponseJson.warn("保存文件失败");
|
||||
}
|
||||
wikiPageFile.setFileSize(file.getSize());
|
||||
wikiPageFile.setUuid(simpleUUID);
|
||||
wikiPageFile.setFileUrl(path);
|
||||
wikiPageFile.setFileName(fileName);
|
||||
wikiPageFile.setCreateTime(new Date());
|
||||
wikiPageFile.setCreateUserId(currentUser.getUserId());
|
||||
wikiPageFile.setCreateUserName(currentUser.getUsername());
|
||||
wikiPageFile.setDelFlag(0);
|
||||
wikiPageFileService.save(wikiPageFile);
|
||||
wikiPageFile.setFileUrl("zyplayer-doc-wiki/common/file?uuid=" + wikiPageFile.getUuid());
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
|
||||
@PostMapping("/delete")
|
||||
public ResponseJson<Object> delete(WikiPageFile wikiPageFile) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
Long id = wikiPageFile.getId();
|
||||
if (id == null || id <= 0) {
|
||||
return DocResponseJson.warn("需指定删除的附件!");
|
||||
}
|
||||
WikiPageFile pageFileSel = wikiPageFileService.getById(wikiPageFile.getId());
|
||||
WikiPage wikiPageSel = wikiPageService.getById(pageFileSel.getPageId());
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
|
||||
// 权限判断
|
||||
String canDeleteFile = wikiPageAuthService.canDeleteFile(wikiSpaceSel, pageFileSel.getPageId(), currentUser.getUserId());
|
||||
if (canDeleteFile != null) {
|
||||
return DocResponseJson.warn(canDeleteFile);
|
||||
}
|
||||
wikiPageFile.setDelFlag(1);
|
||||
wikiPageFile.setUpdateUserId(currentUser.getUserId());
|
||||
wikiPageFile.setUpdateUserName(currentUser.getUsername());
|
||||
wikiPageFile.setUpdateTime(new Date());
|
||||
wikiPageFileService.updateById(wikiPageFile);
|
||||
// 给相关人发送消息
|
||||
UserMessage userMessage = userMessageService.createUserMessage(currentUser, wikiPageSel.getId(), wikiPageSel.getName(), DocSysType.WIKI, UserMsgType.WIKI_PAGE_FILE_DEL);
|
||||
userMessage.setAffectUserId(wikiPageSel.getCreateUserId());
|
||||
userMessage.setAffectUserName(wikiPageSel.getCreateUserName());
|
||||
userMessageService.addWikiMessage(userMessage);
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
|
||||
@PostMapping("/wangEditor/upload")
|
||||
public Map<String, Object> wangEditorUpload(WikiPageFile wikiPageFile, @RequestParam("files") MultipartFile file) {
|
||||
Map<String, Object> resultMap = new HashMap<>();
|
||||
DocResponseJson docResponseJson = this.uploadFile(wikiPageFile, file);
|
||||
if (!docResponseJson.isOk()) {
|
||||
resultMap.put("errno", 1);
|
||||
resultMap.put("message", docResponseJson.getErrMsg());
|
||||
} else {
|
||||
resultMap.put("errno", 0);
|
||||
resultMap.put("data", new JSONObject().fluentPut("url", wikiPageFile.getFileUrl()));
|
||||
}
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
@PostMapping("/upload")
|
||||
public ResponseJson upload(WikiPageFile wikiPageFile, @RequestParam("files") MultipartFile file) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
Long pageId = wikiPageFile.getPageId();
|
||||
if (pageId == null || pageId <= 0) {
|
||||
return DocResponseJson.warn("未指定附件关联的文档");
|
||||
}
|
||||
WikiPage wikiPageSel = wikiPageService.getById(pageId);
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
|
||||
// 权限判断
|
||||
String canUploadFile = wikiPageAuthService.canUploadFile(wikiSpaceSel, wikiPageSel.getId(), currentUser.getUserId());
|
||||
if (canUploadFile != null) {
|
||||
return DocResponseJson.warn(canUploadFile);
|
||||
}
|
||||
DocResponseJson docResponseJson = this.uploadFile(wikiPageFile, file);
|
||||
if (!docResponseJson.isOk()) {
|
||||
return docResponseJson;
|
||||
}
|
||||
// 给相关人发送消息
|
||||
UserMessage userMessage = userMessageService.createUserMessage(currentUser, pageId, wikiPageSel.getName(), DocSysType.WIKI, UserMsgType.WIKI_PAGE_UPLOAD);
|
||||
userMessage.setAffectUserId(wikiPageSel.getCreateUserId());
|
||||
userMessage.setAffectUserName(wikiPageSel.getCreateUserName());
|
||||
userMessageService.addWikiMessage(userMessage);
|
||||
return DocResponseJson.ok(wikiPageFile);
|
||||
}
|
||||
|
||||
/**
|
||||
* 单纯的文件上传方法
|
||||
*
|
||||
* @param wikiPageFile
|
||||
* @param file
|
||||
* @return
|
||||
*/
|
||||
private DocResponseJson uploadFile(WikiPageFile wikiPageFile, MultipartFile file) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
String fileName = file.getOriginalFilename();
|
||||
String fileSuffix = "";
|
||||
if (fileName != null && fileName.lastIndexOf(".") >= 0) {
|
||||
fileSuffix = fileName.substring(fileName.lastIndexOf("."));
|
||||
}
|
||||
String path = uploadPath + "/" + DateTime.now().toString("yyyy/MM/dd") + "/";
|
||||
File newFile = new File(path);
|
||||
if (!newFile.exists() && !newFile.mkdirs()) {
|
||||
return DocResponseJson.warn("创建文件夹失败");
|
||||
}
|
||||
String simpleUUID = IdUtil.simpleUUID();
|
||||
path += simpleUUID + fileSuffix;
|
||||
newFile = new File(path);
|
||||
try {
|
||||
file.transferTo(newFile);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return DocResponseJson.warn("保存文件失败");
|
||||
}
|
||||
wikiPageFile.setFileSize(file.getSize());
|
||||
wikiPageFile.setUuid(simpleUUID);
|
||||
wikiPageFile.setFileUrl(path);
|
||||
wikiPageFile.setFileName(fileName);
|
||||
wikiPageFile.setCreateTime(new Date());
|
||||
wikiPageFile.setCreateUserId(currentUser.getUserId());
|
||||
wikiPageFile.setCreateUserName(currentUser.getUsername());
|
||||
wikiPageFile.setDelFlag(0);
|
||||
wikiPageFileService.save(wikiPageFile);
|
||||
wikiPageFile.setFileUrl("zyplayer-doc-wiki/common/file?uuid=" + wikiPageFile.getUuid());
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -8,17 +8,20 @@ import com.zyplayer.doc.core.json.DocResponseJson;
|
||||
import com.zyplayer.doc.core.json.ResponseJson;
|
||||
import com.zyplayer.doc.data.config.security.DocUserDetails;
|
||||
import com.zyplayer.doc.data.config.security.DocUserUtil;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.*;
|
||||
import com.zyplayer.doc.data.service.manage.*;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.WikiPage;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.WikiPageHistory;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.WikiSpace;
|
||||
import com.zyplayer.doc.data.service.manage.WikiPageHistoryService;
|
||||
import com.zyplayer.doc.data.service.manage.WikiPageService;
|
||||
import com.zyplayer.doc.data.service.manage.WikiSpaceService;
|
||||
import com.zyplayer.doc.wiki.framework.consts.SpaceType;
|
||||
import com.zyplayer.doc.wiki.service.git.GitService;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
@@ -28,62 +31,59 @@ import java.util.Objects;
|
||||
* @author 暮光:城中城
|
||||
* @since 2019年2月17日
|
||||
*/
|
||||
@Slf4j
|
||||
@AuthMan
|
||||
@RestController
|
||||
@RequestMapping("/zyplayer-doc-wiki/page/history")
|
||||
@RequiredArgsConstructor
|
||||
public class WikiPageHistoryController {
|
||||
private static Logger logger = LoggerFactory.getLogger(WikiPageHistoryController.class);
|
||||
|
||||
@Resource
|
||||
WikiPageHistoryService wikiPageHistoryService;
|
||||
@Resource
|
||||
WikiSpaceService wikiSpaceService;
|
||||
@Resource
|
||||
WikiPageService wikiPageService;
|
||||
@Resource
|
||||
GitService gitService;
|
||||
|
||||
@PostMapping("/list")
|
||||
public ResponseJson<List<WikiPageHistory>> list(Long pageId, Integer pageNum) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
WikiPage wikiPageSel = wikiPageService.getById(pageId);
|
||||
// 私人空间
|
||||
if (wikiPageSel == null || Objects.equals(wikiPageSel.getDelFlag(), 1)) {
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
|
||||
// 空间已删除
|
||||
if (wikiSpaceSel == null || Objects.equals(wikiSpaceSel.getDelFlag(), 1)) {
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
// 私人空间
|
||||
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
|
||||
return DocResponseJson.warn("您没有权限查看该空间的文章详情!");
|
||||
}
|
||||
UpdateWrapper<WikiPageHistory> wrapper = new UpdateWrapper<>();
|
||||
wrapper.eq("page_id", pageId);
|
||||
wrapper.eq("del_flag", 0);
|
||||
wrapper.orderByDesc("id");
|
||||
IPage<WikiPageHistory> page = new Page<>(pageNum, 30, false);
|
||||
wikiPageHistoryService.page(page, wrapper);
|
||||
return DocResponseJson.ok(page);
|
||||
}
|
||||
|
||||
@PostMapping("/detail")
|
||||
public ResponseJson<Object> detail(Long id) {
|
||||
WikiPageHistory wikiPageHistory = wikiPageHistoryService.getById(id);
|
||||
if (wikiPageHistory == null) {
|
||||
return DocResponseJson.warn("未找到相关记录");
|
||||
}
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
WikiPage wikiPageSel = wikiPageService.getById(wikiPageHistory.getPageId());
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
|
||||
// 私人空间
|
||||
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
|
||||
return DocResponseJson.warn("您没有权限查看该空间的文章详情!");
|
||||
}
|
||||
String pageHistory = gitService.getPageHistory(wikiPageHistory.getGitCommitId(), wikiPageHistory.getPageId());
|
||||
return DocResponseJson.ok(pageHistory);
|
||||
}
|
||||
|
||||
private final WikiPageHistoryService wikiPageHistoryService;
|
||||
private final WikiSpaceService wikiSpaceService;
|
||||
private final WikiPageService wikiPageService;
|
||||
private final GitService gitService;
|
||||
|
||||
@PostMapping("/list")
|
||||
public ResponseJson<List<WikiPageHistory>> list(Long pageId, Integer pageNum) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
WikiPage wikiPageSel = wikiPageService.getById(pageId);
|
||||
// 私人空间
|
||||
if (wikiPageSel == null || Objects.equals(wikiPageSel.getDelFlag(), 1)) {
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
|
||||
// 空间已删除
|
||||
if (wikiSpaceSel == null || Objects.equals(wikiSpaceSel.getDelFlag(), 1)) {
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
// 私人空间
|
||||
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
|
||||
return DocResponseJson.warn("您没有权限查看该空间的文章详情!");
|
||||
}
|
||||
UpdateWrapper<WikiPageHistory> wrapper = new UpdateWrapper<>();
|
||||
wrapper.eq("page_id", pageId);
|
||||
wrapper.eq("del_flag", 0);
|
||||
wrapper.orderByDesc("id");
|
||||
IPage<WikiPageHistory> page = new Page<>(pageNum, 30, false);
|
||||
wikiPageHistoryService.page(page, wrapper);
|
||||
return DocResponseJson.ok(page);
|
||||
}
|
||||
|
||||
@PostMapping("/detail")
|
||||
public ResponseJson<Object> detail(Long id) {
|
||||
WikiPageHistory wikiPageHistory = wikiPageHistoryService.getById(id);
|
||||
if (wikiPageHistory == null) {
|
||||
return DocResponseJson.warn("未找到相关记录");
|
||||
}
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
WikiPage wikiPageSel = wikiPageService.getById(wikiPageHistory.getPageId());
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
|
||||
// 私人空间
|
||||
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
|
||||
return DocResponseJson.warn("您没有权限查看该空间的文章详情!");
|
||||
}
|
||||
String pageHistory = gitService.getPageHistory(wikiPageHistory.getGitCommitId(), wikiPageHistory.getPageId());
|
||||
return DocResponseJson.ok(pageHistory);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,13 +17,12 @@ import com.zyplayer.doc.data.service.manage.WikiPageService;
|
||||
import com.zyplayer.doc.data.service.manage.WikiPageZanService;
|
||||
import com.zyplayer.doc.data.service.manage.WikiSpaceService;
|
||||
import com.zyplayer.doc.wiki.framework.consts.SpaceType;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
@@ -33,67 +32,64 @@ import java.util.Objects;
|
||||
* @author 暮光:城中城
|
||||
* @since 2019年2月17日
|
||||
*/
|
||||
@Slf4j
|
||||
@AuthMan
|
||||
@RestController
|
||||
@RequestMapping("/zyplayer-doc-wiki/page/zan")
|
||||
@RequiredArgsConstructor
|
||||
public class WikiPageZanController {
|
||||
private static Logger logger = LoggerFactory.getLogger(WikiPageZanController.class);
|
||||
|
||||
@Resource
|
||||
WikiPageZanService wikiPageZanService;
|
||||
@Resource
|
||||
WikiSpaceService wikiSpaceService;
|
||||
@Resource
|
||||
WikiPageService wikiPageService;
|
||||
@Resource
|
||||
UserMessageService userMessageService;
|
||||
|
||||
@PostMapping("/list")
|
||||
public ResponseJson<List<WikiPageZan>> list(WikiPageZan wikiPageZan) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
WikiPage wikiPageSel = wikiPageService.getById(wikiPageZan.getPageId());
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
|
||||
// 私人空间
|
||||
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
|
||||
return DocResponseJson.warn("您没有获取该空间的点赞列表权限!");
|
||||
}
|
||||
UpdateWrapper<WikiPageZan> wrapper = new UpdateWrapper<>();
|
||||
wrapper.eq("page_id", wikiPageZan.getPageId());
|
||||
wrapper.eq(wikiPageZan.getCommentId() != null, "comment_id", wikiPageZan.getCommentId());
|
||||
wrapper.eq("yn", 1);
|
||||
List<WikiPageZan> zanList = wikiPageZanService.list(wrapper);
|
||||
return DocResponseJson.ok(zanList);
|
||||
}
|
||||
|
||||
@PostMapping("/update")
|
||||
public ResponseJson<Object> update(WikiPageZan wikiPageZan) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
Long id = wikiPageZan.getId();
|
||||
Long pageId;
|
||||
if (id != null && id > 0) {
|
||||
WikiPageZan wikiPageZanSel = wikiPageZanService.getById(id);
|
||||
pageId = wikiPageZanSel.getPageId();
|
||||
} else if (wikiPageZan.getPageId() != null) {
|
||||
pageId = wikiPageZan.getPageId();
|
||||
} else {
|
||||
return DocResponseJson.warn("需指定所属页面!");
|
||||
}
|
||||
WikiPage wikiPageSel = wikiPageService.getById(pageId);
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
|
||||
// 私人空间
|
||||
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
|
||||
return DocResponseJson.warn("您没有该空间的点赞权限!");
|
||||
}
|
||||
wikiPageZanService.zanPage(wikiPageZan);
|
||||
// 给相关人发送消息
|
||||
UserMessage userMessage = userMessageService.createUserMessage(currentUser, wikiPageSel.getId(), wikiPageSel.getName(), DocSysType.WIKI, UserMsgType.WIKI_PAGE_ZAN);
|
||||
if (!Objects.equals(wikiPageZan.getYn(), 1)) {
|
||||
userMessage.setMsgType(UserMsgType.WIKI_PAGE_ZAN_CANCEL.getType());
|
||||
}
|
||||
userMessage.setAffectUserId(wikiPageSel.getCreateUserId());
|
||||
userMessage.setAffectUserName(wikiPageSel.getCreateUserName());
|
||||
userMessageService.addWikiMessage(userMessage);
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
|
||||
private final WikiPageZanService wikiPageZanService;
|
||||
private final WikiSpaceService wikiSpaceService;
|
||||
private final WikiPageService wikiPageService;
|
||||
private final UserMessageService userMessageService;
|
||||
|
||||
@PostMapping("/list")
|
||||
public ResponseJson<List<WikiPageZan>> list(WikiPageZan wikiPageZan) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
WikiPage wikiPageSel = wikiPageService.getById(wikiPageZan.getPageId());
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
|
||||
// 私人空间
|
||||
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
|
||||
return DocResponseJson.warn("您没有获取该空间的点赞列表权限!");
|
||||
}
|
||||
UpdateWrapper<WikiPageZan> wrapper = new UpdateWrapper<>();
|
||||
wrapper.eq("page_id", wikiPageZan.getPageId());
|
||||
wrapper.eq(wikiPageZan.getCommentId() != null, "comment_id", wikiPageZan.getCommentId());
|
||||
wrapper.eq("yn", 1);
|
||||
List<WikiPageZan> zanList = wikiPageZanService.list(wrapper);
|
||||
return DocResponseJson.ok(zanList);
|
||||
}
|
||||
|
||||
@PostMapping("/update")
|
||||
public ResponseJson<Object> update(WikiPageZan wikiPageZan) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
Long id = wikiPageZan.getId();
|
||||
Long pageId;
|
||||
if (id != null && id > 0) {
|
||||
WikiPageZan wikiPageZanSel = wikiPageZanService.getById(id);
|
||||
pageId = wikiPageZanSel.getPageId();
|
||||
} else if (wikiPageZan.getPageId() != null) {
|
||||
pageId = wikiPageZan.getPageId();
|
||||
} else {
|
||||
return DocResponseJson.warn("需指定所属页面!");
|
||||
}
|
||||
WikiPage wikiPageSel = wikiPageService.getById(pageId);
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
|
||||
// 私人空间
|
||||
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
|
||||
return DocResponseJson.warn("您没有该空间的点赞权限!");
|
||||
}
|
||||
wikiPageZanService.zanPage(wikiPageZan);
|
||||
// 给相关人发送消息
|
||||
UserMessage userMessage = userMessageService.createUserMessage(currentUser, wikiPageSel.getId(), wikiPageSel.getName(), DocSysType.WIKI, UserMsgType.WIKI_PAGE_ZAN);
|
||||
if (!Objects.equals(wikiPageZan.getYn(), 1)) {
|
||||
userMessage.setMsgType(UserMsgType.WIKI_PAGE_ZAN_CANCEL.getType());
|
||||
}
|
||||
userMessage.setAffectUserId(wikiPageSel.getCreateUserId());
|
||||
userMessage.setAffectUserName(wikiPageSel.getCreateUserName());
|
||||
userMessageService.addWikiMessage(userMessage);
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -22,15 +22,19 @@ import com.zyplayer.doc.data.service.manage.WikiSpaceService;
|
||||
import com.zyplayer.doc.wiki.controller.vo.UserSpaceAuthVo;
|
||||
import com.zyplayer.doc.wiki.controller.vo.WikiSpaceVo;
|
||||
import com.zyplayer.doc.wiki.framework.consts.WikiAuthType;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.*;
|
||||
import java.util.Date;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@@ -39,215 +43,212 @@ import java.util.stream.Collectors;
|
||||
* @author 暮光:城中城
|
||||
* @since 2019年2月17日
|
||||
*/
|
||||
@Slf4j
|
||||
@AuthMan
|
||||
@RestController
|
||||
@RequestMapping("/zyplayer-doc-wiki/space")
|
||||
@RequiredArgsConstructor
|
||||
public class WikiSpaceController {
|
||||
private static Logger logger = LoggerFactory.getLogger(WikiSpaceController.class);
|
||||
|
||||
@Resource
|
||||
WikiSpaceService wikiSpaceService;
|
||||
@Resource
|
||||
UserGroupAuthService userGroupAuthService;
|
||||
@Resource
|
||||
WikiSpaceFavoriteService wikiSpaceFavoriteService;
|
||||
@Resource
|
||||
UserSettingService userSettingService;
|
||||
|
||||
@PostMapping("/list")
|
||||
public ResponseJson<List<WikiSpaceVo>> list(WikiSpace wikiSpace, Integer ignoreFavorite) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
UpdateWrapper<WikiSpace> wrapper = new UpdateWrapper<>();
|
||||
wrapper.eq("del_flag", 0);
|
||||
wrapper.eq(wikiSpace.getId() != null, "id", wikiSpace.getId());
|
||||
wrapper.and(con -> con.and(conSub -> conSub.eq("type", 3).eq("create_user_id", currentUser.getUserId())).or().in("type", 1, 2));
|
||||
List<WikiSpace> spaceList = wikiSpaceService.list(wrapper);
|
||||
List<WikiSpaceVo> spaceVoList = spaceList.stream().map(WikiSpaceVo::new).collect(Collectors.toList());
|
||||
// 收藏
|
||||
QueryWrapper<WikiSpaceFavorite> favoriteWrapper = new QueryWrapper<>();
|
||||
favoriteWrapper.eq("user_id", currentUser.getUserId());
|
||||
favoriteWrapper.eq("del_flag", 0);
|
||||
List<WikiSpaceFavorite> favoriteList = wikiSpaceFavoriteService.list(favoriteWrapper);
|
||||
Set<Long> spaceFavoriteMap = favoriteList.stream().map(WikiSpaceFavorite::getSpaceId).collect(Collectors.toSet());
|
||||
for (WikiSpaceVo spaceVo : spaceVoList) {
|
||||
spaceVo.setFavorite(spaceFavoriteMap.contains(spaceVo.getId()) ? 1 : 0);
|
||||
}
|
||||
// 设置
|
||||
if (!Objects.equals(ignoreFavorite, 1)) {
|
||||
QueryWrapper<UserSetting> settingWrapper = new QueryWrapper<>();
|
||||
settingWrapper.eq("user_id", currentUser.getUserId());
|
||||
settingWrapper.eq("name", UserSettingConst.WIKI_ONLY_SHOW_FAVORITE);
|
||||
settingWrapper.eq("del_flag", 0);
|
||||
UserSetting userSetting = userSettingService.getOne(settingWrapper);
|
||||
if (userSetting != null && Objects.equals(userSetting.getValue(), "1")) {
|
||||
List<WikiSpaceVo> onlySpaceVoList = spaceVoList.stream().filter(item -> Objects.equals(item.getFavorite(), 1)).collect(Collectors.toList());
|
||||
return DocResponseJson.ok(onlySpaceVoList);
|
||||
}
|
||||
}
|
||||
return DocResponseJson.ok(spaceVoList);
|
||||
}
|
||||
|
||||
@PostMapping("/update")
|
||||
public ResponseJson<WikiSpace> update(WikiSpace wikiSpace) {
|
||||
Long id = wikiSpace.getId();
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
if (id != null && id > 0) {
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(id);
|
||||
// 不是创建人不能修改空间
|
||||
if (!Objects.equals(currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
|
||||
return DocResponseJson.warn("您没有该空间的编辑权!");
|
||||
}
|
||||
wikiSpace.setUuid(null);
|
||||
wikiSpace.setEditType(null);
|
||||
wikiSpaceService.updateById(wikiSpace);
|
||||
} else {
|
||||
wikiSpace.setUuid(IdUtil.simpleUUID());
|
||||
wikiSpace.setCreateTime(new Date());
|
||||
wikiSpace.setCreateUserId(currentUser.getUserId());
|
||||
wikiSpace.setCreateUserName(currentUser.getUsername());
|
||||
wikiSpaceService.save(wikiSpace);
|
||||
}
|
||||
return DocResponseJson.ok(wikiSpace);
|
||||
}
|
||||
|
||||
@PostMapping("/setting/update")
|
||||
public ResponseJson<WikiSpace> settingUpdate(String name, String value) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
QueryWrapper<UserSetting> wrapper = new QueryWrapper<>();
|
||||
wrapper.eq("user_id", currentUser.getUserId());
|
||||
wrapper.eq("name", name);
|
||||
UserSetting userSettingSel = userSettingService.getOne(wrapper);
|
||||
UserSetting userSettingUp = new UserSetting();
|
||||
if (userSettingSel != null) {
|
||||
userSettingUp.setId(userSettingSel.getId());
|
||||
} else {
|
||||
userSettingUp.setCreateTime(new Date());
|
||||
}
|
||||
userSettingUp.setName(name);
|
||||
userSettingUp.setValue(value);
|
||||
userSettingUp.setDelFlag(0);
|
||||
userSettingUp.setUserId(currentUser.getUserId());
|
||||
userSettingService.saveOrUpdate(userSettingUp);
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
|
||||
@PostMapping("/setting/list")
|
||||
public ResponseJson<WikiSpace> settingList() {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
QueryWrapper<UserSetting> wrapper = new QueryWrapper<>();
|
||||
wrapper.eq("user_id", currentUser.getUserId());
|
||||
wrapper.eq("name", UserSettingConst.WIKI_ONLY_SHOW_FAVORITE);
|
||||
wrapper.eq("del_flag", 0);
|
||||
List<UserSetting> settingList = userSettingService.list(wrapper);
|
||||
if (CollectionUtils.isEmpty(settingList)) {
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
Map<String, String> userSettingMap = settingList.stream().collect(Collectors.toMap(UserSetting::getName, UserSetting::getValue));
|
||||
return DocResponseJson.ok(userSettingMap);
|
||||
}
|
||||
|
||||
@PostMapping("/favorite/update")
|
||||
public ResponseJson<Object> groupAuth(Long spaceId, Integer delFlag) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
QueryWrapper<WikiSpaceFavorite> wrapper = new QueryWrapper<>();
|
||||
wrapper.eq("space_id", spaceId);
|
||||
wrapper.eq("user_id", currentUser.getUserId());
|
||||
WikiSpaceFavorite favoriteSel = wikiSpaceFavoriteService.getOne(wrapper);
|
||||
WikiSpaceFavorite favoriteUp = new WikiSpaceFavorite();
|
||||
if (favoriteSel != null) {
|
||||
favoriteUp.setId(favoriteSel.getId());
|
||||
} else {
|
||||
favoriteUp.setCreateTime(new Date());
|
||||
}
|
||||
favoriteUp.setDelFlag(delFlag);
|
||||
favoriteUp.setUserId(currentUser.getUserId());
|
||||
favoriteUp.setSpaceId(spaceId);
|
||||
wikiSpaceFavoriteService.saveOrUpdate(favoriteUp);
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
|
||||
@PostMapping("/auth/assign")
|
||||
public ResponseJson<Object> authAssign(Long spaceId, String authList) {
|
||||
// 判断是否具有授权的权限
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(spaceId);
|
||||
// 只有空间创建人可以管理该空间对用户组的授权
|
||||
if (!Objects.equals(currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
|
||||
return DocResponseJson.warn("您没有权限管理该空间的权限");
|
||||
}
|
||||
// 先删除页面的所有用户的权限
|
||||
QueryWrapper<UserGroupAuth> updateWrapper = new QueryWrapper<>();
|
||||
updateWrapper.eq("data_id", spaceId);
|
||||
updateWrapper.eq("project_type", DocSysType.WIKI.getType());
|
||||
userGroupAuthService.remove(updateWrapper);
|
||||
// 在创建权限
|
||||
List<UserSpaceAuthVo> authVoList = JSON.parseArray(authList, UserSpaceAuthVo.class);
|
||||
for (UserSpaceAuthVo authVo : authVoList) {
|
||||
List<UserGroupAuth> userAuthList = new LinkedList<>();
|
||||
this.createUserAuth(userAuthList, authVo.getEditPage(), spaceId, WikiAuthType.EDIT_PAGE, authVo.getGroupId());
|
||||
this.createUserAuth(userAuthList, authVo.getDeletePage(), spaceId, WikiAuthType.DELETE_PAGE, authVo.getGroupId());
|
||||
this.createUserAuth(userAuthList, authVo.getPageFileUpload(), spaceId, WikiAuthType.PAGE_FILE_UPLOAD, authVo.getGroupId());
|
||||
this.createUserAuth(userAuthList, authVo.getPageFileDelete(), spaceId, WikiAuthType.PAGE_FILE_DELETE, authVo.getGroupId());
|
||||
this.createUserAuth(userAuthList, authVo.getPageAuthManage(), spaceId, WikiAuthType.PAGE_AUTH_MANAGE, authVo.getGroupId());
|
||||
if (userAuthList.size() > 0) {
|
||||
userGroupAuthService.saveBatch(userAuthList);
|
||||
}
|
||||
}
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
|
||||
@PostMapping("/auth/list")
|
||||
public ResponseJson<Object> authList(Long spaceId) {
|
||||
// 判断是否具有授权的权限
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(spaceId);
|
||||
// 只有空间创建人可以管理该空间对用户组的授权
|
||||
if (!Objects.equals(currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
|
||||
return DocResponseJson.warn("您没有权限管理该空间的权限");
|
||||
}
|
||||
QueryWrapper<UserGroupAuth> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("data_id", spaceId);
|
||||
queryWrapper.eq("project_type", DocSysType.WIKI.getType());
|
||||
List<UserGroupAuth> authList = userGroupAuthService.list(queryWrapper);
|
||||
if (CollectionUtils.isEmpty(authList)) {
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
// 查询用户信息
|
||||
Map<Long, List<UserGroupAuth>> userAuthGroup = authList.stream().collect(Collectors.groupingBy(UserGroupAuth::getGroupId));
|
||||
List<UserSpaceAuthVo> authVoList = new LinkedList<>();
|
||||
// 组装结果集
|
||||
userAuthGroup.forEach((key, value) -> {
|
||||
Set<Integer> authNameSet = value.stream().map(UserGroupAuth::getAuthType).collect(Collectors.toSet());
|
||||
UserSpaceAuthVo authVo = new UserSpaceAuthVo();
|
||||
authVo.setEditPage(this.haveAuth(authNameSet, WikiAuthType.EDIT_PAGE));
|
||||
authVo.setDeletePage(this.haveAuth(authNameSet, WikiAuthType.DELETE_PAGE));
|
||||
authVo.setPageFileUpload(this.haveAuth(authNameSet, WikiAuthType.PAGE_FILE_UPLOAD));
|
||||
authVo.setPageFileDelete(this.haveAuth(authNameSet, WikiAuthType.PAGE_FILE_DELETE));
|
||||
authVo.setPageAuthManage(this.haveAuth(authNameSet, WikiAuthType.PAGE_AUTH_MANAGE));
|
||||
authVo.setGroupId(key);
|
||||
authVoList.add(authVo);
|
||||
});
|
||||
return DocResponseJson.ok(authVoList);
|
||||
}
|
||||
|
||||
private Integer haveAuth(Set<Integer> authNameSet, WikiAuthType wikiAuthType) {
|
||||
return authNameSet.contains(wikiAuthType.getType()) ? 1 : 0;
|
||||
}
|
||||
|
||||
private void createUserAuth(List<UserGroupAuth> userAuthList, Integer authValue, Long spaceId, WikiAuthType authType, Long groupId) {
|
||||
if (Objects.equals(authValue, 1)) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
UserGroupAuth userAuth = new UserGroupAuth();
|
||||
userAuth.setDataId(spaceId);
|
||||
userAuth.setAuthType(authType.getType());
|
||||
userAuth.setGroupId(groupId);
|
||||
userAuth.setCreateTime(new Date());
|
||||
userAuth.setCreateUserId(currentUser.getUserId());
|
||||
userAuth.setCreateUserName(currentUser.getUsername());
|
||||
userAuth.setProjectType(DocSysType.WIKI.getType());
|
||||
userAuth.setDelFlag(0);
|
||||
userAuthList.add(userAuth);
|
||||
}
|
||||
}
|
||||
|
||||
private final WikiSpaceService wikiSpaceService;
|
||||
private final UserGroupAuthService userGroupAuthService;
|
||||
private final WikiSpaceFavoriteService wikiSpaceFavoriteService;
|
||||
private final UserSettingService userSettingService;
|
||||
|
||||
@PostMapping("/list")
|
||||
public ResponseJson<List<WikiSpaceVo>> list(WikiSpace wikiSpace, Integer ignoreFavorite) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
UpdateWrapper<WikiSpace> wrapper = new UpdateWrapper<>();
|
||||
wrapper.eq("del_flag", 0);
|
||||
wrapper.eq(wikiSpace.getId() != null, "id", wikiSpace.getId());
|
||||
wrapper.and(con -> con.and(conSub -> conSub.eq("type", 3).eq("create_user_id", currentUser.getUserId())).or().in("type", 1, 2));
|
||||
List<WikiSpace> spaceList = wikiSpaceService.list(wrapper);
|
||||
List<WikiSpaceVo> spaceVoList = spaceList.stream().map(WikiSpaceVo::new).collect(Collectors.toList());
|
||||
// 收藏
|
||||
QueryWrapper<WikiSpaceFavorite> favoriteWrapper = new QueryWrapper<>();
|
||||
favoriteWrapper.eq("user_id", currentUser.getUserId());
|
||||
favoriteWrapper.eq("del_flag", 0);
|
||||
List<WikiSpaceFavorite> favoriteList = wikiSpaceFavoriteService.list(favoriteWrapper);
|
||||
Set<Long> spaceFavoriteMap = favoriteList.stream().map(WikiSpaceFavorite::getSpaceId).collect(Collectors.toSet());
|
||||
for (WikiSpaceVo spaceVo : spaceVoList) {
|
||||
spaceVo.setFavorite(spaceFavoriteMap.contains(spaceVo.getId()) ? 1 : 0);
|
||||
}
|
||||
// 设置
|
||||
if (!Objects.equals(ignoreFavorite, 1)) {
|
||||
QueryWrapper<UserSetting> settingWrapper = new QueryWrapper<>();
|
||||
settingWrapper.eq("user_id", currentUser.getUserId());
|
||||
settingWrapper.eq("name", UserSettingConst.WIKI_ONLY_SHOW_FAVORITE);
|
||||
settingWrapper.eq("del_flag", 0);
|
||||
UserSetting userSetting = userSettingService.getOne(settingWrapper);
|
||||
if (userSetting != null && Objects.equals(userSetting.getValue(), "1")) {
|
||||
List<WikiSpaceVo> onlySpaceVoList = spaceVoList.stream().filter(item -> Objects.equals(item.getFavorite(), 1)).collect(Collectors.toList());
|
||||
return DocResponseJson.ok(onlySpaceVoList);
|
||||
}
|
||||
}
|
||||
return DocResponseJson.ok(spaceVoList);
|
||||
}
|
||||
|
||||
@PostMapping("/update")
|
||||
public ResponseJson<WikiSpace> update(WikiSpace wikiSpace) {
|
||||
Long id = wikiSpace.getId();
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
if (id != null && id > 0) {
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(id);
|
||||
// 不是创建人不能修改空间
|
||||
if (!Objects.equals(currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
|
||||
return DocResponseJson.warn("您没有该空间的编辑权!");
|
||||
}
|
||||
wikiSpace.setUuid(null);
|
||||
wikiSpace.setEditType(null);
|
||||
wikiSpaceService.updateById(wikiSpace);
|
||||
} else {
|
||||
wikiSpace.setUuid(IdUtil.simpleUUID());
|
||||
wikiSpace.setCreateTime(new Date());
|
||||
wikiSpace.setCreateUserId(currentUser.getUserId());
|
||||
wikiSpace.setCreateUserName(currentUser.getUsername());
|
||||
wikiSpaceService.save(wikiSpace);
|
||||
}
|
||||
return DocResponseJson.ok(wikiSpace);
|
||||
}
|
||||
|
||||
@PostMapping("/setting/update")
|
||||
public ResponseJson<WikiSpace> settingUpdate(String name, String value) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
QueryWrapper<UserSetting> wrapper = new QueryWrapper<>();
|
||||
wrapper.eq("user_id", currentUser.getUserId());
|
||||
wrapper.eq("name", name);
|
||||
UserSetting userSettingSel = userSettingService.getOne(wrapper);
|
||||
UserSetting userSettingUp = new UserSetting();
|
||||
if (userSettingSel != null) {
|
||||
userSettingUp.setId(userSettingSel.getId());
|
||||
} else {
|
||||
userSettingUp.setCreateTime(new Date());
|
||||
}
|
||||
userSettingUp.setName(name);
|
||||
userSettingUp.setValue(value);
|
||||
userSettingUp.setDelFlag(0);
|
||||
userSettingUp.setUserId(currentUser.getUserId());
|
||||
userSettingService.saveOrUpdate(userSettingUp);
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
|
||||
@PostMapping("/setting/list")
|
||||
public ResponseJson<WikiSpace> settingList() {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
QueryWrapper<UserSetting> wrapper = new QueryWrapper<>();
|
||||
wrapper.eq("user_id", currentUser.getUserId());
|
||||
wrapper.eq("name", UserSettingConst.WIKI_ONLY_SHOW_FAVORITE);
|
||||
wrapper.eq("del_flag", 0);
|
||||
List<UserSetting> settingList = userSettingService.list(wrapper);
|
||||
if (CollectionUtils.isEmpty(settingList)) {
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
Map<String, String> userSettingMap = settingList.stream().collect(Collectors.toMap(UserSetting::getName, UserSetting::getValue));
|
||||
return DocResponseJson.ok(userSettingMap);
|
||||
}
|
||||
|
||||
@PostMapping("/favorite/update")
|
||||
public ResponseJson<Object> groupAuth(Long spaceId, Integer delFlag) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
QueryWrapper<WikiSpaceFavorite> wrapper = new QueryWrapper<>();
|
||||
wrapper.eq("space_id", spaceId);
|
||||
wrapper.eq("user_id", currentUser.getUserId());
|
||||
WikiSpaceFavorite favoriteSel = wikiSpaceFavoriteService.getOne(wrapper);
|
||||
WikiSpaceFavorite favoriteUp = new WikiSpaceFavorite();
|
||||
if (favoriteSel != null) {
|
||||
favoriteUp.setId(favoriteSel.getId());
|
||||
} else {
|
||||
favoriteUp.setCreateTime(new Date());
|
||||
}
|
||||
favoriteUp.setDelFlag(delFlag);
|
||||
favoriteUp.setUserId(currentUser.getUserId());
|
||||
favoriteUp.setSpaceId(spaceId);
|
||||
wikiSpaceFavoriteService.saveOrUpdate(favoriteUp);
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
|
||||
@PostMapping("/auth/assign")
|
||||
public ResponseJson<Object> authAssign(Long spaceId, String authList) {
|
||||
// 判断是否具有授权的权限
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(spaceId);
|
||||
// 只有空间创建人可以管理该空间对用户组的授权
|
||||
if (!Objects.equals(currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
|
||||
return DocResponseJson.warn("您没有权限管理该空间的权限");
|
||||
}
|
||||
// 先删除页面的所有用户的权限
|
||||
QueryWrapper<UserGroupAuth> updateWrapper = new QueryWrapper<>();
|
||||
updateWrapper.eq("data_id", spaceId);
|
||||
updateWrapper.eq("project_type", DocSysType.WIKI.getType());
|
||||
userGroupAuthService.remove(updateWrapper);
|
||||
// 在创建权限
|
||||
List<UserSpaceAuthVo> authVoList = JSON.parseArray(authList, UserSpaceAuthVo.class);
|
||||
for (UserSpaceAuthVo authVo : authVoList) {
|
||||
List<UserGroupAuth> userAuthList = new LinkedList<>();
|
||||
this.createUserAuth(userAuthList, authVo.getEditPage(), spaceId, WikiAuthType.EDIT_PAGE, authVo.getGroupId());
|
||||
this.createUserAuth(userAuthList, authVo.getDeletePage(), spaceId, WikiAuthType.DELETE_PAGE, authVo.getGroupId());
|
||||
this.createUserAuth(userAuthList, authVo.getPageFileUpload(), spaceId, WikiAuthType.PAGE_FILE_UPLOAD, authVo.getGroupId());
|
||||
this.createUserAuth(userAuthList, authVo.getPageFileDelete(), spaceId, WikiAuthType.PAGE_FILE_DELETE, authVo.getGroupId());
|
||||
this.createUserAuth(userAuthList, authVo.getPageAuthManage(), spaceId, WikiAuthType.PAGE_AUTH_MANAGE, authVo.getGroupId());
|
||||
if (userAuthList.size() > 0) {
|
||||
userGroupAuthService.saveBatch(userAuthList);
|
||||
}
|
||||
}
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
|
||||
@PostMapping("/auth/list")
|
||||
public ResponseJson<Object> authList(Long spaceId) {
|
||||
// 判断是否具有授权的权限
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(spaceId);
|
||||
// 只有空间创建人可以管理该空间对用户组的授权
|
||||
if (!Objects.equals(currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
|
||||
return DocResponseJson.warn("您没有权限管理该空间的权限");
|
||||
}
|
||||
QueryWrapper<UserGroupAuth> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("data_id", spaceId);
|
||||
queryWrapper.eq("project_type", DocSysType.WIKI.getType());
|
||||
List<UserGroupAuth> authList = userGroupAuthService.list(queryWrapper);
|
||||
if (CollectionUtils.isEmpty(authList)) {
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
// 查询用户信息
|
||||
Map<Long, List<UserGroupAuth>> userAuthGroup = authList.stream().collect(Collectors.groupingBy(UserGroupAuth::getGroupId));
|
||||
List<UserSpaceAuthVo> authVoList = new LinkedList<>();
|
||||
// 组装结果集
|
||||
userAuthGroup.forEach((key, value) -> {
|
||||
Set<Integer> authNameSet = value.stream().map(UserGroupAuth::getAuthType).collect(Collectors.toSet());
|
||||
UserSpaceAuthVo authVo = new UserSpaceAuthVo();
|
||||
authVo.setEditPage(this.haveAuth(authNameSet, WikiAuthType.EDIT_PAGE));
|
||||
authVo.setDeletePage(this.haveAuth(authNameSet, WikiAuthType.DELETE_PAGE));
|
||||
authVo.setPageFileUpload(this.haveAuth(authNameSet, WikiAuthType.PAGE_FILE_UPLOAD));
|
||||
authVo.setPageFileDelete(this.haveAuth(authNameSet, WikiAuthType.PAGE_FILE_DELETE));
|
||||
authVo.setPageAuthManage(this.haveAuth(authNameSet, WikiAuthType.PAGE_AUTH_MANAGE));
|
||||
authVo.setGroupId(key);
|
||||
authVoList.add(authVo);
|
||||
});
|
||||
return DocResponseJson.ok(authVoList);
|
||||
}
|
||||
|
||||
private Integer haveAuth(Set<Integer> authNameSet, WikiAuthType wikiAuthType) {
|
||||
return authNameSet.contains(wikiAuthType.getType()) ? 1 : 0;
|
||||
}
|
||||
|
||||
private void createUserAuth(List<UserGroupAuth> userAuthList, Integer authValue, Long spaceId, WikiAuthType authType, Long groupId) {
|
||||
if (Objects.equals(authValue, 1)) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
UserGroupAuth userAuth = new UserGroupAuth();
|
||||
userAuth.setDataId(spaceId);
|
||||
userAuth.setAuthType(authType.getType());
|
||||
userAuth.setGroupId(groupId);
|
||||
userAuth.setCreateTime(new Date());
|
||||
userAuth.setCreateUserId(currentUser.getUserId());
|
||||
userAuth.setCreateUserName(currentUser.getUsername());
|
||||
userAuth.setProjectType(DocSysType.WIKI.getType());
|
||||
userAuth.setDelFlag(0);
|
||||
userAuthList.add(userAuth);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.zyplayer.doc.wiki.controller.vo;
|
||||
|
||||
import lombok.*;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 用户页面权限信息
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.zyplayer.doc.wiki.controller.vo;
|
||||
|
||||
import lombok.*;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 用户空间权限信息
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.zyplayer.doc.wiki.controller.vo;
|
||||
|
||||
import com.zyplayer.doc.data.repository.manage.entity.WikiPageComment;
|
||||
import lombok.*;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ package com.zyplayer.doc.wiki.controller.vo;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.WikiPage;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.WikiPageContent;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.WikiPageFile;
|
||||
import lombok.*;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.zyplayer.doc.wiki.controller.vo;
|
||||
|
||||
import com.zyplayer.doc.data.repository.manage.entity.WikiPage;
|
||||
import lombok.*;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.zyplayer.doc.wiki.controller.vo;
|
||||
|
||||
import com.zyplayer.doc.data.repository.manage.entity.WikiSpace;
|
||||
import lombok.*;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
|
||||
@@ -3,7 +3,11 @@ package com.zyplayer.doc.wiki.framework.config;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import java.lang.annotation.*;
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* 开启wiki模块注解
|
||||
|
||||
@@ -7,9 +7,9 @@ import com.zyplayer.doc.data.repository.support.consts.DocSysModuleType;
|
||||
import com.zyplayer.doc.data.repository.support.consts.DocSysType;
|
||||
import com.zyplayer.doc.wiki.framework.consts.SpaceType;
|
||||
import com.zyplayer.doc.wiki.framework.consts.WikiAuthType;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
@@ -19,148 +19,148 @@ import java.util.Objects;
|
||||
* @since 2020-06-16
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class WikiPageAuthService {
|
||||
|
||||
@Resource
|
||||
UserGroupAuthMapper userGroupAuthMapper;
|
||||
|
||||
/**
|
||||
* 是否具有编辑权限
|
||||
*
|
||||
* @param wikiSpaceSel
|
||||
* @param editType
|
||||
* @param pageId
|
||||
* @param currentUserId
|
||||
* @return
|
||||
*/
|
||||
public String canEdit(WikiSpace wikiSpaceSel, Integer editType, Long pageId, Long currentUserId) {
|
||||
if (wikiSpaceSel == null || Objects.equals(editType, 1)) {
|
||||
return "当前页面不允许编辑!";
|
||||
}
|
||||
// 私人空间不允许调用接口获取文章
|
||||
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUserId, wikiSpaceSel.getCreateUserId())) {
|
||||
return "您没有权限修改该空间的文章!";
|
||||
}
|
||||
// 空间不是自己的,也没有权限
|
||||
if (SpaceType.isOthersPersonal(wikiSpaceSel.getType(), currentUserId, wikiSpaceSel.getCreateUserId())) {
|
||||
boolean pageAuth = DocUserUtil.haveCustomAuth(WikiAuthType.EDIT_PAGE.getCode(), DocSysType.WIKI.getType(), DocSysModuleType.Wiki.PAGE.getType(), pageId);
|
||||
if (!pageAuth) {
|
||||
// 在空间上直接授权了分组的权限,在这个分组里就具有权限
|
||||
Long authId = userGroupAuthMapper.haveAuth(wikiSpaceSel.getId(), DocSysType.WIKI.getType(), WikiAuthType.EDIT_PAGE.getType(), currentUserId);
|
||||
if (authId == null) {
|
||||
return "您没有修改该文章的权限!";
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否具有权限编辑权限
|
||||
*
|
||||
* @param wikiSpaceSel
|
||||
* @param pageId
|
||||
* @param currentUserId
|
||||
* @return
|
||||
*/
|
||||
public String canConfigAuth(WikiSpace wikiSpaceSel, Long pageId, Long currentUserId) {
|
||||
if (!SpaceType.isPersonal(wikiSpaceSel.getType())) {
|
||||
return "只有个人空间才可以编辑权限";
|
||||
}
|
||||
if (!Objects.equals(currentUserId, wikiSpaceSel.getCreateUserId())) {
|
||||
if (!DocUserUtil.haveCustomAuth(WikiAuthType.PAGE_AUTH_MANAGE.getCode(), DocSysType.WIKI.getType(), DocSysModuleType.Wiki.PAGE.getType(), pageId)) {
|
||||
// 在空间上直接授权了分组的权限,在这个分组里就具有权限
|
||||
Long authId = userGroupAuthMapper.haveAuth(wikiSpaceSel.getId(), DocSysType.WIKI.getType(), WikiAuthType.PAGE_AUTH_MANAGE.getType(), currentUserId);
|
||||
if (authId == null) {
|
||||
return "您不是创建人或没有权限";
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否具有附件上传权限
|
||||
*
|
||||
* @param wikiSpaceSel
|
||||
* @param pageId
|
||||
* @param currentUserId
|
||||
* @return
|
||||
*/
|
||||
public String canUploadFile(WikiSpace wikiSpaceSel, Long pageId, Long currentUserId) {
|
||||
// 私人空间
|
||||
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUserId, wikiSpaceSel.getCreateUserId())) {
|
||||
return "您没有该空间的文件上传权限!";
|
||||
}
|
||||
// 空间不是自己的,也没有权限
|
||||
if (SpaceType.isOthersPersonal(wikiSpaceSel.getType(), currentUserId, wikiSpaceSel.getCreateUserId())) {
|
||||
boolean pageAuth = DocUserUtil.haveCustomAuth(WikiAuthType.PAGE_FILE_UPLOAD.getCode(), DocSysType.WIKI.getType(), DocSysModuleType.Wiki.PAGE.getType(), pageId);
|
||||
if (!pageAuth) {
|
||||
// 在空间上直接授权了分组的权限,在这个分组里就具有权限
|
||||
Long authId = userGroupAuthMapper.haveAuth(wikiSpaceSel.getId(), DocSysType.WIKI.getType(), WikiAuthType.PAGE_FILE_UPLOAD.getType(), currentUserId);
|
||||
if (authId == null) {
|
||||
return "您没有上传该文章附件的权限!";
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否具有附件删除权限
|
||||
*
|
||||
* @param wikiSpaceSel
|
||||
* @param pageId
|
||||
* @param currentUserId
|
||||
* @return
|
||||
*/
|
||||
public String canDeleteFile(WikiSpace wikiSpaceSel, Long pageId, Long currentUserId) {
|
||||
// 私人空间
|
||||
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUserId, wikiSpaceSel.getCreateUserId())) {
|
||||
return "您没有该空间的文件上传权限!";
|
||||
}
|
||||
// 空间不是自己的,也没有权限
|
||||
if (SpaceType.isOthersPersonal(wikiSpaceSel.getType(), currentUserId, wikiSpaceSel.getCreateUserId())) {
|
||||
boolean pageAuth = DocUserUtil.haveCustomAuth(WikiAuthType.PAGE_FILE_DELETE.getCode(), DocSysType.WIKI.getType(), DocSysModuleType.Wiki.PAGE.getType(), pageId);
|
||||
if (!pageAuth) {
|
||||
// 在空间上直接授权了分组的权限,在这个分组里就具有权限
|
||||
Long authId = userGroupAuthMapper.haveAuth(wikiSpaceSel.getId(), DocSysType.WIKI.getType(), WikiAuthType.PAGE_FILE_DELETE.getType(), currentUserId);
|
||||
if (authId == null) {
|
||||
return "您没有删除该文章附件的权限!";
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否具有删除权限
|
||||
*
|
||||
* @param wikiSpaceSel
|
||||
* @param editType
|
||||
* @param pageId
|
||||
* @param currentUserId
|
||||
* @return
|
||||
*/
|
||||
public String canDelete(WikiSpace wikiSpaceSel, Integer editType, Long pageId, Long currentUserId) {
|
||||
if (wikiSpaceSel == null || Objects.equals(editType, 1)) {
|
||||
return "当前页面不允许编辑!";
|
||||
}
|
||||
// 私人空间不允许调用接口获取文章
|
||||
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUserId, wikiSpaceSel.getCreateUserId())) {
|
||||
return "您没有权限修改该空间的文章!";
|
||||
}
|
||||
// 空间不是自己的,也没有权限
|
||||
if (SpaceType.isOthersPersonal(wikiSpaceSel.getType(), currentUserId, wikiSpaceSel.getCreateUserId())) {
|
||||
boolean pageAuth = DocUserUtil.haveCustomAuth(WikiAuthType.DELETE_PAGE.getCode(), DocSysType.WIKI.getType(), DocSysModuleType.Wiki.PAGE.getType(), pageId);
|
||||
if (!pageAuth) {
|
||||
// 在空间上直接授权了分组的权限,在这个分组里就具有权限
|
||||
Long authId = userGroupAuthMapper.haveAuth(wikiSpaceSel.getId(), DocSysType.WIKI.getType(), WikiAuthType.DELETE_PAGE.getType(), currentUserId);
|
||||
if (authId == null) {
|
||||
return "您没有删除该文章的权限!";
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private final UserGroupAuthMapper userGroupAuthMapper;
|
||||
|
||||
/**
|
||||
* 是否具有编辑权限
|
||||
*
|
||||
* @param wikiSpaceSel
|
||||
* @param editType
|
||||
* @param pageId
|
||||
* @param currentUserId
|
||||
* @return
|
||||
*/
|
||||
public String canEdit(WikiSpace wikiSpaceSel, Integer editType, Long pageId, Long currentUserId) {
|
||||
if (wikiSpaceSel == null || Objects.equals(editType, 1)) {
|
||||
return "当前页面不允许编辑!";
|
||||
}
|
||||
// 私人空间不允许调用接口获取文章
|
||||
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUserId, wikiSpaceSel.getCreateUserId())) {
|
||||
return "您没有权限修改该空间的文章!";
|
||||
}
|
||||
// 空间不是自己的,也没有权限
|
||||
if (SpaceType.isOthersPersonal(wikiSpaceSel.getType(), currentUserId, wikiSpaceSel.getCreateUserId())) {
|
||||
boolean pageAuth = DocUserUtil.haveCustomAuth(WikiAuthType.EDIT_PAGE.getCode(), DocSysType.WIKI.getType(), DocSysModuleType.Wiki.PAGE.getType(), pageId);
|
||||
if (!pageAuth) {
|
||||
// 在空间上直接授权了分组的权限,在这个分组里就具有权限
|
||||
Long authId = userGroupAuthMapper.haveAuth(wikiSpaceSel.getId(), DocSysType.WIKI.getType(), WikiAuthType.EDIT_PAGE.getType(), currentUserId);
|
||||
if (authId == null) {
|
||||
return "您没有修改该文章的权限!";
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否具有权限编辑权限
|
||||
*
|
||||
* @param wikiSpaceSel
|
||||
* @param pageId
|
||||
* @param currentUserId
|
||||
* @return
|
||||
*/
|
||||
public String canConfigAuth(WikiSpace wikiSpaceSel, Long pageId, Long currentUserId) {
|
||||
if (!SpaceType.isPersonal(wikiSpaceSel.getType())) {
|
||||
return "只有个人空间才可以编辑权限";
|
||||
}
|
||||
if (!Objects.equals(currentUserId, wikiSpaceSel.getCreateUserId())) {
|
||||
if (!DocUserUtil.haveCustomAuth(WikiAuthType.PAGE_AUTH_MANAGE.getCode(), DocSysType.WIKI.getType(), DocSysModuleType.Wiki.PAGE.getType(), pageId)) {
|
||||
// 在空间上直接授权了分组的权限,在这个分组里就具有权限
|
||||
Long authId = userGroupAuthMapper.haveAuth(wikiSpaceSel.getId(), DocSysType.WIKI.getType(), WikiAuthType.PAGE_AUTH_MANAGE.getType(), currentUserId);
|
||||
if (authId == null) {
|
||||
return "您不是创建人或没有权限";
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否具有附件上传权限
|
||||
*
|
||||
* @param wikiSpaceSel
|
||||
* @param pageId
|
||||
* @param currentUserId
|
||||
* @return
|
||||
*/
|
||||
public String canUploadFile(WikiSpace wikiSpaceSel, Long pageId, Long currentUserId) {
|
||||
// 私人空间
|
||||
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUserId, wikiSpaceSel.getCreateUserId())) {
|
||||
return "您没有该空间的文件上传权限!";
|
||||
}
|
||||
// 空间不是自己的,也没有权限
|
||||
if (SpaceType.isOthersPersonal(wikiSpaceSel.getType(), currentUserId, wikiSpaceSel.getCreateUserId())) {
|
||||
boolean pageAuth = DocUserUtil.haveCustomAuth(WikiAuthType.PAGE_FILE_UPLOAD.getCode(), DocSysType.WIKI.getType(), DocSysModuleType.Wiki.PAGE.getType(), pageId);
|
||||
if (!pageAuth) {
|
||||
// 在空间上直接授权了分组的权限,在这个分组里就具有权限
|
||||
Long authId = userGroupAuthMapper.haveAuth(wikiSpaceSel.getId(), DocSysType.WIKI.getType(), WikiAuthType.PAGE_FILE_UPLOAD.getType(), currentUserId);
|
||||
if (authId == null) {
|
||||
return "您没有上传该文章附件的权限!";
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否具有附件删除权限
|
||||
*
|
||||
* @param wikiSpaceSel
|
||||
* @param pageId
|
||||
* @param currentUserId
|
||||
* @return
|
||||
*/
|
||||
public String canDeleteFile(WikiSpace wikiSpaceSel, Long pageId, Long currentUserId) {
|
||||
// 私人空间
|
||||
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUserId, wikiSpaceSel.getCreateUserId())) {
|
||||
return "您没有该空间的文件上传权限!";
|
||||
}
|
||||
// 空间不是自己的,也没有权限
|
||||
if (SpaceType.isOthersPersonal(wikiSpaceSel.getType(), currentUserId, wikiSpaceSel.getCreateUserId())) {
|
||||
boolean pageAuth = DocUserUtil.haveCustomAuth(WikiAuthType.PAGE_FILE_DELETE.getCode(), DocSysType.WIKI.getType(), DocSysModuleType.Wiki.PAGE.getType(), pageId);
|
||||
if (!pageAuth) {
|
||||
// 在空间上直接授权了分组的权限,在这个分组里就具有权限
|
||||
Long authId = userGroupAuthMapper.haveAuth(wikiSpaceSel.getId(), DocSysType.WIKI.getType(), WikiAuthType.PAGE_FILE_DELETE.getType(), currentUserId);
|
||||
if (authId == null) {
|
||||
return "您没有删除该文章附件的权限!";
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否具有删除权限
|
||||
*
|
||||
* @param wikiSpaceSel
|
||||
* @param editType
|
||||
* @param pageId
|
||||
* @param currentUserId
|
||||
* @return
|
||||
*/
|
||||
public String canDelete(WikiSpace wikiSpaceSel, Integer editType, Long pageId, Long currentUserId) {
|
||||
if (wikiSpaceSel == null || Objects.equals(editType, 1)) {
|
||||
return "当前页面不允许编辑!";
|
||||
}
|
||||
// 私人空间不允许调用接口获取文章
|
||||
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUserId, wikiSpaceSel.getCreateUserId())) {
|
||||
return "您没有权限修改该空间的文章!";
|
||||
}
|
||||
// 空间不是自己的,也没有权限
|
||||
if (SpaceType.isOthersPersonal(wikiSpaceSel.getType(), currentUserId, wikiSpaceSel.getCreateUserId())) {
|
||||
boolean pageAuth = DocUserUtil.haveCustomAuth(WikiAuthType.DELETE_PAGE.getCode(), DocSysType.WIKI.getType(), DocSysModuleType.Wiki.PAGE.getType(), pageId);
|
||||
if (!pageAuth) {
|
||||
// 在空间上直接授权了分组的权限,在这个分组里就具有权限
|
||||
Long authId = userGroupAuthMapper.haveAuth(wikiSpaceSel.getId(), DocSysType.WIKI.getType(), WikiAuthType.DELETE_PAGE.getType(), currentUserId);
|
||||
if (authId == null) {
|
||||
return "您没有删除该文章的权限!";
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,8 @@ import com.zyplayer.doc.data.config.security.DocUserDetails;
|
||||
import com.zyplayer.doc.data.config.security.DocUserUtil;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.WikiPageHistory;
|
||||
import com.zyplayer.doc.data.service.manage.WikiPageHistoryService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.eclipse.jgit.api.Git;
|
||||
@@ -18,12 +20,9 @@ import org.eclipse.jgit.revwalk.RevCommit;
|
||||
import org.eclipse.jgit.revwalk.RevWalk;
|
||||
import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider;
|
||||
import org.eclipse.jgit.treewalk.TreeWalk;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.io.File;
|
||||
import java.util.Date;
|
||||
import java.util.Set;
|
||||
@@ -34,151 +33,151 @@ import java.util.Set;
|
||||
* @author 暮光:城中城
|
||||
* @since 2020年9月5日
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class GitService {
|
||||
private static Logger logger = LoggerFactory.getLogger(GitService.class);
|
||||
|
||||
@Value("${zyplayer.doc.wiki.git-file-path:}")
|
||||
private String gitFilePath;
|
||||
@Value("${zyplayer.doc.wiki.git-local-path:}")
|
||||
private String gitLocalPath;
|
||||
@Value("${zyplayer.doc.wiki.git-remote-url:}")
|
||||
private String gitRemoteUrl;
|
||||
@Value("${zyplayer.doc.wiki.git-remote-username:}")
|
||||
private String gitRemoteUsername;
|
||||
@Value("${zyplayer.doc.wiki.git-remote-password:}")
|
||||
private String gitRemotePassword;
|
||||
|
||||
@Resource
|
||||
WikiPageHistoryService wikiPageHistoryService;
|
||||
|
||||
/**
|
||||
* 提交和写历史记录
|
||||
*
|
||||
* @param pageId 页面ID
|
||||
* @param content 页面内容
|
||||
*/
|
||||
public void commitAndAddHistory(Long pageId, String content) {
|
||||
// 未配置git仓库地址,不存历史
|
||||
if (StringUtils.isBlank(this.getGitLocalPath())) {
|
||||
return;
|
||||
}
|
||||
String commitId = this.writeAndCommit(pageId, content);
|
||||
// 保存历史记录
|
||||
if (commitId != null) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
WikiPageHistory entity = new WikiPageHistory();
|
||||
entity.setPageId(pageId);
|
||||
entity.setCreateTime(new Date());
|
||||
entity.setDelFlag(0);
|
||||
entity.setGitCommitId(commitId);
|
||||
entity.setCreateUserId(currentUser.getUserId());
|
||||
entity.setCreateUserName(currentUser.getUsername());
|
||||
wikiPageHistoryService.save(entity);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 把内容写入文件并提交git
|
||||
*
|
||||
* @param pageId 页面ID
|
||||
* @param content 页面内容
|
||||
* @return 版本ID
|
||||
*/
|
||||
private synchronized String writeAndCommit(Long pageId, String content) {
|
||||
try {
|
||||
// 初始化git仓库
|
||||
Git git;
|
||||
File dirFile = new File(this.getDotGitPath());
|
||||
if (!dirFile.exists()) {
|
||||
if (StringUtils.isNotBlank(gitRemoteUrl)) {
|
||||
// 远程仓库拉取
|
||||
git = Git.cloneRepository().setURI(gitRemoteUrl)
|
||||
.setCredentialsProvider(new UsernamePasswordCredentialsProvider(gitRemoteUsername, gitRemotePassword))
|
||||
.setBranch("master").setGitDir(dirFile).setDirectory(dirFile.getParentFile()).call();
|
||||
} else {
|
||||
// 创建本地仓库
|
||||
git = Git.init().setGitDir(dirFile).setDirectory(dirFile.getParentFile()).call();
|
||||
}
|
||||
} else {
|
||||
// 打开本地仓库
|
||||
git = new Git(new FileRepository(this.getDotGitPath()));
|
||||
}
|
||||
// 修改文件内容
|
||||
FileUtil.writeString(content, this.getGitPagePath(pageId), "utf-8");
|
||||
// 没有改变的内容
|
||||
if (git.status().call().isClean()) {
|
||||
logger.info("no changed");
|
||||
return null;
|
||||
}
|
||||
git.add().addFilepattern(".").call();
|
||||
Status status = git.status().call();
|
||||
Set<String> missing = status.getMissing();
|
||||
if (CollectionUtils.isNotEmpty(missing)) {
|
||||
for (String f : missing) {
|
||||
logger.info("missing file: {}", f);
|
||||
git.rm().addFilepattern(f).call();
|
||||
}
|
||||
}
|
||||
Set<String> removed = status.getRemoved();
|
||||
if (CollectionUtils.isNotEmpty(removed)) {
|
||||
for (String f : removed) {
|
||||
logger.info("remove file: {}", f);
|
||||
git.rm().addFilepattern(f).call();
|
||||
}
|
||||
}
|
||||
RevCommit commit = git.commit().setMessage("commit").call();
|
||||
// 存在远程地址则推送
|
||||
if (StringUtils.isNotBlank(gitRemoteUrl)) {
|
||||
git.push().setCredentialsProvider(new UsernamePasswordCredentialsProvider(gitRemoteUsername, gitRemotePassword)).call();
|
||||
}
|
||||
logger.info("commit id: {}", commit.getName());
|
||||
return commit.getName();
|
||||
} catch (Exception e) {
|
||||
logger.error("git仓库提交失败", e);
|
||||
throw new ConfirmException("创建历史记录失败:" + e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取页面的历史版本内容
|
||||
*
|
||||
* @param objId 版本ID
|
||||
* @param pageId 页面ID
|
||||
* @return 页面内容
|
||||
*/
|
||||
public String getPageHistory(String objId, Long pageId) {
|
||||
if (StringUtils.isBlank(this.getGitLocalPath())) {
|
||||
throw new ConfirmException("未配置WIKI历史版本的git目录");
|
||||
}
|
||||
try {
|
||||
Git git = Git.open(new File(this.getDotGitPath()));
|
||||
Repository repository = git.getRepository();
|
||||
RevCommit revCommit = new RevWalk(repository).parseCommit(ObjectId.fromString(objId));
|
||||
TreeWalk treeWalk = TreeWalk.forPath(repository, this.getGitPageFile(pageId), revCommit.getTree());
|
||||
treeWalk.setRecursive(false);
|
||||
ObjectId blobId = treeWalk.getObjectId(0);
|
||||
ObjectLoader loader = repository.open(blobId);
|
||||
return new String(loader.getBytes());
|
||||
} catch (Exception e) {
|
||||
logger.error("获取git文件内容失败", e);
|
||||
throw new ConfirmException("获取历史版本数据失败:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private String getGitLocalPath() {
|
||||
return StringUtils.defaultIfBlank(gitLocalPath, gitFilePath);
|
||||
}
|
||||
|
||||
private String getDotGitPath() {
|
||||
return this.getGitLocalPath() + "/.git";
|
||||
}
|
||||
|
||||
private String getGitPageFile(Long pageId) {
|
||||
return pageId + ".txt";
|
||||
}
|
||||
|
||||
private String getGitPagePath(Long pageId) {
|
||||
return this.getGitLocalPath() + "/" + this.getGitPageFile(pageId);
|
||||
}
|
||||
|
||||
@Value("${zyplayer.doc.wiki.git-file-path:}")
|
||||
private String gitFilePath;
|
||||
@Value("${zyplayer.doc.wiki.git-local-path:}")
|
||||
private String gitLocalPath;
|
||||
@Value("${zyplayer.doc.wiki.git-remote-url:}")
|
||||
private String gitRemoteUrl;
|
||||
@Value("${zyplayer.doc.wiki.git-remote-username:}")
|
||||
private String gitRemoteUsername;
|
||||
@Value("${zyplayer.doc.wiki.git-remote-password:}")
|
||||
private String gitRemotePassword;
|
||||
|
||||
private final WikiPageHistoryService wikiPageHistoryService;
|
||||
|
||||
/**
|
||||
* 提交和写历史记录
|
||||
*
|
||||
* @param pageId 页面ID
|
||||
* @param content 页面内容
|
||||
*/
|
||||
public void commitAndAddHistory(Long pageId, String content) {
|
||||
// 未配置git仓库地址,不存历史
|
||||
if (StringUtils.isBlank(this.getGitLocalPath())) {
|
||||
return;
|
||||
}
|
||||
String commitId = this.writeAndCommit(pageId, content);
|
||||
// 保存历史记录
|
||||
if (commitId != null) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
WikiPageHistory entity = new WikiPageHistory();
|
||||
entity.setPageId(pageId);
|
||||
entity.setCreateTime(new Date());
|
||||
entity.setDelFlag(0);
|
||||
entity.setGitCommitId(commitId);
|
||||
entity.setCreateUserId(currentUser.getUserId());
|
||||
entity.setCreateUserName(currentUser.getUsername());
|
||||
wikiPageHistoryService.save(entity);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 把内容写入文件并提交git
|
||||
*
|
||||
* @param pageId 页面ID
|
||||
* @param content 页面内容
|
||||
* @return 版本ID
|
||||
*/
|
||||
private synchronized String writeAndCommit(Long pageId, String content) {
|
||||
try {
|
||||
// 初始化git仓库
|
||||
Git git;
|
||||
File dirFile = new File(this.getDotGitPath());
|
||||
if (!dirFile.exists()) {
|
||||
if (StringUtils.isNotBlank(gitRemoteUrl)) {
|
||||
// 远程仓库拉取
|
||||
git = Git.cloneRepository().setURI(gitRemoteUrl)
|
||||
.setCredentialsProvider(new UsernamePasswordCredentialsProvider(gitRemoteUsername, gitRemotePassword))
|
||||
.setBranch("master").setGitDir(dirFile).setDirectory(dirFile.getParentFile()).call();
|
||||
} else {
|
||||
// 创建本地仓库
|
||||
git = Git.init().setGitDir(dirFile).setDirectory(dirFile.getParentFile()).call();
|
||||
}
|
||||
} else {
|
||||
// 打开本地仓库
|
||||
git = new Git(new FileRepository(this.getDotGitPath()));
|
||||
}
|
||||
// 修改文件内容
|
||||
FileUtil.writeString(content, this.getGitPagePath(pageId), "utf-8");
|
||||
// 没有改变的内容
|
||||
if (git.status().call().isClean()) {
|
||||
log.info("no changed");
|
||||
return null;
|
||||
}
|
||||
git.add().addFilepattern(".").call();
|
||||
Status status = git.status().call();
|
||||
Set<String> missing = status.getMissing();
|
||||
if (CollectionUtils.isNotEmpty(missing)) {
|
||||
for (String f : missing) {
|
||||
log.info("missing file: {}", f);
|
||||
git.rm().addFilepattern(f).call();
|
||||
}
|
||||
}
|
||||
Set<String> removed = status.getRemoved();
|
||||
if (CollectionUtils.isNotEmpty(removed)) {
|
||||
for (String f : removed) {
|
||||
log.info("remove file: {}", f);
|
||||
git.rm().addFilepattern(f).call();
|
||||
}
|
||||
}
|
||||
RevCommit commit = git.commit().setMessage("commit").call();
|
||||
// 存在远程地址则推送
|
||||
if (StringUtils.isNotBlank(gitRemoteUrl)) {
|
||||
git.push().setCredentialsProvider(new UsernamePasswordCredentialsProvider(gitRemoteUsername, gitRemotePassword)).call();
|
||||
}
|
||||
log.info("commit id: {}", commit.getName());
|
||||
return commit.getName();
|
||||
} catch (Exception e) {
|
||||
log.error("git仓库提交失败", e);
|
||||
throw new ConfirmException("创建历史记录失败:" + e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取页面的历史版本内容
|
||||
*
|
||||
* @param objId 版本ID
|
||||
* @param pageId 页面ID
|
||||
* @return 页面内容
|
||||
*/
|
||||
public String getPageHistory(String objId, Long pageId) {
|
||||
if (StringUtils.isBlank(this.getGitLocalPath())) {
|
||||
throw new ConfirmException("未配置WIKI历史版本的git目录");
|
||||
}
|
||||
try {
|
||||
Git git = Git.open(new File(this.getDotGitPath()));
|
||||
Repository repository = git.getRepository();
|
||||
RevCommit revCommit = new RevWalk(repository).parseCommit(ObjectId.fromString(objId));
|
||||
TreeWalk treeWalk = TreeWalk.forPath(repository, this.getGitPageFile(pageId), revCommit.getTree());
|
||||
treeWalk.setRecursive(false);
|
||||
ObjectId blobId = treeWalk.getObjectId(0);
|
||||
ObjectLoader loader = repository.open(blobId);
|
||||
return new String(loader.getBytes());
|
||||
} catch (Exception e) {
|
||||
log.error("获取git文件内容失败", e);
|
||||
throw new ConfirmException("获取历史版本数据失败:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private String getGitLocalPath() {
|
||||
return StringUtils.defaultIfBlank(gitLocalPath, gitFilePath);
|
||||
}
|
||||
|
||||
private String getDotGitPath() {
|
||||
return this.getGitLocalPath() + "/.git";
|
||||
}
|
||||
|
||||
private String getGitPageFile(Long pageId) {
|
||||
return pageId + ".txt";
|
||||
}
|
||||
|
||||
private String getGitPagePath(Long pageId) {
|
||||
return this.getGitLocalPath() + "/" + this.getGitPageFile(pageId);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user