From 5009007966de2d1c08f4586a6be71d3e604e4dcf Mon Sep 17 00:00:00 2001 From: fanxb Date: Thu, 18 Jul 2019 17:06:22 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Feat:=20[=E5=90=8E=E5=8F=B0]:?= =?UTF-8?q?=E5=AE=8C=E6=88=90=E8=8A=82=E7=82=B9=E7=BC=96=E8=BE=91=EF=BC=8C?= =?UTF-8?q?=E8=8A=82=E7=82=B9=E6=8B=96=E6=8B=BD=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/BookmarkController.java | 15 ++++++++ .../business/bookmark/dao/BookmarkDao.java | 38 ++++++++++++++++++- .../bookmark/entity/MoveNodeBody.java | 21 ++++++++++ .../bookmark/service/BookmarkService.java | 29 ++++++++++++-- .../mapper/bookmark-bookmarkMapper.xml | 18 +++++++++ 5 files changed, 116 insertions(+), 5 deletions(-) create mode 100644 bookMarkService/business/bookmark/src/main/java/com/fanxb/bookmark/business/bookmark/entity/MoveNodeBody.java diff --git a/bookMarkService/business/bookmark/src/main/java/com/fanxb/bookmark/business/bookmark/controller/BookmarkController.java b/bookMarkService/business/bookmark/src/main/java/com/fanxb/bookmark/business/bookmark/controller/BookmarkController.java index 379b057..1a83e03 100644 --- a/bookMarkService/business/bookmark/src/main/java/com/fanxb/bookmark/business/bookmark/controller/BookmarkController.java +++ b/bookMarkService/business/bookmark/src/main/java/com/fanxb/bookmark/business/bookmark/controller/BookmarkController.java @@ -1,6 +1,7 @@ package com.fanxb.bookmark.business.bookmark.controller; import com.fanxb.bookmark.business.bookmark.entity.BatchDeleteBody; +import com.fanxb.bookmark.business.bookmark.entity.MoveNodeBody; import com.fanxb.bookmark.business.bookmark.service.BookmarkService; import com.fanxb.bookmark.common.entity.Bookmark; import com.fanxb.bookmark.common.entity.Result; @@ -94,4 +95,18 @@ public class BookmarkController { return Result.success(null); } + /** + * Description: 移动一个节点 + * + * @param body body + * @return com.fanxb.bookmark.common.entity.Result + * @author fanxb + * @date 2019/7/18 10:54 + */ + @PostMapping("/moveNode") + public Result moveNode(@RequestBody MoveNodeBody body) { + bookmarkService.moveNode(UserContextHolder.get().getUserId(), body); + return Result.success(null); + } + } diff --git a/bookMarkService/business/bookmark/src/main/java/com/fanxb/bookmark/business/bookmark/dao/BookmarkDao.java b/bookMarkService/business/bookmark/src/main/java/com/fanxb/bookmark/business/bookmark/dao/BookmarkDao.java index e8191b4..2e06cbf 100644 --- a/bookMarkService/business/bookmark/src/main/java/com/fanxb/bookmark/business/bookmark/dao/BookmarkDao.java +++ b/bookMarkService/business/bookmark/src/main/java/com/fanxb/bookmark/business/bookmark/dao/BookmarkDao.java @@ -93,9 +93,45 @@ public interface BookmarkDao { /** * Description: 编辑书签 * + * @param bookmark bookmark * @author fanxb * @date 2019/7/17 14:49 - * @param bookmark bookmark */ void editBookmark(Bookmark bookmark); + + /** + * Description: path下sort>=某个值的sort自增1 + * + * @param userId userId + * @param path path + * @param sort sort + * @author fanxb + * @date 2019/7/18 10:13 + */ + void sortPlus(@Param("userId") int userId, @Param("path") String path, @Param("sort") int sort); + + /** + * Description: 更新某个路径下所有子节点的路径信息 + * + * @param userId userId + * @param oldPath oldPath + * @param newPath newPath + * @author fanxb + * @date 2019/7/18 10:35 + */ + void updateChildrenPath(@Param("userId") int userId, @Param("oldPath") String oldPath, @Param("newPath") String newPath); + + /** + * Description: 更新某个书签的path,sort + * + * @param userId userId + * @param bookmarkId bookmarkId + * @param path path + * @param sort sort + * @author fanxb + * @date 2019/7/18 10:37 + */ + void updatePathAndSort(@Param("userId") int userId, @Param("bookmarkId") int bookmarkId, @Param("path") String path, @Param("sort") int sort); + + } diff --git a/bookMarkService/business/bookmark/src/main/java/com/fanxb/bookmark/business/bookmark/entity/MoveNodeBody.java b/bookMarkService/business/bookmark/src/main/java/com/fanxb/bookmark/business/bookmark/entity/MoveNodeBody.java new file mode 100644 index 0000000..4d65c61 --- /dev/null +++ b/bookMarkService/business/bookmark/src/main/java/com/fanxb/bookmark/business/bookmark/entity/MoveNodeBody.java @@ -0,0 +1,21 @@ +package com.fanxb.bookmark.business.bookmark.entity; + +import lombok.Data; + +/** + * 类功能简述: 移动节点表单 + * 类功能详述: + * + * @author fanxb + * @date 2019/7/18 10:04 + */ +@Data +public class MoveNodeBody { + int bookmarkId; + String sourcePath; + String targetPath; + /** + * sort -1,表示移动到某个文件夹下,放到最后 + */ + int sort; +} diff --git a/bookMarkService/business/bookmark/src/main/java/com/fanxb/bookmark/business/bookmark/service/BookmarkService.java b/bookMarkService/business/bookmark/src/main/java/com/fanxb/bookmark/business/bookmark/service/BookmarkService.java index 1bda96e..a2f6b60 100644 --- a/bookMarkService/business/bookmark/src/main/java/com/fanxb/bookmark/business/bookmark/service/BookmarkService.java +++ b/bookMarkService/business/bookmark/src/main/java/com/fanxb/bookmark/business/bookmark/service/BookmarkService.java @@ -1,6 +1,7 @@ package com.fanxb.bookmark.business.bookmark.service; import com.fanxb.bookmark.business.bookmark.dao.BookmarkDao; +import com.fanxb.bookmark.business.bookmark.entity.MoveNodeBody; import com.fanxb.bookmark.common.entity.Bookmark; import com.fanxb.bookmark.common.exception.CustomException; import com.fanxb.bookmark.common.util.UserContextHolder; @@ -95,7 +96,9 @@ public class BookmarkService { bookmarkDao.deleteUserFolder(userId, item); bookmarkIdList.add(item); } - bookmarkDao.deleteUserBookmark(userId, bookmarkIdList); + if (bookmarkIdList.size() > 0) { + bookmarkDao.deleteUserBookmark(userId, bookmarkIdList); + } } /** @@ -124,12 +127,12 @@ public class BookmarkService { /** * Description: 编辑某个用户的某个书签 * + * @param userId userId + * @param bookmark bookmark * @author fanxb * @date 2019/7/17 14:42 - * @param userId userId - * @param bookmark bookmark */ - public void updateOne(int userId,Bookmark bookmark){ + public void updateOne(int userId, Bookmark bookmark) { bookmark.setUserId(userId); bookmarkDao.editBookmark(bookmark); } @@ -193,4 +196,22 @@ public class BookmarkService { } } + @Transactional(rollbackFor = Exception.class) + public void moveNode(int userId, MoveNodeBody body) { + if (body.getSort() == -1) { + Integer max = bookmarkDao.selectMaxSort(userId, body.getTargetPath()); + body.setSort(max == null ? 1 : max); + } else { + //更新目标节点的sort + bookmarkDao.sortPlus(userId, body.getTargetPath(), body.getSort()); + } + //如果目标位置和当前位置不在一个层级中需要更新子节点的path + if (!body.getTargetPath().equals(body.getSourcePath())) { + bookmarkDao.updateChildrenPath(userId, body.getSourcePath() + "." + body.getBookmarkId() + , body.getTargetPath() + "." + body.getBookmarkId()); + } + //更新被移动节点的path和sort + bookmarkDao.updatePathAndSort(userId, body.getBookmarkId(), body.getTargetPath(), body.getSort()); + } + } diff --git a/bookMarkService/business/bookmark/src/main/resources/mapper/bookmark-bookmarkMapper.xml b/bookMarkService/business/bookmark/src/main/resources/mapper/bookmark-bookmarkMapper.xml index 4157b0f..9ea4498 100644 --- a/bookMarkService/business/bookmark/src/main/resources/mapper/bookmark-bookmarkMapper.xml +++ b/bookMarkService/business/bookmark/src/main/resources/mapper/bookmark-bookmarkMapper.xml @@ -81,5 +81,23 @@ where bookmarkId = #{bookmarkId} and userId = #{userId} + + update bookmark + set sort = sort + 1 + where userId = #{userId} and path = #{path} and sort >= #{sort} + + + + update bookmark + set path = replace(path, #{oldPath}, #{newPath}) + where userId = #{userId} and path like concat(#{oldPath}, "%") + + + + update bookmark + set path = #{path}, sort = #{sort} + where userId = #{userId} and bookmarkId = #{bookmarkId} + + \ No newline at end of file