文件业务逻辑修改

This commit is contained in:
2025-11-02 20:08:54 +08:00
parent a784624f19
commit 5e88fbd611
9 changed files with 98 additions and 21 deletions

View File

@@ -4,11 +4,13 @@ package com.vetti.web.controller.hotake;
import com.vetti.common.annotation.Log; import com.vetti.common.annotation.Log;
import com.vetti.common.core.controller.BaseController; import com.vetti.common.core.controller.BaseController;
import com.vetti.common.core.domain.AjaxResult; 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.core.page.TableDataInfo;
import com.vetti.common.enums.BusinessType; import com.vetti.common.enums.BusinessType;
import com.vetti.common.utils.poi.ExcelUtil; import com.vetti.common.utils.poi.ExcelUtil;
import com.vetti.hotake.domain.HotakeSysFile; import com.vetti.hotake.domain.HotakeSysFile;
import com.vetti.hotake.domain.dto.HotakeSysFileDto; import com.vetti.hotake.domain.dto.HotakeSysFileDto;
import com.vetti.hotake.domain.vo.HotakeSysFileVo;
import com.vetti.hotake.service.IHotakeSysFileService; import com.vetti.hotake.service.IHotakeSysFileService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
@@ -75,9 +77,9 @@ public class HotakeSysFileController extends BaseController {
@PreAuthorize("@ss.hasPermi('command:sysFile:add')") @PreAuthorize("@ss.hasPermi('command:sysFile:add')")
@Log(title = "文件管理", businessType = BusinessType.INSERT) @Log(title = "文件管理", businessType = BusinessType.INSERT)
@PostMapping @PostMapping
public AjaxResult add(@RequestPart("file") MultipartFile file, HotakeSysFile HotakeSysFile) { public R<HotakeSysFile> add(@RequestPart("file") MultipartFile file, HotakeSysFileVo fileVo) {
hotakeSysFileService.insertHotakeSysFile(file, HotakeSysFile); HotakeSysFile sysFile = hotakeSysFileService.insertHotakeSysFile(file, fileVo);
return toAjax(1); return R.ok(sysFile);
} }
/** /**

View File

@@ -117,7 +117,7 @@ spring:
max-wait: -1ms max-wait: -1ms
fs: fs:
minio: minio:
endpoint: http://test.hotake.cn:19000 # MinIO 服务地址 endpoint: http://vetti.hotake.cn:9000 # MinIO 服务地址
access-key: minioadmin # 访问密钥(替换为你的 Access Key access-key: minioadmin # 访问密钥(替换为你的 Access Key
secret-key: minioadmin # 密钥(替换为你的 Secret Key secret-key: minioadmin # 密钥(替换为你的 Secret Key
max-file-size: 104857600 #字节Byte max-file-size: 104857600 #字节Byte

View File

@@ -117,7 +117,7 @@ spring:
max-wait: -1ms max-wait: -1ms
fs: fs:
minio: minio:
endpoint: http://test.hotake.cn:19000 # MinIO 服务地址 endpoint: http://vetti.hotake.cn:9000 # MinIO 服务地址
access-key: minioadmin # 访问密钥(替换为你的 Access Key access-key: minioadmin # 访问密钥(替换为你的 Access Key
secret-key: minioadmin # 密钥(替换为你的 Secret Key secret-key: minioadmin # 密钥(替换为你的 Secret Key
max-file-size: 104857600 #字节Byte max-file-size: 104857600 #字节Byte

View File

@@ -41,6 +41,9 @@ public class HotakeCvInfo extends BaseEntity
@Excel(name = "简历地址") @Excel(name = "简历地址")
private String cvUrl; private String cvUrl;
@ApiModelProperty("简历文件大小")
private String fileSizeShow;
/** 状态0 禁用1 启用) */ /** 状态0 禁用1 启用) */
@ApiModelProperty("状态0 禁用1 启用)") @ApiModelProperty("状态0 禁用1 启用)")
@Excel(name = "状态", readConverterExp = "0=,禁=用1,启=用") @Excel(name = "状态", readConverterExp = "0=,禁=用1,启=用")

View File

@@ -48,6 +48,9 @@ public class HotakeSysFile extends BaseEntity
@Excel(name = "文件大小,单位字节") @Excel(name = "文件大小,单位字节")
private Long fileSize; private Long fileSize;
@ApiModelProperty("计算转换后的文件大小")
private String fileSizeShow;
/** 文件存储路径物理路径或云存储URL */ /** 文件存储路径物理路径或云存储URL */
@ApiModelProperty("文件存储路径物理路径或云存储URL") @ApiModelProperty("文件存储路径物理路径或云存储URL")
@Excel(name = "文件存储路径", readConverterExp = "物理路径或云存储URL") @Excel(name = "文件存储路径", readConverterExp = "物理路径或云存储URL")

View File

@@ -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;
}

View File

@@ -2,6 +2,7 @@ package com.vetti.hotake.service;
import com.vetti.hotake.domain.HotakeSysFile; import com.vetti.hotake.domain.HotakeSysFile;
import com.vetti.hotake.domain.dto.HotakeSysFileDto; import com.vetti.hotake.domain.dto.HotakeSysFileDto;
import com.vetti.hotake.domain.vo.HotakeSysFileVo;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.util.List; import java.util.List;
@@ -33,10 +34,10 @@ public interface IHotakeSysFileService {
/** /**
* 新增文件管理 * 新增文件管理
* *
* @param hotakeSysFile 文件管理 * @param fileVo 文件请求对象
* @return 结果 * @return 结果
*/ */
public HotakeSysFile insertHotakeSysFile(MultipartFile file, HotakeSysFile hotakeSysFile); public HotakeSysFile insertHotakeSysFile(MultipartFile file, HotakeSysFileVo fileVo);
/** /**
* 修改文件管理 * 修改文件管理

View File

@@ -1,6 +1,7 @@
package com.vetti.hotake.service.impl; package com.vetti.hotake.service.impl;
import cn.hutool.core.util.IdUtil;
import com.vetti.common.config.MinioConfig; import com.vetti.common.config.MinioConfig;
import com.vetti.common.core.service.BaseServiceImpl; import com.vetti.common.core.service.BaseServiceImpl;
import com.vetti.common.enums.FillTypeEnum; 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.common.utils.sign.Md5Utils;
import com.vetti.hotake.domain.HotakeSysFile; import com.vetti.hotake.domain.HotakeSysFile;
import com.vetti.hotake.domain.dto.HotakeSysFileDto; import com.vetti.hotake.domain.dto.HotakeSysFileDto;
import com.vetti.hotake.domain.vo.HotakeSysFileVo;
import com.vetti.hotake.mapper.HotakeSysFileMapper; import com.vetti.hotake.mapper.HotakeSysFileMapper;
import com.vetti.hotake.service.IHotakeSysFileService; import com.vetti.hotake.service.IHotakeSysFileService;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
@@ -19,6 +21,7 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@@ -83,24 +86,21 @@ public class HotakeSysFileServiceImpl extends BaseServiceImpl implements IHotake
*/ */
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public HotakeSysFile insertHotakeSysFile(MultipartFile file, HotakeSysFile HotakeSysFile) { public HotakeSysFile insertHotakeSysFile(MultipartFile file, HotakeSysFileVo fileVo) {
if (file == null) { if (file == null) {
throw new IllegalArgumentException("文件不能为空"); throw new IllegalArgumentException("文件不能为空");
} }
if (StringUtils.isEmpty(HotakeSysFile.getCode())) { if (StringUtils.isEmpty(fileVo.getMinioBucketName())) {
throw new IllegalArgumentException("CODE不能为空");
}
if (StringUtils.isEmpty(HotakeSysFile.getMinioBucketName())) {
throw new IllegalArgumentException("桶不能为空"); throw new IllegalArgumentException("桶不能为空");
} }
if (checkCode(HotakeSysFile)) { HotakeSysFile sysFile = new HotakeSysFile();
throw new IllegalArgumentException("CODE不能重复"); sysFile.setUploadPlatform(1);//PC
} sysFile.setMinioBucketName(fileVo.getMinioBucketName());
HotakeSysFile.setUploadPlatform(1);//PC sysFile.setCode(IdUtil.fastSimpleUUID());
updateData(file, HotakeSysFile); updateData(file, sysFile);
fill(FillTypeEnum.INSERT.getCode(), HotakeSysFile); fill(FillTypeEnum.INSERT.getCode(), sysFile);
hotakeSysFileMapper.insertHotakeSysFile(HotakeSysFile); hotakeSysFileMapper.insertHotakeSysFile(sysFile);
return HotakeSysFile; return sysFile;
} }
private boolean checkCode(HotakeSysFile HotakeSysFile) { private boolean checkCode(HotakeSysFile HotakeSysFile) {
@@ -124,6 +124,8 @@ public class HotakeSysFileServiceImpl extends BaseServiceImpl implements IHotake
HotakeSysFile.setFileName(FileUtils.cleanFileName(file.getOriginalFilename())); HotakeSysFile.setFileName(FileUtils.cleanFileName(file.getOriginalFilename()));
HotakeSysFile.setFileType(FileTypeUtils.getFileType(file.getOriginalFilename())); HotakeSysFile.setFileType(FileTypeUtils.getFileType(file.getOriginalFilename()));
HotakeSysFile.setFileSize(file.getSize()); HotakeSysFile.setFileSize(file.getSize());
//根据字节大小计算文件大小
HotakeSysFile.setFileSizeShow(calculateSize(file.getSize()));
HotakeSysFile.setFileMd5(Md5Utils.getFileMd5(FileUtils.convert(file))); HotakeSysFile.setFileMd5(Md5Utils.getFileMd5(FileUtils.convert(file)));
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e); throw new RuntimeException(e);
@@ -218,4 +220,45 @@ public class HotakeSysFileServiceImpl extends BaseServiceImpl implements IHotake
return map; 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";
}
} }

View File

@@ -10,6 +10,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="cvName" column="cv_name" /> <result property="cvName" column="cv_name" />
<result property="cvFileType" column="cv_file_type" /> <result property="cvFileType" column="cv_file_type" />
<result property="cvUrl" column="cv_url" /> <result property="cvUrl" column="cv_url" />
<result property="fileSizeShow" column="file_size_show" />
<result property="status" column="status" /> <result property="status" column="status" />
<result property="delFlag" column="del_flag" /> <result property="delFlag" column="del_flag" />
<result property="createBy" column="create_by" /> <result property="createBy" column="create_by" />
@@ -20,7 +21,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap> </resultMap>
<sql id="selectHotakeCvInfoVo"> <sql id="selectHotakeCvInfoVo">
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
</sql> </sql>
<select id="selectHotakeCvInfoList" parameterType="HotakeCvInfo" resultMap="HotakeCvInfoResult"> <select id="selectHotakeCvInfoList" parameterType="HotakeCvInfo" resultMap="HotakeCvInfoResult">
@@ -47,6 +48,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="cvName != null">cv_name,</if> <if test="cvName != null">cv_name,</if>
<if test="cvFileType != null">cv_file_type,</if> <if test="cvFileType != null">cv_file_type,</if>
<if test="cvUrl != null">cv_url,</if> <if test="cvUrl != null">cv_url,</if>
<if test="fileSizeShow != null">file_size_show,</if>
<if test="status != null">status,</if> <if test="status != null">status,</if>
<if test="delFlag != null">del_flag,</if> <if test="delFlag != null">del_flag,</if>
<if test="createBy != null">create_by,</if> <if test="createBy != null">create_by,</if>
@@ -60,6 +62,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="cvName != null">#{cvName},</if> <if test="cvName != null">#{cvName},</if>
<if test="cvFileType != null">#{cvFileType},</if> <if test="cvFileType != null">#{cvFileType},</if>
<if test="cvUrl != null">#{cvUrl},</if> <if test="cvUrl != null">#{cvUrl},</if>
<if test="fileSizeShow != null">#{fileSizeShow},</if>
<if test="status != null">#{status},</if> <if test="status != null">#{status},</if>
<if test="delFlag != null">#{delFlag},</if> <if test="delFlag != null">#{delFlag},</if>
<if test="createBy != null">#{createBy},</if> <if test="createBy != null">#{createBy},</if>
@@ -77,6 +80,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="cvName != null">cv_name = #{cvName},</if> <if test="cvName != null">cv_name = #{cvName},</if>
<if test="cvFileType != null">cv_file_type = #{cvFileType},</if> <if test="cvFileType != null">cv_file_type = #{cvFileType},</if>
<if test="cvUrl != null">cv_url = #{cvUrl},</if> <if test="cvUrl != null">cv_url = #{cvUrl},</if>
<if test="fileSizeShow != null">file_size_show = #{fileSizeShow},</if>
<if test="status != null">status = #{status},</if> <if test="status != null">status = #{status},</if>
<if test="delFlag != null">del_flag = #{delFlag},</if> <if test="delFlag != null">del_flag = #{delFlag},</if>
<if test="createBy != null">create_by = #{createBy},</if> <if test="createBy != null">create_by = #{createBy},</if>