目录更新优化-祖级列表
This commit is contained in:
parent
6892aecb56
commit
ea0e4a0261
|
@ -70,4 +70,7 @@ public interface CacheNames {
|
||||||
*/
|
*/
|
||||||
String ONLINE_TOKEN = "online_tokens";
|
String ONLINE_TOKEN = "online_tokens";
|
||||||
|
|
||||||
|
String SYS_CATALOG_TEXTBOOK = "sys_catalog_textbook#30d";
|
||||||
|
String SYS_CATALOG_RESOURCE = "sys_catalog_resource#30d";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,18 @@
|
||||||
package org.dromara.file.service.impl;
|
package org.dromara.file.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.dromara.common.core.constant.CacheNames;
|
||||||
import org.dromara.common.core.utils.MapstructUtils;
|
import org.dromara.common.core.utils.MapstructUtils;
|
||||||
import org.dromara.common.core.utils.StringUtils;
|
import org.dromara.common.core.utils.StringUtils;
|
||||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
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.SysCatalogResource;
|
||||||
import org.dromara.file.domain.SysOssResource;
|
import org.dromara.file.domain.SysOssResource;
|
||||||
import org.dromara.file.domain.bo.SysCatalogResourceBo;
|
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.dromara.file.service.ISysCatalogResourceService;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
@ -103,7 +108,16 @@ public class SysCatalogResourceServiceImpl implements ISysCatalogResourceService
|
||||||
@Override
|
@Override
|
||||||
public Boolean updateByBo(SysCatalogResourceBo bo) {
|
public Boolean updateByBo(SysCatalogResourceBo bo) {
|
||||||
SysCatalogResource update = MapstructUtils.convert(bo, SysCatalogResource.class);
|
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;
|
return baseMapper.updateById(update) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -145,4 +159,28 @@ public class SysCatalogResourceServiceImpl implements ISysCatalogResourceService
|
||||||
return ossResourceMapper.exists(new LambdaQueryWrapper<SysOssResource>()
|
return ossResourceMapper.exists(new LambdaQueryWrapper<SysOssResource>()
|
||||||
.eq(SysOssResource::getCatalogId, catalogId));
|
.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()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,18 @@
|
||||||
package org.dromara.file.service.impl;
|
package org.dromara.file.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.dromara.common.core.constant.CacheNames;
|
||||||
import org.dromara.common.core.utils.MapstructUtils;
|
import org.dromara.common.core.utils.MapstructUtils;
|
||||||
import org.dromara.common.core.utils.StringUtils;
|
import org.dromara.common.core.utils.StringUtils;
|
||||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
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.SysCatalogTextbook;
|
||||||
import org.dromara.file.domain.SysOssTextbook;
|
import org.dromara.file.domain.SysOssTextbook;
|
||||||
import org.dromara.file.domain.bo.SysCatalogTextbookBo;
|
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.dromara.file.service.ISysCatalogTextbookService;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
@ -105,7 +110,16 @@ public class SysCatalogTextbookServiceImpl implements ISysCatalogTextbookService
|
||||||
@Override
|
@Override
|
||||||
public Boolean updateByBo(SysCatalogTextbookBo bo) {
|
public Boolean updateByBo(SysCatalogTextbookBo bo) {
|
||||||
SysCatalogTextbook update = MapstructUtils.convert(bo, SysCatalogTextbook.class);
|
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;
|
return baseMapper.updateById(update) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -147,4 +161,28 @@ public class SysCatalogTextbookServiceImpl implements ISysCatalogTextbookService
|
||||||
return ossTextbookMapper.exists(new LambdaQueryWrapper<SysOssTextbook>()
|
return ossTextbookMapper.exists(new LambdaQueryWrapper<SysOssTextbook>()
|
||||||
.eq(SysOssTextbook::getCatalogId, catalogId));
|
.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()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue