diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/file/SysCatalogPersonController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/file/SysCatalogPersonController.java index e294c2b..21c38d0 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/file/SysCatalogPersonController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/file/SysCatalogPersonController.java @@ -10,6 +10,7 @@ import org.dromara.common.idempotent.annotation.RepeatSubmit; import org.dromara.common.log.annotation.Log; import org.dromara.common.log.enums.BusinessType; import org.dromara.common.web.core.BaseController; +import org.dromara.system.domain.bo.CatalogDragBo; import org.dromara.system.domain.bo.SysCatalogPersonBo; import org.dromara.system.domain.vo.SysCatalogPersonVo; import org.dromara.system.service.ISysCatalogPersonService; @@ -103,4 +104,16 @@ public class SysCatalogPersonController extends BaseController { } return toAjax(personService.deleteById(catalogId)); } + + /** + * 拖动目录-我的空间 + * + * @param bo 拖动类 + */ + @SaCheckPermission("catalog:person:edit") + @Log(title = "拖动目录-我的空间", businessType = BusinessType.UPDATE) + @PostMapping("/drag") + public R drag(@Validated @RequestBody CatalogDragBo bo) { + return toAjax(personService.dragCatalog(bo)); + } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/file/SysCatalogResourceController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/file/SysCatalogResourceController.java index baf610c..2a4d74d 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/file/SysCatalogResourceController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/file/SysCatalogResourceController.java @@ -12,6 +12,7 @@ import org.dromara.common.log.enums.BusinessType; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.web.core.BaseController; +import org.dromara.system.domain.bo.CatalogDragBo; import org.dromara.system.domain.bo.SysCatalogResourceBo; import org.dromara.system.domain.vo.SysCatalogResourceVo; import org.dromara.system.service.ISysCatalogResourceService; @@ -119,4 +120,16 @@ public class SysCatalogResourceController extends BaseController { } return toAjax(resourceService.deleteById(catalogId)); } + + /** + * 拖动目录-专题资源 + * + * @param bo 拖动类 + */ + @SaCheckPermission("catalog:resource:edit") + @Log(title = "拖动目录-专题资源", businessType = BusinessType.UPDATE) + @PostMapping("/drag") + public R drag(@Validated @RequestBody CatalogDragBo bo) { + return toAjax(resourceService.dragCatalog(bo)); + } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysCatalogPersonMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysCatalogPersonMapper.java index 52282a2..da7ca6d 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysCatalogPersonMapper.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysCatalogPersonMapper.java @@ -1,6 +1,7 @@ package org.dromara.system.mapper; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import org.dromara.system.domain.SysCatalogPerson; import org.dromara.system.domain.vo.SysCatalogPersonVo; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; @@ -13,5 +14,7 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; */ @Mapper public interface SysCatalogPersonMapper extends BaseMapperPlus { + int addOrderNum(@Param("mix") Long mix, @Param("max") Long max); + int subOrderNum(@Param("mix") Long mix, @Param("max") Long max); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysCatalogResourceMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysCatalogResourceMapper.java index 8cb89ca..1e70c21 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysCatalogResourceMapper.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysCatalogResourceMapper.java @@ -21,4 +21,8 @@ public interface SysCatalogResourceMapper extends BaseMapperPlus selectProtalPageList(@Param("page") Page page, @Param("tenantId") String tenantId); long selectChildFileNumById(@Param("tenantId") String tenantId, @Param("catalogId") Long catalogId); + + int addOrderNum(@Param("mix") Long mix, @Param("max") Long max); + + int subOrderNum(@Param("mix") Long mix, @Param("max") Long max); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysCatalogPersonService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysCatalogPersonService.java index 2d435a3..295c4ad 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysCatalogPersonService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysCatalogPersonService.java @@ -2,6 +2,7 @@ package org.dromara.system.service; import com.baomidou.mybatisplus.core.conditions.Wrapper; import org.dromara.system.domain.SysCatalogPerson; +import org.dromara.system.domain.bo.CatalogDragBo; import org.dromara.system.domain.bo.SysCatalogPersonBo; import org.dromara.system.domain.vo.SysCatalogPersonVo; @@ -97,4 +98,11 @@ public interface ISysCatalogPersonService { String selectCatalogNameById(Long catalogId); List selectList(Wrapper queryWrapper); + + /** + * 目录拖动 + * @param bo + * @return + */ + boolean dragCatalog(CatalogDragBo bo); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysCatalogResourceService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysCatalogResourceService.java index 97f1382..1de8a7c 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysCatalogResourceService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysCatalogResourceService.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.system.domain.SysCatalogResource; +import org.dromara.system.domain.bo.CatalogDragBo; import org.dromara.system.domain.bo.SysCatalogResourceBo; import org.dromara.system.domain.vo.SysCatalogResourceVo; @@ -127,4 +128,6 @@ public interface ISysCatalogResourceService { * @return 下拉树结构列表 */ List> buildTreeSelect(SysCatalogResourceBo bo); + + boolean dragCatalog(CatalogDragBo bo); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysCatalogPersonServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysCatalogPersonServiceImpl.java index 3eb3f83..4e38b28 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysCatalogPersonServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysCatalogPersonServiceImpl.java @@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import org.dromara.common.core.constant.CacheNames; +import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.core.utils.StringUtils; @@ -16,6 +17,7 @@ import org.dromara.common.redis.utils.CacheUtils; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.system.domain.SysCatalogPerson; import org.dromara.system.domain.SysOssPerson; +import org.dromara.system.domain.bo.CatalogDragBo; import org.dromara.system.domain.bo.SysCatalogPersonBo; import org.dromara.system.domain.vo.SysCatalogPersonVo; import org.dromara.system.mapper.SysCatalogPersonMapper; @@ -178,6 +180,48 @@ public class SysCatalogPersonServiceImpl implements ISysCatalogPersonService { return baseMapper.selectList(queryWrapper); } + @Override + public boolean dragCatalog(CatalogDragBo bo) { + Long oldCatalogId = bo.getOldCatalog(); + Long newCatalogId = bo.getNewCatalog(); + SysCatalogPerson oldCatalog = baseMapper.selectById(oldCatalogId); + SysCatalogPerson newCatalog = baseMapper.selectById(newCatalogId); + if (!oldCatalog.getParentId().equals(newCatalog.getParentId())) { + throw new ServiceException("只支持同级目录的拖动"); + } + if (oldCatalogId.equals(newCatalogId)) { + throw new ServiceException("不支持单个目录的拖动"); + } + Long oldOrder = oldCatalog.getOrderNum(); + Long newOrder = newCatalog.getOrderNum(); + boolean upFlag = oldOrder > newOrder; + String position = bo.getPosition(); + //移动到new的前面 + if ("before".equals(position)) { + if (upFlag) { + //上移 + int i = baseMapper.addOrderNum(newOrder - 1, oldOrder); + } else { + //下移 + baseMapper.subOrderNum(oldOrder, newOrder); + } + } else if ("after".equals(position)) { + if (upFlag) { + //上移 + int i = baseMapper.addOrderNum(newOrder, oldOrder); + } else { + //下移 + baseMapper.subOrderNum(oldOrder, newOrder + 1); + } + } else { + throw new ServiceException("不支持的拖动方式"); + } + SysCatalogPerson update = new SysCatalogPerson(); + update.setCatalogId(oldCatalogId); + update.setOrderNum(newOrder); + return baseMapper.updateById(update) > 0; + } + /** * 修改子元素关系 * diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysCatalogResourceServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysCatalogResourceServiceImpl.java index 4a04475..9f9a978 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysCatalogResourceServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysCatalogResourceServiceImpl.java @@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; import org.dromara.common.core.constant.CacheNames; +import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.core.utils.StringUtils; @@ -21,6 +22,7 @@ import org.dromara.common.mybatis.helper.DataBaseHelper; import org.dromara.common.redis.utils.CacheUtils; import org.dromara.system.domain.SysCatalogResource; import org.dromara.system.domain.SysOssResource; +import org.dromara.system.domain.bo.CatalogDragBo; import org.dromara.system.domain.bo.SysCatalogResourceBo; import org.dromara.system.domain.vo.SysCatalogResourceVo; import org.dromara.system.mapper.SysCatalogResourceMapper; @@ -226,6 +228,48 @@ public class SysCatalogResourceServiceImpl implements ISysCatalogResourceService return buildCatalogTreeSelect(voList); } + @Override + public boolean dragCatalog(CatalogDragBo bo) { + Long oldCatalogId = bo.getOldCatalog(); + Long newCatalogId = bo.getNewCatalog(); + SysCatalogResource oldCatalog = baseMapper.selectById(oldCatalogId); + SysCatalogResource newCatalog = baseMapper.selectById(newCatalogId); + if (!oldCatalog.getParentId().equals(newCatalog.getParentId())) { + throw new ServiceException("只支持同级目录的拖动"); + } + if (oldCatalogId.equals(newCatalogId)) { + throw new ServiceException("不支持单个目录的拖动"); + } + Long oldOrder = oldCatalog.getOrderNum(); + Long newOrder = newCatalog.getOrderNum(); + boolean upFlag = oldOrder > newOrder; + String position = bo.getPosition(); + //移动到new的前面 + if ("before".equals(position)) { + if (upFlag) { + //上移 + int i = baseMapper.addOrderNum(newOrder - 1, oldOrder); + } else { + //下移 + baseMapper.subOrderNum(oldOrder, newOrder); + } + } else if ("after".equals(position)) { + if (upFlag) { + //上移 + int i = baseMapper.addOrderNum(newOrder, oldOrder); + } else { + //下移 + baseMapper.subOrderNum(oldOrder, newOrder + 1); + } + } else { + throw new ServiceException("不支持的拖动方式"); + } + SysCatalogResource update = new SysCatalogResource(); + update.setCatalogId(oldCatalogId); + update.setOrderNum(newOrder); + return baseMapper.updateById(update) > 0; + } + //@Override private List> buildCatalogTreeSelect(List catalogs) { if (CollUtil.isEmpty(catalogs)) { diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysCatalogPersonMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysCatalogPersonMapper.xml index eeb93cf..2ffafc8 100644 --- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysCatalogPersonMapper.xml +++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysCatalogPersonMapper.xml @@ -4,4 +4,30 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + update sys_catalog_person + set order_num = order_num + 1 + + + order_num > #{mix} + + + and order_num < #{max} + + + + + + update sys_catalog_person + set order_num = order_num - 1 + + + order_num > #{mix} + + + and order_num < #{max} + + + + diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysCatalogResourceMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysCatalogResourceMapper.xml index cd35ed5..ee4930b 100644 --- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysCatalogResourceMapper.xml +++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysCatalogResourceMapper.xml @@ -35,4 +35,30 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and r.status = 1 and FIND_IN_SET(#{catalogId}, cr.ancestors) + + + update sys_catalog_resource + set order_num = order_num + 1 + + + order_num > #{mix} + + + and order_num < #{max} + + + + + + update sys_catalog_resource + set order_num = order_num - 1 + + + order_num > #{mix} + + + and order_num < #{max} + + +