Commit f60dee3f authored by huyuchen's avatar huyuchen

huych-电子档案批量导入第五次提交

parent 3ab15459
......@@ -559,15 +559,16 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
// 获取ZIP包的根目录(第一级目录,身份证+姓名目录)
File[] zipRootDirs = tempDir.listFiles(File::isDirectory);
Map<String, File> zipDirMap = new HashMap<>();
Map<String, List<File>> zipDirMap = new HashMap<>();
if (zipRootDirs != null && zipRootDirs.length > 0) {
// 将ZIP中的目录按照 身份证_姓名 建立映射
// 将ZIP中的目录按照 身份证_姓名 建立映射,支持同一个人有多个文件夹
for (File personDir : zipRootDirs) {
String dirName = personDir.getName();
Map<String, String> idNameMap = parseIdCardAndName(dirName);
if (!idNameMap.isEmpty() && idNameMap.containsKey("idCard") && idNameMap.containsKey("name")) {
String uniqueKey = idNameMap.get("idCard") + "_" + idNameMap.get("name");
zipDirMap.put(uniqueKey, personDir);
// 使用List存储,支持同一个人有多个文件夹
zipDirMap.computeIfAbsent(uniqueKey, k -> new ArrayList<>()).add(personDir);
}
}
}
......@@ -583,19 +584,22 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
String uniqueKey = detail.getEmpIdcard() + "_" + detail.getEmpName();
// 检查ZIP中是否存在该人员的目录
File personDir = zipDirMap.get(uniqueKey);
List<File> personDirs = zipDirMap.get(uniqueKey);
if (personDir == null) {
if (personDirs == null || personDirs.isEmpty()) {
// ZIP中没有该人员的文件夹,记录为跳过
personProcessResultMap.put(uniqueKey, ArchiveConstants.PROCESS_RESULT_SKIP);
personFailReasonMap.put(uniqueKey, "压缩包中未找到对应文件夹,跳过处理");
personMaterialTypesMap.put(uniqueKey, new ArrayList<>());
} else {
// ZIP中存在该人员的文件夹,处理其附件
// ZIP中存在该人员的文件夹,处理其附件(可能有多个文件夹)
List<String> materialTypes = new ArrayList<>();
List<String> failReasons = new ArrayList<>();
processPersonDirectoryWithResult(personDir, detail, materialTypes, failReasons, taskId);
// 遍历该人员的所有文件夹
for (File personDir : personDirs) {
processPersonDirectoryWithResult(personDir, detail, materialTypes, failReasons, taskId);
}
personMaterialTypesMap.put(uniqueKey, materialTypes);
......@@ -836,6 +840,9 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
// 用于记录该人员的所有资料类型
Set<String> materialTypesSet = new HashSet<>();
// 收集直接文件(作为存量类型处理)
List<File> stockFiles = new ArrayList<>();
// 遍历第三级,按资料类型分组处理所有文件
for (File subFile : subFiles) {
......@@ -866,15 +873,18 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
failReasons.add(materialType + ":" + result);
}
} else {
// 直接是文件,默认为存量类型,按单个文件处理
List<File> singleFileList = new ArrayList<>();
singleFileList.add(subFile);
String result = processMaterialTypeFilesWithResult(singleFileList, detail, ArchiveConstants.MATERIAL_TYPE_STOCK, taskId);
if ("success".equals(result)) {
materialTypesSet.add(ArchiveConstants.MATERIAL_TYPE_STOCK);
} else {
failReasons.add(ArchiveConstants.MATERIAL_TYPE_STOCK + ":" + result);
}
// 直接是文件,收集起来统一作为存量类型处理
stockFiles.add(subFile);
}
}
// 统一处理所有直接文件(存量类型)
if (!stockFiles.isEmpty()) {
String result = processMaterialTypeFilesWithResult(stockFiles, detail, ArchiveConstants.MATERIAL_TYPE_STOCK, taskId);
if ("success".equals(result)) {
materialTypesSet.add(ArchiveConstants.MATERIAL_TYPE_STOCK);
} else {
failReasons.add(ArchiveConstants.MATERIAL_TYPE_STOCK + ":" + result);
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment