Commit f60dee3f authored by huyuchen's avatar huyuchen

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

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