目录更新优化-祖级列表

This commit is contained in:
cjw 2024-05-29 17:04:58 +08:00
parent 6892aecb56
commit ea0e4a0261
3 changed files with 81 additions and 2 deletions

View File

@ -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";
}

View File

@ -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<SysOssResource>()
.eq(SysOssResource::getCatalogId, catalogId));
}
/**
* 修改子元素关系
*
* @param catalogId 被修改的目录ID
* @param newAncestors 新的父ID集合
* @param oldAncestors 旧的父ID集合
*/
private void updateDeptChildren(Long catalogId, String newAncestors, String oldAncestors) {
List<SysCatalogResource> children = baseMapper.selectList(new LambdaQueryWrapper<SysCatalogResource>()
.apply(DataBaseHelper.findInSet(catalogId, "ancestors")));
List<SysCatalogResource> 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()));
}
}
}
}

View File

@ -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<SysOssTextbook>()
.eq(SysOssTextbook::getCatalogId, catalogId));
}
/**
* 修改子元素关系
*
* @param catalogId 被修改的目录ID
* @param newAncestors 新的父ID集合
* @param oldAncestors 旧的父ID集合
*/
private void updateDeptChildren(Long catalogId, String newAncestors, String oldAncestors) {
List<SysCatalogTextbook> children = baseMapper.selectList(new LambdaQueryWrapper<SysCatalogTextbook>()
.apply(DataBaseHelper.findInSet(catalogId, "ancestors")));
List<SysCatalogTextbook> 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()));
}
}
}
}