FileInfoServiceImpl.java 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. package com.fjhx.service.impl;
  2. import cn.hutool.core.io.FileUtil;
  3. import cn.hutool.core.lang.UUID;
  4. import cn.hutool.core.util.ObjectUtil;
  5. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  6. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  7. import com.fjhx.base.BaseEntity;
  8. import com.fjhx.entity.FileInfo;
  9. import com.fjhx.mapper.FileInfoMapper;
  10. import com.fjhx.service.FileInfoService;
  11. import org.springblade.core.launch.BladeApplication;
  12. import org.springblade.core.log.exception.ServiceException;
  13. import org.springblade.core.tool.utils.DateUtil;
  14. import org.springframework.beans.factory.annotation.Value;
  15. import org.springframework.stereotype.Service;
  16. import org.springframework.web.multipart.MultipartFile;
  17. import java.io.FileOutputStream;
  18. import java.io.IOException;
  19. import java.io.InputStream;
  20. import java.util.*;
  21. import java.util.stream.Collectors;
  22. /**
  23. * <p>
  24. * 文件 服务实现类
  25. * </p>
  26. *
  27. * @author ${author}
  28. * @since 2022-07-07
  29. */
  30. @Service
  31. public class FileInfoServiceImpl extends ServiceImpl<FileInfoMapper, FileInfo> implements FileInfoService {
  32. @Value("${spring.application.name}")
  33. public String applicationName;
  34. @Override
  35. public Map<String, String> uploadFile(MultipartFile file) {
  36. String fileName = file.getOriginalFilename();
  37. String suffix = FileUtil.getSuffix(fileName);
  38. String path = getFilePath();
  39. String filePath = path + UUID.randomUUID() + "." + suffix;
  40. FileUtil.mkdir(path);
  41. FileOutputStream fileOutputStream = null;
  42. InputStream inputStream = null;
  43. try {
  44. inputStream = file.getInputStream();
  45. fileOutputStream = new FileOutputStream(filePath);
  46. int index;
  47. byte[] bytes = new byte[1024];
  48. while ((index = inputStream.read(bytes)) != -1) {
  49. fileOutputStream.write(bytes, 0, index);
  50. fileOutputStream.flush();
  51. }
  52. } catch (IOException e) {
  53. e.printStackTrace();
  54. throw new ServiceException("上传文件失败");
  55. } finally {
  56. try {
  57. if (fileOutputStream != null) {
  58. fileOutputStream.close();
  59. }
  60. if (inputStream != null) {
  61. inputStream.close();
  62. }
  63. } catch (IOException e) {
  64. e.printStackTrace();
  65. }
  66. }
  67. FileInfo fileInfo = new FileInfo();
  68. fileInfo.setFileName(fileName);
  69. fileInfo.setFileSuffix(suffix);
  70. fileInfo.setContentType(file.getContentType());
  71. fileInfo.setFileSize(file.getSize());
  72. fileInfo.setFilePath(filePath);
  73. save(fileInfo);
  74. Map<String, String> map = new HashMap<>();
  75. map.put("fileName", fileName);
  76. map.put("filePath", filePath);
  77. map.put("id", fileInfo.getId().toString());
  78. return map;
  79. }
  80. @Override
  81. public void addFile(Long businessId, Integer businessType, List<FileInfo> fileInfoList) {
  82. if (fileInfoList.size() == 0) {
  83. return;
  84. }
  85. fileInfoList.forEach(item -> {
  86. item.setBusinessId(businessId);
  87. item.setBusinessType(businessType);
  88. });
  89. updateBatchById(fileInfoList);
  90. }
  91. @Override
  92. public void updateFile(Long businessId, Integer businessType, List<FileInfo> fileInfoList) {
  93. List<Long> excludeIdList = new ArrayList<>();
  94. List<FileInfo> collect = fileInfoList.stream().filter(fileInfo -> {
  95. if (ObjectUtil.isNotEmpty(fileInfo.getBusinessId())) {
  96. excludeIdList.add(fileInfo.getId());
  97. return false;
  98. }
  99. fileInfo.setId(businessId);
  100. fileInfo.setBusinessType(businessType);
  101. return true;
  102. }).collect(Collectors.toList());
  103. remove(Wrappers.<FileInfo>lambdaQuery()
  104. .eq(FileInfo::getBusinessId, businessId)
  105. .eq(FileInfo::getBusinessType, businessType)
  106. .notIn(excludeIdList.size() > 0, BaseEntity::getId, collect));
  107. if (collect.size() > 0) {
  108. saveBatch(collect);
  109. }
  110. }
  111. @Override
  112. public void deleteFile(Long businessId) {
  113. remove(FileInfo::getBusinessId, businessId);
  114. }
  115. private String getFilePath() {
  116. StringJoiner joiner = new StringJoiner("/");
  117. boolean localDev = BladeApplication.isLocalDev();
  118. if (localDev) {
  119. joiner.add("D:/hx");
  120. } else {
  121. joiner.add("/mnt/file");
  122. }
  123. joiner.add(applicationName).add(DateUtil.format(new Date(), "yyyy-MM/dd/"));
  124. return joiner.toString();
  125. }
  126. }