资源上传同级目录校验;我的空间相关接口;

This commit is contained in:
cjw 2024-06-18 16:38:35 +08:00
parent 245350d233
commit 506a7a2dc8
17 changed files with 168 additions and 50 deletions

View File

@ -143,6 +143,7 @@ tenant:
- sys_oss_config
- sys_oss_resource
- sys_oss_textbook
- sys_oss_person
# MyBatisPlus配置
# https://baomidou.com/config/

View File

@ -78,5 +78,6 @@ public interface CacheNames {
String SYS_CATALOG_TEXTBOOK = "sys_catalog_textbook#30d";
String SYS_CATALOG_RESOURCE = "sys_catalog_resource#30d";
String SYS_CATALOG_PERSON = "sys_catalog_person#30d";
}

View File

@ -76,6 +76,9 @@ public class SysCatalogTextbookController extends BaseController {
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody SysCatalogTextbookBo bo) {
if (!textbookService.checkNameUnique(bo)) {
return R.fail("新增'" + bo.getCatalogName() + "'失败,名称已存在");
}
return toAjax(textbookService.insertByBo(bo));
}
@ -87,6 +90,12 @@ public class SysCatalogTextbookController extends BaseController {
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody SysCatalogTextbookBo bo) {
Long catalogId = bo.getCatalogId();
if (!textbookService.checkNameUnique(bo)) {
return R.fail("修改'" + bo.getCatalogName() + "'失败,名称已存在");
} else if (bo.getParentId().equals(catalogId)) {
return R.fail("修改'" + bo.getCatalogName() + "'失败,上级不能是自己");
}
return toAjax(textbookService.updateByBo(bo));
}
@ -100,6 +109,12 @@ public class SysCatalogTextbookController extends BaseController {
@DeleteMapping("/{catalogId}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long catalogId) {
if (textbookService.hasChildByCatalogId(catalogId)) {
return R.warn("存在下级,不允许删除");
}
if (textbookService.checkCatalogExistFile(catalogId)) {
return R.warn("存在文件,不允许删除");
}
return toAjax(textbookService.deleteById(catalogId));
}
}

View File

@ -40,8 +40,8 @@ public class SysOssPersonController extends BaseController {
/**
* 查询资源-我的空间列表
*/
@SaCheckPermission("oss:person:list")
@GetMapping("/list")
@SaCheckPermission("oss:person:pageList")
@GetMapping("/pageList")
public TableDataInfo<SysOssPersonVo> list(SysOssPersonBo bo, PageQuery pageQuery) {
return sysOssPersonService.queryPageList(bo, pageQuery);
}

View File

@ -28,11 +28,6 @@ public class SysCatalogPerson extends TenantEntity {
@TableId(value = "catalog_id")
private Long catalogId;
/**
* 用户编号
*/
private Long userId;
/**
* 父目录id
*/

View File

@ -26,12 +26,6 @@ public class SysCatalogPersonBo extends BaseEntity {
@NotNull(message = "目录id不能为空", groups = { EditGroup.class })
private Long catalogId;
/**
* 用户编号
*/
@NotNull(message = "用户编号不能为空", groups = { AddGroup.class, EditGroup.class })
private Long userId;
/**
* 父目录id
*/

View File

@ -1,8 +1,13 @@
package org.dromara.system.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.system.domain.SysOssPerson;
import org.dromara.system.domain.vo.SysOssPersonVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 资源-我的空间Mapper接口
@ -10,6 +15,10 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
* @author cjw
* @date 2024-06-13
*/
@Mapper
public interface SysOssPersonMapper extends BaseMapperPlus<SysOssPerson, SysOssPersonVo> {
Page<SysOssPersonVo> selectPageList(@Param("page") Page<SysOssPerson> page,
@Param(Constants.WRAPPER) Wrapper<SysOssPerson> queryWrapper);
}

View File

@ -25,7 +25,7 @@ public interface SysOssResourceMapper extends BaseMapperPlus<SysOssResource, Sys
@Param(Constants.WRAPPER) Wrapper<SysOssResource> queryWrapper);
@DataPermission({
@DataColumn(key = "userName", value = "create_by")
@DataColumn(key = "userName", value = "r.create_by")
})
Page<SysOssResourceVo> selectPageAwaitList(@Param("page") Page<SysOssTextbook> page,
@Param(Constants.WRAPPER) Wrapper<SysOssTextbook> queryWrapper);

View File

@ -23,7 +23,7 @@ public interface SysOssTextbookMapper extends BaseMapperPlus<SysOssTextbook, Sys
Page<SysOssTextbookVo> selectPageList(@Param("page") Page<SysOssTextbook> page,
@Param(Constants.WRAPPER) Wrapper<SysOssTextbook> queryWrapper);
@DataPermission({
@DataColumn(key = "userName", value = "create_by")
@DataColumn(key = "userName", value = "ot.create_by")
})
Page<SysOssTextbookVo> selectPageAwaitList(@Param("page") Page<SysOssTextbook> page,
@Param(Constants.WRAPPER) Wrapper<SysOssTextbook> queryWrapper);

View File

@ -1,5 +1,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.SysCatalogPersonBo;
import org.dromara.system.domain.vo.SysCatalogPersonVo;
@ -77,4 +79,22 @@ public interface ISysCatalogPersonService {
* @return 结果 true 存在 false 不存在
*/
boolean checkCatalogExistFile(Long catalogId);
/**
* 根据ID查询信息
*
* @param catalogId 目录ID
* @return 目录信息
*/
SysCatalogPersonVo selectCatalogById(Long catalogId);
/**
* 通过ID查询目录名称(包含自身)
*
* @param catalogId ID
* @return 目录名称串/分隔
*/
String selectCatalogNameById(Long catalogId);
List<SysCatalogPerson> selectList(Wrapper<SysCatalogPerson> queryWrapper);
}

View File

@ -67,6 +67,7 @@ public interface ISysCatalogTextbookService {
* @return 是否删除成功
*/
int deleteById(Long catalogId);
/**
* 校验目录名称是否唯一
*

View File

@ -1,12 +1,15 @@
package org.dromara.system.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
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.utils.MapstructUtils;
import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.helper.DataBaseHelper;
import org.dromara.common.redis.utils.CacheUtils;
@ -18,6 +21,7 @@ import org.dromara.system.domain.vo.SysCatalogPersonVo;
import org.dromara.system.mapper.SysCatalogPersonMapper;
import org.dromara.system.mapper.SysOssPersonMapper;
import org.dromara.system.service.ISysCatalogPersonService;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
@ -58,7 +62,7 @@ public class SysCatalogPersonServiceImpl implements ISysCatalogPersonService {
*/
@Override
public List<SysCatalogPersonVo> queryList(SysCatalogPersonBo bo) {
bo.setUserId(LoginHelper.getUserId());
bo.setCreateBy(LoginHelper.getUserId());
LambdaQueryWrapper<SysCatalogPerson> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
@ -66,11 +70,11 @@ public class SysCatalogPersonServiceImpl implements ISysCatalogPersonService {
private LambdaQueryWrapper<SysCatalogPerson> buildQueryWrapper(SysCatalogPersonBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<SysCatalogPerson> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getUserId() != null, SysCatalogPerson::getUserId, bo.getUserId());
lqw.eq(bo.getParentId() != null, SysCatalogPerson::getParentId, bo.getParentId());
lqw.eq(StringUtils.isNotBlank(bo.getAncestors()), SysCatalogPerson::getAncestors, bo.getAncestors());
lqw.like(StringUtils.isNotBlank(bo.getCatalogName()), SysCatalogPerson::getCatalogName, bo.getCatalogName());
lqw.eq(bo.getOrderNum() != null, SysCatalogPerson::getOrderNum, bo.getOrderNum());
lqw.eq(SysCatalogPerson::getCreateBy, bo.getCreateBy());
return lqw;
}
@ -82,11 +86,9 @@ public class SysCatalogPersonServiceImpl implements ISysCatalogPersonService {
*/
@Override
public Boolean insertByBo(SysCatalogPersonBo bo) {
Long userId = LoginHelper.getUserId();
SysCatalogPerson info = baseMapper.selectById(bo.getParentId());
SysCatalogPerson add = MapstructUtils.convert(bo, SysCatalogPerson.class);
add.setAncestors(info.getAncestors() + StringUtils.SEPARATOR + add.getParentId());
add.setUserId(userId);
return baseMapper.insert(add) > 0;
}
@ -151,6 +153,31 @@ public class SysCatalogPersonServiceImpl implements ISysCatalogPersonService {
.eq(SysOssPerson::getCatalogId, catalogId));
}
@Cacheable(cacheNames = CacheNames.SYS_CATALOG_PERSON, key = "#catalogId")
@Override
public SysCatalogPersonVo selectCatalogById(Long catalogId) {
return baseMapper.selectVoById(catalogId);
}
@Override
public String selectCatalogNameById(Long catalogId) {
List<String> list = new ArrayList<>();
SysCatalogPersonVo vo = SpringUtils.getAopProxy(this).selectCatalogById(catalogId);
for (Long id : StringUtils.splitTo(vo.getAncestors(), Convert::toLong)) {
SysCatalogPersonVo parentVo = SpringUtils.getAopProxy(this).selectCatalogById(id);
if (ObjectUtil.isNotNull(parentVo)) {
list.add(parentVo.getCatalogName());
}
}
list.add(vo.getCatalogName());
return String.join(StringUtils.SLASH, list);
}
@Override
public List<SysCatalogPerson> selectList(Wrapper<SysCatalogPerson> queryWrapper) {
return baseMapper.selectList(queryWrapper);
}
/**
* 修改子元素关系
*

View File

@ -110,9 +110,9 @@ public class SysCatalogTextbookServiceImpl implements ISysCatalogTextbookService
@Override
public Boolean updateByBo(SysCatalogTextbookBo bo) {
SysCatalogTextbook update = MapstructUtils.convert(bo, SysCatalogTextbook.class);
SysCatalogTextbook old = baseMapper.selectById(update.getCatalogId());
SysCatalogTextbookVo old = SpringUtils.getAopProxy(this).selectCatalogById(update.getCatalogId());
if (!old.getParentId().equals(update.getParentId())) {
SysCatalogTextbook newParentDept = baseMapper.selectById(update.getParentId());
SysCatalogTextbookVo newParentDept = SpringUtils.getAopProxy(this).selectCatalogById(update.getParentId());
if (ObjectUtil.isNotNull(newParentDept) && ObjectUtil.isNotNull(old)) {
String newAncestors = newParentDept.getAncestors() + StringUtils.SEPARATOR + newParentDept.getCatalogId();
String oldAncestors = old.getAncestors();

View File

@ -1,23 +1,33 @@
package org.dromara.system.service.impl;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.dromara.system.domain.bo.SysOssPersonBo;
import org.dromara.system.domain.vo.SysOssPersonVo;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StreamUtils;
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.satoken.utils.LoginHelper;
import org.dromara.system.domain.SysCatalogPerson;
import org.dromara.system.domain.SysOssPerson;
import org.dromara.system.domain.bo.SysOssPersonBo;
import org.dromara.system.domain.vo.SysCatalogPersonVo;
import org.dromara.system.domain.vo.SysOssPersonVo;
import org.dromara.system.domain.vo.SysOssVo;
import org.dromara.system.mapper.SysOssPersonMapper;
import org.dromara.system.service.ISysCatalogPersonService;
import org.dromara.system.service.ISysOssPersonService;
import org.dromara.system.service.ISysOssService;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.util.List;
/**
* 资源-我的空间Service业务层处理
@ -31,6 +41,10 @@ public class SysOssPersonServiceImpl implements ISysOssPersonService {
private final SysOssPersonMapper baseMapper;
private final ISysCatalogPersonService catalogService;
private final ISysOssService ossService;
/**
* 查询资源-我的空间
*
@ -38,7 +52,7 @@ public class SysOssPersonServiceImpl implements ISysOssPersonService {
* @return 资源-我的空间
*/
@Override
public SysOssPersonVo queryById(Long id){
public SysOssPersonVo queryById(Long id) {
return baseMapper.selectVoById(id);
}
@ -51,8 +65,8 @@ public class SysOssPersonServiceImpl implements ISysOssPersonService {
*/
@Override
public TableDataInfo<SysOssPersonVo> queryPageList(SysOssPersonBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<SysOssPerson> lqw = buildQueryWrapper(bo);
Page<SysOssPersonVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
bo.setCreateBy(LoginHelper.getUserId());
Page<SysOssPersonVo> result = baseMapper.selectPageList(pageQuery.build(), this.buildQueryWrapper(bo));
return TableDataInfo.build(result);
}
@ -64,18 +78,21 @@ public class SysOssPersonServiceImpl implements ISysOssPersonService {
*/
@Override
public List<SysOssPersonVo> queryList(SysOssPersonBo bo) {
LambdaQueryWrapper<SysOssPerson> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
return baseMapper.selectVoList(this.buildQueryWrapper(bo));
}
private LambdaQueryWrapper<SysOssPerson> buildQueryWrapper(SysOssPersonBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<SysOssPerson> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getOssId() != null, SysOssPerson::getOssId, bo.getOssId());
lqw.eq(bo.getCatalogId() != null, SysOssPerson::getCatalogId, bo.getCatalogId());
lqw.like(StringUtils.isNotBlank(bo.getFileName()), SysOssPerson::getFileName, bo.getFileName());
lqw.eq(StringUtils.isNotBlank(bo.getFilePath()), SysOssPerson::getFilePath, bo.getFilePath());
return lqw;
private Wrapper<SysOssPerson> buildQueryWrapper(SysOssPersonBo bo) {
QueryWrapper<SysOssPerson> wrapper = Wrappers.query();
wrapper.eq("op.create_by", bo.getCreateBy())
.and(ObjectUtil.isNotNull(bo.getCatalogId()), w -> {
List<SysCatalogPerson> list = catalogService.selectList(new LambdaQueryWrapper<SysCatalogPerson>()
.select(SysCatalogPerson::getCatalogId)
.apply(DataBaseHelper.findInSet(bo.getCatalogId(), "ancestors")));
List<Long> ids = StreamUtils.toList(list, SysCatalogPerson::getCatalogId);
ids.add(bo.getCatalogId());
w.in("op.catalog_id", ids);
});
return wrapper;
}
/**
@ -111,8 +128,15 @@ public class SysOssPersonServiceImpl implements ISysOssPersonService {
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(SysOssPerson entity){
//TODO 做一些数据校验,如唯一约束
private void validEntityBeforeSave(SysOssPerson entity) {
SysOssVo ossVo = ossService.getById(entity.getOssId());
if (ObjectUtil.isNull(ossVo)) {
throw new ServiceException("文件不存在");
}
SysCatalogPersonVo ossResource = catalogService.selectCatalogById(entity.getCatalogId());
if (ObjectUtil.isNull(ossResource)) {
throw new ServiceException("空间目录不存在");
}
}
/**
@ -124,7 +148,7 @@ public class SysOssPersonServiceImpl implements ISysOssPersonService {
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
@ -132,11 +156,30 @@ public class SysOssPersonServiceImpl implements ISysOssPersonService {
@Override
public Boolean copyByBo(SysOssPersonBo bo) {
return null;
SysOssPerson copy = processDate(bo);
validEntityBeforeSave(copy);
return baseMapper.insert(copy) > 0;
}
@Override
public Boolean moveByBo(SysOssPersonBo bo) {
return null;
SysOssPerson move = processDate(bo);
baseMapper.insert(move);
validEntityBeforeSave(move);
return baseMapper.deleteById(bo.getId()) > 0;
}
private SysOssPerson processDate(SysOssPersonBo bo) {
SysOssPerson ossPerson = baseMapper.selectById(bo.getId());
if (ossPerson.getCatalogId().equals(bo.getCatalogId())) {
throw new ServiceException("同目录下不能复制或移动");
}
SysOssPerson date = new SysOssPerson();
date.setOssId(ossPerson.getOssId());
String path = catalogService.selectCatalogNameById(bo.getCatalogId());
date.setCatalogId(bo.getCatalogId());
date.setFileName(ossPerson.getFileName());
date.setFilePath(path);
return date;
}
}

View File

@ -191,6 +191,9 @@ public class SysOssResourceServiceImpl implements ISysOssResourceService {
private SysOssResource processDate(SysOssResourceBo bo) {
SysOssResource ossResource = baseMapper.selectById(bo.getId());
if (ossResource.getCatalogId().equals(bo.getCatalogId())) {
throw new ServiceException("同目录下不能复制或移动");
}
SysOssResource date = new SysOssResource();
date.setOssId(ossResource.getOssId());
String path = catalogService.selectCatalogNameById(bo.getCatalogId());

View File

@ -190,6 +190,9 @@ public class SysOssTextbookServiceImpl implements ISysOssTextbookService {
private SysOssTextbook processDate(SysOssTextbookBo bo) {
SysOssTextbook ossTextbook = baseMapper.selectById(bo.getId());
if (ossTextbook.getCatalogId().equals(bo.getCatalogId())) {
throw new ServiceException("同目录下不能复制或移动");
}
SysOssTextbook date = new SysOssTextbook();
date.setOssId(ossTextbook.getOssId());
String path = catalogService.selectCatalogNameById(bo.getCatalogId());

View File

@ -4,4 +4,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.system.mapper.SysOssPersonMapper">
<select id="selectPageList" resultType="org.dromara.system.domain.vo.SysOssPersonVo">
select op.*, o.file_suffix, o.volume
from sys_oss_person op
left join sys_oss o on o.oss_id = op.oss_id
${ew.getCustomSqlSegment}
</select>
</mapper>