diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CacheNames.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CacheNames.java index 28ba177..576faea 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CacheNames.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CacheNames.java @@ -70,4 +70,7 @@ public interface CacheNames { */ String ONLINE_TOKEN = "online_tokens"; + String SYS_CATALOG_TEXTBOOK = "sys_catalog_textbook#30d"; + String SYS_CATALOG_RESOURCE = "sys_catalog_resource#30d"; + } diff --git a/ruoyi-modules/ruoyi-file/src/main/java/org/dromara/file/service/impl/SysCatalogResourceServiceImpl.java b/ruoyi-modules/ruoyi-file/src/main/java/org/dromara/file/service/impl/SysCatalogResourceServiceImpl.java index 092842b..3d91cbe 100644 --- a/ruoyi-modules/ruoyi-file/src/main/java/org/dromara/file/service/impl/SysCatalogResourceServiceImpl.java +++ b/ruoyi-modules/ruoyi-file/src/main/java/org/dromara/file/service/impl/SysCatalogResourceServiceImpl.java @@ -1,14 +1,18 @@ package org.dromara.file.service.impl; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.helper.DataBaseHelper; +import org.dromara.common.redis.utils.CacheUtils; import org.dromara.file.domain.SysCatalogResource; import org.dromara.file.domain.SysOssResource; import org.dromara.file.domain.bo.SysCatalogResourceBo; @@ -18,6 +22,7 @@ import org.dromara.file.mapper.SysOssResourceMapper; import org.dromara.file.service.ISysCatalogResourceService; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -103,7 +108,16 @@ public class SysCatalogResourceServiceImpl implements ISysCatalogResourceService @Override public Boolean updateByBo(SysCatalogResourceBo bo) { SysCatalogResource update = MapstructUtils.convert(bo, SysCatalogResource.class); - validEntityBeforeSave(update); + SysCatalogResource old = baseMapper.selectById(update.getCatalogId()); + if (!old.getParentId().equals(update.getParentId())) { + SysCatalogResource newParentDept = baseMapper.selectById(update.getParentId()); + if (ObjectUtil.isNotNull(newParentDept) && ObjectUtil.isNotNull(old)) { + String newAncestors = newParentDept.getAncestors() + StringUtils.SEPARATOR + newParentDept.getCatalogId(); + String oldAncestors = old.getAncestors(); + update.setAncestors(newAncestors); + updateDeptChildren(update.getCatalogId(), newAncestors, oldAncestors); + } + } return baseMapper.updateById(update) > 0; } @@ -145,4 +159,28 @@ public class SysCatalogResourceServiceImpl implements ISysCatalogResourceService return ossResourceMapper.exists(new LambdaQueryWrapper() .eq(SysOssResource::getCatalogId, catalogId)); } + + /** + * 修改子元素关系 + * + * @param catalogId 被修改的目录ID + * @param newAncestors 新的父ID集合 + * @param oldAncestors 旧的父ID集合 + */ + private void updateDeptChildren(Long catalogId, String newAncestors, String oldAncestors) { + List children = baseMapper.selectList(new LambdaQueryWrapper() + .apply(DataBaseHelper.findInSet(catalogId, "ancestors"))); + List list = new ArrayList<>(); + for (SysCatalogResource child : children) { + SysCatalogResource resource = new SysCatalogResource(); + resource.setCatalogId(child.getCatalogId()); + resource.setAncestors(child.getAncestors().replaceFirst(oldAncestors, newAncestors)); + list.add(resource); + } + if (CollUtil.isNotEmpty(list)) { + if (baseMapper.updateBatchById(list)) { + list.forEach(resource -> CacheUtils.evict(CacheNames.SYS_CATALOG_RESOURCE, resource.getCatalogId())); + } + } + } } diff --git a/ruoyi-modules/ruoyi-file/src/main/java/org/dromara/file/service/impl/SysCatalogTextbookServiceImpl.java b/ruoyi-modules/ruoyi-file/src/main/java/org/dromara/file/service/impl/SysCatalogTextbookServiceImpl.java index 92b3e60..70b3564 100644 --- a/ruoyi-modules/ruoyi-file/src/main/java/org/dromara/file/service/impl/SysCatalogTextbookServiceImpl.java +++ b/ruoyi-modules/ruoyi-file/src/main/java/org/dromara/file/service/impl/SysCatalogTextbookServiceImpl.java @@ -1,14 +1,18 @@ package org.dromara.file.service.impl; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.helper.DataBaseHelper; +import org.dromara.common.redis.utils.CacheUtils; import org.dromara.file.domain.SysCatalogTextbook; import org.dromara.file.domain.SysOssTextbook; import org.dromara.file.domain.bo.SysCatalogTextbookBo; @@ -18,6 +22,7 @@ import org.dromara.file.mapper.SysOssTextbookMapper; import org.dromara.file.service.ISysCatalogTextbookService; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -105,7 +110,16 @@ public class SysCatalogTextbookServiceImpl implements ISysCatalogTextbookService @Override public Boolean updateByBo(SysCatalogTextbookBo bo) { SysCatalogTextbook update = MapstructUtils.convert(bo, SysCatalogTextbook.class); - validEntityBeforeSave(update); + SysCatalogTextbook old = baseMapper.selectById(update.getCatalogId()); + if (!old.getParentId().equals(update.getParentId())) { + SysCatalogTextbook newParentDept = baseMapper.selectById(update.getParentId()); + if (ObjectUtil.isNotNull(newParentDept) && ObjectUtil.isNotNull(old)) { + String newAncestors = newParentDept.getAncestors() + StringUtils.SEPARATOR + newParentDept.getCatalogId(); + String oldAncestors = old.getAncestors(); + update.setAncestors(newAncestors); + updateDeptChildren(update.getCatalogId(), newAncestors, oldAncestors); + } + } return baseMapper.updateById(update) > 0; } @@ -147,4 +161,28 @@ public class SysCatalogTextbookServiceImpl implements ISysCatalogTextbookService return ossTextbookMapper.exists(new LambdaQueryWrapper() .eq(SysOssTextbook::getCatalogId, catalogId)); } + + /** + * 修改子元素关系 + * + * @param catalogId 被修改的目录ID + * @param newAncestors 新的父ID集合 + * @param oldAncestors 旧的父ID集合 + */ + private void updateDeptChildren(Long catalogId, String newAncestors, String oldAncestors) { + List children = baseMapper.selectList(new LambdaQueryWrapper() + .apply(DataBaseHelper.findInSet(catalogId, "ancestors"))); + List list = new ArrayList<>(); + for (SysCatalogTextbook child : children) { + SysCatalogTextbook textbook = new SysCatalogTextbook(); + textbook.setCatalogId(child.getCatalogId()); + textbook.setAncestors(child.getAncestors().replaceFirst(oldAncestors, newAncestors)); + list.add(textbook); + } + if (CollUtil.isNotEmpty(list)) { + if (baseMapper.updateBatchById(list)) { + list.forEach(textbook -> CacheUtils.evict(CacheNames.SYS_CATALOG_TEXTBOOK, textbook.getCatalogId())); + } + } + } }