新增模板相关功能

This commit is contained in:
Sh1yu
2023-08-24 09:28:16 +08:00
parent e393a71a93
commit ffbbe33a9f
24 changed files with 1442 additions and 518 deletions

View File

@@ -14,6 +14,7 @@ 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.manage.vo.WikiPageTemplateInfoVo;
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.*;
@@ -57,477 +58,484 @@ import java.util.stream.Collectors;
@RequiredArgsConstructor
public class WikiPageController {
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 WikiPageAuthService wikiPageAuthService;
private final WikiPageUploadService wikipageUploadService;
private final UserMessageService userMessageService;
private final WikiPageHistoryService wikiPageHistoryService;
private final WikiPageMapper wikiPageMapper;
private final WikiPageCommentService wikiPageCommentService;
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 WikiPageAuthService wikiPageAuthService;
private final WikiPageUploadService wikipageUploadService;
private final UserMessageService userMessageService;
private final WikiPageHistoryService wikiPageHistoryService;
private final WikiPageMapper wikiPageMapper;
private final WikiPageCommentService wikiPageCommentService;
private final WikiPageTemplateService wikiPageTemplateService;
@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("您没有权限查看该空间的文章列表!");
}
@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);
}
List<WikiPageTemplateInfoVo> wikiPageList = wikiPageService.wikiPageTemplateInfos(wikiPage.getSpaceId());
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);
@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);
}
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("/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("/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);
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("space_id", wikiPageSel.getSpaceId());
queryWrapper.eq("page_id", wikiPageSel.getId());
wikiPageTemplateService.remove(queryWrapper);
return DocResponseJson.ok();
}
@PostMapping("/update")
public ResponseJson<Object> update(WikiPage wikiPage, String content, String preview) {
Object info = wikipageUploadService.update(wikiPage, content, preview);
if (null != info){
if (info instanceof WikiPage){
return DocResponseJson.ok(info);
}
return DocResponseJson.warn((String) info);
}
return DocResponseJson.warn("状态异常");
}
@PostMapping("/update")
public ResponseJson<Object> update(WikiPage wikiPage, String content, String preview) {
Object info = wikipageUploadService.update(wikiPage, content, preview);
if (null != info) {
if (info instanceof WikiPage) {
return DocResponseJson.ok(info);
}
return DocResponseJson.warn((String) info);
}
return DocResponseJson.warn("状态异常");
}
public boolean isLassoDoll(WikiPage wikiPage, String moveToPageId){
if (!"".equals(moveToPageId)){
long tatrgetId = Long.parseLong(moveToPageId);
if (wikiPage.getId().equals(tatrgetId)){
return true;
}
UpdateWrapper<WikiPage> wrapper = new UpdateWrapper<>();
wrapper.eq("parent_id", wikiPage.getId());
wrapper.eq("space_id", wikiPage.getSpaceId());
//处理子节点也需要进行移动
List<WikiPage> wikiPageList = wikiPageService.list(wrapper);
for (WikiPage page : wikiPageList) {
if(isLassoDoll(page,moveToPageId)){
return true;
}
}
}
return false;
}
public boolean isLassoDoll(WikiPage wikiPage, Long moveToPageId) {
if (0L != moveToPageId) {
if (wikiPage.getId() == moveToPageId) {
return true;
}
UpdateWrapper<WikiPage> wrapper = new UpdateWrapper<>();
wrapper.eq("parent_id", wikiPage.getId());
wrapper.eq("space_id", wikiPage.getSpaceId());
//处理子节点也需要进行移动
List<WikiPage> wikiPageList = wikiPageService.list(wrapper);
for (WikiPage page : wikiPageList) {
if (isLassoDoll(page, moveToPageId)) {
return true;
}
}
}
return false;
}
@PostMapping("/move")
public ResponseJson<Object> move(WikiPage wikiPage, String moveToPageId, String moveToSpaceId) {
if (isLassoDoll(wikiPage,moveToPageId)){
return DocResponseJson.warn("不能移动自己到自己或自己的子节点下");
}
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
//获取原page信息
WikiPage wikiPageSel = wikiPageService.getById(wikiPage.getId());
wikiPageSel.setSpaceId(Long.parseLong(moveToSpaceId));
wikiPageSel.setParentId(Long.parseLong(moveToPageId));
wikiPageSel.setUpdateTime(new Date());
wikiPageSel.setUpdateUserId(currentUser.getUserId());
wikiPageSel.setUpdateUserName(currentUser.getUsername());
wikiPageService.updateById(wikiPageSel);
UpdateWrapper<WikiPage> wrapper = new UpdateWrapper<>();
wrapper.eq("parent_id", wikiPage.getId());
wrapper.eq("space_id", wikiPage.getSpaceId());
//处理子节点也需要进行移动
List<WikiPage> wikiPageList = wikiPageService.list(wrapper);
for (WikiPage page : wikiPageList) {
move(page,wikiPageSel.getId()+"",moveToSpaceId);
}
// 给相关人发送消息
UserMessage userMessage = userMessageService.createUserMessage(currentUser, wikiPageSel.getId(), wikiPageSel.getName(), DocSysType.WIKI, UserMsgType.WIKI_PAGE_MOVE);
userMessageService.addWikiMessage(userMessage);
return DocResponseJson.ok();
}
@PostMapping("/move")
public ResponseJson<Object> move(WikiPage wikiPage, Long moveToPageId, Long moveToSpaceId) {
if (isLassoDoll(wikiPage, moveToPageId)) {
return DocResponseJson.warn("不能移动自己到自己或自己的子节点下");
}
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
//获取原page信息
WikiPage wikiPageSel = wikiPageService.getById(wikiPage.getId());
wikiPageSel.setSpaceId(moveToSpaceId);
wikiPageSel.setParentId(moveToPageId);
wikiPageSel.setUpdateTime(new Date());
wikiPageSel.setUpdateUserId(currentUser.getUserId());
wikiPageSel.setUpdateUserName(currentUser.getUsername());
wikiPageService.updateById(wikiPageSel);
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("page_id",wikiPage.getId());
queryWrapper.eq("space_id",wikiPage.getSpaceId());
WikiPageTemplate bindTemplate = wikiPageTemplateService.getOne(queryWrapper);
bindTemplate.setSpaceId(moveToSpaceId);
wikiPageTemplateService.updateById(bindTemplate);
UpdateWrapper<WikiPage> wrapper = new UpdateWrapper<>();
wrapper.eq("parent_id", wikiPage.getId());
wrapper.eq("space_id", wikiPage.getSpaceId());
//处理子节点也需要进行移动
List<WikiPage> wikiPageList = wikiPageService.list(wrapper);
for (WikiPage page : wikiPageList) {
move(page, wikiPageSel.getId() , moveToSpaceId);
}
// 给相关人发送消息
UserMessage userMessage = userMessageService.createUserMessage(currentUser, wikiPageSel.getId(), wikiPageSel.getName(), DocSysType.WIKI, UserMsgType.WIKI_PAGE_MOVE);
userMessageService.addWikiMessage(userMessage);
return DocResponseJson.ok();
}
@PostMapping("/copy")
public ResponseJson<Object> copy(WikiPage wikiPage, String moveToPageId, String moveToSpaceId) {
if (isLassoDoll(wikiPage,moveToPageId)){
return DocResponseJson.warn("不能移动自己到自己或自己的子节点下");
}
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
//获取原page信息
WikiPage wikiPageSel = wikiPageService.getById(wikiPage.getId());
Integer lastSeq = wikiPageMapper.getLastSeq(wikiPage.getSpaceId(), Long.parseLong(moveToPageId));
lastSeq = Optional.ofNullable(lastSeq).orElse(99999);
wikiPageSel.setSeqNo(lastSeq + 1);
wikiPageSel.setId(null);
wikiPageSel.setSpaceId(Long.parseLong(moveToSpaceId));
wikiPageSel.setParentId(Long.parseLong(moveToPageId));
wikiPageSel.setCreateTime(new Date());
wikiPageSel.setUpdateTime(new Date());
wikiPageSel.setCreateUserId(currentUser.getUserId());
wikiPageSel.setCreateUserName(currentUser.getUsername());
wikiPageService.save(wikiPageSel);
// 重置当前分支的所有节点seq值
wikiPageMapper.updateChildrenSeq(wikiPage.getSpaceId(), Long.parseLong(moveToPageId));
// 详情处理
UpdateWrapper<WikiPageContent> wrapper = new UpdateWrapper<>();
wrapper.eq("page_id", wikiPage.getId());
WikiPageContent pageContent = wikiPageContentService.getOne(wrapper);
pageContent.setId(null);
pageContent.setPageId(wikiPageSel.getId());
pageContent.setCreateTime(new Date());
pageContent.setCreateUserId(currentUser.getUserId());
pageContent.setCreateUserName(currentUser.getUsername());
wikiPageContentService.save(pageContent);
//文件
UpdateWrapper<WikiPageFile> wrapperFile = new UpdateWrapper<>();
wrapperFile.eq("page_id", wikiPageSel.getId());
List<WikiPageFile> pageFiles = wikiPageFileService.list(wrapperFile);
for (WikiPageFile pageFile : pageFiles) {
pageFile.setId(null);
pageFile.setUuid(IdUtil.simpleUUID());
pageFile.setPageId(wikiPageSel.getId());
wikiPageFileService.save(pageFile);
}
//点赞
UpdateWrapper<WikiPageZan> wrapperZan = new UpdateWrapper<>();
wrapperZan.eq("page_id", wikiPage.getId());
List<WikiPageZan> list = wikiPageZanService.list(wrapperZan);
for (WikiPageZan wikiPageZan : list) {
wikiPageZan.setId(null);
wikiPageZan.setPageId(wikiPageSel.getId());
wikiPageZanService.save(wikiPageZan);
}
//评论
UpdateWrapper<WikiPageComment> commentWrapper = new UpdateWrapper<>();
commentWrapper.eq("page_id", wikiPageSel.getId());
List<WikiPageComment> pageCommentList = wikiPageCommentService.list(commentWrapper);
for (WikiPageComment wikiPageComment : pageCommentList) {
wikiPageComment.setId(null);
wikiPageComment.setPageId(wikiPageSel.getId());
wikiPageCommentService.save(wikiPageComment);
}
//处理子节点也需要进行复制
UpdateWrapper<WikiPage> childWrapper = new UpdateWrapper<>();
childWrapper.eq("parent_id", wikiPage.getId());
childWrapper.eq("space_id", wikiPage.getSpaceId());
List<WikiPage> wikiPageList = wikiPageService.list(childWrapper);
for (WikiPage page : wikiPageList) {
copy(page,wikiPageSel.getId()+"",moveToSpaceId);
}
// 给相关人发送消息
UserMessage userMessage = userMessageService.createUserMessage(currentUser, wikiPageSel.getId(), wikiPageSel.getName(), DocSysType.WIKI, UserMsgType.WIKI_PAGE_COPY);
userMessageService.addWikiMessage(userMessage);
return DocResponseJson.ok();
}
@PostMapping("/copy")
public ResponseJson<Object> copy(WikiPage wikiPage, Long moveToPageId, Long moveToSpaceId) {
if (isLassoDoll(wikiPage, moveToPageId)) {
return DocResponseJson.warn("不能移动自己到自己或自己的子节点下");
}
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
//获取原page信息
WikiPage wikiPageSel = wikiPageService.getById(wikiPage.getId());
Integer lastSeq = wikiPageMapper.getLastSeq(wikiPage.getSpaceId(), moveToPageId);
lastSeq = Optional.ofNullable(lastSeq).orElse(99999);
wikiPageSel.setSeqNo(lastSeq + 1);
wikiPageSel.setId(null);
wikiPageSel.setSpaceId(moveToSpaceId);
wikiPageSel.setParentId(moveToPageId);
wikiPageSel.setCreateTime(new Date());
wikiPageSel.setUpdateTime(new Date());
wikiPageSel.setCreateUserId(currentUser.getUserId());
wikiPageSel.setCreateUserName(currentUser.getUsername());
wikiPageService.save(wikiPageSel);
// 重置当前分支的所有节点seq值
wikiPageMapper.updateChildrenSeq(wikiPage.getSpaceId(), moveToPageId);
// 详情处理
UpdateWrapper<WikiPageContent> wrapper = new UpdateWrapper<>();
wrapper.eq("page_id", wikiPage.getId());
WikiPageContent pageContent = wikiPageContentService.getOne(wrapper);
pageContent.setId(null);
pageContent.setPageId(wikiPageSel.getId());
pageContent.setCreateTime(new Date());
pageContent.setCreateUserId(currentUser.getUserId());
pageContent.setCreateUserName(currentUser.getUsername());
wikiPageContentService.save(pageContent);
//文件
UpdateWrapper<WikiPageFile> wrapperFile = new UpdateWrapper<>();
wrapperFile.eq("page_id", wikiPageSel.getId());
List<WikiPageFile> pageFiles = wikiPageFileService.list(wrapperFile);
for (WikiPageFile pageFile : pageFiles) {
pageFile.setId(null);
pageFile.setUuid(IdUtil.simpleUUID());
pageFile.setPageId(wikiPageSel.getId());
wikiPageFileService.save(pageFile);
}
//点赞
UpdateWrapper<WikiPageZan> wrapperZan = new UpdateWrapper<>();
wrapperZan.eq("page_id", wikiPage.getId());
List<WikiPageZan> list = wikiPageZanService.list(wrapperZan);
for (WikiPageZan wikiPageZan : list) {
wikiPageZan.setId(null);
wikiPageZan.setPageId(wikiPageSel.getId());
wikiPageZanService.save(wikiPageZan);
}
//评论
UpdateWrapper<WikiPageComment> commentWrapper = new UpdateWrapper<>();
commentWrapper.eq("page_id", wikiPageSel.getId());
List<WikiPageComment> pageCommentList = wikiPageCommentService.list(commentWrapper);
for (WikiPageComment wikiPageComment : pageCommentList) {
wikiPageComment.setId(null);
wikiPageComment.setPageId(wikiPageSel.getId());
wikiPageCommentService.save(wikiPageComment);
}
//处理子节点也需要进行复制
UpdateWrapper<WikiPage> childWrapper = new UpdateWrapper<>();
childWrapper.eq("parent_id", wikiPage.getId());
childWrapper.eq("space_id", wikiPage.getSpaceId());
List<WikiPage> wikiPageList = wikiPageService.list(childWrapper);
for (WikiPage page : wikiPageList) {
copy(page, wikiPageSel.getId(), moveToSpaceId);
}
// 给相关人发送消息
UserMessage userMessage = userMessageService.createUserMessage(currentUser, wikiPageSel.getId(), wikiPageSel.getName(), DocSysType.WIKI, UserMsgType.WIKI_PAGE_COPY);
userMessageService.addWikiMessage(userMessage);
return DocResponseJson.ok();
}
@PostMapping("/rename")
public ResponseJson<Object> rename(WikiPage wikiPage) {
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
if (StringUtils.isBlank(wikiPage.getName())) {
return DocResponseJson.warn("标题不能为空!");
}
if (StringUtils.isBlank(wikiPage.getId()+"")) {
return DocResponseJson.warn("不能为新建的文档改名!");
}
Long pageId = wikiPage.getId();
Long spaceId = wikiPage.getSpaceId();
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);
}
spaceId = wikiPageSel.getSpaceId();
WikiPage oldWikiPage = wikiPageService.getById(pageId);
oldWikiPage.setName(wikiPage.getName());
wikiPage.setUpdateTime(new Date());
wikiPage.setUpdateUserId(currentUser.getUserId());
wikiPage.setUpdateUserName(currentUser.getUsername());
wikiPageService.updateById(oldWikiPage);
UpdateWrapper<WikiPageContent> wrapper = new UpdateWrapper<>();
wrapper.eq("page_id", wikiPage.getId());
WikiPageContent pageContent = wikiPageContentService.getOne(wrapper);
// 给相关人发送消息
UserMessage userMessage = userMessageService.createUserMessage(currentUser, wikiPageSel.getId(), wikiPageSel.getName(), DocSysType.WIKI, UserMsgType.WIKI_PAGE_UPDATE);
userMessageService.addWikiMessage(userMessage);
try {
// 创建历史记录
wikiPageHistoryService.saveRecord(spaceId, wikiPage.getId(), pageContent.getContent());
} catch (ConfirmException e) {
return DocResponseJson.warn(e.getMessage());
}
return DocResponseJson.ok(wikiPage);
}
@PostMapping("/rename")
public ResponseJson<Object> rename(WikiPage wikiPage) {
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
if (StringUtils.isBlank(wikiPage.getName())) {
return DocResponseJson.warn("标题不能为空!");
}
if (StringUtils.isBlank(wikiPage.getId() + "")) {
return DocResponseJson.warn("不能为新建的文档改名!");
}
Long pageId = wikiPage.getId();
Long spaceId = wikiPage.getSpaceId();
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);
}
spaceId = wikiPageSel.getSpaceId();
WikiPage oldWikiPage = wikiPageService.getById(pageId);
oldWikiPage.setName(wikiPage.getName());
wikiPage.setUpdateTime(new Date());
wikiPage.setUpdateUserId(currentUser.getUserId());
wikiPage.setUpdateUserName(currentUser.getUsername());
wikiPageService.updateById(oldWikiPage);
UpdateWrapper<WikiPageContent> wrapper = new UpdateWrapper<>();
wrapper.eq("page_id", wikiPage.getId());
WikiPageContent pageContent = wikiPageContentService.getOne(wrapper);
// 给相关人发送消息
UserMessage userMessage = userMessageService.createUserMessage(currentUser, wikiPageSel.getId(), wikiPageSel.getName(), DocSysType.WIKI, UserMsgType.WIKI_PAGE_UPDATE);
userMessageService.addWikiMessage(userMessage);
try {
// 创建历史记录
wikiPageHistoryService.saveRecord(spaceId, wikiPage.getId(), pageContent.getContent());
} 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("/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("/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("/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);
if (pageContent == null || StringUtils.isBlank(pageContent.getContent())) {
return DocResponseJson.warn("文档内容为空,不能导出!");
}
try {
String content = pageContent.getContent();
String fileName = URLEncoder.encode(wikiPageSel.getName(), "UTF-8");
content = "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Strict//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n" +
"<html lang=\"zh\">\n" +
"<head>\n" +
"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n" +
"<title>" + fileName + "</title>\n" +
"</head>\n" +
"<body>" +
content +
"</body>\n" +
"</html>";
// 写入流
response.setCharacterEncoding("utf-8");
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".docx");
ServletOutputStream outputStream = response.getOutputStream();
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
MainDocumentPart mdp = wordMLPackage.getMainDocumentPart();
mdp.addAltChunk(AltChunkType.Xhtml, content.getBytes(StandardCharsets.UTF_8));
mdp.convertAltChunks();
XmlUtils.marshaltoString(wordMLPackage.getMainDocumentPart().getJaxbElement(), true, true);
wordMLPackage.save(outputStream);
outputStream.close();
return DocResponseJson.ok();
} catch (Exception e) {
e.printStackTrace();
}
return DocResponseJson.warn("导出失败");
}
@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);
if (pageContent == null || StringUtils.isBlank(pageContent.getContent())) {
return DocResponseJson.warn("文档内容为空,不能导出!");
}
try {
String content = pageContent.getContent();
String fileName = URLEncoder.encode(wikiPageSel.getName(), "UTF-8");
content = "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Strict//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n" +
"<html lang=\"zh\">\n" +
"<head>\n" +
"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n" +
"<title>" + fileName + "</title>\n" +
"</head>\n" +
"<body>" +
content +
"</body>\n" +
"</html>";
// 写入流
response.setCharacterEncoding("utf-8");
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".docx");
ServletOutputStream outputStream = response.getOutputStream();
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
MainDocumentPart mdp = wordMLPackage.getMainDocumentPart();
mdp.addAltChunk(AltChunkType.Xhtml, content.getBytes(StandardCharsets.UTF_8));
mdp.convertAltChunks();
XmlUtils.marshaltoString(wordMLPackage.getMainDocumentPart().getJaxbElement(), true, true);
wordMLPackage.save(outputStream);
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);
}
@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 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 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);
}
}
}
}

View File

@@ -0,0 +1,156 @@
package com.zyplayer.doc.wiki.controller;
import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.zyplayer.doc.core.annotation.AuthMan;
import com.zyplayer.doc.core.exception.ConfirmException;
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.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.manage.vo.WikiPageTemplateInfoVo;
import com.zyplayer.doc.data.repository.manage.vo.WikiTemplateTagVo;
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.utils.CachePrefix;
import com.zyplayer.doc.data.utils.CacheUtil;
import com.zyplayer.doc.wiki.controller.vo.WikiPageContentVo;
import com.zyplayer.doc.wiki.controller.vo.WikiPageVo;
import com.zyplayer.doc.wiki.framework.consts.SpaceType;
import com.zyplayer.doc.wiki.service.WikiPageUploadService;
import com.zyplayer.doc.wiki.service.common.WikiPageAuthService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.docx4j.XmlUtils;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.WordprocessingML.AltChunkType;
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.stream.Collectors;
/**
* 文档控制器
*
* @author 暮光:城中城
* @author Sh1yu
* @since 2019年2月17日
*/
@Slf4j
@AuthMan
@RestController
@RequestMapping("/zyplayer-doc-wiki/template")
@RequiredArgsConstructor
public class WikiPageTemplateController {
private final WikiPageService wikiPageService;
private final WikiPageContentService wikiPageContentService;
private final WikiPageUploadService wikipageUploadService;
private final WikiPageTemplateService wikiPageTemplateService;
private final WikiPageFileService wikiPageFileService;
@PostMapping("/add")
public ResponseJson<Object> addTemplate(WikiPageTemplate wikiPageTemplate) {
WikiPageTemplate exist = wikiPageTemplateService.getWikiPageTemplateBySpaceAndPage(wikiPageTemplate.getSpaceId(), wikiPageTemplate.getPageId());
if (null == exist) {
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
if (wikiPageTemplate.getTagName().equals("")) {
wikiPageTemplate.setTagName("无标签");
}
wikiPageTemplate.setCreated(new Date());
wikiPageTemplate.setCreateUser(currentUser.getUsername());
wikiPageTemplate.setCreateUserId(currentUser.getUserId());
wikiPageTemplateService.save(wikiPageTemplate);
} else {
exist.setTagName(wikiPageTemplate.getTagName());
exist.setShareStatus(wikiPageTemplate.getShareStatus());
wikiPageTemplateService.updateById(exist);
}
return DocResponseJson.ok();
}
@PostMapping("/allTags")
public ResponseJson<Object> allTags(boolean open) {
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
List<WikiTemplateTagVo> allTags = wikiPageTemplateService.getAllTags(currentUser.getUserId(),open);
return DocResponseJson.ok(allTags);
}
@PostMapping("/filterAll")
public ResponseJson<Object> filterAll(String name, boolean open, HttpServletRequest request, Long pageNum) {
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
List tagList = new ArrayList();
Set<Map.Entry<String, String[]>> entries = request.getParameterMap().entrySet();
entries.forEach(param -> {
if (param.getKey().contains("].tagName") && !"".equals(param.getValue()[0])) {
tagList.add(param.getValue()[0]);
}
});
if (tagList.size() < 1) {
tagList.add("");
}
List<WikiPageTemplateInfoVo> wikiPageTemplateInfoVos = wikiPageTemplateService.filterAll(currentUser.getUserId(), name, open, tagList, pageNum);
Long total = wikiPageTemplateService.total(currentUser.getUserId(), name, open, tagList);
DocResponseJson<Object> ok = DocResponseJson.ok(wikiPageTemplateInfoVos);
ok.setTotal(total);
return ok;
}
@PostMapping("/use")
public ResponseJson<Object> use(Long spaceId, Long parentId, String templateId) {
WikiPageTemplate template = wikiPageTemplateService.getById(templateId);
WikiPage wikiTemplatePage = wikiPageService.getById(template.getPageId());
WikiPage wikiPage = new WikiPage();
wikiPage.setParentId(parentId);
wikiPage.setSpaceId(spaceId);
wikiPage.setEditorType(wikiTemplatePage.getEditorType());
wikiPage.setName(wikiTemplatePage.getName() + "副本");
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("page_id", wikiTemplatePage.getId());
WikiPageContent pageContent = wikiPageContentService.getOne(queryWrapper);
UpdateWrapper<WikiPageFile> wrapperFile = new UpdateWrapper<>();
wrapperFile.eq("page_id", wikiTemplatePage.getId());
List<WikiPageFile> pageFiles = wikiPageFileService.list(wrapperFile);
String content = pageContent.getContent();
for (WikiPageFile pageFile : pageFiles) {
pageFile.setId(null);
String uuid = IdUtil.simpleUUID();
content.replace(pageFile.getUuid(),uuid);
pageFile.setUuid(uuid);
}
Object info = wikipageUploadService.update(wikiPage, content, content);
if (null != info) {
if (info instanceof WikiPage) {
for (WikiPageFile pageFile : pageFiles) {
pageFile.setPageId(((WikiPage)info).getId());
wikiPageFileService.save(pageFile);
}
return DocResponseJson.ok(info);
}
DocResponseJson.warn((String) info);
}
return DocResponseJson.ok("状态异常");
}
}

View File

@@ -1,6 +1,7 @@
package com.zyplayer.doc.wiki.controller.vo;
import com.zyplayer.doc.data.repository.manage.entity.WikiPage;
import com.zyplayer.doc.data.repository.manage.vo.WikiPageTemplateInfoVo;
import lombok.Data;
import java.util.Date;
@@ -102,9 +103,27 @@ public class WikiPageVo {
*/
private Integer editorType;
/**
* 路径
*/
private String path;
/**
* 子节点
*/
private List<WikiPageVo> children;
/**
* 模板类型 0个人模板 1共享模板
*/
private Integer shareStatus;
/**
* 模板标签
*/
private String tags;
public WikiPageVo(WikiPage wikiPage) {
this.id = wikiPage.getId();
this.spaceId = wikiPage.getSpaceId();
@@ -125,4 +144,27 @@ public class WikiPageVo {
this.editorType = wikiPage.getEditorType();
}
public WikiPageVo(WikiPageTemplateInfoVo wikiPageTemplate) {
this.id = wikiPageTemplate.getId();
this.spaceId = wikiPageTemplate.getSpaceId();
this.name = wikiPageTemplate.getName();
this.parentId = wikiPageTemplate.getParentId();
this.nodeType = wikiPageTemplate.getNodeType();
this.zanNum = wikiPageTemplate.getZanNum();
this.editType = wikiPageTemplate.getEditType();
this.createUserId = wikiPageTemplate.getCreateUserId();
this.createUserName = wikiPageTemplate.getCreateUserName();
this.createTime = wikiPageTemplate.getCreateTime();
this.updateUserId = wikiPageTemplate.getUpdateUserId();
this.updateUserName = wikiPageTemplate.getUpdateUserName();
this.updateTime = wikiPageTemplate.getUpdateTime();
this.delFlag = wikiPageTemplate.getDelFlag();
this.viewNum = wikiPageTemplate.getViewNum();
this.seqNo = wikiPageTemplate.getSeqNo();
this.editorType = wikiPageTemplate.getEditorType();
this.tags = wikiPageTemplate.getTags();
this.shareStatus = wikiPageTemplate.getShareStatus();
}
}