FileInfoServiceImpl.java 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. package com.fjhx.service.impl;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import cn.hutool.core.io.FileUtil;
  4. import cn.hutool.core.lang.UUID;
  5. import cn.hutool.core.util.ObjectUtil;
  6. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  7. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  8. import com.fjhx.base.BaseEntity;
  9. import com.fjhx.entity.FileInfo;
  10. import com.fjhx.mapper.FileInfoMapper;
  11. import com.fjhx.params.FileInfoParam;
  12. import com.fjhx.service.FileInfoService;
  13. import org.springblade.core.launch.BladeApplication;
  14. import org.springblade.core.log.exception.ServiceException;
  15. import org.springblade.core.tool.utils.DateUtil;
  16. import org.springframework.stereotype.Service;
  17. import org.springframework.transaction.annotation.Transactional;
  18. import org.springframework.web.multipart.MultipartFile;
  19. import java.io.FileOutputStream;
  20. import java.io.IOException;
  21. import java.io.InputStream;
  22. import java.util.*;
  23. import java.util.stream.Collectors;
  24. /**
  25. * <p>
  26. * 文件 服务实现类
  27. * </p>
  28. *
  29. * @author ${author}
  30. * @since 2022-07-07
  31. */
  32. @Service
  33. public class FileInfoServiceImpl extends ServiceImpl<FileInfoMapper, FileInfo> implements FileInfoService {
  34. @Override
  35. public Map<String, String> uploadFile(MultipartFile file) {
  36. String fileName = file.getOriginalFilename();
  37. String suffix = FileUtil.getSuffix(fileName);
  38. String rootPath = BladeApplication.isLocalDev() ? "D:/hx/" : "/mnt/file/";
  39. String path = DateUtil.format(new Date(), "yyyy-MM/dd/");
  40. String filePath = path + UUID.randomUUID() + "." + suffix;
  41. FileUtil.mkdir(rootPath + path);
  42. FileOutputStream fileOutputStream = null;
  43. InputStream inputStream = null;
  44. try {
  45. inputStream = file.getInputStream();
  46. fileOutputStream = new FileOutputStream(rootPath + filePath);
  47. int index;
  48. byte[] bytes = new byte[1024];
  49. while ((index = inputStream.read(bytes)) != -1) {
  50. fileOutputStream.write(bytes, 0, index);
  51. fileOutputStream.flush();
  52. }
  53. } catch (IOException e) {
  54. e.printStackTrace();
  55. throw new ServiceException("上传文件失败");
  56. } finally {
  57. try {
  58. if (fileOutputStream != null) {
  59. fileOutputStream.close();
  60. }
  61. if (inputStream != null) {
  62. inputStream.close();
  63. }
  64. } catch (IOException e) {
  65. e.printStackTrace();
  66. }
  67. }
  68. FileInfo fileInfo = new FileInfo();
  69. fileInfo.setFileName(fileName);
  70. fileInfo.setFileSuffix(suffix);
  71. fileInfo.setContentType(file.getContentType());
  72. fileInfo.setFileSize(file.getSize());
  73. fileInfo.setFilePath(filePath);
  74. save(fileInfo);
  75. Map<String, String> map = new HashMap<>();
  76. map.put("fileName", fileName);
  77. map.put("filePath", filePath);
  78. map.put("id", fileInfo.getId().toString());
  79. return map;
  80. }
  81. public void bindingFile(String applicationName, Long businessId, Integer businessType, List<FileInfoParam> paramList) {
  82. if (paramList.size() == 0) {
  83. return;
  84. }
  85. List<FileInfo> collect = paramList.stream().map(item -> {
  86. FileInfo fileInfo = new FileInfo();
  87. fileInfo.setId(item.getId());
  88. fileInfo.setBusinessId(businessId);
  89. fileInfo.setBusinessType(businessType);
  90. fileInfo.setApplicationName(applicationName);
  91. return fileInfo;
  92. }).collect(Collectors.toList());
  93. updateBatchById(collect);
  94. }
  95. @Transactional(rollbackFor = Exception.class)
  96. @Override
  97. public void againBindingFile(String applicationName, Long businessId, Integer businessType, List<FileInfoParam> paramList) {
  98. // 记录排除编辑的文件id
  99. List<Long> excludeIdList = new ArrayList<>();
  100. // 获取需要添加业务id的文件列表
  101. List<FileInfo> collect = paramList.stream().filter(fileInfo -> {
  102. if (ObjectUtil.isNotEmpty(fileInfo.getBusinessId())) {
  103. excludeIdList.add(fileInfo.getId());
  104. return false;
  105. }
  106. return true;
  107. }).map(item -> {
  108. FileInfo fileInfo = new FileInfo();
  109. fileInfo.setId(item.getId());
  110. fileInfo.setBusinessId(businessId);
  111. fileInfo.setBusinessType(businessType);
  112. fileInfo.setApplicationName(applicationName);
  113. return fileInfo;
  114. }).collect(Collectors.toList());
  115. // 如果排除的id数等于提交文件编辑数,则不执行删除逻辑
  116. int excludeIdSize = excludeIdList.size();
  117. if (paramList.size() != excludeIdSize) {
  118. remove(Wrappers.<FileInfo>lambdaQuery()
  119. .eq(FileInfo::getBusinessId, businessId)
  120. .eq(FileInfo::getBusinessType, businessType)
  121. .notIn(excludeIdSize > 0, BaseEntity::getId, collect));
  122. }
  123. // 如果需要添加业务id的文件数为0,跳过提交
  124. if (collect.size() > 0) {
  125. updateBatchById(collect);
  126. }
  127. }
  128. @Override
  129. public void relieveBindingFile(Long businessId) {
  130. if (ObjectUtil.isNotEmpty(businessId)) {
  131. remove(FileInfo::getBusinessId, businessId);
  132. }
  133. }
  134. @Override
  135. public List<FileInfoParam> getFileInfo(List<Long> businessIdList) {
  136. if (businessIdList.size() == 0) {
  137. return new ArrayList<>();
  138. }
  139. List<FileInfo> list = lambdaQuery().in(FileInfo::getBusinessId, businessIdList).list();
  140. return list.stream().map(item -> BeanUtil.toBean(item, FileInfoParam.class)).collect(Collectors.toList());
  141. }
  142. }