diff --git a/vetti-admin/src/main/java/com/vetti/web/controller/hotake/HotakeSysFileController.java b/vetti-admin/src/main/java/com/vetti/web/controller/hotake/HotakeSysFileController.java index 03f94d3..55445df 100644 --- a/vetti-admin/src/main/java/com/vetti/web/controller/hotake/HotakeSysFileController.java +++ b/vetti-admin/src/main/java/com/vetti/web/controller/hotake/HotakeSysFileController.java @@ -4,11 +4,13 @@ package com.vetti.web.controller.hotake; import com.vetti.common.annotation.Log; import com.vetti.common.core.controller.BaseController; import com.vetti.common.core.domain.AjaxResult; +import com.vetti.common.core.domain.R; import com.vetti.common.core.page.TableDataInfo; import com.vetti.common.enums.BusinessType; import com.vetti.common.utils.poi.ExcelUtil; import com.vetti.hotake.domain.HotakeSysFile; import com.vetti.hotake.domain.dto.HotakeSysFileDto; +import com.vetti.hotake.domain.vo.HotakeSysFileVo; import com.vetti.hotake.service.IHotakeSysFileService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -75,9 +77,9 @@ public class HotakeSysFileController extends BaseController { @PreAuthorize("@ss.hasPermi('command:sysFile:add')") @Log(title = "文件管理", businessType = BusinessType.INSERT) @PostMapping - public AjaxResult add(@RequestPart("file") MultipartFile file, HotakeSysFile HotakeSysFile) { - hotakeSysFileService.insertHotakeSysFile(file, HotakeSysFile); - return toAjax(1); + public R add(@RequestPart("file") MultipartFile file, HotakeSysFileVo fileVo) { + HotakeSysFile sysFile = hotakeSysFileService.insertHotakeSysFile(file, fileVo); + return R.ok(sysFile); } /** diff --git a/vetti-admin/src/main/resources/application-druid.yml b/vetti-admin/src/main/resources/application-druid.yml index 6d4d646..935062f 100644 --- a/vetti-admin/src/main/resources/application-druid.yml +++ b/vetti-admin/src/main/resources/application-druid.yml @@ -117,7 +117,7 @@ spring: max-wait: -1ms fs: minio: - endpoint: http://test.hotake.cn:19000 # MinIO 服务地址 + endpoint: http://vetti.hotake.cn:9000 # MinIO 服务地址 access-key: minioadmin # 访问密钥(替换为你的 Access Key) secret-key: minioadmin # 密钥(替换为你的 Secret Key) max-file-size: 104857600 #字节(Byte) diff --git a/vetti-admin/target/classes/application-druid.yml b/vetti-admin/target/classes/application-druid.yml index 6d4d646..935062f 100644 --- a/vetti-admin/target/classes/application-druid.yml +++ b/vetti-admin/target/classes/application-druid.yml @@ -117,7 +117,7 @@ spring: max-wait: -1ms fs: minio: - endpoint: http://test.hotake.cn:19000 # MinIO 服务地址 + endpoint: http://vetti.hotake.cn:9000 # MinIO 服务地址 access-key: minioadmin # 访问密钥(替换为你的 Access Key) secret-key: minioadmin # 密钥(替换为你的 Secret Key) max-file-size: 104857600 #字节(Byte) diff --git a/vetti-hotakes/src/main/java/com/vetti/hotake/domain/HotakeCvInfo.java b/vetti-hotakes/src/main/java/com/vetti/hotake/domain/HotakeCvInfo.java index 6a684b9..1a8e5cd 100644 --- a/vetti-hotakes/src/main/java/com/vetti/hotake/domain/HotakeCvInfo.java +++ b/vetti-hotakes/src/main/java/com/vetti/hotake/domain/HotakeCvInfo.java @@ -41,6 +41,9 @@ public class HotakeCvInfo extends BaseEntity @Excel(name = "简历地址") private String cvUrl; + @ApiModelProperty("简历文件大小") + private String fileSizeShow; + /** 状态(0 禁用,1 启用) */ @ApiModelProperty("状态(0 禁用,1 启用)") @Excel(name = "状态", readConverterExp = "0=,禁=用,1,启=用") diff --git a/vetti-hotakes/src/main/java/com/vetti/hotake/domain/HotakeSysFile.java b/vetti-hotakes/src/main/java/com/vetti/hotake/domain/HotakeSysFile.java index 8b8cb45..f0955f3 100644 --- a/vetti-hotakes/src/main/java/com/vetti/hotake/domain/HotakeSysFile.java +++ b/vetti-hotakes/src/main/java/com/vetti/hotake/domain/HotakeSysFile.java @@ -48,6 +48,9 @@ public class HotakeSysFile extends BaseEntity @Excel(name = "文件大小,单位字节") private Long fileSize; + @ApiModelProperty("计算转换后的文件大小") + private String fileSizeShow; + /** 文件存储路径(物理路径或云存储URL) */ @ApiModelProperty("文件存储路径(物理路径或云存储URL)") @Excel(name = "文件存储路径", readConverterExp = "物理路径或云存储URL") diff --git a/vetti-hotakes/src/main/java/com/vetti/hotake/domain/vo/HotakeSysFileVo.java b/vetti-hotakes/src/main/java/com/vetti/hotake/domain/vo/HotakeSysFileVo.java new file mode 100644 index 0000000..53d25d7 --- /dev/null +++ b/vetti-hotakes/src/main/java/com/vetti/hotake/domain/vo/HotakeSysFileVo.java @@ -0,0 +1,21 @@ +package com.vetti.hotake.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 文件管理请求对象 + * + * @author ID + * @date 2025-09-06 + */ +@Data +@Accessors(chain = true) +public class HotakeSysFileVo { + + /** 存储minio中桶名字 */ + @ApiModelProperty("存储minio中桶名字(cv-fs:简历桶)") + private String minioBucketName; + +} diff --git a/vetti-hotakes/src/main/java/com/vetti/hotake/service/IHotakeSysFileService.java b/vetti-hotakes/src/main/java/com/vetti/hotake/service/IHotakeSysFileService.java index c088162..d477c80 100644 --- a/vetti-hotakes/src/main/java/com/vetti/hotake/service/IHotakeSysFileService.java +++ b/vetti-hotakes/src/main/java/com/vetti/hotake/service/IHotakeSysFileService.java @@ -2,6 +2,7 @@ package com.vetti.hotake.service; import com.vetti.hotake.domain.HotakeSysFile; import com.vetti.hotake.domain.dto.HotakeSysFileDto; +import com.vetti.hotake.domain.vo.HotakeSysFileVo; import org.springframework.web.multipart.MultipartFile; import java.util.List; @@ -33,10 +34,10 @@ public interface IHotakeSysFileService { /** * 新增文件管理 * - * @param hotakeSysFile 文件管理 + * @param fileVo 文件请求对象 * @return 结果 */ - public HotakeSysFile insertHotakeSysFile(MultipartFile file, HotakeSysFile hotakeSysFile); + public HotakeSysFile insertHotakeSysFile(MultipartFile file, HotakeSysFileVo fileVo); /** * 修改文件管理 diff --git a/vetti-hotakes/src/main/java/com/vetti/hotake/service/impl/HotakeSysFileServiceImpl.java b/vetti-hotakes/src/main/java/com/vetti/hotake/service/impl/HotakeSysFileServiceImpl.java index 406b7f6..dbed610 100644 --- a/vetti-hotakes/src/main/java/com/vetti/hotake/service/impl/HotakeSysFileServiceImpl.java +++ b/vetti-hotakes/src/main/java/com/vetti/hotake/service/impl/HotakeSysFileServiceImpl.java @@ -1,6 +1,7 @@ package com.vetti.hotake.service.impl; +import cn.hutool.core.util.IdUtil; import com.vetti.common.config.MinioConfig; import com.vetti.common.core.service.BaseServiceImpl; import com.vetti.common.enums.FillTypeEnum; @@ -10,6 +11,7 @@ import com.vetti.common.utils.file.MinioUtil; import com.vetti.common.utils.sign.Md5Utils; import com.vetti.hotake.domain.HotakeSysFile; import com.vetti.hotake.domain.dto.HotakeSysFileDto; +import com.vetti.hotake.domain.vo.HotakeSysFileVo; import com.vetti.hotake.mapper.HotakeSysFileMapper; import com.vetti.hotake.service.IHotakeSysFileService; import org.apache.commons.collections4.CollectionUtils; @@ -19,6 +21,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -83,24 +86,21 @@ public class HotakeSysFileServiceImpl extends BaseServiceImpl implements IHotake */ @Transactional(rollbackFor = Exception.class) @Override - public HotakeSysFile insertHotakeSysFile(MultipartFile file, HotakeSysFile HotakeSysFile) { + public HotakeSysFile insertHotakeSysFile(MultipartFile file, HotakeSysFileVo fileVo) { if (file == null) { throw new IllegalArgumentException("文件不能为空"); } - if (StringUtils.isEmpty(HotakeSysFile.getCode())) { - throw new IllegalArgumentException("CODE不能为空"); - } - if (StringUtils.isEmpty(HotakeSysFile.getMinioBucketName())) { + if (StringUtils.isEmpty(fileVo.getMinioBucketName())) { throw new IllegalArgumentException("桶不能为空"); } - if (checkCode(HotakeSysFile)) { - throw new IllegalArgumentException("CODE不能重复"); - } - HotakeSysFile.setUploadPlatform(1);//PC - updateData(file, HotakeSysFile); - fill(FillTypeEnum.INSERT.getCode(), HotakeSysFile); - hotakeSysFileMapper.insertHotakeSysFile(HotakeSysFile); - return HotakeSysFile; + HotakeSysFile sysFile = new HotakeSysFile(); + sysFile.setUploadPlatform(1);//PC + sysFile.setMinioBucketName(fileVo.getMinioBucketName()); + sysFile.setCode(IdUtil.fastSimpleUUID()); + updateData(file, sysFile); + fill(FillTypeEnum.INSERT.getCode(), sysFile); + hotakeSysFileMapper.insertHotakeSysFile(sysFile); + return sysFile; } private boolean checkCode(HotakeSysFile HotakeSysFile) { @@ -124,6 +124,8 @@ public class HotakeSysFileServiceImpl extends BaseServiceImpl implements IHotake HotakeSysFile.setFileName(FileUtils.cleanFileName(file.getOriginalFilename())); HotakeSysFile.setFileType(FileTypeUtils.getFileType(file.getOriginalFilename())); HotakeSysFile.setFileSize(file.getSize()); + //根据字节大小计算文件大小 + HotakeSysFile.setFileSizeShow(calculateSize(file.getSize())); HotakeSysFile.setFileMd5(Md5Utils.getFileMd5(FileUtils.convert(file))); } catch (Exception e) { throw new RuntimeException(e); @@ -218,4 +220,45 @@ public class HotakeSysFileServiceImpl extends BaseServiceImpl implements IHotake return map; } + /** + * 计算文件夹或文件大小 + * 单位:B, KB, M, G, T + * @param sizes + * @return + */ + private String calculateSize(Long sizes){ + if(sizes != null){ + if(new BigDecimal(sizes).compareTo(new BigDecimal(1024)) < 0){ + return sizes+"B"; + } + if(new BigDecimal(sizes).compareTo(new BigDecimal(1024)) >= 0 && + new BigDecimal(sizes).compareTo(new BigDecimal(1048576)) < 0){ + BigDecimal size = new BigDecimal(sizes).divide(new BigDecimal(1024)). + setScale(2,BigDecimal.ROUND_HALF_UP); + return size+"KB"; + } + if(new BigDecimal(sizes).compareTo(new BigDecimal(1048576)) >= 0 && + new BigDecimal(sizes).compareTo(new BigDecimal(1073741824)) < 0){ + BigDecimal size = new BigDecimal(sizes).divide(new BigDecimal(1048576)). + setScale(2,BigDecimal.ROUND_HALF_UP); + return size+"M"; + } + if(new BigDecimal(sizes).compareTo(new BigDecimal(1073741824)) >= 0 && + new BigDecimal(sizes).compareTo(new BigDecimal(1099511627776L)) < 0){ + BigDecimal size = new BigDecimal(sizes).divide(new BigDecimal(1073741824)). + setScale(2,BigDecimal.ROUND_HALF_UP); + return size+"G"; + } + if(new BigDecimal(sizes).compareTo(new BigDecimal(1099511627776L)) >= 0){ + BigDecimal size = new BigDecimal(sizes).divide(new BigDecimal(1099511627776L)). + setScale(2,BigDecimal.ROUND_HALF_UP); + return size+"T"; + } + }else{ + return "0B"; + } + return "0B"; + } + + } diff --git a/vetti-hotakes/src/main/resources/mapper/hotake/HotakeCvInfoMapper.xml b/vetti-hotakes/src/main/resources/mapper/hotake/HotakeCvInfoMapper.xml index 23e8e5d..0cb228a 100644 --- a/vetti-hotakes/src/main/resources/mapper/hotake/HotakeCvInfoMapper.xml +++ b/vetti-hotakes/src/main/resources/mapper/hotake/HotakeCvInfoMapper.xml @@ -10,6 +10,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -20,7 +21,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select id, user_id, cv_name, cv_file_type, cv_url, status, del_flag, create_by, create_time, update_by, update_time, remark from hotake_cv_info + select id, user_id, cv_name, cv_file_type, cv_url,file_size_show, status, del_flag, create_by, create_time, update_by, update_time, remark from hotake_cv_info