添加资源容量功能

This commit is contained in:
cjw 2024-06-25 18:10:30 +08:00
parent 288fc89bd6
commit 75af3a8e8f
20 changed files with 277 additions and 87 deletions

View File

@ -1,40 +0,0 @@
package org.dromara.system.controller.file;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.dromara.system.service.IFileService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* <p>TODO<p>
*
* @author cjw
* @version V1.0.0
* @date 2024/5/31 14:22
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/file")
public class FileController {
private final IFileService fileService;
/**
* 预览OSS对象
*
* @param ossId OSS对象ID
*/
//@SaCheckPermission("oss:file:preview")
@PostMapping("/preview/{ossId}")
public void preview(@PathVariable Long ossId, HttpServletResponse response) throws Exception {
fileService.preview(ossId, response);
}
}

View File

@ -7,7 +7,6 @@ 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;
@ -83,13 +82,13 @@ public class SysOssPersonController extends BaseController {
/**
* 修改资源-我的空间
*/
@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));
}
// @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));
// }
/**
* 删除资源-我的空间

View File

@ -7,7 +7,6 @@ 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.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
@ -80,13 +79,13 @@ public class SysOssResourceController extends BaseController {
/**
* 修改专题资源文件
*/
@SaCheckPermission("file:resource:edit")
@Log(title = "【更新专题资源】", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody SysOssResourceBo bo) {
return toAjax(sysOssResourceService.updateByBo(bo));
}
// @SaCheckPermission("file:resource:edit")
// @Log(title = "【更新专题资源】", businessType = BusinessType.UPDATE)
// @RepeatSubmit()
// @PutMapping()
// public R<Void> edit(@Validated(EditGroup.class) @RequestBody SysOssResourceBo bo) {
// return toAjax(sysOssResourceService.updateByBo(bo));
// }
/**
* 删除专题资源文件

View File

@ -7,7 +7,6 @@ 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.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
@ -81,13 +80,13 @@ public class SysOssTextbookController extends BaseController {
/**
* 修改同步教材的文件
*/
@SaCheckPermission("file:textbook:edit")
@Log(title = "【更新同步教材】", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody SysOssTextbookBo bo) {
return toAjax(sysOssTextbookService.updateByBo(bo));
}
// @SaCheckPermission("file:textbook:edit")
// @Log(title = "【更新同步教材】", businessType = BusinessType.UPDATE)
// @RepeatSubmit()
// @PutMapping()
// public R<Void> edit(@Validated(EditGroup.class) @RequestBody SysOssTextbookBo bo) {
// return toAjax(sysOssTextbookService.updateByBo(bo));
// }
/**
* 删除同步教材的文件

View File

@ -4,6 +4,7 @@ package org.dromara.system.controller.system;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.util.ObjectUtil;
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.QueryGroup;
@ -15,6 +16,7 @@ import org.dromara.common.web.core.BaseController;
import org.dromara.system.domain.bo.SysOssBo;
import org.dromara.system.domain.vo.SysOssUploadVo;
import org.dromara.system.domain.vo.SysOssVo;
import org.dromara.system.domain.vo.SysOssVolumeVo;
import org.dromara.system.service.ISysOssService;
import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated;
@ -119,7 +121,12 @@ public class SysOssController extends BaseController {
uploadVo.setOssId(oss.getOssId().toString());
}
return R.ok(uploadVo);
}
@GetMapping("/volume")
public R<SysOssVolumeVo> volume(@NotNull(message = "类型不能为空") Integer type) {
SysOssVolumeVo oss = ossService.getVolumeVoByType(type);
return R.ok(oss);
}
}

View File

@ -42,6 +42,8 @@ public class SysOss extends BaseEntity {
*/
private String url;
private Long size;
/**
* 容量
*/

View File

@ -1,5 +1,6 @@
package org.dromara.system.domain;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@ -58,5 +59,6 @@ public class SysOssPerson extends TenantEntity {
*/
private String fileSuffix;
@TableField(exist = false)
private Long use;
}

View File

@ -1,5 +1,6 @@
package org.dromara.system.domain;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@ -51,7 +52,10 @@ public class SysOssResource extends TenantEntity {
private Integer status;
private Long downloadNum;
private Long previewNum;
@TableField(exist = false)
private Long use;
}

View File

@ -1,5 +1,6 @@
package org.dromara.system.domain;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@ -55,6 +56,9 @@ public class SysOssTextbook extends TenantEntity {
private Integer status;
private Long downloadNum;
private Long previewNum;
@TableField(exist = false)
private Long use;
}

View File

@ -0,0 +1,46 @@
package org.dromara.system.domain;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 资源容量对象 sys_oss_volume
*
* @author cjw
* @date 2024-06-25
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_oss_volume")
public class SysOssVolume extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId(value = "id")
private Long id;
/**
* 空间类型1学校2个人
*/
private Integer type;
/**
* 总大小
*/
private Long totalVolume;
/**
* 已使用
*/
private Long useVolume;
}

View File

@ -0,0 +1,41 @@
package org.dromara.system.domain.bo;
import org.dromara.system.domain.SysOssVolume;
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_volume
*
* @author cjw
* @date 2024-06-25
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = SysOssVolume.class, reverseConvertGenerate = false)
public class SysOssVolumeBo extends BaseEntity {
/**
*
*/
@NotNull(message = "不能为空", groups = { EditGroup.class })
private Long id;
/**
* 空间类型1学校2个人
*/
@NotNull(message = "空间类型1学校2个人不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer type;
/**
* 总大小
*/
@NotNull(message = "总大小不能为空", groups = { AddGroup.class, EditGroup.class })
private Long total;
}

View File

@ -47,6 +47,8 @@ public class SysOssVo implements Serializable {
*/
private String url;
private Long size;
/**
* 容量
*/

View File

@ -0,0 +1,44 @@
package org.dromara.system.domain.vo;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.system.domain.SysOssVolume;
import java.io.Serial;
import java.io.Serializable;
/**
* 资源容量视图对象 sys_oss_volume
*
* @author cjw
* @date 2024-06-25
*/
@Data
@AutoMapper(target = SysOssVolume.class)
public class SysOssVolumeVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
private Long id;
/**
* 空间类型1学校2个人
*/
private Integer type;
/**
* 总大小
*/
private Long totalVolume;
/**
* 已使用
*/
private Long useVolume;
}

View File

@ -0,0 +1,19 @@
package org.dromara.system.mapper;
import org.apache.ibatis.annotations.Param;
import org.dromara.system.domain.SysOssVolume;
import org.dromara.system.domain.vo.SysOssVolumeVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 资源容量Mapper接口
*
* @author cjw
* @date 2024-06-25
*/
public interface SysOssVolumeMapper extends BaseMapperPlus<SysOssVolume, SysOssVolumeVo> {
int increaseUse(@Param("id") Long id, @Param("use")Long use);
int decreaseUse(@Param("id") Long id, @Param("use")Long use);
}

View File

@ -5,6 +5,7 @@ import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.system.domain.bo.SysOssBo;
import org.dromara.system.domain.vo.SysOssVo;
import org.dromara.system.domain.vo.SysOssVolumeVo;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
@ -95,4 +96,10 @@ public interface ISysOssService {
*/
void preview(Long ossId, HttpServletResponse response) throws Exception;
SysOssVolumeVo getVolumeVoByType(Integer type);
Boolean increase(int type ,Long use);
Boolean decrease(int type ,Long use);
}

View File

@ -120,6 +120,7 @@ public class SysOssPersonServiceImpl implements ISysOssPersonService {
if (flag) {
bo.setId(add.getId());
}
ossService.increase(2, add.getUse());
return flag;
}
@ -144,6 +145,7 @@ public class SysOssPersonServiceImpl implements ISysOssPersonService {
if (ObjectUtil.isNull(ossVo)) {
throw new ServiceException("文件不存在");
}
entity.setUse(ossVo.getSize());
SysCatalogPersonVo ossResource = catalogService.selectCatalogById(entity.getCatalogId());
if (ObjectUtil.isNull(ossResource)) {
throw new ServiceException("空间目录不存在");
@ -162,6 +164,11 @@ public class SysOssPersonServiceImpl implements ISysOssPersonService {
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
}
for(Long id :ids){
SysOssPersonVo ossPersonVo = baseMapper.selectVoById(id);
SysOssVo ossVo = ossService.getById(ossPersonVo.getOssId());
ossService.decrease(2, ossVo.getSize());
}
return baseMapper.deleteBatchIds(ids) > 0;
}
@ -169,7 +176,9 @@ public class SysOssPersonServiceImpl implements ISysOssPersonService {
public Boolean copyByBo(SysOssPersonBo bo) {
SysOssPerson copy = processDate(bo);
validEntityBeforeSave(copy);
return baseMapper.insert(copy) > 0;
int i = baseMapper.insert(copy);
ossService.increase(2, copy.getUse());
return i > 0;
}
@Override
@ -177,7 +186,8 @@ public class SysOssPersonServiceImpl implements ISysOssPersonService {
SysOssPerson move = processDate(bo);
baseMapper.insert(move);
validEntityBeforeSave(move);
return baseMapper.deleteById(bo.getId()) > 0;
int i = baseMapper.deleteById(bo.getId());
return i > 0;
}
private SysOssPerson processDate(SysOssPersonBo bo) {

View File

@ -158,6 +158,7 @@ public class SysOssResourceServiceImpl implements ISysOssResourceService {
if (flag) {
bo.setOssId(add.getOssId());
}
ossService.increase(1, add.getUse());
return flag;
}
@ -182,6 +183,7 @@ public class SysOssResourceServiceImpl implements ISysOssResourceService {
if (ObjectUtil.isNull(ossVo)) {
throw new ServiceException("文件不存在");
}
entity.setUse(ossVo.getSize());
SysCatalogResourceVo ossResource = catalogService.selectCatalogById(entity.getCatalogId());
if (ObjectUtil.isNull(ossResource)) {
throw new ServiceException("资源目录不存在");
@ -201,6 +203,11 @@ public class SysOssResourceServiceImpl implements ISysOssResourceService {
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
}
for(Long id :ids){
SysOssResourceVo ossResourceVo = baseMapper.selectVoById(id);
SysOssVo ossVo = ossService.getById(ossResourceVo.getOssId());
ossService.decrease(1, ossVo.getSize());
}
return baseMapper.deleteBatchIds(ids) > 0;
}
@ -216,7 +223,9 @@ public class SysOssResourceServiceImpl implements ISysOssResourceService {
public Boolean copyByBo(SysOssResourceBo bo) {
SysOssResource copy = processDate(bo);
validEntityBeforeSave(copy);
return baseMapper.insert(copy) > 0;
int i = baseMapper.insert(copy);
ossService.increase(1, copy.getUse());
return i > 0;
}
@Override
@ -224,7 +233,8 @@ public class SysOssResourceServiceImpl implements ISysOssResourceService {
SysOssResource move = processDate(bo);
baseMapper.insert(move);
validEntityBeforeSave(move);
return baseMapper.deleteById(bo.getId()) > 0;
int i = baseMapper.deleteById(bo.getId());
return i>0;
}
private SysOssResource processDate(SysOssResourceBo bo) {

View File

@ -29,9 +29,12 @@ import org.dromara.common.oss.entity.UploadResult;
import org.dromara.common.oss.enumd.AccessPolicyType;
import org.dromara.common.oss.factory.OssFactory;
import org.dromara.system.domain.SysOss;
import org.dromara.system.domain.SysOssVolume;
import org.dromara.system.domain.bo.SysOssBo;
import org.dromara.system.domain.vo.SysOssVo;
import org.dromara.system.domain.vo.SysOssVolumeVo;
import org.dromara.system.mapper.SysOssMapper;
import org.dromara.system.mapper.SysOssVolumeMapper;
import org.dromara.system.service.ISysOssService;
import org.jetbrains.annotations.NotNull;
import org.springframework.cache.annotation.Cacheable;
@ -56,6 +59,8 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
private final SysOssMapper baseMapper;
private final SysOssVolumeMapper volumeMapper;
/**
* 查询OSS对象存储列表
*
@ -199,7 +204,6 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
if (size > 1024 * 1024 * 1024) {
throw new ServiceException("上传的文件限制为1G以下");
}
String format = DataSizeUtil.format(size);
String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length());
OssClient storage = OssFactory.instance();
UploadResult uploadResult;
@ -216,7 +220,7 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
throw new ServiceException(e.getMessage());
}
// 保存文件信息
return buildResultEntity(originalfileName, md5, format, suffix, storage.getConfigKey(), uploadResult);
return buildResultEntity(originalfileName, md5, size, suffix, storage.getConfigKey(), uploadResult);
}
/**
@ -235,7 +239,7 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
if (size > 1024 * 1024 * 1024) {
throw new ServiceException("上传的文件限制为1G以下");
}
String format = DataSizeUtil.format(size);
String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length());
OssClient storage = OssFactory.instance();
String md5;
@ -251,17 +255,19 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
}
UploadResult uploadResult = storage.uploadSuffix(file, suffix);
// 保存文件信息
return buildResultEntity(originalfileName, md5, format, suffix, storage.getConfigKey(), uploadResult);
return buildResultEntity(originalfileName, md5, size, suffix, storage.getConfigKey(), uploadResult);
}
@NotNull
private SysOssVo buildResultEntity(String originalfileName, String md5, String format, String suffix, String configKey, UploadResult uploadResult) {
private SysOssVo buildResultEntity(String originalfileName, String md5, Long size, String suffix, String configKey, UploadResult uploadResult) {
String format = DataSizeUtil.format(size);
SysOss oss = new SysOss();
oss.setUrl(uploadResult.getUrl());
oss.setFileSuffix(suffix);
oss.setFileName(uploadResult.getFilename());
oss.setService(configKey);
oss.setFileMd5(md5);
oss.setSize(size);
oss.setVolume(format);
baseMapper.insert(oss);
SysOssVo sysOssVo = MapstructUtils.convert(oss, SysOssVo.class);
@ -368,19 +374,22 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
}
}
public static void main(String[] args) {
// 验证License
try {
FileInputStream fileInput = new FileInputStream("D:/test.ppt");
Presentation pres = new Presentation(fileInput);
FileOutputStream out = new FileOutputStream(new File("D:/test.pdf"));
pres.save(out, com.aspose.slides.SaveFormat.Pdf);
out.close();
} catch (Exception e) {
System.out.println(e.getMessage());
}
@Override
public SysOssVolumeVo getVolumeVoByType(Integer type) {
return volumeMapper.selectVoOne(new LambdaQueryWrapper<SysOssVolume>().eq(SysOssVolume::getType, type));
}
@Override
public Boolean increase(int type, Long use) {
SysOssVolume sysOssVolume = volumeMapper.selectOne(new LambdaQueryWrapper<SysOssVolume>().eq(SysOssVolume::getType, type));
int i = volumeMapper.increaseUse(sysOssVolume.getId(), use);
return i > 0;
}
@Override
public Boolean decrease(int type, Long use) {
SysOssVolume sysOssVolume = volumeMapper.selectOne(new LambdaQueryWrapper<SysOssVolume>().eq(SysOssVolume::getType, type));
int i = volumeMapper.decreaseUse(sysOssVolume.getId(), use);
return i > 0;
}
}

View File

@ -158,6 +158,7 @@ public class SysOssTextbookServiceImpl implements ISysOssTextbookService {
if (flag) {
bo.setOssId(add.getOssId());
}
ossService.increase(1, add.getUse());
return flag;
}
@ -182,6 +183,7 @@ public class SysOssTextbookServiceImpl implements ISysOssTextbookService {
if (ObjectUtil.isNull(ossVo)) {
throw new ServiceException("文件不存在");
}
entity.setUse(ossVo.getSize());
SysCatalogTextbookVo ossTextbook = catalogService.selectCatalogById(entity.getCatalogId());
if (ObjectUtil.isNull(ossTextbook)) {
throw new ServiceException("教材目录不存在");
@ -200,6 +202,11 @@ public class SysOssTextbookServiceImpl implements ISysOssTextbookService {
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
}
for (Long id : ids) {
SysOssTextbookVo ossTextbookVo = baseMapper.selectVoById(id);
SysOssVo ossVo = ossService.getById(ossTextbookVo.getOssId());
ossService.decrease(1, ossVo.getSize());
}
return baseMapper.deleteBatchIds(ids) > 0;
}
@ -215,7 +222,9 @@ public class SysOssTextbookServiceImpl implements ISysOssTextbookService {
public Boolean copyByBo(SysOssTextbookBo bo) {
SysOssTextbook copy = processDate(bo);
validEntityBeforeSave(copy);
return baseMapper.insert(copy) > 0;
int i = baseMapper.insert(copy);
ossService.increase(1, copy.getUse());
return i > 0;
}
@Override

View File

@ -0,0 +1,17 @@
<?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.SysOssVolumeMapper">
<update id="increaseUse">
update sys_oss_volume
set `use_volume` = `use_volume` + #{use}
where id = #{id}
</update>
<update id="decreaseUse">
update sys_oss_volume
set `use_volume` = `use_volume` - #{use}
where id = #{id}
</update>
</mapper>