update FileService

This commit is contained in:
Turbolisten 2021-10-20 21:09:49 +08:00
parent 0549798445
commit 7ec8278db5
13 changed files with 61 additions and 276 deletions

View File

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import net.lab1024.smartadmin.service.module.business.category.constant.CategoryTypeEnum;
import java.time.LocalDateTime;

View File

@ -1,16 +1,17 @@
package net.lab1024.smartadmin.service.module.support.file;
import net.lab1024.smartadmin.service.common.swagger.SwaggerTagConst;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import net.lab1024.smartadmin.service.common.controller.SupportBaseController;
import net.lab1024.smartadmin.service.common.domain.PageResultDTO;
import net.lab1024.smartadmin.service.common.domain.ResponseDTO;
import net.lab1024.smartadmin.service.common.controller.SupportBaseController;
import net.lab1024.smartadmin.service.common.swagger.SwaggerTagConst;
import net.lab1024.smartadmin.service.module.support.file.domain.FileFolderTypeEnum;
import net.lab1024.smartadmin.service.module.support.file.domain.dto.*;
import net.lab1024.smartadmin.service.module.support.file.domain.dto.FileQueryForm;
import net.lab1024.smartadmin.service.module.support.file.domain.dto.FileUrlUploadForm;
import net.lab1024.smartadmin.service.module.support.file.domain.vo.FileUploadVO;
import net.lab1024.smartadmin.service.module.support.file.domain.vo.FileVO;
import net.lab1024.smartadmin.service.module.support.file.service.FileService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import net.lab1024.smartadmin.service.module.support.repeatsubmit.annoation.RepeatSubmit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
@ -19,8 +20,6 @@ import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.io.IOException;
import java.util.List;
/**
* @Description: 文件服务
@ -36,7 +35,7 @@ public class FileController extends SupportBaseController {
@ApiOperation(value = "文件上传 by listen", notes = FileFolderTypeEnum.INFO)
@PostMapping("/file/upload/{folder}")
public ResponseDTO<FileUploadVO> upload(MultipartFile file, @PathVariable Integer folder) {
return fileService.fileUpload(file, folder, 0L, null);
return fileService.fileUpload(file, folder, null, null);
}
@ApiOperation(value = "文件上传通过url上传 by listen", notes = FileFolderTypeEnum.INFO)
@ -51,42 +50,23 @@ public class FileController extends SupportBaseController {
return fileService.getFileUrl(fileKey);
}
@ApiOperation("批量获取文件url根据fileKey by listen")
@PostMapping("/file/url/query")
public ResponseDTO<List<FileUrlResultDTO>> getBatchFileUrl(@RequestBody @Valid FileUrlQueryForm queryForm) {
return fileService.getBatchFileUrl(queryForm);
}
@ApiOperation(value = "系统文件查询 by listen")
@ApiOperation(value = "文件分页查询 by listen")
@PostMapping("/file/query")
@RepeatSubmit(3000)
public ResponseDTO<PageResultDTO<FileVO>> queryListByPage(@RequestBody @Valid FileQueryForm queryForm) {
return fileService.queryListByPage(queryForm);
}
@ApiOperation(value = "下载文件流根据fileId by listen")
@GetMapping("/file/downLoad/{id}")
public ResponseEntity<Object> downLoadById(@PathVariable Long id, HttpServletRequest request) throws IOException {
String ua = request.getHeader("User-Agent");
return fileService.downLoadById(id, ua);
}
@ApiOperation(value = "下载文件流根据fileKey by listen")
@GetMapping("/file/downLoad")
public ResponseEntity<Object> downLoad(String fileKey, HttpServletRequest request) {
public ResponseEntity<Object> downLoad(@RequestParam String fileKey, HttpServletRequest request) {
String ua = request.getHeader("User-Agent");
return fileService.downloadByFileKey(fileKey, ua);
}
@RepeatSubmit(1000)
@ApiOperation("删除文件根据fileKey by listen")
@GetMapping("/file/delete")
public ResponseDTO<String> deleteByFileKey(@RequestParam String fileKey) {
return fileService.deleteByFileKey(fileKey);
}
@ApiOperation("根据文件服务和key 查询文件元数据 by listen")
@GetMapping("/file/query/metadata")
public ResponseDTO<FileMetadataDTO> queryFileMetadata(@RequestParam String fileKey) {
return fileService.queryFileMetadata(fileKey);
}
}

View File

@ -19,15 +19,9 @@ import java.util.List;
@Component
public interface FileDao extends BaseMapper<FileEntity> {
/**
* 文件key批量查询
* @param fileKeyList
* @return
*/
List<FileVO> listByFileKeyList(@Param("fileKeyList") List<String> fileKeyList);
/**
* 文件key单个查询
*
* @param fileKey
* @return
*/
@ -35,6 +29,7 @@ public interface FileDao extends BaseMapper<FileEntity> {
/**
* 分页查询
*
* @param page
* @param query
* @return

View File

@ -1,49 +0,0 @@
package net.lab1024.smartadmin.service.module.support.file.domain.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.sql.Date;
/**
* [ ]
*
* @author 罗伊
* @date 2020/8/25 11:57
*/
@Data
public class FileDTO {
@ApiModelProperty("主键")
private Long id;
@ApiModelProperty("相关业务id")
private String moduleId;
@ApiModelProperty("相关业务类型")
private String moduleType;
@ApiModelProperty("文件名称")
private String fileName;
@ApiModelProperty("文件大小")
private String fileSize;
@ApiModelProperty("文件类型")
private String fileType;
@ApiModelProperty("文件路径")
private String filePath;
@ApiModelProperty("上传人")
private Long createUser;
@ApiModelProperty("updateTime")
private Date updateTime;
@ApiModelProperty("创建时间")
private Date createTime;
@ApiModelProperty("文件展示url可用于下载,注:七牛云下载url要拼接 ?attname=文件名.jpg")
private String fileUrl;
}

View File

@ -1,10 +1,12 @@
package net.lab1024.smartadmin.service.module.support.file.domain.dto;
import net.lab1024.smartadmin.service.common.domain.PageParamForm;
import net.lab1024.smartadmin.service.common.swagger.ApiModelPropertyEnum;
import net.lab1024.smartadmin.service.module.support.file.domain.FileFolderTypeEnum;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import net.lab1024.smartadmin.service.common.domain.PageParamForm;
import net.lab1024.smartadmin.service.common.swagger.ApiModelPropertyEnum;
import net.lab1024.smartadmin.service.common.validator.enumeration.CheckEnum;
import net.lab1024.smartadmin.service.module.support.file.domain.FileFolderTypeEnum;
import org.hibernate.validator.constraints.Length;
/**
* @Description: 文件信息查询dto
@ -16,10 +18,11 @@ import lombok.Data;
public class FileQueryForm extends PageParamForm {
@ApiModelProperty(value = "文件名称")
@Length(max = 50, message = "文件名称搜索最多50字符")
private String fileName;
@ApiModelProperty(value = "业务类型")
@ApiModelPropertyEnum(FileFolderTypeEnum.class)
@ApiModelPropertyEnum(value = FileFolderTypeEnum.class, desc = "业务类型")
@CheckEnum(value = FileFolderTypeEnum.class, message = "业务类型错误")
private Integer folderType;
}

View File

@ -1,25 +0,0 @@
package net.lab1024.smartadmin.service.module.support.file.domain.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotEmpty;
import java.util.List;
/**
* 文件 url 查询DTO
*
* @author 胡克
* @date 2020/5/12 14:51
*/
@AllArgsConstructor
@NoArgsConstructor
@Data
public class FileUrlQueryForm {
@ApiModelProperty("file key")
@NotEmpty(message = "file key not empty")
private List<String> fileKeyList;
}

View File

@ -1,21 +0,0 @@
package net.lab1024.smartadmin.service.module.support.file.domain.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 文件 url 查询DTO
*
* @author 胡克
* @date 2020/5/12 14:51
*/
@NoArgsConstructor
@AllArgsConstructor
@Data
public class FileUrlResultDTO {
private String fileKey;
private String fileUrl;
}

View File

@ -1,14 +1,12 @@
package net.lab1024.smartadmin.service.module.support.file.domain.dto;
import net.lab1024.smartadmin.service.common.swagger.ApiModelPropertyEnum;
import net.lab1024.smartadmin.service.module.support.file.domain.FileFolderTypeEnum;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import net.lab1024.smartadmin.service.common.swagger.ApiModelPropertyEnum;
import net.lab1024.smartadmin.service.common.validator.enumeration.CheckEnum;
import net.lab1024.smartadmin.service.module.support.file.domain.FileFolderTypeEnum;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* url上传文件 DTO
@ -17,21 +15,20 @@ import javax.validation.constraints.NotNull;
* @date 2020年3月16日 10:14:54
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class FileUrlUploadForm {
@ApiModelPropertyEnum(FileFolderTypeEnum.class)
@ApiModelPropertyEnum(value = FileFolderTypeEnum.class, desc = "业务类型")
@CheckEnum(value = FileFolderTypeEnum.class, required = true, message = "业务类型错误")
private Integer folder;
@ApiModelProperty("文件url")
@NotBlank(message = "文件url不能为空")
private String fileUrl;
@NotNull(message = "userId不能为空")
@ApiModelProperty("用户id|可选")
private Long userId;
@NotBlank(message = "上传姓名不能为空")
@ApiModelProperty("用户姓名|可选")
private String userName;
}

View File

@ -1,21 +0,0 @@
package net.lab1024.smartadmin.service.module.support.file.domain.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 文件简单VO
*
* @author 善逸
* @date 2019/10/23 11:15
*/
@Data
public class FileSimpleVO {
@ApiModelProperty("文件Key")
private String fileKey;
@ApiModelProperty("文件Url")
private String fileUrl;
}

View File

@ -17,7 +17,6 @@ public class FileVO {
@ApiModelProperty("主键")
private Long id;
@ApiModelProperty("存储文件夹类型")
@ApiModelPropertyEnum(FileFolderTypeEnum.class)
private Integer folderType;

View File

@ -5,21 +5,24 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists;
import net.lab1024.smartadmin.service.common.code.SystemErrorCode;
import net.lab1024.smartadmin.service.common.code.UserErrorCode;
import net.lab1024.smartadmin.service.common.constant.StringConst;
import net.lab1024.smartadmin.service.common.constant.RedisKeyConst;
import net.lab1024.smartadmin.service.common.constant.StringConst;
import net.lab1024.smartadmin.service.common.domain.PageResultDTO;
import net.lab1024.smartadmin.service.common.domain.ResponseDTO;
import net.lab1024.smartadmin.service.common.util.SmartBaseEnumUtil;
import net.lab1024.smartadmin.service.common.util.SmartBeanUtil;
import net.lab1024.smartadmin.service.common.util.SmartPageUtil;
import net.lab1024.smartadmin.service.common.util.SmartStringUtil;
import net.lab1024.smartadmin.service.module.support.file.FileDao;
import net.lab1024.smartadmin.service.module.support.file.domain.FileEntity;
import net.lab1024.smartadmin.service.module.support.file.domain.FileFolderTypeEnum;
import net.lab1024.smartadmin.service.module.support.file.domain.dto.*;
import net.lab1024.smartadmin.service.module.support.file.domain.dto.FileDownloadDTO;
import net.lab1024.smartadmin.service.module.support.file.domain.dto.FileMetadataDTO;
import net.lab1024.smartadmin.service.module.support.file.domain.dto.FileQueryForm;
import net.lab1024.smartadmin.service.module.support.file.domain.dto.FileUrlUploadForm;
import net.lab1024.smartadmin.service.module.support.file.domain.vo.FileUploadVO;
import net.lab1024.smartadmin.service.module.support.file.domain.vo.FileVO;
import net.lab1024.smartadmin.service.third.SmartRedisService;
import net.lab1024.smartadmin.service.common.util.SmartBaseEnumUtil;
import net.lab1024.smartadmin.service.common.util.SmartBeanUtil;
import net.lab1024.smartadmin.service.common.util.SmartPageUtil;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
@ -35,7 +38,6 @@ import javax.annotation.Resource;
import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
@ -115,30 +117,30 @@ public class FileService {
}
// 获取文件服务
ResponseDTO<FileUploadVO> response = fileStorageService.fileUpload(file, folderTypeEnum.getFolder());
if (response.getOk()) {
// 上传成功 保存记录数据库
FileUploadVO uploadVO = response.getData();
FileEntity fileEntity = new FileEntity();
fileEntity.setFolderType(folderTypeEnum.getValue());
fileEntity.setFileName(originalFilename);
fileEntity.setFileSize(file.getSize());
fileEntity.setFileKey(uploadVO.getFileKey());
fileEntity.setFileType(uploadVO.getFileType());
fileEntity.setCreatorId(userId);
fileEntity.setCreatorName(userName);
fileDao.insert(fileEntity);
uploadVO.setFileId(fileEntity.getId());
//添加缓存
String redisKey = RedisKeyConst.Support.FILE_URL + uploadVO.getFileKey();
redisService.set(redisKey, uploadVO.getFileUrl(), fileStorageService.cacheExpireSecond());
String fileRedisKey = RedisKeyConst.Support.FILE_VO + uploadVO.getFileKey();
FileVO fileVO = SmartBeanUtil.copy(fileEntity, FileVO.class);
redisService.set(fileRedisKey, fileVO, fileStorageService.cacheExpireSecond());
return response;
}
// 上传成功 保存记录数据库
FileUploadVO uploadVO = response.getData();
FileEntity fileEntity = new FileEntity();
fileEntity.setFolderType(folderTypeEnum.getValue());
fileEntity.setFileName(originalFilename);
fileEntity.setFileSize(file.getSize());
fileEntity.setFileKey(uploadVO.getFileKey());
fileEntity.setFileType(uploadVO.getFileType());
fileEntity.setCreatorId(userId);
fileEntity.setCreatorName(userName);
fileDao.insert(fileEntity);
uploadVO.setFileId(fileEntity.getId());
// 添加缓存
String redisKey = RedisKeyConst.Support.FILE_URL + uploadVO.getFileKey();
redisService.set(redisKey, uploadVO.getFileUrl(), fileStorageService.cacheExpireSecond());
String fileRedisKey = RedisKeyConst.Support.FILE_VO + uploadVO.getFileKey();
FileVO fileVO = SmartBeanUtil.copy(fileEntity, FileVO.class);
redisService.set(fileRedisKey, fileVO, fileStorageService.cacheExpireSecond());
return response;
}
@ -197,28 +199,6 @@ public class FileService {
return fileUrl;
}
/**
* 批量获取文件url
* 支持单个 key 逗号分隔的形式
*
* @param queryDTO
* @return
*/
public ResponseDTO<List<FileUrlResultDTO>> getBatchFileUrl(FileUrlQueryForm queryDTO) {
// 获取文件服务
List<String> fileKeyList = queryDTO.getFileKeyList();
List<FileUrlResultDTO> resultDTOList = fileKeyList.stream().map(fileKey -> {
// 处理逗号分隔的字符串
List<String> stringList = Arrays.asList(fileKey.split(StringConst.SEPARATOR));
stringList = stringList.stream().map(e -> fileStorageService.getFileUrl(e).getData()).collect(Collectors.toList());
String result = StringUtils.join(stringList, StringConst.SEPARATOR_CHAR);
return new FileUrlResultDTO(fileKey, result);
}).collect(Collectors.toList());
return ResponseDTO.ok(resultDTOList);
}
/**
* 分页查询文件列表
*
@ -226,7 +206,7 @@ public class FileService {
* @return
*/
public ResponseDTO<PageResultDTO<FileVO>> queryListByPage(FileQueryForm queryDTO) {
Page page = SmartPageUtil.convert2PageQuery(queryDTO);
Page<?> page = SmartPageUtil.convert2PageQuery(queryDTO);
List<FileVO> fileList = fileDao.queryListByPage(page, queryDTO);
if (CollectionUtils.isNotEmpty(fileList)) {
fileList.forEach(e -> {
@ -267,26 +247,7 @@ public class FileService {
}
/**
* 根据id 下载文件
*
* @param id
* @return
*/
public ResponseEntity<Object> downLoadById(Long id, String userAgent) throws IOException {
FileEntity entity = fileDao.selectById(id);
if (null == entity) {
HttpHeaders heads = new HttpHeaders();
heads.add(HttpHeaders.CONTENT_TYPE, "text/html;charset=UTF-8");
return new ResponseEntity<>("文件不存在", heads, HttpStatus.OK);
}
// 根据文件服务类 获取对应文件服务 查询 url
ResponseEntity<Object> responseEntity = this.downloadByFileKey(entity.getFileKey(), userAgent);
return responseEntity;
}
/**
* 根据文件服务和key 删除
* 根据文件key 删除
*
* @param fileKey
* @return
@ -304,30 +265,4 @@ public class FileService {
// 根据文件服务类 获取对应文件服务 删除文件
return fileStorageService.delete(fileKey);
}
/**
* 根据文件服务和key 查询文件元数据
*
* @param fileKey
* @return
*/
public ResponseDTO<FileMetadataDTO> queryFileMetadata(String fileKey) {
if (StringUtils.isBlank(fileKey)) {
return ResponseDTO.error(UserErrorCode.DATA_NOT_EXIST);
}
// 查询数据库文件记录
FileEntity fileEntity = new FileEntity();
fileEntity.setFileKey(fileKey);
fileEntity = fileDao.selectOne(new QueryWrapper<>(fileEntity));
if (null == fileEntity) {
return ResponseDTO.error(UserErrorCode.DATA_NOT_EXIST);
}
// 返回 meta
FileMetadataDTO metadataDTO = new FileMetadataDTO();
metadataDTO.setFileSize(fileEntity.getFileSize());
metadataDTO.setFileName(fileEntity.getFileName());
metadataDTO.setFileFormat(fileEntity.getFileType());
return ResponseDTO.ok(metadataDTO);
}
}

View File

@ -3,7 +3,6 @@ package net.lab1024.smartadmin.service.module.support.idgenerator.service;
import com.google.common.collect.Interner;
import com.google.common.collect.Interners;
import lombok.extern.slf4j.Slf4j;
import net.lab1024.smartadmin.service.common.exception.BusinessException;
import net.lab1024.smartadmin.service.common.util.SmartRandomUtil;
import net.lab1024.smartadmin.service.module.support.idgenerator.IdGeneratorDao;
import net.lab1024.smartadmin.service.module.support.idgenerator.IdGeneratorRecordDao;
@ -61,9 +60,8 @@ public class IdGeneratorService {
public String generate(IdGeneratorEnum idGeneratorEnum) {
int generatorId = idGeneratorEnum.getValue();
IdGeneratorEntity idGeneratorEntity = this.idGeneratorMap.get(generatorId);
if (null == idGeneratorEntity) {
throw new BusinessException("IdGenerator生产业务不存在 " + idGeneratorEnum.getDesc());
}
Assert.notNull(idGeneratorEntity, "IdGenerator不存在 " + idGeneratorEntity.getRuleType());
// 校验生成规则
IdGeneratorRuleTypeEnum ruleTypeEnum = this.getIdGeneratorRuleTypeEnum(idGeneratorEntity.getRuleType());
Assert.notNull(ruleTypeEnum, "IdGenerator rule type 不存在 " + idGeneratorEntity.getRuleType());

View File

@ -18,13 +18,6 @@
</if>
</select>
<select id="listByFileKeyList" resultType="net.lab1024.smartadmin.service.module.support.file.domain.vo.FileVO">
SELECT * FROM t_file where file_key in
<foreach collection="fileKeyList" item="item" open="(" close=")" index="index" separator=",">
#{item}
</foreach>
</select>
<select id="getByFileKey" resultType="net.lab1024.smartadmin.service.module.support.file.domain.vo.FileVO">
SELECT * FROM t_file where file_key = #{fileKey}
</select>