From f9d53da7fe963af676f6e610d7134071a79c73f0 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: Mon, 10 Jun 2019 21:15:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=8B=96=E5=8A=A8=E6=94=B9?= =?UTF-8?q?=E5=8F=98=E6=96=87=E7=AB=A0=E9=A1=BA=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/manage/entity/WikiPage.java | 15 +++++++++- .../manage/mapper/WikiPageMapper.java | 7 +++++ .../data/service/manage/WikiPageService.java | 2 ++ .../manage/impl/WikiPageServiceImpl.java | 28 +++++++++++++++++-- .../zyplayer/doc/data/utils/CacheUtil.java | 2 +- .../sql/zyplayer_doc_manage.1.0.2.sql | 8 +++--- zyplayer-doc-ui/wiki-ui/src/App.vue | 7 ++++- .../wiki/controller/WikiPageController.java | 13 +++++++-- 8 files changed, 71 insertions(+), 11 deletions(-) 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 d43cd579..eced80ce 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-06-05 + * @since 2019-06-06 */ public class WikiPage implements Serializable { @@ -94,6 +94,11 @@ public class WikiPage implements Serializable { */ private Integer viewNum; + /** + * 顺序 + */ + private Integer seqNo; + public Long getId() { return id; } @@ -199,6 +204,13 @@ public class WikiPage implements Serializable { public void setViewNum(Integer viewNum) { this.viewNum = viewNum; } + public Integer getSeqNo() { + return seqNo; + } + + public void setSeqNo(Integer seqNo) { + this.seqNo = seqNo; + } @Override public String toString() { @@ -218,6 +230,7 @@ public class WikiPage implements Serializable { ", updateTime=" + updateTime + ", delFlag=" + delFlag + ", viewNum=" + viewNum + + ", seqNo=" + seqNo + "}"; } } 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 fcac7c85..64d90b5c 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 @@ -3,6 +3,7 @@ package com.zyplayer.doc.data.repository.manage.mapper; 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.Select; import org.apache.ibatis.annotations.Update; /** @@ -17,4 +18,10 @@ 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); + + @Update("update wiki_page set seq_no=seq_no + 1 where parent_id=#{parentId} and seq_no >= #{afterSeq} and del_flag=0") + void updateAfterSeq(@Param("parentId") Long parentId, @Param("afterSeq") Integer afterSeq); + + @Select("select max(seq_no) from wiki_page where parent_id=#{parentId} and del_flag=0") + Integer getLastSeq(@Param("parentId") Long parentId); } 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 a482c486..71029cc2 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 @@ -13,4 +13,6 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface WikiPageService extends IService { + void changeParent(WikiPage wikiPage, Integer beforeSeq, Integer afterSeq); + } 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 cd809ebf..0bea6ba4 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 @@ -1,11 +1,14 @@ package com.zyplayer.doc.data.service.manage.impl; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.zyplayer.doc.data.repository.manage.entity.WikiPage; import com.zyplayer.doc.data.repository.manage.mapper.WikiPageMapper; import com.zyplayer.doc.data.service.manage.WikiPageService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.util.Optional; + /** *

* 服务实现类 @@ -16,5 +19,26 @@ import org.springframework.stereotype.Service; */ @Service public class WikiPageServiceImpl extends ServiceImpl implements WikiPageService { - + + @Resource + WikiPageMapper wikiPageMapper; + + @Override + public void changeParent(WikiPage wikiPage, Integer beforeSeq, Integer afterSeq) { + if (beforeSeq != null && beforeSeq >= 0) { + // 在此seq之前 + wikiPageMapper.updateAfterSeq(wikiPage.getParentId(), beforeSeq); + wikiPage.setSeqNo(beforeSeq); + } else if (afterSeq != null && afterSeq >= 0) { + // 在此seq之后 + wikiPageMapper.updateAfterSeq(wikiPage.getParentId(), afterSeq + 1); + wikiPage.setSeqNo(afterSeq + 1); + } else { + // 放在末尾 + Integer lastSeq = wikiPageMapper.getLastSeq(wikiPage.getParentId()); + lastSeq = Optional.ofNullable(lastSeq).orElse(0); + wikiPage.setSeqNo(lastSeq + 1); + } + this.updateById(wikiPage); + } } diff --git a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/utils/CacheUtil.java b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/utils/CacheUtil.java index 252eb0e1..b65c96fb 100644 --- a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/utils/CacheUtil.java +++ b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/utils/CacheUtil.java @@ -32,7 +32,7 @@ public class CacheUtil { } }, 0, 1000); } - + // 现在是内存缓存,不支持分布式部署,后期考虑放到redis,但感觉也没必要。。 private static Map cacheMap = new ConcurrentHashMap<>(); private static Map cacheTimeMap = new ConcurrentHashMap<>(); 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 4715d53f..e9c20762 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 @@ -1,6 +1,5 @@ -- 从1.0.1版本升级: --- 直接存权限名,不搞中间表了 ALTER TABLE `user_auth` ADD COLUMN `auth_custom_suffix` varchar(100) NULL COMMENT '自定义权限结尾'; INSERT INTO `auth_info`(`auth_name`, `auth_desc`, `can_edit`, `create_uid`, `creation_time`) @@ -15,9 +14,10 @@ VALUES ; ALTER TABLE `wiki_page` ADD COLUMN `view_num` int NOT NULL DEFAULT 0 COMMENT '阅读数'; +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; - - --- 权限的库: +-- 全新的库: diff --git a/zyplayer-doc-ui/wiki-ui/src/App.vue b/zyplayer-doc-ui/wiki-ui/src/App.vue index 7629f3d6..74a24dc2 100644 --- a/zyplayer-doc-ui/wiki-ui/src/App.vue +++ b/zyplayer-doc-ui/wiki-ui/src/App.vue @@ -218,11 +218,16 @@ } }, handlePageDrop(draggingNode, dropNode, dropType, ev) { - //console.log('tree drop: ', draggingNode.data, dropNode.data, dropType); + console.log('tree drop: ', draggingNode.data, dropNode.data, dropType); // 'prev'、'inner'、'next' + // before、after、inner var param = {id: draggingNode.data.id, parentId: dropNode.data.parentId}; if (dropType == 'inner') { param.parentId = dropNode.data.id; + } else if (dropType == 'before') { + param.beforeSeq = dropNode.data.seqNo; + } else if (dropType == 'after') { + param.afterSeq = dropNode.data.seqNo; } this.common.post(this.apilist1.pageChangeParent, param, function (json) { app.doGetPageList(null); 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 89a3bc9c..63911c13 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 @@ -7,6 +7,7 @@ import com.zyplayer.doc.data.aspect.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.vo.WikiPageContentVo; import com.zyplayer.doc.wiki.controller.vo.WikiPageVo; @@ -47,6 +48,8 @@ public class WikiPageController { @Resource WikiSpaceService wikiSpaceService; @Resource + WikiPageMapper wikiPageMapper; + @Resource Mapper mapper; @PostMapping("/list") @@ -66,9 +69,11 @@ public class WikiPageController { List nodePageList; if (wikiPage.getParentId() == null) { nodePageList = listMap.get(0L); + nodePageList = nodePageList.stream().sorted(Comparator.comparingInt(WikiPage::getSeqNo)).collect(Collectors.toList()); this.setChildren(listMap, nodePageList, ""); } else { nodePageList = listMap.get(wikiPage.getParentId()); + nodePageList = nodePageList.stream().sorted(Comparator.comparingInt(WikiPage::getSeqNo)).collect(Collectors.toList()); } return DocResponseJson.ok(nodePageList); } @@ -115,7 +120,7 @@ public class WikiPageController { } @PostMapping("/changeParent") - public ResponseJson changeParent(WikiPage wikiPage) { + public ResponseJson changeParent(WikiPage wikiPage, Integer beforeSeq, Integer afterSeq) { DocUserDetails currentUser = DocUserUtil.getCurrentUser(); Long id = wikiPage.getId(); WikiPage wikiPageSel = wikiPageService.getById(id); @@ -140,7 +145,7 @@ public class WikiPageController { wikiPageUp.setUpdateTime(new Date()); wikiPageUp.setUpdateUserId(currentUser.getUserId()); wikiPageUp.setUpdateUserName(currentUser.getUsername()); - wikiPageService.updateById(wikiPage); + wikiPageService.changeParent(wikiPage, beforeSeq, afterSeq); return DocResponseJson.ok(); } @@ -190,6 +195,9 @@ public class WikiPageController { if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) { return DocResponseJson.warn("您没有权限新增该空间的文章!"); } + Integer lastSeq = wikiPageMapper.getLastSeq(wikiPage.getParentId()); + lastSeq = Optional.ofNullable(lastSeq).orElse(0); + wikiPage.setSeqNo(lastSeq + 1); wikiPage.setCreateTime(new Date()); wikiPage.setCreateUserId(currentUser.getUserId()); wikiPage.setCreateUserName(currentUser.getUsername()); @@ -213,6 +221,7 @@ public class WikiPageController { page.setPath(nowPath); List wikiPageVos = listMap.get(page.getId()); if (wikiPageVos != null && wikiPageVos.size() > 0) { + wikiPageVos = wikiPageVos.stream().sorted(Comparator.comparingInt(WikiPage::getSeqNo)).collect(Collectors.toList()); page.setChildren(wikiPageVos); this.setChildren(listMap, wikiPageVos, nowPath); }