ProjectFileService.java 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. package cn.cslg.pas.service;
  2. import cn.cslg.pas.common.core.base.Constants;
  3. import cn.cslg.pas.common.model.BaseEntity;
  4. import cn.cslg.pas.common.model.vo.ProjectFileVO;
  5. import cn.cslg.pas.common.utils.*;
  6. import cn.cslg.pas.common.model.dto.UploadFileDTO;
  7. import cn.cslg.pas.common.utils.SecurityUtils.LoginUtils;
  8. import cn.cslg.pas.domain.ProjectFile;
  9. import cn.cslg.pas.mapper.ProjectFileMapper;
  10. import cn.dev33.satoken.stp.StpUtil;
  11. import cn.hutool.core.io.FileUtil;
  12. import cn.hutool.core.io.IoUtil;
  13. import cn.hutool.core.util.IdUtil;
  14. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  15. import com.baomidou.mybatisplus.core.metadata.IPage;
  16. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  17. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  18. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  19. import lombok.RequiredArgsConstructor;
  20. import org.springframework.context.annotation.Lazy;
  21. import org.springframework.stereotype.Service;
  22. import org.springframework.web.multipart.MultipartFile;
  23. import javax.servlet.http.HttpServletResponse;
  24. import java.io.BufferedOutputStream;
  25. import java.io.File;
  26. import java.io.OutputStream;
  27. import java.util.ArrayList;
  28. import java.util.List;
  29. /**
  30. * <p>
  31. * 专题库附件表 服务实现类
  32. * </p>
  33. *
  34. * @author 王岩
  35. * @since 2022-01-24
  36. */
  37. @Service
  38. @RequiredArgsConstructor(onConstructor_ = {@Lazy})
  39. public class ProjectFileService extends ServiceImpl<ProjectFileMapper, ProjectFile> {
  40. private final FileUtils fileUtils;
  41. private final LoginUtils loginUtils;
  42. public IPage<ProjectFile> getPageList(ProjectFileVO params) {
  43. IPage<ProjectFile> pageList = baseMapper.getPageList(new Page<>(params.getCurrent(), params.getSize()), params);
  44. return pageList;
  45. }
  46. public ProjectFile getProjectFileByName(String name, Integer projectId, String type, String suffix) {
  47. LambdaQueryWrapper<ProjectFile> queryWrapper = new LambdaQueryWrapper<>();
  48. queryWrapper.eq(ProjectFile::getName, name);
  49. queryWrapper.eq(ProjectFile::getProjectId, projectId);
  50. queryWrapper.eq(ProjectFile::getType, type);
  51. queryWrapper.eq(ProjectFile::getSuffix, suffix);
  52. return this.getOne(queryWrapper);
  53. }
  54. public List<ProjectFile> getProjectFileByProjectId(Integer projectId) {
  55. LambdaQueryWrapper<ProjectFile> queryWrapper = new LambdaQueryWrapper<>();
  56. queryWrapper.eq(ProjectFile::getProjectId, projectId);
  57. return this.list(queryWrapper);
  58. }
  59. public List<ProjectFile> getProjectFileByIds(List<Integer> ids) {
  60. if (ids == null || ids.size() == 0) {
  61. return new ArrayList<>();
  62. }
  63. LambdaQueryWrapper<ProjectFile> queryWrapper = new LambdaQueryWrapper<>();
  64. queryWrapper.in(ProjectFile::getId, ids);
  65. return this.list(queryWrapper);
  66. }
  67. public List<ProjectFile> getProjectFileByProjectIds(List<Integer> projectIds) {
  68. if (projectIds == null || projectIds.size() == 0) {
  69. return new ArrayList<>();
  70. }
  71. LambdaQueryWrapper<ProjectFile> queryWrapper = new LambdaQueryWrapper<>();
  72. queryWrapper.in(ProjectFile::getProjectId, projectIds);
  73. return this.list(queryWrapper);
  74. }
  75. public List<ProjectFile> getProjectFileByProjectIdAndType(Integer type, Integer projectId) {
  76. LambdaQueryWrapper<ProjectFile> queryWrapper = new LambdaQueryWrapper<>();
  77. queryWrapper.eq(ProjectFile::getType, type);
  78. queryWrapper.eq(ProjectFile::getProjectId, projectId);
  79. return this.list(queryWrapper);
  80. }
  81. public void importProjectFile(Integer projectId, Integer userId, String tempPath, String projectFileJson, String projectReportJson) {
  82. List<ProjectFile> projectFileList = new ArrayList<>();
  83. if (StringUtils.isNotEmpty(projectFileJson)) {
  84. projectFileList.addAll(JsonUtils.jsonToList(projectFileJson, ProjectFile.class));
  85. }
  86. if (StringUtils.isNotEmpty(projectReportJson)) {
  87. projectFileList.addAll(JsonUtils.jsonToList(projectReportJson, ProjectFile.class));
  88. }
  89. for (ProjectFile projectFile : projectFileList) {
  90. String copyPath = tempPath + FileUtils.FILE_SEPARATOR + (projectFile.getType().equals("1") ? Constants.PROJECT_REPORT_DIRECTORY_NAME : Constants.PROJECT_FILE_DIRECTORY_NAME) + FileUtils.FILE_SEPARATOR + projectFile.getFileName();
  91. if (!FileUtil.exist(copyPath)) {
  92. continue;
  93. }
  94. String extName = FileUtil.extName(projectFile.getFileName());
  95. String fileName = IdUtil.simpleUUID() + "." + extName;
  96. String saveUrl = fileUtils.getDirectory(fileName);
  97. String savePath = fileUtils.getSystemPath(saveUrl);
  98. ProjectFile temp = this.getProjectFileByName(projectFile.getName(), projectId, projectFile.getType(), extName);
  99. if (temp == null) {
  100. temp = new ProjectFile();
  101. temp.setCreateBy(userId);
  102. temp.setCreateTime(DateUtils.getDateTime());
  103. temp.setProjectId(projectId);
  104. temp.setName(projectFile.getName());
  105. temp.setType(projectFile.getType());
  106. temp.setRemark(projectFile.getRemark());
  107. } else {
  108. FileUtil.del(fileUtils.getSystemPath(temp.getUrl()));
  109. }
  110. File file = FileUtil.copy(copyPath, savePath, true);
  111. temp.setUrl(saveUrl);
  112. temp.setFileName(fileName);
  113. temp.setSize((int) FileUtil.size(file));
  114. temp.insertOrUpdate();
  115. }
  116. }
  117. public String add(ProjectFile projectFile, MultipartFile file) {
  118. ProjectFile temp = this.getProjectFileByName(projectFile.getName(), projectFile.getProjectId(), projectFile.getType(), FileUtil.extName(file.getOriginalFilename()));
  119. if (temp != null) {
  120. return Response.error("文件名称已存在");
  121. }
  122. UploadFileDTO fileDTO = fileUtils.uploadFile(file);
  123. projectFile.setSize((int) file.getSize());
  124. projectFile.setUrl(fileDTO.getPath());
  125. projectFile.setFileName(fileDTO.getFileName());
  126. projectFile.setCreateTime(DateUtils.getDateTime());
  127. projectFile.setCreateBy(loginUtils.getId());
  128. projectFile.setSuffix(fileDTO.getExtName());
  129. projectFile.insert();
  130. return Response.success(projectFile.getId());
  131. }
  132. public String edit(ProjectFile projectFile, MultipartFile file) {
  133. if (StringUtils.isNotNull(file)) {
  134. ProjectFile temp = this.getProjectFileByName(projectFile.getName(), projectFile.getProjectId(), projectFile.getType(), FileUtil.extName(file.getOriginalFilename()));
  135. if (temp != null && !temp.getId().equals(projectFile.getId())) {
  136. return Response.error("文件名称已存在");
  137. }
  138. if (StringUtils.isNotEmpty(projectFile.getUrl())) {
  139. FileUtil.del(fileUtils.getSystemPath(projectFile.getUrl()));
  140. }
  141. UploadFileDTO fileDTO = fileUtils.uploadFile(file);
  142. projectFile.setSize((int) file.getSize());
  143. projectFile.setUrl(fileDTO.getPath());
  144. projectFile.setFileName(fileDTO.getFileName());
  145. projectFile.setSuffix(fileDTO.getExtName());
  146. } else {
  147. File localFile = FileUtil.file(fileUtils.getSystemPath(projectFile.getUrl()));
  148. ProjectFile temp = this.getProjectFileByName(projectFile.getName(), projectFile.getProjectId(), projectFile.getType(), FileUtil.extName(localFile.getName()));
  149. if (temp != null && !temp.getId().equals(projectFile.getId())) {
  150. return Response.error("文件名称已存在");
  151. }
  152. }
  153. projectFile.updateById();
  154. return Response.success();
  155. }
  156. public String delete(Integer id) {
  157. ProjectFile temp = this.getById(id);
  158. this.removeById(id);
  159. if (StringUtils.isNotEmpty(temp.getUrl())) {
  160. FileUtil.del(fileUtils.getSystemPath(temp.getUrl()));
  161. }
  162. return Response.success(true);
  163. }
  164. public void deleteByProjectId(Integer projectId) {
  165. List<ProjectFile> projectFileList = this.getProjectFileByProjectId(projectId);
  166. for (ProjectFile projectFile : projectFileList) {
  167. FileUtil.del(fileUtils.getSystemPath(projectFile.getUrl()));
  168. }
  169. this.remove(Wrappers.<ProjectFile>lambdaQuery().eq(ProjectFile::getProjectId, projectId));
  170. }
  171. }