diff --git a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiCommonController.java b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiCommonController.java index e8e31ab8..2b12ff77 100644 --- a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiCommonController.java +++ b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiCommonController.java @@ -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 userBaseInfo(String search) { - if (StringUtils.isBlank(search)) { - return DocResponseJson.ok(); - } - QueryWrapper 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 page = new Page<>(1, 20, false); - userInfoService.page(page, queryWrapper); - return DocResponseJson.ok(page); - } - - @GetMapping("/file") - public ResponseJson file(HttpServletResponse response, String uuid) { - if (StringUtils.isBlank(uuid)) { - return DocResponseJson.warn("请指定文件ID"); - } - UpdateWrapper 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 userBaseInfo(String search) { + if (StringUtils.isBlank(search)) { + return DocResponseJson.ok(); + } + QueryWrapper 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 page = new Page<>(1, 20, false); + userInfoService.page(page, queryWrapper); + return DocResponseJson.ok(page); + } + + @GetMapping("/file") + public ResponseJson file(HttpServletResponse response, String uuid) { + if (StringUtils.isBlank(uuid)) { + return DocResponseJson.warn("请指定文件ID"); + } + UpdateWrapper 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("获取文件失败"); + } } diff --git a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiOpenApiController.java b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiOpenApiController.java index 375e438e..37613f33 100644 --- a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiOpenApiController.java +++ b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiOpenApiController.java @@ -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 spaceInfo(String space) { - WikiSpace wikiSpace = this.getWikiSpace(space); - if (wikiSpace == null) { - return DocResponseJson.warn("未找到该文档"); - } - return DocResponseJson.ok(wikiSpace); - } - - @PostMapping("/page/news") - public ResponseJson> 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 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, "" + keywords + ""); - } - } - val.setPreviewContent(preview); - String pageTitle = val.getPageTitle(); - if (pageTitle != null && keywords != null) { - pageTitle = StringUtils.replaceIgnoreCase(pageTitle, keywords, "" + keywords + ""); - } - val.setPageTitle(pageTitle); - }); - } - return DocResponseJson.ok(spaceNewsVoList); - } - - @PostMapping("/page/list") - public ResponseJson> list(String space) { - WikiSpace wikiSpace = this.getWikiSpace(space); - if (wikiSpace == null) { - return DocResponseJson.warn("未找到该文档"); - } - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("del_flag", 0); - wrapper.eq("space_id", wikiSpace.getId()); - List wikiPageList = wikiPageService.list(wrapper); - if (CollectionUtils.isEmpty(wikiPageList)) { - return DocResponseJson.ok(); - } - Map> listMap = wikiPageList.stream().map(WikiPageVo::new).collect(Collectors.groupingBy(WikiPageVo::getParentId)); - List 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 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 wrapper = new UpdateWrapper<>(); - wrapper.eq("page_id", pageId); - WikiPageContent pageContent = wikiPageContentService.getOne(wrapper); - UpdateWrapper wrapperFile = new UpdateWrapper<>(); - wrapperFile.eq("page_id", pageId); - wrapperFile.eq("del_flag", 0); - List 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> listMap, List nodePageList) { - if (nodePageList == null || listMap == null) { - return; - } - for (WikiPageVo page : nodePageList) { - List 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 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 spaceInfo(String space) { + WikiSpace wikiSpace = this.getWikiSpace(space); + if (wikiSpace == null) { + return DocResponseJson.warn("未找到该文档"); + } + return DocResponseJson.ok(wikiSpace); + } + + @PostMapping("/page/news") + public ResponseJson> 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 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, "" + keywords + ""); + } + } + val.setPreviewContent(preview); + String pageTitle = val.getPageTitle(); + if (pageTitle != null && keywords != null) { + pageTitle = StringUtils.replaceIgnoreCase(pageTitle, keywords, "" + keywords + ""); + } + val.setPageTitle(pageTitle); + }); + } + return DocResponseJson.ok(spaceNewsVoList); + } + + @PostMapping("/page/list") + public ResponseJson> list(String space) { + WikiSpace wikiSpace = this.getWikiSpace(space); + if (wikiSpace == null) { + return DocResponseJson.warn("未找到该文档"); + } + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("del_flag", 0); + wrapper.eq("space_id", wikiSpace.getId()); + List wikiPageList = wikiPageService.list(wrapper); + if (CollectionUtils.isEmpty(wikiPageList)) { + return DocResponseJson.ok(); + } + Map> listMap = wikiPageList.stream().map(WikiPageVo::new).collect(Collectors.groupingBy(WikiPageVo::getParentId)); + List 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 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 wrapper = new UpdateWrapper<>(); + wrapper.eq("page_id", pageId); + WikiPageContent pageContent = wikiPageContentService.getOne(wrapper); + UpdateWrapper wrapperFile = new UpdateWrapper<>(); + wrapperFile.eq("page_id", pageId); + wrapperFile.eq("del_flag", 0); + List 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> listMap, List nodePageList) { + if (nodePageList == null || listMap == null) { + return; + } + for (WikiPageVo page : nodePageList) { + List 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 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; + } } diff --git a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiPageAuthController.java b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiPageAuthController.java index ec818853..dbf6b23e 100644 --- a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiPageAuthController.java +++ b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiPageAuthController.java @@ -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> 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 authNameList = Stream.of(WikiAuthType.values()).map(WikiAuthType::getCode).collect(Collectors.toList()); - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.in("auth_name", authNameList); - Collection authInfoList = authInfoService.list(queryWrapper); - Map authInfoMap = authInfoList.stream().collect(Collectors.toMap(AuthInfo::getAuthName, AuthInfo::getId)); - // 先删除页面的所有用户的权限 - userAuthService.deleteModuleAuth(DocSysType.WIKI.getType(), DocSysModuleType.Wiki.PAGE.getType(), pageId); - - List authVoList = JSON.parseArray(authList, UserPageAuthVo.class); - for (UserPageAuthVo authVo : authVoList) { - List 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 userAuthListNew = userAuthService.getUserAuthSet(authVo.getUserId()); - DocUserUtil.setUserAuth(authVo.getUserId(), userAuthListNew); - } - return DocResponseJson.ok(); - } - - @PostMapping("/list") - public ResponseJson 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 authList = userAuthService.getModuleAuthList(DocSysType.WIKI.getType(), DocSysModuleType.Wiki.PAGE.getType(), pageId); - if (CollectionUtils.isEmpty(authList)) { - return DocResponseJson.ok(); - } - // 权限ID对应的权限名 - Collection authInfoList = authInfoService.listByIds(authList.stream().map(UserAuth::getAuthId).collect(Collectors.toSet())); - Map authInfoMap = authInfoList.stream().collect(Collectors.toMap(AuthInfo::getId, AuthInfo::getAuthName)); - // 查询用户信息 - Map> userAuthGroup = authList.stream().collect(Collectors.groupingBy(UserAuth::getUserId)); - Collection userInfos = userInfoService.listByIds(userAuthGroup.keySet()); - Map userInfoMap = userInfos.stream().collect(Collectors.toMap(UserInfo::getId, UserInfo::getUserName)); - List authVoList = new LinkedList<>(); - // 组装结果集 - userAuthGroup.forEach((key, value) -> { - Set 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 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> 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 authNameList = Stream.of(WikiAuthType.values()).map(WikiAuthType::getCode).collect(Collectors.toList()); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("auth_name", authNameList); + Collection authInfoList = authInfoService.list(queryWrapper); + Map authInfoMap = authInfoList.stream().collect(Collectors.toMap(AuthInfo::getAuthName, AuthInfo::getId)); + // 先删除页面的所有用户的权限 + userAuthService.deleteModuleAuth(DocSysType.WIKI.getType(), DocSysModuleType.Wiki.PAGE.getType(), pageId); + + List authVoList = JSON.parseArray(authList, UserPageAuthVo.class); + for (UserPageAuthVo authVo : authVoList) { + List 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 userAuthListNew = userAuthService.getUserAuthSet(authVo.getUserId()); + DocUserUtil.setUserAuth(authVo.getUserId(), userAuthListNew); + } + return DocResponseJson.ok(); + } + + @PostMapping("/list") + public ResponseJson 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 authList = userAuthService.getModuleAuthList(DocSysType.WIKI.getType(), DocSysModuleType.Wiki.PAGE.getType(), pageId); + if (CollectionUtils.isEmpty(authList)) { + return DocResponseJson.ok(); + } + // 权限ID对应的权限名 + Collection authInfoList = authInfoService.listByIds(authList.stream().map(UserAuth::getAuthId).collect(Collectors.toSet())); + Map authInfoMap = authInfoList.stream().collect(Collectors.toMap(AuthInfo::getId, AuthInfo::getAuthName)); + // 查询用户信息 + Map> userAuthGroup = authList.stream().collect(Collectors.groupingBy(UserAuth::getUserId)); + Collection userInfos = userInfoService.listByIds(userAuthGroup.keySet()); + Map userInfoMap = userInfos.stream().collect(Collectors.toMap(UserInfo::getId, UserInfo::getUserName)); + List authVoList = new LinkedList<>(); + // 组装结果集 + userAuthGroup.forEach((key, value) -> { + Set 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 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; + } } diff --git a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiPageCommentController.java b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiPageCommentController.java index ff164e97..60bf9f74 100644 --- a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiPageCommentController.java +++ b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiPageCommentController.java @@ -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(WikiPageComment pageComment) { diff --git a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiPageController.java b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiPageController.java index 7317cd4f..9ab5f5cb 100644 --- a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiPageController.java +++ b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiPageController.java @@ -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(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 wrapper = new UpdateWrapper<>(); - wrapper.eq("del_flag", 0); - wrapper.eq("space_id", wikiPage.getSpaceId()); - List wikiPageList = wikiPageService.list(wrapper); - Map> listMap = wikiPageList.stream().map(WikiPageVo::new).collect(Collectors.groupingBy(WikiPageVo::getParentId)); - List 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 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 wrapper = new UpdateWrapper<>(); - wrapper.eq("page_id", wikiPage.getId()); - WikiPageContent pageContent = wikiPageContentService.getOne(wrapper); - - UpdateWrapper wrapperFile = new UpdateWrapper<>(); - wrapperFile.eq("page_id", wikiPage.getId()); - wrapperFile.eq("del_flag", 0); - List pageFiles = wikiPageFileService.list(wrapperFile); - for (WikiPageFile pageFile : pageFiles) { - pageFile.setFileUrl("zyplayer-doc-wiki/common/file?uuid=" + pageFile.getUuid()); - } - UpdateWrapper 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 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 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 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 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 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 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 searchByEs(SearchByEsParam param) { - param.setNewsType(1); - return this.news(param); - } - - @PostMapping("/download") - public ResponseJson 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 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 news(SearchByEsParam param) { - // 空间不是自己的 - Map 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 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, "" + keywords + ""); - } - } - val.setPreviewContent(preview); - String pageTitle = val.getPageTitle(); - if (pageTitle != null && keywords != null) { - pageTitle = StringUtils.replaceIgnoreCase(pageTitle, keywords, "" + keywords + ""); - } - val.setPageTitle(pageTitle); - }); - return DocResponseJson.ok(spaceNewsVoList); - } - - private Map getCanVisitWikiSpace(Long spaceId) { - DocUserDetails currentUser = DocUserUtil.getCurrentUser(); - List spaceList; - // 空间不是自己的 - if (spaceId == null || spaceId <= 0) { - QueryWrapper 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> listMap, List nodePageList, String path) { - if (nodePageList == null || listMap == null) { - return; - } - for (WikiPageVo page : nodePageList) { - String nowPath = path + "/" + page.getName(); - page.setPath(nowPath); - List 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(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 wrapper = new UpdateWrapper<>(); + wrapper.eq("del_flag", 0); + wrapper.eq("space_id", wikiPage.getSpaceId()); + List wikiPageList = wikiPageService.list(wrapper); + Map> listMap = wikiPageList.stream().map(WikiPageVo::new).collect(Collectors.groupingBy(WikiPageVo::getParentId)); + List 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 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 wrapper = new UpdateWrapper<>(); + wrapper.eq("page_id", wikiPage.getId()); + WikiPageContent pageContent = wikiPageContentService.getOne(wrapper); + + UpdateWrapper wrapperFile = new UpdateWrapper<>(); + wrapperFile.eq("page_id", wikiPage.getId()); + wrapperFile.eq("del_flag", 0); + List pageFiles = wikiPageFileService.list(wrapperFile); + for (WikiPageFile pageFile : pageFiles) { + pageFile.setFileUrl("zyplayer-doc-wiki/common/file?uuid=" + pageFile.getUuid()); + } + UpdateWrapper 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 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 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 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 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 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 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 searchByEs(SearchByEsParam param) { + param.setNewsType(1); + return this.news(param); + } + + @PostMapping("/download") + public ResponseJson 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 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 news(SearchByEsParam param) { + // 空间不是自己的 + Map 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 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, "" + keywords + ""); + } + } + val.setPreviewContent(preview); + String pageTitle = val.getPageTitle(); + if (pageTitle != null && keywords != null) { + pageTitle = StringUtils.replaceIgnoreCase(pageTitle, keywords, "" + keywords + ""); + } + val.setPageTitle(pageTitle); + }); + return DocResponseJson.ok(spaceNewsVoList); + } + + private Map getCanVisitWikiSpace(Long spaceId) { + DocUserDetails currentUser = DocUserUtil.getCurrentUser(); + List spaceList; + // 空间不是自己的 + if (spaceId == null || spaceId <= 0) { + QueryWrapper 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> listMap, List nodePageList, String path) { + if (nodePageList == null || listMap == null) { + return; + } + for (WikiPageVo page : nodePageList) { + String nowPath = path + "/" + page.getName(); + page.setPath(nowPath); + List 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); + } + } + } } diff --git a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiPageFileController.java b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiPageFileController.java index a5aaac41..03faf1ee 100644 --- a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiPageFileController.java +++ b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiPageFileController.java @@ -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 wikiPageFile) { // // TODO 检查space是否开放访问 @@ -72,113 +67,114 @@ public class WikiPageFileController { // } // return DocResponseJson.ok(fileList); // } - - @PostMapping("/delete") - public ResponseJson 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 wangEditorUpload(WikiPageFile wikiPageFile, @RequestParam("files") MultipartFile file) { - Map 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 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 wangEditorUpload(WikiPageFile wikiPageFile, @RequestParam("files") MultipartFile file) { + Map 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(); + } } diff --git a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiPageHistoryController.java b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiPageHistoryController.java index a5207306..e9c3851b 100644 --- a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiPageHistoryController.java +++ b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiPageHistoryController.java @@ -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(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 wrapper = new UpdateWrapper<>(); - wrapper.eq("page_id", pageId); - wrapper.eq("del_flag", 0); - wrapper.orderByDesc("id"); - IPage page = new Page<>(pageNum, 30, false); - wikiPageHistoryService.page(page, wrapper); - return DocResponseJson.ok(page); - } - - @PostMapping("/detail") - public ResponseJson 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(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 wrapper = new UpdateWrapper<>(); + wrapper.eq("page_id", pageId); + wrapper.eq("del_flag", 0); + wrapper.orderByDesc("id"); + IPage page = new Page<>(pageNum, 30, false); + wikiPageHistoryService.page(page, wrapper); + return DocResponseJson.ok(page); + } + + @PostMapping("/detail") + public ResponseJson 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); + } } diff --git a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiPageZanController.java b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiPageZanController.java index 0900d01c..13eaf760 100644 --- a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiPageZanController.java +++ b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiPageZanController.java @@ -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 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 wrapper = new UpdateWrapper<>(); - wrapper.eq("page_id", wikiPageZan.getPageId()); - wrapper.eq(wikiPageZan.getCommentId() != null, "comment_id", wikiPageZan.getCommentId()); - wrapper.eq("yn", 1); - List zanList = wikiPageZanService.list(wrapper); - return DocResponseJson.ok(zanList); - } - - @PostMapping("/update") - public ResponseJson 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 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 wrapper = new UpdateWrapper<>(); + wrapper.eq("page_id", wikiPageZan.getPageId()); + wrapper.eq(wikiPageZan.getCommentId() != null, "comment_id", wikiPageZan.getCommentId()); + wrapper.eq("yn", 1); + List zanList = wikiPageZanService.list(wrapper); + return DocResponseJson.ok(zanList); + } + + @PostMapping("/update") + public ResponseJson 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(); + } } diff --git a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiSpaceController.java b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiSpaceController.java index 42520d46..88021a7b 100644 --- a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiSpaceController.java +++ b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiSpaceController.java @@ -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(WikiSpace wikiSpace, Integer ignoreFavorite) { - DocUserDetails currentUser = DocUserUtil.getCurrentUser(); - UpdateWrapper 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 spaceList = wikiSpaceService.list(wrapper); - List spaceVoList = spaceList.stream().map(WikiSpaceVo::new).collect(Collectors.toList()); - // 收藏 - QueryWrapper favoriteWrapper = new QueryWrapper<>(); - favoriteWrapper.eq("user_id", currentUser.getUserId()); - favoriteWrapper.eq("del_flag", 0); - List favoriteList = wikiSpaceFavoriteService.list(favoriteWrapper); - Set 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 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 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 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 settingUpdate(String name, String value) { - DocUserDetails currentUser = DocUserUtil.getCurrentUser(); - QueryWrapper 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 settingList() { - DocUserDetails currentUser = DocUserUtil.getCurrentUser(); - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("user_id", currentUser.getUserId()); - wrapper.eq("name", UserSettingConst.WIKI_ONLY_SHOW_FAVORITE); - wrapper.eq("del_flag", 0); - List settingList = userSettingService.list(wrapper); - if (CollectionUtils.isEmpty(settingList)) { - return DocResponseJson.ok(); - } - Map userSettingMap = settingList.stream().collect(Collectors.toMap(UserSetting::getName, UserSetting::getValue)); - return DocResponseJson.ok(userSettingMap); - } - - @PostMapping("/favorite/update") - public ResponseJson groupAuth(Long spaceId, Integer delFlag) { - DocUserDetails currentUser = DocUserUtil.getCurrentUser(); - QueryWrapper 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 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 updateWrapper = new QueryWrapper<>(); - updateWrapper.eq("data_id", spaceId); - updateWrapper.eq("project_type", DocSysType.WIKI.getType()); - userGroupAuthService.remove(updateWrapper); - // 在创建权限 - List authVoList = JSON.parseArray(authList, UserSpaceAuthVo.class); - for (UserSpaceAuthVo authVo : authVoList) { - List 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 authList(Long spaceId) { - // 判断是否具有授权的权限 - DocUserDetails currentUser = DocUserUtil.getCurrentUser(); - WikiSpace wikiSpaceSel = wikiSpaceService.getById(spaceId); - // 只有空间创建人可以管理该空间对用户组的授权 - if (!Objects.equals(currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) { - return DocResponseJson.warn("您没有权限管理该空间的权限"); - } - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("data_id", spaceId); - queryWrapper.eq("project_type", DocSysType.WIKI.getType()); - List authList = userGroupAuthService.list(queryWrapper); - if (CollectionUtils.isEmpty(authList)) { - return DocResponseJson.ok(); - } - // 查询用户信息 - Map> userAuthGroup = authList.stream().collect(Collectors.groupingBy(UserGroupAuth::getGroupId)); - List authVoList = new LinkedList<>(); - // 组装结果集 - userAuthGroup.forEach((key, value) -> { - Set 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 authNameSet, WikiAuthType wikiAuthType) { - return authNameSet.contains(wikiAuthType.getType()) ? 1 : 0; - } - - private void createUserAuth(List 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(WikiSpace wikiSpace, Integer ignoreFavorite) { + DocUserDetails currentUser = DocUserUtil.getCurrentUser(); + UpdateWrapper 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 spaceList = wikiSpaceService.list(wrapper); + List spaceVoList = spaceList.stream().map(WikiSpaceVo::new).collect(Collectors.toList()); + // 收藏 + QueryWrapper favoriteWrapper = new QueryWrapper<>(); + favoriteWrapper.eq("user_id", currentUser.getUserId()); + favoriteWrapper.eq("del_flag", 0); + List favoriteList = wikiSpaceFavoriteService.list(favoriteWrapper); + Set 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 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 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 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 settingUpdate(String name, String value) { + DocUserDetails currentUser = DocUserUtil.getCurrentUser(); + QueryWrapper 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 settingList() { + DocUserDetails currentUser = DocUserUtil.getCurrentUser(); + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("user_id", currentUser.getUserId()); + wrapper.eq("name", UserSettingConst.WIKI_ONLY_SHOW_FAVORITE); + wrapper.eq("del_flag", 0); + List settingList = userSettingService.list(wrapper); + if (CollectionUtils.isEmpty(settingList)) { + return DocResponseJson.ok(); + } + Map userSettingMap = settingList.stream().collect(Collectors.toMap(UserSetting::getName, UserSetting::getValue)); + return DocResponseJson.ok(userSettingMap); + } + + @PostMapping("/favorite/update") + public ResponseJson groupAuth(Long spaceId, Integer delFlag) { + DocUserDetails currentUser = DocUserUtil.getCurrentUser(); + QueryWrapper 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 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 updateWrapper = new QueryWrapper<>(); + updateWrapper.eq("data_id", spaceId); + updateWrapper.eq("project_type", DocSysType.WIKI.getType()); + userGroupAuthService.remove(updateWrapper); + // 在创建权限 + List authVoList = JSON.parseArray(authList, UserSpaceAuthVo.class); + for (UserSpaceAuthVo authVo : authVoList) { + List 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 authList(Long spaceId) { + // 判断是否具有授权的权限 + DocUserDetails currentUser = DocUserUtil.getCurrentUser(); + WikiSpace wikiSpaceSel = wikiSpaceService.getById(spaceId); + // 只有空间创建人可以管理该空间对用户组的授权 + if (!Objects.equals(currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) { + return DocResponseJson.warn("您没有权限管理该空间的权限"); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("data_id", spaceId); + queryWrapper.eq("project_type", DocSysType.WIKI.getType()); + List authList = userGroupAuthService.list(queryWrapper); + if (CollectionUtils.isEmpty(authList)) { + return DocResponseJson.ok(); + } + // 查询用户信息 + Map> userAuthGroup = authList.stream().collect(Collectors.groupingBy(UserGroupAuth::getGroupId)); + List authVoList = new LinkedList<>(); + // 组装结果集 + userAuthGroup.forEach((key, value) -> { + Set 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 authNameSet, WikiAuthType wikiAuthType) { + return authNameSet.contains(wikiAuthType.getType()) ? 1 : 0; + } + + private void createUserAuth(List 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); + } + } } diff --git a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/vo/UserPageAuthVo.java b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/vo/UserPageAuthVo.java index f97b3033..18318005 100644 --- a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/vo/UserPageAuthVo.java +++ b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/vo/UserPageAuthVo.java @@ -1,6 +1,6 @@ package com.zyplayer.doc.wiki.controller.vo; -import lombok.*; +import lombok.Data; /** * 用户页面权限信息 diff --git a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/vo/UserSpaceAuthVo.java b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/vo/UserSpaceAuthVo.java index 4bba315c..c6dd4efb 100644 --- a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/vo/UserSpaceAuthVo.java +++ b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/vo/UserSpaceAuthVo.java @@ -1,6 +1,6 @@ package com.zyplayer.doc.wiki.controller.vo; -import lombok.*; +import lombok.Data; /** * 用户空间权限信息 diff --git a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/vo/WikiPageCommentVo.java b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/vo/WikiPageCommentVo.java index 88f18d37..7b8ee508 100644 --- a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/vo/WikiPageCommentVo.java +++ b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/vo/WikiPageCommentVo.java @@ -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; diff --git a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/vo/WikiPageContentVo.java b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/vo/WikiPageContentVo.java index 7699cbbd..eb210b79 100644 --- a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/vo/WikiPageContentVo.java +++ b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/vo/WikiPageContentVo.java @@ -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; diff --git a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/vo/WikiPageVo.java b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/vo/WikiPageVo.java index b5ed5d20..dcaf137d 100644 --- a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/vo/WikiPageVo.java +++ b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/vo/WikiPageVo.java @@ -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; diff --git a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/vo/WikiSpaceVo.java b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/vo/WikiSpaceVo.java index c3a6880d..0f8d5145 100644 --- a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/vo/WikiSpaceVo.java +++ b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/vo/WikiSpaceVo.java @@ -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; diff --git a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/framework/config/EnableDocWiki.java b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/framework/config/EnableDocWiki.java index 03d26262..c1620e74 100644 --- a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/framework/config/EnableDocWiki.java +++ b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/framework/config/EnableDocWiki.java @@ -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模块注解 diff --git a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/service/common/WikiPageAuthService.java b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/service/common/WikiPageAuthService.java index 30e8b74a..bc11dd34 100644 --- a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/service/common/WikiPageAuthService.java +++ b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/service/common/WikiPageAuthService.java @@ -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; + } } diff --git a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/service/git/GitService.java b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/service/git/GitService.java index 2cc7c861..81182641 100644 --- a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/service/git/GitService.java +++ b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/service/git/GitService.java @@ -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 missing = status.getMissing(); - if (CollectionUtils.isNotEmpty(missing)) { - for (String f : missing) { - logger.info("missing file: {}", f); - git.rm().addFilepattern(f).call(); - } - } - Set 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 missing = status.getMissing(); + if (CollectionUtils.isNotEmpty(missing)) { + for (String f : missing) { + log.info("missing file: {}", f); + git.rm().addFilepattern(f).call(); + } + } + Set 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); + } }