优化文件上传逻辑,只有解析到的文件才会上传

This commit is contained in:
dxfeng 2025-04-10 15:20:51 +08:00
parent 33c4884972
commit 0b0e82d81f
3 changed files with 28 additions and 24 deletions

View File

@ -1,6 +1,8 @@
package com.engine.secret.service;
import com.fasterxml.jackson.databind.JsonNode;
import net.lingala.zip4j.ZipFile;
import net.lingala.zip4j.model.FileHeader;
import java.util.Map;
@ -20,13 +22,13 @@ public interface UnpackZipService {
* @return
* @throws Exception
*/
Map<String, Object> registerAcceptance(String requestId, JsonNode rootNode, Map<String, Integer> imageFileMap) throws Exception;
Map<String, Object> registerAcceptance(ZipFile zipFile, String requestId, JsonNode rootNode, Map<String, FileHeader> imageFileMap) throws Exception;
/**
* 材料补正
*
* @return
*/
Map<String, Object> reviewResubmittedMaterials(String requestId, JsonNode rootNode, Map<String, Integer> imageFileMap);
Map<String, Object> reviewResubmittedMaterials(ZipFile zipFile, String requestId, JsonNode rootNode, Map<String, FileHeader> imageFileMap);
}

View File

@ -48,17 +48,19 @@ public class OfflineZipUnpackServiceImpl extends Service implements UnpackZipSer
Map<String, Map<String, ResourceInfo>> resourceInfoMap;
Map<String, Integer> imageFileMap;
Map<String, FileHeader> fileHeaderMap;
String relatedFlowId;
Map<String, Object> returnMap = new HashMap<>();
ZipFile zipFile;
@Override
public Map<String, Object> registerAcceptance(String requestId, JsonNode rootNode, Map<String, Integer> imageFileMap) {
public Map<String, Object> registerAcceptance(ZipFile zipFile, String requestId, JsonNode rootNode, Map<String, FileHeader> imageFileMap) {
try {
this.imageFileMap = imageFileMap;
this.fileHeaderMap = imageFileMap;
this.relatedFlowId = requestId;
this.zipFile = zipFile;
// 构建流程表单反填字段
buildFormFields(rootNode);
// 插入建模表单数据写入文件数据
@ -71,11 +73,12 @@ public class OfflineZipUnpackServiceImpl extends Service implements UnpackZipSer
}
@Override
public Map<String, Object> reviewResubmittedMaterials(String requestId, JsonNode rootNode, Map<String, Integer> imageFileMap) {
public Map<String, Object> reviewResubmittedMaterials(ZipFile zipFile, String requestId, JsonNode rootNode, Map<String, FileHeader> imageFileMap) {
// TODO 逻辑待完善
try {
this.imageFileMap = imageFileMap;
this.fileHeaderMap = imageFileMap;
this.relatedFlowId = requestId;
this.zipFile = zipFile;
// 写入补正文件数据
updateCorrectedMaterials(rootNode);
} catch (Exception e) {
@ -173,7 +176,6 @@ public class OfflineZipUnpackServiceImpl extends Service implements UnpackZipSer
private void updateFileList(int mainId, List<FileConfig> fileConfigList, String tableName, boolean isDetail) throws Exception {
Map<String, Object> dataMap = new IgnoreCaseHashMap<>();
//StringBuilder whereSql = new StringBuilder(" where 1=1 ");
String fileTypeField = "";
String fileTypeValue = "";
for (FileConfig fileConfig : fileConfigList) {
@ -222,7 +224,7 @@ public class OfflineZipUnpackServiceImpl extends Service implements UnpackZipSer
continue;
}
String fileName = resourceInfo.getFileName();
Integer imageFileId = imageFileMap.get(fileName);
int imageFileId = generateImageFileId(zipFile, fileHeaderMap.get(fileName), fileName);
// 生成文档ID
int docId = ModeUtil.createDocId(uploadCatalogue, imageFileId, user);
docIds.add(docId);
@ -564,7 +566,8 @@ public class OfflineZipUnpackServiceImpl extends Service implements UnpackZipSer
continue;
}
String fileName = resourceInfo.getFileName();
Integer imageFileId = imageFileMap.get(fileName);
int imageFileId = generateImageFileId(zipFile, fileHeaderMap.get(fileName), fileName);
// 生成文档ID
int docId = ModeUtil.createDocId(uploadCatalogue, imageFileId, user);
docIds.add(docId);

View File

@ -43,13 +43,13 @@ public class QualificationApplicationServiceImpl extends Service implements Qual
BaseBean baseBean = new BaseBean();
Map<String, Integer> imageFileMap;
Map<String, FileHeader> fileHeaderMap;
@Override
public Map<String, Object> parsingFiles(Map<String, Object> param) {
try {
Map<String, Object> returnMap = new HashMap<>();
Map<String, Object> returnMap;
String docId = Util.null2String(param.get("docId"));
String requestId = Util.null2String(param.get("requestId"));
@ -125,7 +125,8 @@ public class QualificationApplicationServiceImpl extends Service implements Qual
// 遍历 ZIP 内文件可选
List<FileHeader> fileHeaders = zipFile.getFileHeaders();
imageFileMap = new HashMap<>();
//imageFileMap = new HashMap<>();
fileHeaderMap = new HashMap<>();
for (FileHeader header : fileHeaders) {
if (header.isDirectory()) {
continue;
@ -135,30 +136,28 @@ public class QualificationApplicationServiceImpl extends Service implements Qual
String fileName = (lastSlashIndex != -1)
? fullPath.substring(lastSlashIndex + 1)
: fullPath;
baseBean.writeLog("文件名称: " + fileName);
// 上传文件
int imageFileId = generateImageFileId(zipFile, header, fileName);
imageFileMap.put(fileName, imageFileId);
fileHeaderMap.put(fileName,header);
}
baseBean.writeLog("fileHeaders.size==" + fileHeaders.size());
baseBean.writeLog("imageFileMap.size==" + imageFileMap.size());
baseBean.writeLog("imageFileMap==" + JSON.toJSONString(imageFileMap));
baseBean.writeLog("fileHeaderMap.size==" + fileHeaderMap.size());
baseBean.writeLog("fileHeaderMap==" + JSON.toJSONString(fileHeaderMap));
// 获取数据文件用于后续数据解析
Integer dataJsonImageId = imageFileMap.get("(database)data.json");
String jsonFileName="(database)data.json";
FileHeader fileHeader = fileHeaderMap.get(jsonFileName);
int dataJsonImageId = generateImageFileId(zipFile, fileHeader, jsonFileName);
if (dataJsonImageId != null && dataJsonImageId > 0) {
if (dataJsonImageId > 0) {
// 离线端方式
JsonNode rootNode = parseJsonContent(dataJsonImageId);
OfflineZipUnpackServiceImpl offlineZipUnpackService = ServiceUtil.getService(OfflineZipUnpackServiceImpl.class, user);
if ("true".equals(isCorrection)) {
return offlineZipUnpackService.reviewResubmittedMaterials(requestId, rootNode, imageFileMap);
return offlineZipUnpackService.reviewResubmittedMaterials(zipFile,requestId, rootNode, fileHeaderMap);
}
return offlineZipUnpackService.registerAcceptance(requestId, rootNode, imageFileMap);
return offlineZipUnpackService.registerAcceptance(zipFile,requestId, rootNode, fileHeaderMap);
}
// TODO 兼容其他方式