空间设置和回收站功能开发

This commit is contained in:
sswiki
2025-05-24 23:23:11 +08:00
parent e54761b24b
commit 56175e30ec
17 changed files with 622 additions and 48 deletions

View File

@@ -20,6 +20,10 @@ import org.dromara.zyplayer.data.repository.manage.vo.WikiPageTemplateInfoVo;
import org.dromara.zyplayer.data.repository.support.consts.DocSysType;
import org.dromara.zyplayer.data.repository.support.consts.UserMsgType;
import org.dromara.zyplayer.data.service.manage.*;
import org.dromara.zyplayer.data.service.params.PageDeleteParam;
import org.dromara.zyplayer.data.service.params.PageRecycleListParam;
import org.dromara.zyplayer.data.service.params.RecycleDeletePageParam;
import org.dromara.zyplayer.data.service.params.RestorePageParam;
import org.dromara.zyplayer.data.utils.CachePrefix;
import org.dromara.zyplayer.data.utils.CacheUtil;
import org.dromara.zyplayer.wiki.controller.vo.WikiPageContentVo;
@@ -78,7 +82,6 @@ public class WikiPageController {
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
return DocResponseJson.warn("您没有权限查看该空间的文章列表!");
}
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);
@@ -88,7 +91,22 @@ public class WikiPageController {
}
return DocResponseJson.ok(nodePageList);
}
@PostMapping("/recycleList")
public ResponseJson<List<WikiPageVo>> recycleList(PageRecycleListParam param) {
return wikiPageWebService.recycleList(param);
}
@PostMapping("/restore")
public ResponseJson<Object> restore(RestorePageParam param) {
return wikiPageWebService.restore(param.getPageIds());
}
@PostMapping("/recycleDelete")
public ResponseJson<Object> recycleDelete(RecycleDeletePageParam param) {
return wikiPageWebService.recycleDelete(param);
}
@PostMapping("/detail")
public ResponseJson<WikiPageContentVo> detail(WikiPage wikiPage) {
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
@@ -172,28 +190,8 @@ public class WikiPageController {
}
@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);
public ResponseJson<Object> delete(PageDeleteParam param) {
wikiPageWebService.delete(param);
return DocResponseJson.ok();
}

View File

@@ -7,15 +7,27 @@ import cn.hutool.core.util.URLUtil;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import cn.hutool.system.SystemUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.commons.collections4.CollectionUtils;
import org.dromara.zyplayer.core.json.DocResponseJson;
import org.dromara.zyplayer.core.json.ResponseJson;
import org.dromara.zyplayer.data.config.security.DocUserDetails;
import org.dromara.zyplayer.data.config.security.DocUserUtil;
import org.dromara.zyplayer.data.repository.manage.entity.WikiPage;
import org.dromara.zyplayer.data.repository.manage.entity.WikiPageTemplate;
import org.dromara.zyplayer.data.repository.manage.entity.WikiSpace;
import org.dromara.zyplayer.data.repository.manage.mapper.WikiPageMapper;
import org.dromara.zyplayer.data.service.manage.WikiPageService;
import org.dromara.zyplayer.data.service.manage.WikiPageTemplateService;
import org.dromara.zyplayer.data.service.manage.WikiSpaceService;
import org.dromara.zyplayer.data.service.params.PageDeleteParam;
import org.dromara.zyplayer.data.service.params.PageRecycleListParam;
import org.dromara.zyplayer.data.service.params.RecycleDeletePageParam;
import org.dromara.zyplayer.data.utils.HtmlUtils;
import org.dromara.zyplayer.wiki.controller.vo.WikiPageVo;
import org.dromara.zyplayer.wiki.framework.consts.SpaceType;
import org.apache.commons.lang3.StringUtils;
import org.docx4j.XmlUtils;
@@ -38,7 +50,11 @@ import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors;
@Service
public class WikiPageWebService {
@@ -48,6 +64,10 @@ public class WikiPageWebService {
WikiPageService wikiPageService;
@Resource
WikiSpaceService wikiSpaceService;
@Resource
WikiPageMapper wikiPageMapper;
@Resource
WikiPageTemplateService wikiPageTemplateService;
public ResponseJson<Object> download(Long pageId, String content, HttpServletRequest request, HttpServletResponse response) {
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
@@ -118,4 +138,104 @@ public class WikiPageWebService {
}
return DocResponseJson.warn("导出失败");
}
/**
* 获取空间已删除的页面
*
* @author 暮光:城中城
* @since 2023-04-29
*/
public ResponseJson<List<WikiPageVo>> recycleList(PageRecycleListParam param) {
// 删除的页面
WikiSpace wikiSpaceSel = wikiSpaceService.getById(param.getSpaceId());
// 不是空间的协作者返回空列表 TODO 判断权限
if (wikiSpaceSel == null) {
return DocResponseJson.ok();
}
LambdaQueryWrapper<WikiPage> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(WikiPage::getDelFlag, 1);
wrapper.eq(WikiPage::getSpaceId, param.getSpaceId());
wrapper.orderByDesc(WikiPage::getUpdateTime).orderByDesc(WikiPage::getId);
IPage<WikiPage> page = new Page<>(param.getPageNum(), 20, true);
wikiPageService.page(page, wrapper);
DocResponseJson<List<WikiPageVo>> responseJson = DocResponseJson.ok();
responseJson.setTotal(page.getTotal());
if (CollectionUtils.isNotEmpty(page.getRecords())) {
responseJson.setData(page.getRecords().stream().map(WikiPageVo::new).collect(Collectors.toList()));
}
return responseJson;
}
public ResponseJson<Object> restore(String pageIds) {
String[] pageIdArr = StringUtils.split(pageIds, ",");
for (String pageId : pageIdArr) {
DocResponseJson<Object> restoreRes = this.restore(Long.valueOf(pageId));
if (!restoreRes.isOk()) {
return restoreRes;
}
}
return DocResponseJson.ok();
}
public DocResponseJson<Object> restore(Long pageId) {
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
WikiPage wikiPageSel = wikiPageService.getById(pageId);
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
// 是否具有编辑权限 TODO
// if (!userDataAuthService.canEditPage(wikiSpaceSel.getId(), pageId, wikiSpaceSel.getCreateUserId())) {
// return DocResponseJson.warn(ErrorEnum.NO_PERMISSION_TO_RESTORE_ARTICLE);
// }
// 执行恢复操作
WikiPage wikiPage = new WikiPage();
wikiPage.setId(pageId);
wikiPage.setDelFlag(0);
wikiPage.setName(wikiPageSel.getName());
wikiPage.setUpdateTime(new Date());
wikiPage.setUpdateUserId(currentUser.getUserId());
wikiPage.setUpdateUserName(currentUser.getUsername());
wikiPageService.updateById(wikiPage);
// 重置当前分支的所有节点seq值
wikiPageMapper.updateChildrenSeq(wikiPageSel.getSpaceId(), wikiPageSel.getParentId());
return DocResponseJson.ok();
}
public DocResponseJson<Object> delete(PageDeleteParam param) {
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
WikiPage wikiPageSel = wikiPageService.getById(param.getPageId());
// 删除权限判断 TODO
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(param.getPageId());
wikiPage.setDelFlag(Optional.ofNullable(param.getDelFlag()).orElse(1));
wikiPage.setName(wikiPageSel.getName());
wikiPage.setUpdateTime(new Date());
wikiPage.setUpdateUserId(currentUser.getUserId());
wikiPage.setUpdateUserName(currentUser.getUsername());
wikiPageService.deletePage(wikiPage);
QueryWrapper<WikiPageTemplate> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("space_id", wikiPageSel.getSpaceId());
queryWrapper.eq("page_id", wikiPageSel.getId());
wikiPageTemplateService.remove(queryWrapper);
return DocResponseJson.ok();
}
public ResponseJson<Object> recycleDelete(RecycleDeletePageParam param) {
String[] pageIdArr = StringUtils.split(param.getPageIds(), ",");
for (String pageId : pageIdArr) {
PageDeleteParam deleteParam = new PageDeleteParam();
deleteParam.setPageId(Long.valueOf(pageId));
deleteParam.setSpaceId(param.getSpaceId());
deleteParam.setDelFlag(2);
DocResponseJson<Object> restoreRes = this.delete(deleteParam);
if (!restoreRes.isOk()) {
return restoreRes;
}
}
return DocResponseJson.ok();
}
}