package cn.cslg.pas.service; import cn.cslg.pas.common.core.base.Constants; import cn.cslg.pas.common.model.BaseEntity; import cn.cslg.pas.common.model.vo.ProjectFileVO; import cn.cslg.pas.common.utils.*; import cn.cslg.pas.common.model.dto.UploadFileDTO; import cn.cslg.pas.common.utils.SecurityUtils.LoginUtils; import cn.cslg.pas.domain.ProjectFile; import cn.cslg.pas.mapper.ProjectFileMapper; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.IdUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.BufferedOutputStream; import java.io.File; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; /** *

* 专题库附件表 服务实现类 *

* * @author 王岩 * @since 2022-01-24 */ @Service @RequiredArgsConstructor(onConstructor_ = {@Lazy}) public class ProjectFileService extends ServiceImpl { private final FileUtils fileUtils; private final LoginUtils loginUtils; public IPage getPageList(ProjectFileVO params) { IPage pageList = baseMapper.getPageList(new Page<>(params.getCurrent(), params.getSize()), params); return pageList; } public ProjectFile getProjectFileByName(String name, Integer projectId, String type, String suffix) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(ProjectFile::getName, name); queryWrapper.eq(ProjectFile::getProjectId, projectId); queryWrapper.eq(ProjectFile::getType, type); queryWrapper.eq(ProjectFile::getSuffix, suffix); return this.getOne(queryWrapper); } public List getProjectFileByProjectId(Integer projectId) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(ProjectFile::getProjectId, projectId); return this.list(queryWrapper); } public List getProjectFileByIds(List ids) { if (ids == null || ids.size() == 0) { return new ArrayList<>(); } LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(ProjectFile::getId, ids); return this.list(queryWrapper); } public List getProjectFileByProjectIds(List projectIds) { if (projectIds == null || projectIds.size() == 0) { return new ArrayList<>(); } LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(ProjectFile::getProjectId, projectIds); return this.list(queryWrapper); } public List getProjectFileByProjectIdAndType(Integer type, Integer projectId) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(ProjectFile::getType, type); queryWrapper.eq(ProjectFile::getProjectId, projectId); return this.list(queryWrapper); } public void importProjectFile(Integer projectId, Integer userId, String tempPath, String projectFileJson, String projectReportJson) { List projectFileList = new ArrayList<>(); if (StringUtils.isNotEmpty(projectFileJson)) { projectFileList.addAll(JsonUtils.jsonToList(projectFileJson, ProjectFile.class)); } if (StringUtils.isNotEmpty(projectReportJson)) { projectFileList.addAll(JsonUtils.jsonToList(projectReportJson, ProjectFile.class)); } for (ProjectFile projectFile : projectFileList) { 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(); if (!FileUtil.exist(copyPath)) { continue; } String extName = FileUtil.extName(projectFile.getFileName()); String fileName = IdUtil.simpleUUID() + "." + extName; String saveUrl = fileUtils.getDirectory(fileName); String savePath = fileUtils.getSystemPath(saveUrl); ProjectFile temp = this.getProjectFileByName(projectFile.getName(), projectId, projectFile.getType(), extName); if (temp == null) { temp = new ProjectFile(); temp.setCreateBy(userId); temp.setCreateTime(DateUtils.getDateTime()); temp.setProjectId(projectId); temp.setName(projectFile.getName()); temp.setType(projectFile.getType()); temp.setRemark(projectFile.getRemark()); } else { FileUtil.del(fileUtils.getSystemPath(temp.getUrl())); } File file = FileUtil.copy(copyPath, savePath, true); temp.setUrl(saveUrl); temp.setFileName(fileName); temp.setSize((int) FileUtil.size(file)); temp.insertOrUpdate(); } } public String add(ProjectFile projectFile, MultipartFile file) { ProjectFile temp = this.getProjectFileByName(projectFile.getName(), projectFile.getProjectId(), projectFile.getType(), FileUtil.extName(file.getOriginalFilename())); if (temp != null) { return Response.error("文件名称已存在"); } UploadFileDTO fileDTO = fileUtils.uploadFile(file); projectFile.setSize((int) file.getSize()); projectFile.setUrl(fileDTO.getPath()); projectFile.setFileName(fileDTO.getFileName()); projectFile.setCreateTime(DateUtils.getDateTime()); projectFile.setCreateBy(loginUtils.getId()); projectFile.setSuffix(fileDTO.getExtName()); projectFile.insert(); return Response.success(projectFile.getId()); } public String edit(ProjectFile projectFile, MultipartFile file) { if (StringUtils.isNotNull(file)) { ProjectFile temp = this.getProjectFileByName(projectFile.getName(), projectFile.getProjectId(), projectFile.getType(), FileUtil.extName(file.getOriginalFilename())); if (temp != null && !temp.getId().equals(projectFile.getId())) { return Response.error("文件名称已存在"); } if (StringUtils.isNotEmpty(projectFile.getUrl())) { FileUtil.del(fileUtils.getSystemPath(projectFile.getUrl())); } UploadFileDTO fileDTO = fileUtils.uploadFile(file); projectFile.setSize((int) file.getSize()); projectFile.setUrl(fileDTO.getPath()); projectFile.setFileName(fileDTO.getFileName()); projectFile.setSuffix(fileDTO.getExtName()); } else { File localFile = FileUtil.file(fileUtils.getSystemPath(projectFile.getUrl())); ProjectFile temp = this.getProjectFileByName(projectFile.getName(), projectFile.getProjectId(), projectFile.getType(), FileUtil.extName(localFile.getName())); if (temp != null && !temp.getId().equals(projectFile.getId())) { return Response.error("文件名称已存在"); } } projectFile.updateById(); return Response.success(); } public String delete(Integer id) { ProjectFile temp = this.getById(id); this.removeById(id); if (StringUtils.isNotEmpty(temp.getUrl())) { FileUtil.del(fileUtils.getSystemPath(temp.getUrl())); } return Response.success(true); } public void deleteByProjectId(Integer projectId) { List projectFileList = this.getProjectFileByProjectId(projectId); for (ProjectFile projectFile : projectFileList) { FileUtil.del(fileUtils.getSystemPath(projectFile.getUrl())); } this.remove(Wrappers.lambdaQuery().eq(ProjectFile::getProjectId, projectId)); } }