feat: 在线编辑已有标准寻找文件返回对应在线编辑文件记录接口

This commit is contained in:
2024-02-02 15:26:47 +08:00
parent 0c19f54f5f
commit 7e21272dca
4 changed files with 92 additions and 7 deletions
@@ -325,6 +325,12 @@ public class OnlyOfficeController {
return Result.OK(busProcessModelHisService.saveEditFileWithOss(ossFileId));
}
@ApiOperation(value = "根据传入的标准编号返回对应的在线编辑文件信息")
@GetMapping("/findEditFileByStandardNo")
public Result<BusProcessModelHis> findEditFileByStandardNo(String standardNo) {
return Result.OK(busProcessModelHisService.findEditFileByStandardNo(standardNo));
}
@ApiOperation(value = "根据路径下载文件")
@GetMapping("/downLoadFile")
public void downLoadFile(@RequestParam(name = "path") String path, HttpServletResponse response) {
@@ -0,0 +1,32 @@
package com.jero.modules.onlyoffice.entity;
import lombok.Getter;
/**
* @author: Mzaxd
* @Date: 2024/2/2 14:25
*/
@Getter
public enum StandardFileType {
FILE_PUBLISH_OF_ORIGINAL("发布稿", "publish_of_original", 1), // 发布稿
FILE_MODIFICATION_LIST("修改单", "modification_list", 2), // 修改单
FILE_DRAFT_FOR_REVIEW("报批稿", "draft_for_review", 3), // 报批稿
FILE_DRAFT_FOR_APPROVAL("送审稿", "draft_for_approval", 4), // 送审稿
FILE_DRAFT_FOR_COMMENT("征求意见稿", "draft_for_comment", 5), // 征求意见稿
FILE_DRAFT("草稿", "draft", 6); // 草稿
private final String name;
private final String value;
private final Integer order;
StandardFileType(String name, String value, Integer order) {
this.name = name;
this.value = value;
this.order = order;
}
}
@@ -41,4 +41,5 @@ public interface IBusProcessModelHisService extends IService<BusProcessModelHis>
String saveProcessFileToOss(String hisId);
BusProcessModelHis findEditFileByStandardNo(String standardNo);
}
@@ -3,20 +3,20 @@ package com.jero.modules.onlyoffice.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.common.api.vo.Result;
import com.jero.common.util.CommonUtils;
import com.jero.common.util.MinioUtil;
import com.jero.common.util.oConvertUtils;
import com.jero.modules.laws.common.constant.FieldCommon;
import com.jero.modules.laws.standard.entity.LawsEnterpriseStandard;
import com.jero.modules.laws.standard.service.ILawsEnterpriseStandardService;
import com.jero.modules.onlyoffice.entity.BusProcessModelHis;
import com.jero.modules.onlyoffice.entity.OnlineFileLog;
import com.jero.modules.onlyoffice.entity.StandardFileType;
import com.jero.modules.onlyoffice.mapper.BusProcessModelHisMapper;
import com.jero.modules.onlyoffice.mapper.OnlineFileLogDao;
import com.jero.modules.onlyoffice.service.IBusProcessModelHisService;
import com.jero.modules.oss.entity.OSSFile;
import com.jero.modules.oss.service.IOSSFileService;
import com.jero.modules.sys.controller.SysCommonController;
import io.minio.errors.*;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
@@ -25,17 +25,14 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
/**
* <p>
@@ -72,6 +69,9 @@ public class BusProcessModelHisServiceImpl extends ServiceImpl<BusProcessModelHi
@Value(value = "${jero.uploadType}")
private String uploadType;
@Resource
private ILawsEnterpriseStandardService eSService;
@Override
public BusProcessModelHis saveEditFile(String model) {
BusProcessModelHis modelHis = new BusProcessModelHis();
@@ -426,6 +426,52 @@ public class BusProcessModelHisServiceImpl extends ServiceImpl<BusProcessModelHi
return ossFile.getId();
}
@Override
public BusProcessModelHis findEditFileByStandardNo(String standardNo) {
OSSFile lastDocFileByStandardNo = this.findLastDocFileByStandardNo(standardNo);
if (lastDocFileByStandardNo == null) {
// 没有docx文件则自动生成并返回
return this.saveEditFile(standardNo);
}
// 有的话需要转换为在线编辑的文件
return this.saveEditFileWithOss(lastDocFileByStandardNo.getId());
}
private OSSFile findLastDocFileByStandardNo(String standardNo) {
LambdaQueryWrapper<LawsEnterpriseStandard> esWrapper = new LambdaQueryWrapper<>();
esWrapper.eq(LawsEnterpriseStandard::getStandardNumber, standardNo);
LawsEnterpriseStandard es = eSService.getOne(esWrapper);
// 根据企标编号
LambdaQueryWrapper<OSSFile> ossWrapper = new LambdaQueryWrapper<>();
ossWrapper.eq(OSSFile::getStandardId, es.getId());
// 发布稿>修改单>报批稿>送审稿>征求意见稿>草稿
String[] fileTypeArr = {FieldCommon.FILE_PUBLISH_OF_ORIGINAL, FieldCommon.FILE_MODIFICATION_LIST,
FieldCommon.FILE_DRAFT_FOR_REVIEW, FieldCommon.FILE_DRAFT_FOR_APPROVAL,
FieldCommon.FILE_DRAFT_FOR_COMMENT, FieldCommon.FILE_DRAFT};
ossWrapper.in(OSSFile::getStandardFileType, Arrays.asList(fileTypeArr));
List<OSSFile> fileList = ossFileService.list(ossWrapper);
// 根据fileName筛选出doc或docx
fileList = fileList.stream().filter(ossFile -> {
String fileName = ossFile.getFileName();
return fileName.endsWith(".doc") || fileName.endsWith(".docx");
}).collect(Collectors.toList());
if (fileList.isEmpty()) {
return null;
}
// 按照创建时间倒序排序
fileList.sort(Comparator.comparing(OSSFile::getCreateTime).reversed());
// 创建映射:枚举的value到order的映射
Map<String, Integer> orderMap = java.util.Arrays.stream(StandardFileType.values())
.collect(Collectors.toMap(StandardFileType::getValue, StandardFileType::getOrder));
// 根据映射结果排序集合
fileList.sort((file1, file2) -> {
Integer order1 = orderMap.get(file1.getStandardFileType());
Integer order2 = orderMap.get(file2.getStandardFileType());
return Integer.compare(order1, order2);
});
return fileList.get(0);
}
public static MultipartFile convert(File file) {
try (FileInputStream input = new FileInputStream(file)) {
return new MockMultipartFile("file",