diff --git a/zyplayer-doc-core/pom.xml b/zyplayer-doc-core/pom.xml index 72be858d..2447c328 100644 --- a/zyplayer-doc-core/pom.xml +++ b/zyplayer-doc-core/pom.xml @@ -17,6 +17,7 @@ ${java.version} ${java.version} 1.2.53 + 4.1.6 @@ -35,5 +36,10 @@ fastjson ${fastjson.version} - + + com.github.pagehelper + pagehelper + ${pagehelper.version} + + diff --git a/zyplayer-doc-core/src/main/java/com/zyplayer/doc/core/json/DocResponseJson.java b/zyplayer-doc-core/src/main/java/com/zyplayer/doc/core/json/DocResponseJson.java index a4418749..4dbcc73a 100644 --- a/zyplayer-doc-core/src/main/java/com/zyplayer/doc/core/json/DocResponseJson.java +++ b/zyplayer-doc-core/src/main/java/com/zyplayer/doc/core/json/DocResponseJson.java @@ -3,6 +3,7 @@ package com.zyplayer.doc.core.json; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.serializer.SerializeConfig; import com.alibaba.fastjson.serializer.SimpleDateFormatSerializer; +import com.github.pagehelper.PageInfo; import io.swagger.annotations.ApiModelProperty; import javax.servlet.http.HttpServletResponse; @@ -25,13 +26,21 @@ public class DocResponseJson implements ResponseJson { @ApiModelProperty(value = "返回值说明") private String errMsg; @ApiModelProperty(value = "返回数据") - private T data; + private Object data; + @ApiModelProperty(value = "总数") + private Long total; + @ApiModelProperty(value = "当前页数") + private Integer pageNum; + @ApiModelProperty(value = "每页条数") + private Integer pageSize; + @ApiModelProperty(value = "总页数") + private Integer totalPage; public DocResponseJson() { this.errCode = 200; } - public DocResponseJson(T data) { + public DocResponseJson(Object data) { this.setData(data); this.errCode = 200; } @@ -42,7 +51,7 @@ public class DocResponseJson implements ResponseJson { this.errMsg = errMsg; } - public DocResponseJson(int errCode, String errMsg, T data) { + public DocResponseJson(int errCode, String errMsg, Object data) { super(); this.setData(data); this.errCode = errCode; @@ -69,13 +78,56 @@ public class DocResponseJson implements ResponseJson { public void setErrMsg(String errMsg) { this.errMsg = errMsg; } - - public T getData() { + + public Long getTotal() { + return total; + } + + public void setTotal(Long total) { + this.total = total; + } + + public Integer getPageNum() { + return pageNum; + } + + public void setPageNum(Integer pageNum) { + this.pageNum = pageNum; + } + + public Integer getPageSize() { + return pageSize; + } + + public void setPageSize(Integer pageSize) { + this.pageSize = pageSize; + } + + public Integer getTotalPage() { + return totalPage; + } + + public void setTotalPage(Integer totalPage) { + this.totalPage = totalPage; + } + + public Object getData() { return data; } - - public void setData(T data) { - this.data = data; + + public void setData(Object data) { + if (null != data) { + if (data instanceof PageInfo) { + PageInfo pageInfo = (PageInfo) data; + this.data = pageInfo.getList(); + this.total = pageInfo.getTotal(); + this.pageNum = pageInfo.getPageNum(); + this.pageSize = pageInfo.getPageSize(); + this.totalPage = pageInfo.getPages(); + } else { + this.data = data; + } + } } /** @@ -119,7 +171,7 @@ public class DocResponseJson implements ResponseJson { * @return */ public static DocResponseJson ok() { - return new DocResponseJson(); + return new DocResponseJson<>(); } /** @@ -129,11 +181,11 @@ public class DocResponseJson implements ResponseJson { * @since 2018年8月7日 * @return */ - public static DocResponseJson ok(T data) { + public static DocResponseJson ok(Object data) { if (data == null) { return DocResponseJson.ok(); } - DocResponseJson responseJson = new DocResponseJson(); + DocResponseJson responseJson = new DocResponseJson<>(); responseJson.setData(data); return responseJson; } diff --git a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/config/MybatisPlusConfig.java b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/config/MybatisPlusConfig.java index 58a2ce6f..f4346ea4 100644 --- a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/config/MybatisPlusConfig.java +++ b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/config/MybatisPlusConfig.java @@ -5,6 +5,7 @@ import com.atomikos.icatch.jta.UserTransactionManager; import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor; import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean; +import com.github.pagehelper.PageHelper; import com.zyplayer.doc.data.repository.support.interceptor.SqlLogInterceptor; import org.apache.ibatis.plugin.Interceptor; import org.mybatis.spring.annotation.MapperScan; @@ -27,52 +28,64 @@ import java.util.Properties; */ @Configuration public class MybatisPlusConfig { - + /** * sql日志 **/ private static final SqlLogInterceptor SQL_LOG_INTERCEPTOR; - + /** + * MYSQL 分页 + **/ + private static final PageHelper MYSQL_PAGE_HELPER; + static { - SQL_LOG_INTERCEPTOR = new SqlLogInterceptor(); - Properties properties = new Properties(); - SQL_LOG_INTERCEPTOR.setProperties(properties); + { + MYSQL_PAGE_HELPER = new PageHelper(); + Properties properties = new Properties(); + properties.setProperty("dialect", "mysql"); + MYSQL_PAGE_HELPER.setProperties(properties); + } + { + SQL_LOG_INTERCEPTOR = new SqlLogInterceptor(); + Properties properties = new Properties(); + SQL_LOG_INTERCEPTOR.setProperties(properties); + } } - + /** * 分布式事务配置 */ @Configuration static class JTATransactionManagerConfig { - + @Bean(name = "userTransaction") public UserTransaction userTransaction() throws Throwable { UserTransactionImp userTransactionImp = new UserTransactionImp(); userTransactionImp.setTransactionTimeout(300); return userTransactionImp; } - + @Bean(name = "atomikosTransactionManager") public TransactionManager atomikosTransactionManager() { UserTransactionManager userTransactionManager = new UserTransactionManager(); userTransactionManager.setForceShutdown(true); return userTransactionManager; } - + @Bean(name = "transactionManager") public PlatformTransactionManager transactionManager() throws Throwable { UserTransaction userTransaction = userTransaction(); TransactionManager atomikosTransactionManager = atomikosTransactionManager(); - + JtaTransactionManager jtaTransactionManager = new JtaTransactionManager(userTransaction, atomikosTransactionManager); jtaTransactionManager.setAllowCustomIsolationLevels(true); jtaTransactionManager.setGlobalRollbackOnParticipationFailure(true); jtaTransactionManager.setDefaultTimeout(30); - + return jtaTransactionManager; } } - + /** * 数据库配置 */ @@ -80,7 +93,7 @@ public class MybatisPlusConfig { @EnableTransactionManagement @MapperScan(value = "com.zyplayer.doc.data.repository.manage.mapper", sqlSessionFactoryRef = "manageSqlSessionFactory") static class ManageMybatisDbConfig { - + @Value("${zyplayer.doc.manage.datasource.driverClassName}") private String driverClassName; @Value("${zyplayer.doc.manage.datasource.url}") @@ -89,7 +102,7 @@ public class MybatisPlusConfig { private String username; @Value("${zyplayer.doc.manage.datasource.password}") private String password; - + @Bean(name = "manageDatasource") public DataSource manageDatasource() { Properties xaProperties = new Properties(); @@ -101,7 +114,7 @@ public class MybatisPlusConfig { xaProperties.setProperty("testOnBorrow", "true"); xaProperties.setProperty("testWhileIdle", "true"); xaProperties.setProperty("validationQuery", "select 'x'"); - + AtomikosDataSourceBean xaDataSource = new AtomikosDataSourceBean(); xaDataSource.setXaProperties(xaProperties); xaDataSource.setXaDataSourceClassName("com.alibaba.druid.pool.xa.DruidXADataSource"); @@ -111,19 +124,19 @@ public class MybatisPlusConfig { xaDataSource.setMaxLifetime(60); return xaDataSource; } - + @Bean(name = "manageSqlSessionFactory") public MybatisSqlSessionFactoryBean manageSqlSessionFactory() throws Exception { MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(manageDatasource()); - sqlSessionFactoryBean.setPlugins(new Interceptor[]{SQL_LOG_INTERCEPTOR}); - + sqlSessionFactoryBean.setPlugins(new Interceptor[]{SQL_LOG_INTERCEPTOR, MYSQL_PAGE_HELPER}); + PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath:/mapper/manage/*Mapper.xml")); return sqlSessionFactoryBean; } } - + @Bean public PerformanceInterceptor performanceInterceptor() { PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor(); @@ -133,7 +146,7 @@ public class MybatisPlusConfig { performanceInterceptor.setFormat(true); return performanceInterceptor; } - + @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); diff --git a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/entity/WikiPageContent.java b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/entity/WikiPageContent.java index 7c8d734e..d728b40a 100644 --- a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/entity/WikiPageContent.java +++ b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/entity/WikiPageContent.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; /** *

@@ -63,6 +64,11 @@ public class WikiPageContent implements Serializable { */ private Date updateTime; + /** + * 预览内容 + */ + private String preview; + public Long getId() { return id; } @@ -141,4 +147,12 @@ public class WikiPageContent implements Serializable { ", updateTime=" + updateTime + "}"; } + + public String getPreview() { + return preview; + } + + public void setPreview(String preview) { + this.preview = preview; + } } diff --git a/zyplayer-doc-manage/src/main/resources/sql/zyplayer_doc_manage.1.0.2.sql b/zyplayer-doc-manage/src/main/resources/sql/zyplayer_doc_manage.1.0.2.sql index e9c20762..bea8eff4 100644 --- a/zyplayer-doc-manage/src/main/resources/sql/zyplayer_doc_manage.1.0.2.sql +++ b/zyplayer-doc-manage/src/main/resources/sql/zyplayer_doc_manage.1.0.2.sql @@ -18,6 +18,7 @@ ALTER TABLE `wiki_page` ADD COLUMN `seq_no` int NOT NULL DEFAULT 0 COMMENT '顺 -- 初始化seq UPDATE wiki_page SET seq_no=id WHERE del_flag=0; +ALTER TABLE `wiki_page_content` ADD COLUMN `preview` varchar(1024) NULL COMMENT '预览内容'; -- 全新的库: diff --git a/zyplayer-doc-ui/wiki-ui/src/App.vue b/zyplayer-doc-ui/wiki-ui/src/App.vue index 74a24dc2..11c38e5f 100644 --- a/zyplayer-doc-ui/wiki-ui/src/App.vue +++ b/zyplayer-doc-ui/wiki-ui/src/App.vue @@ -275,7 +275,7 @@ } } app.doGetPageList(null); - app.$router.push({path: '/home'}); + app.$router.push({path: '/home', query: {spaceId: data}}); } }, loadSpaceList() { @@ -294,6 +294,7 @@ app.nowClickPath = {spaceId: spaceId}; app.choiceSpace = spaceId; app.doGetPageList(null); + app.$router.push({path: '/home', query: {spaceId: spaceId}}); } }); }, diff --git a/zyplayer-doc-ui/wiki-ui/src/common/config/apilist.js b/zyplayer-doc-ui/wiki-ui/src/common/config/apilist.js index 01f3bde1..568e34db 100644 --- a/zyplayer-doc-ui/wiki-ui/src/common/config/apilist.js +++ b/zyplayer-doc-ui/wiki-ui/src/common/config/apilist.js @@ -7,6 +7,7 @@ var URL = { pageList: '/zyplayer-doc-wiki/page/list', updatePage: '/zyplayer-doc-wiki/page/update', pageDetail: '/zyplayer-doc-wiki/page/detail', + pageNews: '/zyplayer-doc-wiki/page/news', spaceList: '/zyplayer-doc-wiki/space/list', updateSpace: '/zyplayer-doc-wiki/space/update', getPageUserAuthList: '/zyplayer-doc-wiki/page/auth/list', diff --git a/zyplayer-doc-ui/wiki-ui/src/views/home/Home.vue b/zyplayer-doc-ui/wiki-ui/src/views/home/Home.vue index 6fbe8c82..190012dd 100644 --- a/zyplayer-doc-ui/wiki-ui/src/views/home/Home.vue +++ b/zyplayer-doc-ui/wiki-ui/src/views/home/Home.vue @@ -1,39 +1,121 @@ diff --git a/zyplayer-doc-ui/wiki-ui/src/views/page/Edit.vue b/zyplayer-doc-ui/wiki-ui/src/views/page/Edit.vue index 314e4a64..63e84825 100644 --- a/zyplayer-doc-ui/wiki-ui/src/views/page/Edit.vue +++ b/zyplayer-doc-ui/wiki-ui/src/views/page/Edit.vue @@ -63,12 +63,17 @@ toast.warn("标题不能为空"); return; } + var preview = this.editor.txt.text(); + if (preview.length > 200) { + preview = preview.substring(0, 200) + '...'; + } var param = { spaceId: app.parentPath.spaceId, parentId: parentId, id: app.wikiPage.id, name: app.newPageTitle, - content: this.editor.txt.html() + content: this.editor.txt.html(), + preview: preview, }; this.common.post(this.apilist1.updatePage, param, function (json) { toast.success("保存成功!"); diff --git a/zyplayer-doc-ui/wiki-ui/src/views/page/Show.vue b/zyplayer-doc-ui/wiki-ui/src/views/page/Show.vue index 19135854..63cd554a 100644 --- a/zyplayer-doc-ui/wiki-ui/src/views/page/Show.vue +++ b/zyplayer-doc-ui/wiki-ui/src/views/page/Show.vue @@ -253,7 +253,7 @@ this.common.post(this.apilist1.updatePage, param, function (json) { // 重新加载左侧列表,跳转到展示页面 global.vue.$app.doGetPageList(null); - app.$router.push({path: '/home'}); + app.$router.push({path: '/home', query: {spaceId: app.nowClickPath.spaceId}}); }); }); }, 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 42d4531c..01da20d2 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 @@ -1,14 +1,19 @@ package com.zyplayer.doc.wiki.controller; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.zyplayer.doc.core.annotation.AuthMan; import com.zyplayer.doc.core.json.DocResponseJson; import com.zyplayer.doc.core.json.ResponseJson; -import com.zyplayer.doc.core.annotation.AuthMan; import com.zyplayer.doc.data.config.security.DocUserDetails; import com.zyplayer.doc.data.config.security.DocUserUtil; import com.zyplayer.doc.data.repository.manage.entity.*; import com.zyplayer.doc.data.repository.manage.mapper.WikiPageMapper; import com.zyplayer.doc.data.service.manage.*; +import com.zyplayer.doc.wiki.controller.param.SpaceNewsParam; +import com.zyplayer.doc.wiki.controller.vo.SpaceNewsVo; import com.zyplayer.doc.wiki.controller.vo.WikiPageContentVo; import com.zyplayer.doc.wiki.controller.vo.WikiPageVo; import com.zyplayer.doc.wiki.framework.consts.SpaceType; @@ -150,10 +155,11 @@ public class WikiPageController { } @PostMapping("/update") - public ResponseJson update(WikiPage wikiPage, String content) { + public ResponseJson update(WikiPage wikiPage, String content, String preview) { DocUserDetails currentUser = DocUserUtil.getCurrentUser(); WikiPageContent pageContent = new WikiPageContent(); pageContent.setContent(content); + pageContent.setPreview(preview); Integer delFlag = Optional.ofNullable(wikiPage.getDelFlag()).orElse(0); if (delFlag == 0 && StringUtils.isBlank(wikiPage.getName())) { return DocResponseJson.warn("标题不能为空!"); @@ -212,6 +218,56 @@ public class WikiPageController { return DocResponseJson.ok(wikiPage); } + @PostMapping("/news") + public ResponseJson news(SpaceNewsParam param) { + DocUserDetails currentUser = DocUserUtil.getCurrentUser(); + // 空间不是自己的 + Long spaceId = param.getSpaceId(); + if (spaceId == null || spaceId <= 0) { + return DocResponseJson.ok(); + } + WikiSpace wikiSpaceSel = wikiSpaceService.getById(spaceId); + if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) { + return DocResponseJson.ok(); + } + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("space_id", spaceId); + wrapper.eq("del_flag", 0); + wrapper.orderByDesc(param.getNewsType() == 1, "update_time"); + wrapper.orderByDesc(param.getNewsType() == 2, "create_time"); + wrapper.orderByDesc(param.getNewsType() == 3, "view_num"); + wrapper.orderByDesc(param.getNewsType() == 4, "zan_num"); + wrapper.orderByDesc(param.getNewsType() == 5, "view_num+zan_num"); + // 分页查询 + PageHelper.startPage(param.getPageNum(), param.getPageSize(), true); + List pageList = wikiPageService.list(wrapper); + PageInfo pageListPageInfo = new PageInfo<>(pageList); + if (pageList == null || pageList.isEmpty()) { + return DocResponseJson.ok(pageListPageInfo); + } + List pageIds = pageList.stream().map(WikiPage::getId).collect(Collectors.toList()); + QueryWrapper contentWrapper = new QueryWrapper<>(); + contentWrapper.in("page_id", pageIds); + contentWrapper.select("page_id", "preview"); + List pageContentList = wikiPageContentService.list(contentWrapper); + Map contentMap = pageContentList.stream() + .filter(val -> val.getPreview() != null) + .collect(Collectors.toMap(WikiPageContent::getPageId, WikiPageContent::getPreview)); + + List pageVoList = new LinkedList<>(); + pageList.forEach(val -> { + SpaceNewsVo spaceNewsVo = mapper.map(val, SpaceNewsVo.class); + spaceNewsVo.setSpaceName(wikiSpaceSel.getName()); + spaceNewsVo.setPreviewContent(contentMap.get(val.getId())); + spaceNewsVo.setPageTitle(val.getName()); + spaceNewsVo.setPageId(val.getId()); + pageVoList.add(spaceNewsVo); + }); + DocResponseJson responseJson = DocResponseJson.ok(pageListPageInfo); + responseJson.setData(pageVoList); + return responseJson; + } + private void setChildren(Map> listMap, List nodePageList, String path) { if (nodePageList == null || listMap == null) { return; diff --git a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/param/SpaceNewsParam.java b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/param/SpaceNewsParam.java new file mode 100644 index 00000000..052997ee --- /dev/null +++ b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/param/SpaceNewsParam.java @@ -0,0 +1,40 @@ +package com.zyplayer.doc.wiki.controller.param; + +public class SpaceNewsParam { + private Long spaceId; + private Integer newsType; + private Integer pageNum; + private Integer pageSize; + + public Integer getPageNum() { + return pageNum; + } + + public void setPageNum(Integer pageNum) { + this.pageNum = pageNum; + } + + public Integer getPageSize() { + return pageSize; + } + + public void setPageSize(Integer pageSize) { + this.pageSize = pageSize; + } + + public Long getSpaceId() { + return spaceId; + } + + public void setSpaceId(Long spaceId) { + this.spaceId = spaceId; + } + + public Integer getNewsType() { + return newsType; + } + + public void setNewsType(Integer newsType) { + this.newsType = newsType; + } +} diff --git a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/vo/SpaceNewsVo.java b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/vo/SpaceNewsVo.java new file mode 100644 index 00000000..ba5a4c7d --- /dev/null +++ b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/vo/SpaceNewsVo.java @@ -0,0 +1,106 @@ +package com.zyplayer.doc.wiki.controller.vo; + +import java.util.Date; + +public class SpaceNewsVo { + private Long spaceId; + private Long pageId; + private Integer zanNum; + private Integer viewNum; + private String createUserName; + private String updateUserName; + private Date createTime; + private Date updateTime; + + private String spaceName; + private String pageTitle; + private String previewContent; + + public Long getPageId() { + return pageId; + } + + public void setPageId(Long pageId) { + this.pageId = pageId; + } + + public Integer getZanNum() { + return zanNum; + } + + public void setZanNum(Integer zanNum) { + this.zanNum = zanNum; + } + + public Integer getViewNum() { + return viewNum; + } + + public void setViewNum(Integer viewNum) { + this.viewNum = viewNum; + } + + public String getCreateUserName() { + return createUserName; + } + + public void setCreateUserName(String createUserName) { + this.createUserName = createUserName; + } + + public String getUpdateUserName() { + return updateUserName; + } + + public void setUpdateUserName(String updateUserName) { + this.updateUserName = updateUserName; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public String getSpaceName() { + return spaceName; + } + + public void setSpaceName(String spaceName) { + this.spaceName = spaceName; + } + + public String getPageTitle() { + return pageTitle; + } + + public void setPageTitle(String pageTitle) { + this.pageTitle = pageTitle; + } + + public String getPreviewContent() { + return previewContent; + } + + public void setPreviewContent(String previewContent) { + this.previewContent = previewContent; + } + + public Long getSpaceId() { + return spaceId; + } + + public void setSpaceId(Long spaceId) { + this.spaceId = spaceId; + } +}