Commit 1188e096 authored by huyuchen's avatar huyuchen

huych-入职确认信息编辑提交

parent 8251d9da
...@@ -47,6 +47,8 @@ import java.io.IOException; ...@@ -47,6 +47,8 @@ import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.*; import java.util.*;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -594,7 +596,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -594,7 +596,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
} else { } else {
// ZIP中存在该人员的文件夹,处理其附件(可能有多个文件夹) // ZIP中存在该人员的文件夹,处理其附件(可能有多个文件夹)
List<String> materialTypes = new ArrayList<>(); List<String> materialTypes = new ArrayList<>();
List<String> failReasons = new ArrayList<>(); List<String> failReasons = new ArrayList<>();
// 遍历该人员的所有文件夹 // 遍历该人员的所有文件夹
for (File personDir : personDirs) { for (File personDir : personDirs) {
...@@ -1232,43 +1234,59 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -1232,43 +1234,59 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
*/ */
private Map<String, String> parseIdCardAndName(String folderName) { private Map<String, String> parseIdCardAndName(String folderName) {
Map<String, String> result = new HashMap<>(); Map<String, String> result = new HashMap<>();
if (folderName == null || folderName.trim().isEmpty()) {
return result;
}
// 尝试用-分隔 // 统一处理全角和半角横线
if (folderName.contains("-") || folderName.contains("—")) { folderName = folderName.replace("—", "-");
String[] parts;
if (folderName.contains("-")) { // 身份证正则表达式:18位,前17位为数字,最后一位可以是数字或X(大小写)
parts = folderName.split("-"); String idCardPattern = "\\d{17}[\\dXx]";
}else {
parts = folderName.split("—"); // 情况1:包含分隔符"-"
} if (folderName.contains("-")) {
String[] parts = folderName.split("-");
if (parts.length == 2) { if (parts.length == 2) {
// 判断哪个是身份证号(18位数字) String part1 = parts[0].trim();
if (parts[0].matches("\\d{18}")) { String part2 = parts[1].trim();
result.put("idCard", parts[0]);
result.put("name", parts[1]); if (part1.matches(idCardPattern)) {
} else if (parts[1].matches("\\d{18}")) { result.put("idCard", part1.toUpperCase()); // 统一转为大写
result.put("name", parts[0]); result.put("name", part2);
result.put("idCard", parts[1]); } else if (part2.matches(idCardPattern)) {
} result.put("name", part1);
} result.put("idCard", part2.toUpperCase());
} else {
// 尝试提取18位身份证号
int idCardStart = -1;
for (int i = 0; i <= folderName.length() - 18; i++) {
String sub = folderName.substring(i, i + 18);
if (sub.matches("\\d{18}")) {
idCardStart = i;
break;
} }
} }
return result;
}
if (idCardStart >= 0) { // 情况2:无分隔符,直接拼接
String idCard = folderName.substring(idCardStart, idCardStart + 18); // 使用正则表达式查找身份证号
String name = folderName.substring(0, idCardStart) + Pattern pattern = Pattern.compile(idCardPattern);
folderName.substring(idCardStart + 18); Matcher matcher = pattern.matcher(folderName);
result.put("idCard", idCard);
result.put("name", name); if (matcher.find()) {
String idCard = matcher.group().toUpperCase();
int start = matcher.start();
int end = matcher.end();
// 提取姓名部分(身份证前后部分合并)
String name;
if (start == 0) {
// 身份证在开头
name = folderName.substring(end).trim();
} else if (end == folderName.length()) {
// 身份证在结尾
name = folderName.substring(0, start).trim();
} else {
// 身份证在中间(理论上不应该出现,但处理一下)
name = (folderName.substring(0, start) + folderName.substring(end)).trim();
} }
result.put("idCard", idCard);
result.put("name", name);
} }
return result; return 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