From 7d8fa1ff822184a653e27045d51706ea82d5370b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9A=AE=E5=85=89=EF=BC=9A=E5=9F=8E=E4=B8=AD=E5=9F=8E?= <806783409@qq.com> Date: Tue, 5 Mar 2019 23:15:47 +0800 Subject: [PATCH] =?UTF-8?q?wiki=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/manage/entity/WikiPage.java | 15 +++- .../repository/manage/entity/WikiPageZan.java | 18 +++- .../manage/mapper/WikiPageMapper.java | 10 ++- .../manage/mapper/WikiPageZanMapper.java | 6 +- .../support/generator/CodeGenerator.java | 4 +- .../data/service/manage/WikiPageService.java | 2 +- .../service/manage/WikiPageZanService.java | 4 +- .../manage/impl/WikiPageServiceImpl.java | 2 +- .../manage/impl/WikiPageZanServiceImpl.java | 43 ++++++++- .../doc/dubbo/controller/DubboController.java | 67 ++++++-------- .../src/main/resources/application.yml | 9 +- .../com/zyplayer/doc/test/MediaTypeTest.java | 19 ++++ .../wiki/controller/WikiCommonController.java | 82 +++++++++++++----- .../wiki/controller/WikiPageController.java | 18 +++- .../controller/WikiPageFileController.java | 58 ++++++------- .../controller/WikiPageZanController.java | 34 ++------ .../wiki/controller/WikiSpaceController.java | 4 +- .../wiki/controller/vo/WikiPageContentVo.java | 9 ++ .../src/main/resources/doc-wiki.html | 59 +++++++++++-- .../resources/webjars/doc-wiki/img/zan.png | Bin 0 -> 433 bytes 20 files changed, 313 insertions(+), 150 deletions(-) create mode 100644 zyplayer-doc-manage/src/test/java/com/zyplayer/doc/test/MediaTypeTest.java create mode 100644 zyplayer-doc-wiki/src/main/resources/webjars/doc-wiki/img/zan.png diff --git a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/entity/WikiPage.java b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/entity/WikiPage.java index 2a233590..5dad0bbc 100644 --- a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/entity/WikiPage.java +++ b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/entity/WikiPage.java @@ -12,7 +12,7 @@ import java.util.Date; *

* * @author 暮光:城中城 - * @since 2019-02-24 + * @since 2019-03-05 */ public class WikiPage implements Serializable { @@ -44,6 +44,11 @@ public class WikiPage implements Serializable { */ private Integer nodeType; + /** + * 赞的数量 + */ + private Integer zanNum; + /** * 创建人ID */ @@ -114,6 +119,13 @@ public class WikiPage implements Serializable { public void setNodeType(Integer nodeType) { this.nodeType = nodeType; } + public Integer getZanNum() { + return zanNum; + } + + public void setZanNum(Integer zanNum) { + this.zanNum = zanNum; + } public Long getCreateUserId() { return createUserId; } @@ -172,6 +184,7 @@ public class WikiPage implements Serializable { ", name=" + name + ", parentId=" + parentId + ", nodeType=" + nodeType + + ", zanNum=" + zanNum + ", createUserId=" + createUserId + ", createUserName=" + createUserName + ", createTime=" + createTime + diff --git a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/entity/WikiPageZan.java b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/entity/WikiPageZan.java index 4a5dd49a..b3f48ee9 100644 --- a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/entity/WikiPageZan.java +++ b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/entity/WikiPageZan.java @@ -1,9 +1,10 @@ package com.zyplayer.doc.data.repository.manage.entity; import com.baomidou.mybatisplus.annotation.IdType; -import java.util.Date; import com.baomidou.mybatisplus.annotation.TableId; + import java.io.Serializable; +import java.util.Date; /** *

@@ -11,7 +12,7 @@ import java.io.Serializable; *

* * @author 暮光:城中城 - * @since 2019-02-24 + * @since 2019-03-05 */ public class WikiPageZan implements Serializable { @@ -48,6 +49,11 @@ public class WikiPageZan implements Serializable { */ private Date createTime; + /** + * 是否有效 0=无效 1=有效 + */ + private Integer yn; + public Long getId() { return id; } @@ -90,6 +96,13 @@ public class WikiPageZan implements Serializable { public void setCreateTime(Date createTime) { this.createTime = createTime; } + public Integer getYn() { + return yn; + } + + public void setYn(Integer yn) { + this.yn = yn; + } @Override public String toString() { @@ -100,6 +113,7 @@ public class WikiPageZan implements Serializable { ", createUserId=" + createUserId + ", createUserName=" + createUserName + ", createTime=" + createTime + + ", yn=" + yn + "}"; } } diff --git a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/mapper/WikiPageMapper.java b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/mapper/WikiPageMapper.java index 0436d2f0..e739e8a1 100644 --- a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/mapper/WikiPageMapper.java +++ b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/mapper/WikiPageMapper.java @@ -1,7 +1,9 @@ package com.zyplayer.doc.data.repository.manage.mapper; -import com.zyplayer.doc.data.repository.manage.entity.WikiPage; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.zyplayer.doc.data.repository.manage.entity.WikiPage; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Update; /** *

@@ -9,8 +11,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; *

* * @author 暮光:城中城 - * @since 2019-02-24 + * @since 2019-03-05 */ public interface WikiPageMapper extends BaseMapper { - + + @Update("update wiki_page set zan_num=zan_num + #{numAdd} where id=#{id}") + void updateZanNum(@Param("id") Long id, @Param("numAdd") Integer numAdd); } diff --git a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/mapper/WikiPageZanMapper.java b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/mapper/WikiPageZanMapper.java index 07d126ea..50265b59 100644 --- a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/mapper/WikiPageZanMapper.java +++ b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/mapper/WikiPageZanMapper.java @@ -2,14 +2,16 @@ package com.zyplayer.doc.data.repository.manage.mapper; import com.zyplayer.doc.data.repository.manage.entity.WikiPageZan; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Update; /** *

- * Mapper 接口 + * Mapper 接口 *

* * @author 暮光:城中城 - * @since 2019-02-24 + * @since 2019-03-05 */ public interface WikiPageZanMapper extends BaseMapper { diff --git a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/support/generator/CodeGenerator.java b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/support/generator/CodeGenerator.java index 1ecf11ec..3a857a12 100644 --- a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/support/generator/CodeGenerator.java +++ b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/support/generator/CodeGenerator.java @@ -18,8 +18,8 @@ public class CodeGenerator { final String moduleName = "manage"; // final String[] tableName = { "zyplayer_storage", "auth_info", "user_auth", "user_info" }; - final String[] tableName = { "wiki_space", "wiki_page", "wiki_page_content", "wiki_page_file", "wiki_page_comment", "wiki_page_zan" }; -// final String[] tableName = { "wiki_page" }; +// final String[] tableName = { "wiki_space", "wiki_page", "wiki_page_content", "wiki_page_file", "wiki_page_comment", "wiki_page_zan" }; + final String[] tableName = { "wiki_page" }; // 代码生成器 AutoGenerator mpg = new AutoGenerator(); diff --git a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/WikiPageService.java b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/WikiPageService.java index d61d056c..9e094916 100644 --- a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/WikiPageService.java +++ b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/WikiPageService.java @@ -9,7 +9,7 @@ import com.baomidou.mybatisplus.extension.service.IService; *

* * @author 暮光:城中城 - * @since 2019-02-24 + * @since 2019-03-05 */ public interface WikiPageService extends IService { diff --git a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/WikiPageZanService.java b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/WikiPageZanService.java index 5737600a..6d902927 100644 --- a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/WikiPageZanService.java +++ b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/WikiPageZanService.java @@ -9,8 +9,8 @@ import com.baomidou.mybatisplus.extension.service.IService; *

* * @author 暮光:城中城 - * @since 2019-02-24 + * @since 2019-03-05 */ public interface WikiPageZanService extends IService { - + void zanPage(WikiPageZan wikiPageZan); } diff --git a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/impl/WikiPageServiceImpl.java b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/impl/WikiPageServiceImpl.java index 2861b8f7..037f7e34 100644 --- a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/impl/WikiPageServiceImpl.java +++ b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/impl/WikiPageServiceImpl.java @@ -12,7 +12,7 @@ import org.springframework.stereotype.Service; *

* * @author 暮光:城中城 - * @since 2019-02-24 + * @since 2019-03-05 */ @Service public class WikiPageServiceImpl extends ServiceImpl implements WikiPageService { diff --git a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/impl/WikiPageZanServiceImpl.java b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/impl/WikiPageZanServiceImpl.java index 39159eed..008a4ed9 100644 --- a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/impl/WikiPageZanServiceImpl.java +++ b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/impl/WikiPageZanServiceImpl.java @@ -1,20 +1,55 @@ package com.zyplayer.doc.data.service.manage.impl; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.zyplayer.doc.data.config.security.DocUserDetails; +import com.zyplayer.doc.data.config.security.DocUserUtil; import com.zyplayer.doc.data.repository.manage.entity.WikiPageZan; +import com.zyplayer.doc.data.repository.manage.mapper.WikiPageMapper; import com.zyplayer.doc.data.repository.manage.mapper.WikiPageZanMapper; import com.zyplayer.doc.data.service.manage.WikiPageZanService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.Objects; /** *

- * 服务实现类 + * 服务实现类 *

* * @author 暮光:城中城 - * @since 2019-02-24 + * @since 2019-03-05 */ @Service public class WikiPageZanServiceImpl extends ServiceImpl implements WikiPageZanService { - + + @Resource + WikiPageMapper wikiPageMapper; + + @Override + @Transactional + public void zanPage(WikiPageZan wikiPageZan) { + DocUserDetails currentUser = DocUserUtil.getCurrentUser(); + UpdateWrapper wrapper = new UpdateWrapper<>(); + wrapper.eq("create_user_id", currentUser.getUserId()); + wrapper.eq("page_id", wikiPageZan.getPageId()); + wrapper.eq(wikiPageZan.getCommentId() != null, "comment_id", wikiPageZan.getCommentId()); + WikiPageZan pageZan = this.getOne(wrapper); + if (pageZan != null) { + if (Objects.equals(wikiPageZan.getYn(), pageZan.getYn())) { + return; + } + wikiPageZan.setId(pageZan.getId()); + this.updateById(wikiPageZan); + } else { + wikiPageZan.setCreateTime(new Date()); + wikiPageZan.setCreateUserId(currentUser.getUserId()); + this.save(wikiPageZan); + } + int numAdd = wikiPageZan.getYn() == 1 ? 1 : -1; + wikiPageMapper.updateZanNum(wikiPageZan.getPageId(), numAdd); + } } diff --git a/zyplayer-doc-dubbo/src/main/java/com/zyplayer/doc/dubbo/controller/DubboController.java b/zyplayer-doc-dubbo/src/main/java/com/zyplayer/doc/dubbo/controller/DubboController.java index 30a5d527..e97d64a8 100644 --- a/zyplayer-doc-dubbo/src/main/java/com/zyplayer/doc/dubbo/controller/DubboController.java +++ b/zyplayer-doc-dubbo/src/main/java/com/zyplayer/doc/dubbo/controller/DubboController.java @@ -27,13 +27,10 @@ import org.apache.dubbo.rpc.service.GenericService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; -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.PostConstruct; -import javax.annotation.PreDestroy; import javax.annotation.Resource; import java.lang.reflect.Method; import java.lang.reflect.Parameter; @@ -73,29 +70,34 @@ public class DubboController { private CuratorFramework serverClient; private CuratorFramework metadataClient; - @PostConstruct - private void init() { - if (StringUtils.isNotBlank(serviceZookeeperUrl)) { - RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3); - serverClient = CuratorFrameworkFactory.newClient(serviceZookeeperUrl, retryPolicy); - serverClient.start(); - } - if (StringUtils.isNotBlank(metadataZookeeperUrl)) { - URL url = UrlUtils.parseURL(metadataZookeeperUrl, Collections.emptyMap()); - String group = url.getParameter(Constants.GROUP_KEY, DEFAULT_ROOT); - if (!group.startsWith(Constants.PATH_SEPARATOR)) { - group = Constants.PATH_SEPARATOR + group; + private void initServerClient() { + if (serverClient == null && StringUtils.isNotBlank(serviceZookeeperUrl)) { + synchronized (DEFAULT_ROOT) { + if (serverClient == null) { + RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3); + serverClient = CuratorFrameworkFactory.newClient(serviceZookeeperUrl, retryPolicy); + serverClient.start(); + } } - this.root = group; - RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3); - metadataClient = CuratorFrameworkFactory.newClient(metadataZookeeperUrl, retryPolicy); - metadataClient.start(); } } - @PreDestroy - private void preDestroy() { - serverClient.close(); + private void initMetadataClient() { + if (metadataClient == null && StringUtils.isNotBlank(metadataZookeeperUrl)) { + synchronized (DEFAULT_ROOT) { + if (metadataClient == null) { + URL url = UrlUtils.parseURL(metadataZookeeperUrl, Collections.emptyMap()); + String group = url.getParameter(Constants.GROUP_KEY, DEFAULT_ROOT); + if (!group.startsWith(Constants.PATH_SEPARATOR)) { + group = Constants.PATH_SEPARATOR + group; + } + this.root = group; + RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3); + metadataClient = CuratorFrameworkFactory.newClient(metadataZookeeperUrl, retryPolicy); + metadataClient.start(); + } + } + } } /** @@ -205,23 +207,6 @@ public class DubboController { return DocResponseJson.ok(dubboInfoVo); } - /** - * 获取文档详情,依据类名生成 - * - * @author 暮光:城中城 - * @since 2019年2月10日 - **/ - @GetMapping(value = "/test") - public DocResponseJson test() throws Exception { - String path = getNodePath("com.zyplayer.dubbo.service.UserService", null, null, "dubbo-provider"); - if (metadataClient.checkExists().forPath(path) == null) { - return DocResponseJson.ok(path); - } - String metadata = new String(metadataClient.getData().forPath(path)); - FullServiceDefinition fullServiceDefinition = JSON.parseObject(metadata, FullServiceDefinition.class); - return DocResponseJson.ok(fullServiceDefinition); - } - /** * 获取文档详情,依据类名生成 * @@ -341,6 +326,7 @@ public class DubboController { * @since 2019年2月10日 **/ private List getDubboInfoByZookeeper() throws Exception { + this.initServerClient(); List dubboList = serverClient.getChildren().forPath("/dubbo"); if (dubboList == null || dubboList.isEmpty()) { return Collections.emptyList(); @@ -348,7 +334,7 @@ public class DubboController { List providerList = new LinkedList<>(); for (String dubboStr : dubboList) { String path = "/dubbo/" + dubboStr + "/providers"; - if (metadataClient.checkExists().forPath(path) == null) { + if (serverClient.checkExists().forPath(path) == null) { continue; } List providers = serverClient.getChildren().forPath(path); @@ -389,6 +375,7 @@ public class DubboController { private DubboDocInfo getDefinitionByMetadata(DubboRequestParam param) { try { + this.initMetadataClient(); String path = getNodePath(param.getService(), null, null, param.getApplication()); if (metadataClient.checkExists().forPath(path) == null) { return null; diff --git a/zyplayer-doc-manage/src/main/resources/application.yml b/zyplayer-doc-manage/src/main/resources/application.yml index 2a519d04..429e76f4 100644 --- a/zyplayer-doc-manage/src/main/resources/application.yml +++ b/zyplayer-doc-manage/src/main/resources/application.yml @@ -3,17 +3,16 @@ spring: name: zyplayer-doc-manage # mvc: # static-path-pattern: /** + servlet: + multipart: + max-file-size: 100MB + max-request-size: 100MB server: port: 8082 servlet: context-path: /zyplayer-doc-manage -multipart: - enabled: true - max-file-size: 100MB - max-request-size: 100MB - zyplayer: doc: # dubbo相关配置 diff --git a/zyplayer-doc-manage/src/test/java/com/zyplayer/doc/test/MediaTypeTest.java b/zyplayer-doc-manage/src/test/java/com/zyplayer/doc/test/MediaTypeTest.java new file mode 100644 index 00000000..0f610385 --- /dev/null +++ b/zyplayer-doc-manage/src/test/java/com/zyplayer/doc/test/MediaTypeTest.java @@ -0,0 +1,19 @@ +package com.zyplayer.doc.test; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; + +public class MediaTypeTest { + + public static void main(String[] args) throws IOException { +// MediaType xx = MediaType.parseMediaType("png"); +// System.out.println(xx.getSubtype()); + File file = new File("e:/tmp/wikiFiles/2019/03/04/dcf4b4357d5a454180cf54a5d8a2f868.jpg"); +// String path = file.get + + String contentType = Files.probeContentType(file.toPath()); + System.out.println(contentType); + } + +} 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 4960c91d..05b667f8 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 @@ -11,14 +11,17 @@ import com.zyplayer.doc.data.service.manage.WikiPageFileService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URLEncoder; +import java.nio.file.Files; import java.util.Date; /** @@ -41,30 +44,67 @@ public class WikiCommonController { @PostMapping("/upload") public ResponseJson upload(WikiPageFile wikiPageFile, @RequestParam("files") MultipartFile file) { //通过CommonsMultipartFile的方法直接写文件(注意这个时候) + String fileName = file.getOriginalFilename(); + String fileSuffix = ""; + if (fileName != null && fileName.lastIndexOf(".") >= 0) { + fileSuffix = fileName.substring(fileName.lastIndexOf(".")); + } + DocUserDetails currentUser = DocUserUtil.getCurrentUser(); + String path = uploadPath + "/" + DateTime.now().toString("yyyy/MM/dd") + "/"; + File newFile = new File(path); + if (!newFile.exists() && !newFile.mkdir()) { + return DocResponseJson.warn("创建文件夹失败"); + } + path += RandomUtil.simpleUUID() + fileSuffix; + newFile = new File(path); try { - String fileName = file.getOriginalFilename(); - String fileSuffix = fileName.substring(fileName.lastIndexOf(".")); - DocUserDetails currentUser = DocUserUtil.getCurrentUser(); - String path = uploadPath + "/" + DateTime.now().toString("yyyy/MM/dd") + "/"; - File newFile = new File(path); - if (!newFile.exists()) { - newFile.mkdir(); - } - path += RandomUtil.simpleUUID() + fileSuffix; - newFile = new File(path); file.transferTo(newFile); - wikiPageFile.setFileUrl(path); - wikiPageFile.setFileName(fileName); - wikiPageFile.setCreateTime(new Date()); - wikiPageFile.setCreateUserId(currentUser.getUserId()); - wikiPageFile.setCreateUserName(currentUser.getUsername()); - wikiPageFile.setDelFlag(0); } catch (Exception e) { e.printStackTrace(); - return DocResponseJson.warn("失败"); + return DocResponseJson.warn("保存文件失败"); } + 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?fileId=" + wikiPageFile.getId()); return DocResponseJson.ok(wikiPageFile); } + + @GetMapping("/file") + public ResponseJson file(Long fileId, HttpServletResponse response) { + if (fileId == null || fileId <= 0) { + return DocResponseJson.warn("请指定文件ID"); + } + WikiPageFile pageFile = wikiPageFileService.getById(fileId); + if (pageFile == null) { + return DocResponseJson.warn("未找到指定文件"); + } + try { + String fileName = pageFile.getFileName(); + File file = new File(pageFile.getFileUrl()); + String contentType = Files.probeContentType(file.toPath()); + response.setContentType(contentType); + 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("获取文件失败"); + } } 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 b00b0d36..498aaeaf 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,9 +8,11 @@ import com.zyplayer.doc.data.config.security.DocUserUtil; 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.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.wiki.controller.vo.WikiPageContentVo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -39,6 +41,8 @@ public class WikiPageController { WikiPageContentService wikiPageContentService; @Resource WikiPageFileService wikiPageFileService; + @Resource + WikiPageZanService wikiPageZanService; @PostMapping("/list") public ResponseJson> list(WikiPage wikiPage) { @@ -54,21 +58,31 @@ public class WikiPageController { @PostMapping("/detail") public ResponseJson detail(WikiPage wikiPage) { + DocUserDetails currentUser = DocUserUtil.getCurrentUser(); WikiPage wikiPageSel = wikiPageService.getById(wikiPage.getId()); UpdateWrapper wrapper = new UpdateWrapper<>(); wrapper.eq("page_id", wikiPage.getId()); WikiPageContent pageContent = wikiPageContentService.getOne(wrapper); + // TODO 检查space是否开放访问 UpdateWrapper wrapperFile = new UpdateWrapper<>(); wrapperFile.eq("page_id", wikiPage.getId()); - wrapper.eq("del_flag", 0); + wrapperFile.eq("del_flag", 0); List pageFiles = wikiPageFileService.list(wrapperFile); - + for (WikiPageFile pageFile : pageFiles) { + pageFile.setFileUrl("zyplayer-doc-wiki/common/file?fileId=" + pageFile.getId()); + } + 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); return DocResponseJson.ok(vo); } 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 f2877168..1a3a2912 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 @@ -1,21 +1,12 @@ package com.zyplayer.doc.wiki.controller; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; -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.WikiPageFile; import com.zyplayer.doc.data.service.manage.WikiPageFileService; 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.Date; -import java.util.List; /** * 文档控制器 @@ -31,28 +22,31 @@ public class WikiPageFileController { @Resource WikiPageFileService wikiPageFileService; - @PostMapping("/list") - public ResponseJson> list(WikiPageFile wikiPageFile) { - // TODO 检查space是否开放访问 - UpdateWrapper wrapper = new UpdateWrapper<>(); - wrapper.eq("del_flag", 0); - wrapper.eq("page_id", wikiPageFile.getPageId()); - List fileList = wikiPageFileService.list(wrapper); - return DocResponseJson.ok(fileList); - } - - @PostMapping("/update") - public ResponseJson update(WikiPageFile wikiPageFile) { - Long id = wikiPageFile.getId(); - if (id != null && id > 0) { - wikiPageFileService.updateById(wikiPageFile); - } else { - DocUserDetails currentUser = DocUserUtil.getCurrentUser(); - wikiPageFile.setCreateTime(new Date()); - wikiPageFile.setCreateUserId(currentUser.getUserId()); - wikiPageFileService.save(wikiPageFile); - } - return DocResponseJson.ok(); - } +// @PostMapping("/list") +// public ResponseJson> list(WikiPageFile wikiPageFile) { +// // TODO 检查space是否开放访问 +// UpdateWrapper wrapper = new UpdateWrapper<>(); +// wrapper.eq("del_flag", 0); +// wrapper.eq("page_id", wikiPageFile.getPageId()); +// List fileList = wikiPageFileService.list(wrapper); +// for (WikiPageFile pageFile : fileList) { +// pageFile.setFileUrl("zyplayer-doc-wiki/common/file?fileId=" + pageFile.getId()); +// } +// return DocResponseJson.ok(fileList); +// } +// +// @PostMapping("/update") +// public ResponseJson update(WikiPageFile wikiPageFile) { +// Long id = wikiPageFile.getId(); +// if (id != null && id > 0) { +// wikiPageFileService.updateById(wikiPageFile); +// } else { +// DocUserDetails currentUser = DocUserUtil.getCurrentUser(); +// wikiPageFile.setCreateTime(new Date()); +// wikiPageFile.setCreateUserId(currentUser.getUserId()); +// wikiPageFileService.save(wikiPageFile); +// } +// return DocResponseJson.ok(); +// } } 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 0634baf0..24bc408e 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 @@ -1,10 +1,7 @@ package com.zyplayer.doc.wiki.controller; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; 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.WikiPageZan; import com.zyplayer.doc.data.service.manage.WikiPageZanService; import org.slf4j.Logger; @@ -14,8 +11,6 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.Date; -import java.util.List; /** * 文档控制器 @@ -31,29 +26,18 @@ public class WikiPageZanController { @Resource WikiPageZanService wikiPageZanService; - @PostMapping("/list") - public ResponseJson> list(WikiPageZan wikiPageZan) { - UpdateWrapper wrapper = new UpdateWrapper<>(); - wrapper.eq("page_id", wikiPageZan.getPageId()); - wrapper.eq(wikiPageZan.getCommentId() != null, "comment_id", wikiPageZan.getCommentId()); - List zanList = wikiPageZanService.list(wrapper); - return DocResponseJson.ok(zanList); - } +// @PostMapping("/list") +// public ResponseJson> list(WikiPageZan wikiPageZan) { +// UpdateWrapper wrapper = new UpdateWrapper<>(); +// wrapper.eq("page_id", wikiPageZan.getPageId()); +// wrapper.eq(wikiPageZan.getCommentId() != null, "comment_id", wikiPageZan.getCommentId()); +// List zanList = wikiPageZanService.list(wrapper); +// return DocResponseJson.ok(zanList); +// } @PostMapping("/update") public ResponseJson update(WikiPageZan wikiPageZan) { - DocUserDetails currentUser = DocUserUtil.getCurrentUser(); - UpdateWrapper wrapper = new UpdateWrapper<>(); - wrapper.eq("create_uid", currentUser.getUserId()); - wrapper.eq("page_id", wikiPageZan.getPageId()); - wrapper.eq(wikiPageZan.getCommentId() != null, "comment_id", wikiPageZan.getCommentId()); - WikiPageZan pageZan = wikiPageZanService.getOne(wrapper); - if (pageZan != null) { - return DocResponseJson.warn("您已经赞过了哦~"); - } - wikiPageZan.setCreateTime(new Date()); - wikiPageZan.setCreateUserId(currentUser.getUserId()); - wikiPageZanService.save(wikiPageZan); + wikiPageZanService.zanPage(wikiPageZan); 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 dfce48e8..ed16b510 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 @@ -40,9 +40,9 @@ public class WikiSpaceController { wrapper.in("type", 1, 2); } else if(wikiSpace.getType() == 1 || wikiSpace.getType() == 2) { wrapper.eq(wikiSpace.getType() != null, "type", wikiSpace.getType()); - wrapper.eq(Objects.equals(wikiSpace.getType(), 2), "create_uid", wikiSpace.getCreateUserId()); + wrapper.eq(Objects.equals(wikiSpace.getType(), 2), "create_user_id", wikiSpace.getCreateUserId()); } else if(wikiSpace.getType() == 3) { - wrapper.eq("create_uid", currentUser.getUserId()); + wrapper.eq("create_user_id", currentUser.getUserId()); } List authList = wikiSpaceService.list(wrapper); return DocResponseJson.ok(authList); 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 284bf591..9d2b1023 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 @@ -10,6 +10,7 @@ public class WikiPageContentVo { private WikiPage wikiPage; private WikiPageContent pageContent; private List fileList; + private Integer selfZan; public WikiPage getWikiPage() { return wikiPage; @@ -34,4 +35,12 @@ public class WikiPageContentVo { public void setFileList(List fileList) { this.fileList = fileList; } + + public Integer getSelfZan() { + return selfZan; + } + + public void setSelfZan(Integer selfZan) { + this.selfZan = selfZan; + } } diff --git a/zyplayer-doc-wiki/src/main/resources/doc-wiki.html b/zyplayer-doc-wiki/src/main/resources/doc-wiki.html index 7e7ad9fa..a2b902e5 100644 --- a/zyplayer-doc-wiki/src/main/resources/doc-wiki.html +++ b/zyplayer-doc-wiki/src/main/resources/doc-wiki.html @@ -46,12 +46,14 @@ + :data="uploadFormData" + :limit="999"> 上传附件 @@ -69,6 +71,25 @@
+
+ + + + + + + 成为第一个赞同者 + {{wikiPage.zanNum}}人赞了它 + 我赞了它 + 我和{{wikiPage.zanNum-1}}个其他人赞了它 + +
+
+ +
+ 提交评论 +
+
@@ -141,6 +162,9 @@ pageContent: {}, pageFileList: [], uploadFileList: [], + uploadFormData: {pageId: 0}, + // 评论相关 + commentTextInput: "" } }, watch: { @@ -151,7 +175,26 @@ this.init(); }, methods: { - editWiki(){ + zanPage(yn) { + var param = {yn: yn, pageId: app.wikiPage.id}; + ajaxTemp("zyplayer-doc-wiki/page/zan/update", "post", "json", param, function (json) { + if (validateResult(json)) { + app.wikiPage.selfZan = yn; + app.wikiPage.zanNum = app.wikiPage.zanNum + (yn == 1 ? 1 : -1); + } + }); + }, + showZanPageUser() { + + }, + submitPageComment() { + Toast.success(app.commentTextInput); + }, + uploadFileSuccess(response) { + app.pageFileList.push(response.data); + Toast.success("上传成功!"); + }, + editWiki() { this.rightContentType = 2; this.newPageId = app.wikiPage.id; this.newPageTitle = app.wikiPage.name; @@ -183,7 +226,7 @@ ajaxTemp("zyplayer-doc-wiki/page/update", "post", "json", param, function (json) { if (validateResult(json)) { Toast.success("保存成功!"); - this.loadPageDetail(json.data.id); + app.loadPageDetail(json.data.id); } }); }, @@ -201,9 +244,12 @@ var param = {id: pageId}; ajaxTemp("zyplayer-doc-wiki/page/detail", "post", "json", param, function (json) { if (validateResult(json)) { - app.wikiPage = json.data.wikiPage || {}; + var wikiPage = json.data.wikiPage || {}; + wikiPage.selfZan = json.data.selfZan || 0; + app.wikiPage = wikiPage; app.pageContent = json.data.pageContent || {}; app.pageFileList = json.data.fileList || []; + app.uploadFormData = {pageId: app.wikiPage.id}; } }); }, @@ -278,6 +324,9 @@ .wiki-title{font-size: 20px;} .wiki-author{font-size: 14px;padding: 10px 0;} .wiki-content{font-size: 14px;} + + .upload-page-file .el-upload-list{display: none;} + .is-link{color: #1e88e5;cursor: pointer;} diff --git a/zyplayer-doc-wiki/src/main/resources/webjars/doc-wiki/img/zan.png b/zyplayer-doc-wiki/src/main/resources/webjars/doc-wiki/img/zan.png new file mode 100644 index 0000000000000000000000000000000000000000..ac302f3af5c286d251e007fe36c1180594ca34a9 GIT binary patch literal 433 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbMfiU6Mw*Z=?j7a)O}ni?Rls;UY| zHa9l|NuUUjJ89A+Afu?L2q^OM<;$|NG9Uw}_xtznU%!6+{Q2{T4IEg$ozXn>Vkgr>Co{3urRL*oumZl9Cdju`_4R z?Ca};NHsJx)YsPoEd|N~ErMA3$<3w{=w{uLAirP+L1UNDw6yZ_j*gkDb_2oPyLaE= z0)5=7B|weco-U3d5|X6{-ItNWUCaN&{iJ2X z`pu`kfB0!eRv|t$@;Dq-`nJGR+E<0^#jTHzz4|l`JTo>6xy;n? zTyk=<4uhYV&$%p)1ySmA0(0-PT&UNdzx_^zl9xBDgKvbLt7?&so}f+QV%Z1n`eO6= Vy{`C2C@LN)D{2$ literal 0 HcmV?d00001