新增我的空间;优化目录的新增;

This commit is contained in:
cjw 2024-06-14 14:47:22 +08:00
parent 239b93e421
commit a16b942937
27 changed files with 1185 additions and 26 deletions

View File

@ -0,0 +1,120 @@
package org.dromara.system.controller.file;
import cn.dev33.satoken.annotation.SaCheckPermission;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.excel.utils.ExcelUtil;
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.SysCatalogPersonBo;
import org.dromara.system.domain.vo.SysCatalogPersonVo;
import org.dromara.system.service.ISysCatalogPersonService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 目录-我的空间
*
* @author cjw
* @date 2024-06-13
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/catalog/person")
public class SysCatalogPersonController extends BaseController {
private final ISysCatalogPersonService personService;
/**
* 查询目录-我的空间列表
*/
@SaCheckPermission("catalog:person:list")
@GetMapping("/list")
public R<List<SysCatalogPersonVo>> list(SysCatalogPersonBo bo) {
List<SysCatalogPersonVo> list = personService.queryList(bo);
return R.ok(list);
}
/**
* 导出目录-我的空间列表
*/
@SaCheckPermission("catalog:person:export")
@Log(title = "目录-我的空间", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(SysCatalogPersonBo bo, HttpServletResponse response) {
List<SysCatalogPersonVo> list = personService.queryList(bo);
ExcelUtil.exportExcel(list, "目录-我的空间", SysCatalogPersonVo.class, response);
}
/**
* 获取目录-我的空间详细信息
*
* @param catalogId 主键
*/
@SaCheckPermission("catalog:person:query")
@GetMapping("/{catalogId}")
public R<SysCatalogPersonVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long catalogId) {
return R.ok(personService.queryById(catalogId));
}
/**
* 新增目录-我的空间
*/
@SaCheckPermission("catalog:person:add")
@Log(title = "目录-我的空间", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody SysCatalogPersonBo bo) {
if (!personService.checkNameUnique(bo)) {
return R.fail("新增'" + bo.getCatalogName() + "'失败,名称已存在");
}
return toAjax(personService.insertByBo(bo));
}
/**
* 修改目录-我的空间
*/
@SaCheckPermission("catalog:person:edit")
@Log(title = "目录-我的空间", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody SysCatalogPersonBo bo) {
Long catalogId = bo.getCatalogId();
if (!personService.checkNameUnique(bo)) {
return R.fail("修改'" + bo.getCatalogName() + "'失败,名称已存在");
} else if (bo.getParentId().equals(catalogId)) {
return R.fail("修改'" + bo.getCatalogName() + "'失败,上级不能是自己");
}
return toAjax(personService.updateByBo(bo));
}
/**
* 删除目录-我的空间
*
* @param catalogId 主键串
*/
@SaCheckPermission("catalog:person:remove")
@Log(title = "目录-我的空间", businessType = BusinessType.DELETE)
@DeleteMapping("/{catalogId}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long catalogId) {
if (personService.hasChildByCatalogId(catalogId)) {
return R.warn("存在下级,不允许删除");
}
if (personService.checkCatalogExistFile(catalogId)) {
return R.warn("存在文件,不允许删除");
}
return toAjax(personService.deleteById(catalogId));
}
}

View File

@ -0,0 +1,106 @@
package org.dromara.system.controller.file;
import cn.dev33.satoken.annotation.SaCheckPermission;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.excel.utils.ExcelUtil;
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.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.SysOssPersonBo;
import org.dromara.system.domain.vo.SysOssPersonVo;
import org.dromara.system.service.ISysOssPersonService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 资源-我的空间
*
* @author cjw
* @date 2024-06-13
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/oss/person")
public class SysOssPersonController extends BaseController {
private final ISysOssPersonService sysOssPersonService;
/**
* 查询资源-我的空间列表
*/
@SaCheckPermission("oss:person:list")
@GetMapping("/list")
public TableDataInfo<SysOssPersonVo> list(SysOssPersonBo bo, PageQuery pageQuery) {
return sysOssPersonService.queryPageList(bo, pageQuery);
}
/**
* 导出资源-我的空间列表
*/
@SaCheckPermission("oss:person:export")
@Log(title = "资源-我的空间", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(SysOssPersonBo bo, HttpServletResponse response) {
List<SysOssPersonVo> list = sysOssPersonService.queryList(bo);
ExcelUtil.exportExcel(list, "资源-我的空间", SysOssPersonVo.class, response);
}
/**
* 获取资源-我的空间详细信息
*
* @param id 主键
*/
@SaCheckPermission("oss:person:query")
@GetMapping("/{id}")
public R<SysOssPersonVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(sysOssPersonService.queryById(id));
}
/**
* 新增资源-我的空间
*/
@SaCheckPermission("oss:person:add")
@Log(title = "资源-我的空间", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody SysOssPersonBo bo) {
return toAjax(sysOssPersonService.insertByBo(bo));
}
/**
* 修改资源-我的空间
*/
@SaCheckPermission("oss:person:edit")
@Log(title = "资源-我的空间", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody SysOssPersonBo bo) {
return toAjax(sysOssPersonService.updateByBo(bo));
}
/**
* 删除资源-我的空间
*
* @param ids 主键串
*/
@SaCheckPermission("oss:person:remove")
@Log(title = "资源-我的空间", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(sysOssPersonService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,56 @@
package org.dromara.system.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 目录-我的空间对象 sys_catalog_person
*
* @author cjw
* @date 2024-06-13
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_catalog_person")
public class SysCatalogPerson extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 目录id
*/
@TableId(value = "catalog_id")
private Long catalogId;
/**
* 用户编号
*/
private Long userId;
/**
* 父目录id
*/
private Long parentId;
/**
* 祖级列表
*/
private String ancestors;
/**
* 目录名称
*/
private String catalogName;
/**
* 显示顺序
*/
private Long orderNum;
}

View File

@ -0,0 +1,51 @@
package org.dromara.system.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 资源-我的空间对象 sys_oss_person
*
* @author cjw
* @date 2024-06-13
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_oss_person")
public class SysOssPerson extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId(value = "id")
private Long id;
/**
*
*/
private Long ossId;
/**
*
*/
private Long catalogId;
/**
*
*/
private String fileName;
/**
*
*/
private String filePath;
}

View File

@ -35,5 +35,10 @@ public class SysOssResource extends BaseEntity {
*/
private String fileName;
/**
* 文件路径
*/
private String filePath;
}

View File

@ -39,5 +39,9 @@ public class SysOssTextbook extends BaseEntity {
*/
private String fileName;
/**
* 文件路径
*/
private String filePath;
}

View File

@ -0,0 +1,21 @@
package org.dromara.system.domain.bo;
import lombok.Data;
/**
* <p>TODO<p>
*
* @author cjw
* @version V1.0.0
* @date 2024/6/5 10:50
*/
@Data
public class QueryOssBo {
/**
* 目录id
*/
private Long catalogId;
}

View File

@ -0,0 +1,60 @@
package org.dromara.system.domain.bo;
import org.dromara.system.domain.SysCatalogPerson;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
/**
* 目录-我的空间业务对象 sys_catalog_person
*
* @author cjw
* @date 2024-06-13
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = SysCatalogPerson.class, reverseConvertGenerate = false)
public class SysCatalogPersonBo extends BaseEntity {
/**
* 目录id
*/
@NotNull(message = "目录id不能为空", groups = { EditGroup.class })
private Long catalogId;
/**
* 用户编号
*/
@NotNull(message = "用户编号不能为空", groups = { AddGroup.class, EditGroup.class })
private Long userId;
/**
* 父目录id
*/
@NotNull(message = "父目录id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long parentId;
/**
* 祖级列表
*/
@NotBlank(message = "祖级列表不能为空", groups = { AddGroup.class, EditGroup.class })
private String ancestors;
/**
* 目录名称
*/
@NotBlank(message = "目录名称不能为空", groups = { AddGroup.class, EditGroup.class })
private String catalogName;
/**
* 显示顺序
*/
@NotNull(message = "显示顺序不能为空", groups = { AddGroup.class, EditGroup.class })
private Long orderNum;
}

View File

@ -0,0 +1,54 @@
package org.dromara.system.domain.bo;
import org.dromara.system.domain.SysOssPerson;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
/**
* 资源-我的空间业务对象 sys_oss_person
*
* @author cjw
* @date 2024-06-13
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = SysOssPerson.class, reverseConvertGenerate = false)
public class SysOssPersonBo extends BaseEntity {
/**
*
*/
@NotNull(message = "不能为空", groups = { EditGroup.class })
private Long id;
/**
*
*/
@NotNull(message = "不能为空", groups = { AddGroup.class, EditGroup.class })
private Long ossId;
/**
*
*/
@NotNull(message = "不能为空", groups = { AddGroup.class, EditGroup.class })
private Long catalogId;
/**
*
*/
@NotBlank(message = "不能为空", groups = { AddGroup.class, EditGroup.class })
private String fileName;
/**
*
*/
@NotBlank(message = "不能为空", groups = { AddGroup.class, EditGroup.class })
private String filePath;
}

View File

@ -0,0 +1,68 @@
package org.dromara.system.domain.vo;
import org.dromara.system.domain.SysCatalogPerson;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 目录-我的空间视图对象 sys_catalog_person
*
* @author cjw
* @date 2024-06-13
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = SysCatalogPerson.class)
public class SysCatalogPersonVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 目录id
*/
@ExcelProperty(value = "目录id")
private Long catalogId;
/**
* 用户编号
*/
@ExcelProperty(value = "用户编号")
private Long userId;
/**
* 父目录id
*/
@ExcelProperty(value = "父目录id")
private Long parentId;
/**
* 祖级列表
*/
@ExcelProperty(value = "祖级列表")
private String ancestors;
/**
* 目录名称
*/
@ExcelProperty(value = "目录名称")
private String catalogName;
/**
* 显示顺序
*/
@ExcelProperty(value = "显示顺序")
private Long orderNum;
}

View File

@ -0,0 +1,62 @@
package org.dromara.system.domain.vo;
import org.dromara.system.domain.SysOssPerson;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 资源-我的空间视图对象 sys_oss_person
*
* @author cjw
* @date 2024-06-13
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = SysOssPerson.class)
public class SysOssPersonVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@ExcelProperty(value = "")
private Long id;
/**
*
*/
@ExcelProperty(value = "")
private Long ossId;
/**
*
*/
@ExcelProperty(value = "")
private Long catalogId;
/**
*
*/
@ExcelProperty(value = "")
private String fileName;
/**
*
*/
@ExcelProperty(value = "")
private String filePath;
}

View File

@ -22,7 +22,7 @@ public class SysOssResourceVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
private Long id;
/**
*
*/
@ -33,5 +33,10 @@ public class SysOssResourceVo implements Serializable {
*/
private Long catalogId;
/**
* 文件名
*/
private String fileName;
}

View File

@ -0,0 +1,15 @@
package org.dromara.system.mapper;
import org.dromara.system.domain.SysCatalogPerson;
import org.dromara.system.domain.vo.SysCatalogPersonVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 目录-我的空间Mapper接口
*
* @author cjw
* @date 2024-06-13
*/
public interface SysCatalogPersonMapper extends BaseMapperPlus<SysCatalogPerson, SysCatalogPersonVo> {
}

View File

@ -18,4 +18,6 @@ import org.dromara.system.domain.vo.SysCatalogTextbookVo;
public interface SysCatalogTextbookMapper extends BaseMapperPlus<SysCatalogTextbook, SysCatalogTextbookVo> {
Page<SysCatalogTextbookVo> selectPageUserList(@Param("page") Page<SysCatalogTextbook> page, @Param("catalogId") Long catalogId);
}

View File

@ -0,0 +1,15 @@
package org.dromara.system.mapper;
import org.dromara.system.domain.SysOssPerson;
import org.dromara.system.domain.vo.SysOssPersonVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 资源-我的空间Mapper接口
*
* @author cjw
* @date 2024-06-13
*/
public interface SysOssPersonMapper extends BaseMapperPlus<SysOssPerson, SysOssPersonVo> {
}

View File

@ -0,0 +1,80 @@
package org.dromara.system.service;
import org.dromara.system.domain.bo.SysCatalogPersonBo;
import org.dromara.system.domain.vo.SysCatalogPersonVo;
import java.util.List;
/**
* 目录-我的空间Service接口
*
* @author cjw
* @date 2024-06-13
*/
public interface ISysCatalogPersonService {
/**
* 查询目录-我的空间
*
* @param catalogId 主键
* @return 目录-我的空间
*/
SysCatalogPersonVo queryById(Long catalogId);
/**
* 查询符合条件的目录-我的空间列表
*
* @param bo 查询条件
* @return 目录-我的空间列表
*/
List<SysCatalogPersonVo> queryList(SysCatalogPersonBo bo);
/**
* 新增目录-我的空间
*
* @param bo 目录-我的空间
* @return 是否新增成功
*/
Boolean insertByBo(SysCatalogPersonBo bo);
/**
* 修改目录-我的空间
*
* @param bo 目录-我的空间
* @return 是否修改成功
*/
Boolean updateByBo(SysCatalogPersonBo bo);
/**
* 校验并批量删除目录-我的空间
*
* @param catalogId 待删除的主键
* @return 是否删除成功
*/
int deleteById(Long catalogId);
/**
* 校验目录名称是否唯一
*
* @param resource 目录信息
* @return 结果
*/
boolean checkNameUnique(SysCatalogPersonBo resource);
/**
* 是否存在子节点
*
* @param catalogId 目录ID
* @return 结果
*/
boolean hasChildByCatalogId(Long catalogId);
/**
* 查询目录是否存在文件
*
* @param catalogId 部门ID
* @return 结果 true 存在 false 不存在
*/
boolean checkCatalogExistFile(Long catalogId);
}

View File

@ -88,4 +88,20 @@ public interface ISysCatalogTextbookService {
* @return 结果 true 存在 false 不存在
*/
boolean checkCatalogExistFile(Long catalogId);
/**
* 根据ID查询信息
*
* @param catalogId 目录ID
* @return 目录信息
*/
SysCatalogTextbookVo selectCatalogById(Long catalogId);
/**
* 通过ID查询目录名称(包含自身)
*
* @param catalogId ID
* @return 目录名称串/分隔
*/
String selectCatalogNameById(Long catalogId);
}

View File

@ -0,0 +1,68 @@
package org.dromara.system.service;
import org.dromara.system.domain.vo.SysOssPersonVo;
import org.dromara.system.domain.bo.SysOssPersonBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import java.util.Collection;
import java.util.List;
/**
* 资源-我的空间Service接口
*
* @author cjw
* @date 2024-06-13
*/
public interface ISysOssPersonService {
/**
* 查询资源-我的空间
*
* @param id 主键
* @return 资源-我的空间
*/
SysOssPersonVo queryById(Long id);
/**
* 分页查询资源-我的空间列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 资源-我的空间分页列表
*/
TableDataInfo<SysOssPersonVo> queryPageList(SysOssPersonBo bo, PageQuery pageQuery);
/**
* 查询符合条件的资源-我的空间列表
*
* @param bo 查询条件
* @return 资源-我的空间列表
*/
List<SysOssPersonVo> queryList(SysOssPersonBo bo);
/**
* 新增资源-我的空间
*
* @param bo 资源-我的空间
* @return 是否新增成功
*/
Boolean insertByBo(SysOssPersonBo bo);
/**
* 修改资源-我的空间
*
* @param bo 资源-我的空间
* @return 是否修改成功
*/
Boolean updateByBo(SysOssPersonBo bo);
/**
* 校验并批量删除资源-我的空间信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@ -0,0 +1,173 @@
package org.dromara.system.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 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.helper.DataBaseHelper;
import org.dromara.common.redis.utils.CacheUtils;
import org.dromara.system.domain.SysCatalogPerson;
import org.dromara.system.domain.SysOssPerson;
import org.dromara.system.domain.bo.SysCatalogPersonBo;
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.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* 目录-我的空间Service业务层处理
*
* @author cjw
* @date 2024-06-13
*/
@RequiredArgsConstructor
@Service
public class SysCatalogPersonServiceImpl implements ISysCatalogPersonService {
private final SysCatalogPersonMapper baseMapper;
private final SysOssPersonMapper ossPersonMapper;
/**
* 查询目录-我的空间
*
* @param catalogId 主键
* @return 目录-我的空间
*/
@Override
public SysCatalogPersonVo queryById(Long catalogId){
return baseMapper.selectVoById(catalogId);
}
/**
* 查询符合条件的目录-我的空间列表
*
* @param bo 查询条件
* @return 目录-我的空间列表
*/
@Override
public List<SysCatalogPersonVo> queryList(SysCatalogPersonBo bo) {
LambdaQueryWrapper<SysCatalogPerson> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
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());
return lqw;
}
/**
* 新增目录-我的空间
*
* @param bo 目录-我的空间
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(SysCatalogPersonBo bo) {
SysCatalogPerson info = baseMapper.selectById(bo.getParentId());
SysCatalogPerson add = MapstructUtils.convert(bo, SysCatalogPerson.class);
add.setAncestors(info.getAncestors() + StringUtils.SEPARATOR + add.getParentId());
return baseMapper.insert(add) > 0;
}
/**
* 修改目录-我的空间
*
* @param bo 目录-我的空间
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(SysCatalogPersonBo bo) {
SysCatalogPerson update = MapstructUtils.convert(bo, SysCatalogPerson.class);
SysCatalogPerson old = baseMapper.selectById(update.getCatalogId());
if (!old.getParentId().equals(update.getParentId())) {
SysCatalogPerson 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;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(SysCatalogPerson entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除目录-我的空间
*
* @param catalogId 待删除的主键
* @return 是否删除成功
*/
@Override
public int deleteById(Long catalogId) {
return baseMapper.deleteById(catalogId);
}
@Override
public boolean checkNameUnique(SysCatalogPersonBo resource) {
boolean exist = baseMapper.exists(new LambdaQueryWrapper<SysCatalogPerson>()
.eq(SysCatalogPerson::getCatalogName, resource.getCatalogName())
.eq(SysCatalogPerson::getParentId, resource.getParentId())
.ne(ObjectUtil.isNotNull(resource.getCatalogId()), SysCatalogPerson::getCatalogId, resource.getCatalogId()));
return !exist;
}
@Override
public boolean hasChildByCatalogId(Long catalogId) {
return baseMapper.exists(new LambdaQueryWrapper<SysCatalogPerson>()
.eq(SysCatalogPerson::getParentId, catalogId));
}
@Override
public boolean checkCatalogExistFile(Long catalogId) {
return ossPersonMapper.exists(new LambdaQueryWrapper<SysOssPerson>()
.eq(SysOssPerson::getCatalogId, catalogId));
}
/**
* 修改子元素关系
*
* @param catalogId 被修改的目录ID
* @param newAncestors 新的父ID集合
* @param oldAncestors 旧的父ID集合
*/
private void updateDeptChildren(Long catalogId, String newAncestors, String oldAncestors) {
List<SysCatalogPerson> children = baseMapper.selectList(new LambdaQueryWrapper<SysCatalogPerson>()
.apply(DataBaseHelper.findInSet(catalogId, "ancestors")));
List<SysCatalogPerson> list = new ArrayList<>();
for (SysCatalogPerson child : children) {
SysCatalogPerson resource = new SysCatalogPerson();
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

@ -89,14 +89,10 @@ public class SysCatalogResourceServiceImpl implements ISysCatalogResourceService
*/
@Override
public Boolean insertByBo(SysCatalogResourceBo bo) {
SysCatalogResource info = baseMapper.selectById(bo.getParentId());
SysCatalogResource add = MapstructUtils.convert(bo, SysCatalogResource.class);
validEntityBeforeSave(add);
add.setAncestors(bo.getAncestors() + StringUtils.SEPARATOR + add.getParentId());
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setCatalogId(add.getCatalogId());
}
return flag;
add.setAncestors(info.getAncestors() + StringUtils.SEPARATOR + add.getParentId());
return baseMapper.insert(add) > 0;
}
/**

View File

@ -1,6 +1,7 @@
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.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@ -8,6 +9,7 @@ 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.SpringUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@ -20,6 +22,7 @@ import org.dromara.system.domain.vo.SysCatalogTextbookVo;
import org.dromara.system.mapper.SysCatalogTextbookMapper;
import org.dromara.system.mapper.SysOssTextbookMapper;
import org.dromara.system.service.ISysCatalogTextbookService;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
@ -89,16 +92,12 @@ public class SysCatalogTextbookServiceImpl implements ISysCatalogTextbookService
*/
@Override
public Boolean insertByBo(SysCatalogTextbookBo bo) {
SysCatalogTextbook info = baseMapper.selectById(bo.getParentId());
SysCatalogTextbook add = MapstructUtils.convert(bo, SysCatalogTextbook.class);
validEntityBeforeSave(add);
add.setAncestors(bo.getAncestors() + StringUtils.SEPARATOR + add.getParentId());
add.setAncestors(info.getAncestors() + StringUtils.SEPARATOR + add.getParentId());
String[] split = StringUtils.split(add.getAncestors(), StringUtils.SEPARATOR);
add.setType(split.length);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setCatalogId(add.getCatalogId());
}
return flag;
return baseMapper.insert(add) > 0;
}
/**
@ -117,7 +116,7 @@ public class SysCatalogTextbookServiceImpl implements ISysCatalogTextbookService
String newAncestors = newParentDept.getAncestors() + StringUtils.SEPARATOR + newParentDept.getCatalogId();
String oldAncestors = old.getAncestors();
update.setAncestors(newAncestors);
updateDeptChildren(update.getCatalogId(), newAncestors, oldAncestors);
updateCatalogChildren(update.getCatalogId(), newAncestors, oldAncestors);
}
}
return baseMapper.updateById(update) > 0;
@ -162,6 +161,32 @@ public class SysCatalogTextbookServiceImpl implements ISysCatalogTextbookService
.eq(SysOssTextbook::getCatalogId, catalogId));
}
@Cacheable(cacheNames = CacheNames.SYS_CATALOG_TEXTBOOK, key = "#catalogId")
@Override
public SysCatalogTextbookVo selectCatalogById(Long catalogId) {
return baseMapper.selectVoById(catalogId);
}
/**
* 通过ID查询目录名称(包含自身)
*
* @param catalogId ID
* @return 目录名称串/分隔
*/
@Override
public String selectCatalogNameById(Long catalogId) {
List<String> list = new ArrayList<>();
SysCatalogTextbookVo vo = SpringUtils.getAopProxy(this).selectCatalogById(catalogId);
for (Long id : StringUtils.splitTo(vo.getAncestors(), Convert::toLong)) {
SysCatalogTextbookVo parentVo = SpringUtils.getAopProxy(this).selectCatalogById(id);
if (ObjectUtil.isNotNull(parentVo)) {
list.add(parentVo.getCatalogName());
}
}
list.add(vo.getCatalogName());
return String.join(StringUtils.SLASH, list);
}
/**
* 修改子元素关系
*
@ -169,7 +194,7 @@ public class SysCatalogTextbookServiceImpl implements ISysCatalogTextbookService
* @param newAncestors 新的父ID集合
* @param oldAncestors 旧的父ID集合
*/
private void updateDeptChildren(Long catalogId, String newAncestors, String oldAncestors) {
private void updateCatalogChildren(Long catalogId, String newAncestors, String oldAncestors) {
List<SysCatalogTextbook> children = baseMapper.selectList(new LambdaQueryWrapper<SysCatalogTextbook>()
.apply(DataBaseHelper.findInSet(catalogId, "ancestors")));
List<SysCatalogTextbook> list = new ArrayList<>();

View File

@ -0,0 +1,132 @@
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 com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
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.system.domain.SysOssPerson;
import org.dromara.system.mapper.SysOssPersonMapper;
import org.dromara.system.service.ISysOssPersonService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 资源-我的空间Service业务层处理
*
* @author cjw
* @date 2024-06-13
*/
@RequiredArgsConstructor
@Service
public class SysOssPersonServiceImpl implements ISysOssPersonService {
private final SysOssPersonMapper baseMapper;
/**
* 查询资源-我的空间
*
* @param id 主键
* @return 资源-我的空间
*/
@Override
public SysOssPersonVo queryById(Long id){
return baseMapper.selectVoById(id);
}
/**
* 分页查询资源-我的空间列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 资源-我的空间分页列表
*/
@Override
public TableDataInfo<SysOssPersonVo> queryPageList(SysOssPersonBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<SysOssPerson> lqw = buildQueryWrapper(bo);
Page<SysOssPersonVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的资源-我的空间列表
*
* @param bo 查询条件
* @return 资源-我的空间列表
*/
@Override
public List<SysOssPersonVo> queryList(SysOssPersonBo bo) {
LambdaQueryWrapper<SysOssPerson> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
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;
}
/**
* 新增资源-我的空间
*
* @param bo 资源-我的空间
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(SysOssPersonBo bo) {
SysOssPerson add = MapstructUtils.convert(bo, SysOssPerson.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改资源-我的空间
*
* @param bo 资源-我的空间
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(SysOssPersonBo bo) {
SysOssPerson update = MapstructUtils.convert(bo, SysOssPerson.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(SysOssPerson entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除资源-我的空间信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
}
}

View File

@ -9,12 +9,14 @@ import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils;
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.SysOssResource;
import org.dromara.system.domain.bo.SysOssResourceBo;
import org.dromara.system.domain.vo.SysOssResourceVo;
import org.dromara.system.domain.vo.SysOssVo;
import org.dromara.system.mapper.SysCatalogResourceMapper;
import org.dromara.system.mapper.SysOssResourceMapper;
import org.dromara.system.service.ISysOssResourceService;
import org.dromara.system.domain.vo.SysOssVo;
import org.dromara.system.service.ISysOssService;
import org.springframework.stereotype.Service;
@ -34,6 +36,8 @@ public class SysOssResourceServiceImpl implements ISysOssResourceService {
private final SysOssResourceMapper baseMapper;
private final SysCatalogResourceMapper catalogMapper;
private final ISysOssService ossService;
/**
@ -118,10 +122,11 @@ public class SysOssResourceServiceImpl implements ISysOssResourceService {
if (ObjectUtil.isNull(ossVo)) {
throw new ServiceException("资源文件不存在");
}
SysOssResource ossResource = baseMapper.selectById(entity.getCatalogId());
SysCatalogResource ossResource = catalogMapper.selectById(entity.getCatalogId());
if (ObjectUtil.isNull(ossResource)) {
throw new ServiceException("资源目录不存在");
}
}
/**

View File

@ -222,6 +222,7 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
md5 = DigestUtils.md5Hex(fileInputStream);
SysOssVo byMd5 = this.getByMd5(md5);
if (ObjectUtil.isNotNull(byMd5)) {
byMd5.setOriginalName(originalfileName);
return byMd5;
}
} catch (IOException e) {
@ -291,6 +292,5 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
@Override
public SysOssVo getByMd5(String md5) {
return baseMapper.selectVoOne(new LambdaQueryWrapper<SysOss>().eq(SysOss::getFileMd5, md5));
}
}

View File

@ -11,11 +11,13 @@ import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.system.domain.SysOssTextbook;
import org.dromara.system.domain.bo.SysOssTextbookBo;
import org.dromara.system.domain.vo.SysCatalogTextbookVo;
import org.dromara.system.domain.vo.SysOssTextbookVo;
import org.dromara.system.mapper.SysOssTextbookMapper;
import org.dromara.system.service.ISysOssTextbookService;
import org.dromara.system.domain.vo.SysOssVo;
import org.dromara.system.mapper.SysOssTextbookMapper;
import org.dromara.system.service.ISysCatalogTextbookService;
import org.dromara.system.service.ISysOssService;
import org.dromara.system.service.ISysOssTextbookService;
import org.springframework.stereotype.Service;
import java.util.Collection;
@ -34,6 +36,8 @@ public class SysOssTextbookServiceImpl implements ISysOssTextbookService {
private final SysOssTextbookMapper baseMapper;
private final ISysCatalogTextbookService catalogService;
private final ISysOssService ossService;
/**
@ -43,7 +47,7 @@ public class SysOssTextbookServiceImpl implements ISysOssTextbookService {
* @return 请填写功能名称
*/
@Override
public SysOssTextbookVo queryById(Long ossId){
public SysOssTextbookVo queryById(Long ossId) {
return baseMapper.selectVoById(ossId);
}
@ -89,6 +93,8 @@ public class SysOssTextbookServiceImpl implements ISysOssTextbookService {
@Override
public Boolean insertByBo(SysOssTextbookBo bo) {
SysOssTextbook add = MapstructUtils.convert(bo, SysOssTextbook.class);
String path = catalogService.selectCatalogNameById(add.getCatalogId());
add.setFilePath(path);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
@ -113,12 +119,12 @@ public class SysOssTextbookServiceImpl implements ISysOssTextbookService {
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(SysOssTextbook entity){
private void validEntityBeforeSave(SysOssTextbook entity) {
SysOssVo ossVo = ossService.getById(entity.getOssId());
if (ObjectUtil.isNull(ossVo)) {
throw new ServiceException("教材文件不存在");
}
SysOssTextbook ossTextbook = baseMapper.selectById(entity.getCatalogId());
SysCatalogTextbookVo ossTextbook = catalogService.selectCatalogById(entity.getCatalogId());
if (ObjectUtil.isNull(ossTextbook)) {
throw new ServiceException("教材目录不存在");
}
@ -133,7 +139,7 @@ public class SysOssTextbookServiceImpl implements ISysOssTextbookService {
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.system.mapper.SysCatalogPersonMapper">
</mapper>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.system.mapper.SysOssPersonMapper">
</mapper>