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

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; package com.engine.secret.service;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import net.lingala.zip4j.ZipFile;
import net.lingala.zip4j.model.FileHeader;
import java.util.Map; import java.util.Map;
@ -20,13 +22,13 @@ public interface UnpackZipService {
* @return * @return
* @throws Exception * @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 * @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, Map<String, ResourceInfo>> resourceInfoMap;
Map<String, Integer> imageFileMap; Map<String, FileHeader> fileHeaderMap;
String relatedFlowId; String relatedFlowId;
Map<String, Object> returnMap = new HashMap<>(); Map<String, Object> returnMap = new HashMap<>();
ZipFile zipFile;
@Override @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 { try {
this.imageFileMap = imageFileMap; this.fileHeaderMap = imageFileMap;
this.relatedFlowId = requestId; this.relatedFlowId = requestId;
this.zipFile = zipFile;
// 构建流程表单反填字段 // 构建流程表单反填字段
buildFormFields(rootNode); buildFormFields(rootNode);
// 插入建模表单数据写入文件数据 // 插入建模表单数据写入文件数据
@ -71,11 +73,12 @@ public class OfflineZipUnpackServiceImpl extends Service implements UnpackZipSer
} }
@Override @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 逻辑待完善 // TODO 逻辑待完善
try { try {
this.imageFileMap = imageFileMap; this.fileHeaderMap = imageFileMap;
this.relatedFlowId = requestId; this.relatedFlowId = requestId;
this.zipFile = zipFile;
// 写入补正文件数据 // 写入补正文件数据
updateCorrectedMaterials(rootNode); updateCorrectedMaterials(rootNode);
} catch (Exception e) { } 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 { private void updateFileList(int mainId, List<FileConfig> fileConfigList, String tableName, boolean isDetail) throws Exception {
Map<String, Object> dataMap = new IgnoreCaseHashMap<>(); Map<String, Object> dataMap = new IgnoreCaseHashMap<>();
//StringBuilder whereSql = new StringBuilder(" where 1=1 ");
String fileTypeField = ""; String fileTypeField = "";
String fileTypeValue = ""; String fileTypeValue = "";
for (FileConfig fileConfig : fileConfigList) { for (FileConfig fileConfig : fileConfigList) {
@ -222,7 +224,7 @@ public class OfflineZipUnpackServiceImpl extends Service implements UnpackZipSer
continue; continue;
} }
String fileName = resourceInfo.getFileName(); String fileName = resourceInfo.getFileName();
Integer imageFileId = imageFileMap.get(fileName); int imageFileId = generateImageFileId(zipFile, fileHeaderMap.get(fileName), fileName);
// 生成文档ID // 生成文档ID
int docId = ModeUtil.createDocId(uploadCatalogue, imageFileId, user); int docId = ModeUtil.createDocId(uploadCatalogue, imageFileId, user);
docIds.add(docId); docIds.add(docId);
@ -564,7 +566,8 @@ public class OfflineZipUnpackServiceImpl extends Service implements UnpackZipSer
continue; continue;
} }
String fileName = resourceInfo.getFileName(); String fileName = resourceInfo.getFileName();
Integer imageFileId = imageFileMap.get(fileName); int imageFileId = generateImageFileId(zipFile, fileHeaderMap.get(fileName), fileName);
// 生成文档ID // 生成文档ID
int docId = ModeUtil.createDocId(uploadCatalogue, imageFileId, user); int docId = ModeUtil.createDocId(uploadCatalogue, imageFileId, user);
docIds.add(docId); docIds.add(docId);

View File

@ -43,13 +43,13 @@ public class QualificationApplicationServiceImpl extends Service implements Qual
BaseBean baseBean = new BaseBean(); BaseBean baseBean = new BaseBean();
Map<String, Integer> imageFileMap; Map<String, FileHeader> fileHeaderMap;
@Override @Override
public Map<String, Object> parsingFiles(Map<String, Object> param) { public Map<String, Object> parsingFiles(Map<String, Object> param) {
try { try {
Map<String, Object> returnMap = new HashMap<>(); Map<String, Object> returnMap;
String docId = Util.null2String(param.get("docId")); String docId = Util.null2String(param.get("docId"));
String requestId = Util.null2String(param.get("requestId")); String requestId = Util.null2String(param.get("requestId"));
@ -125,7 +125,8 @@ public class QualificationApplicationServiceImpl extends Service implements Qual
// 遍历 ZIP 内文件可选 // 遍历 ZIP 内文件可选
List<FileHeader> fileHeaders = zipFile.getFileHeaders(); List<FileHeader> fileHeaders = zipFile.getFileHeaders();
imageFileMap = new HashMap<>(); //imageFileMap = new HashMap<>();
fileHeaderMap = new HashMap<>();
for (FileHeader header : fileHeaders) { for (FileHeader header : fileHeaders) {
if (header.isDirectory()) { if (header.isDirectory()) {
continue; continue;
@ -135,30 +136,28 @@ public class QualificationApplicationServiceImpl extends Service implements Qual
String fileName = (lastSlashIndex != -1) String fileName = (lastSlashIndex != -1)
? fullPath.substring(lastSlashIndex + 1) ? fullPath.substring(lastSlashIndex + 1)
: fullPath; : fullPath;
baseBean.writeLog("文件名称: " + fileName); fileHeaderMap.put(fileName,header);
// 上传文件
int imageFileId = generateImageFileId(zipFile, header, fileName);
imageFileMap.put(fileName, imageFileId);
} }
baseBean.writeLog("fileHeaders.size==" + fileHeaders.size()); baseBean.writeLog("fileHeaders.size==" + fileHeaders.size());
baseBean.writeLog("imageFileMap.size==" + imageFileMap.size()); baseBean.writeLog("fileHeaderMap.size==" + fileHeaderMap.size());
baseBean.writeLog("imageFileMap==" + JSON.toJSONString(imageFileMap)); 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); JsonNode rootNode = parseJsonContent(dataJsonImageId);
OfflineZipUnpackServiceImpl offlineZipUnpackService = ServiceUtil.getService(OfflineZipUnpackServiceImpl.class, user); OfflineZipUnpackServiceImpl offlineZipUnpackService = ServiceUtil.getService(OfflineZipUnpackServiceImpl.class, user);
if ("true".equals(isCorrection)) { 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 兼容其他方式 // TODO 兼容其他方式