dev-tmp1
luotaiqian 2026-08-18 20:09:47 +08:00
parent 5995ab2cbf
commit f7ec3dc7fb
1 changed files with 24 additions and 29 deletions

View File

@ -208,7 +208,7 @@ public class OrgPersonnelExcelImporter {
/** /**
* Excel sheet1 sheet2 * Excel sheet1 sheet2
* *
* 12 * 12
* <p> * <p>
* errors * errors
@ -238,7 +238,7 @@ public class OrgPersonnelExcelImporter {
return new ArrayList<>(); return new ArrayList<>();
} }
Map<String, OrgPersonnelImportRow.CapabilityRow> capabilityMap = indexCapabilityRows(capabilityRaw); Map<String, List<OrgPersonnelImportRow.CapabilityRow>> capabilityMap = indexCapabilityRows(capabilityRaw);
List<OrgPersonnelImportRow> rows = new ArrayList<>(basicRaw.size()); List<OrgPersonnelImportRow> rows = new ArrayList<>(basicRaw.size());
Set<String> seenAccounts = new HashSet<>(); Set<String> seenAccounts = new HashSet<>();
@ -254,7 +254,11 @@ public class OrgPersonnelExcelImporter {
OrgPersonnelImportRow row = new OrgPersonnelImportRow(); OrgPersonnelImportRow row = new OrgPersonnelImportRow();
basic.setRowIndex(i + 2); basic.setRowIndex(i + 2);
row.setBasic(basic); row.setBasic(basic);
row.setCapability(matchCapability(basic, capabilityMap)); row.setCapability(matchCapability(basic, capabilityMap, errors));
// 能力信息未匹配或存在多条,已记录异常,剔除该行
if (row.getCapability() == null) {
continue;
}
// 字段校验JSR-303 注解(必填、长度、手机号格式)+ 身份证号 // 字段校验JSR-303 注解(必填、长度、手机号格式)+ 身份证号
if (!validateRowFields(row, errors)) { if (!validateRowFields(row, errors)) {
@ -270,11 +274,11 @@ public class OrgPersonnelExcelImporter {
} }
/** /**
* sheet2 * sheet2
*/ */
private Map<String, OrgPersonnelImportRow.CapabilityRow> indexCapabilityRows( private Map<String, List<OrgPersonnelImportRow.CapabilityRow>> indexCapabilityRows(
List<OrgPersonnelImportRow.CapabilityRow> capabilityRaw) { List<OrgPersonnelImportRow.CapabilityRow> capabilityRaw) {
Map<String, OrgPersonnelImportRow.CapabilityRow> map = new LinkedHashMap<>(); Map<String, List<OrgPersonnelImportRow.CapabilityRow>> map = new LinkedHashMap<>();
if (capabilityRaw == null || capabilityRaw.isEmpty()) { if (capabilityRaw == null || capabilityRaw.isEmpty()) {
return map; return map;
} }
@ -289,39 +293,30 @@ public class OrgPersonnelExcelImporter {
continue; continue;
} }
capability.setRowIndex(i + 2); capability.setRowIndex(i + 2);
String key = capabilityKey(capability.getIdCardNo(), capability.getUserName()); map.computeIfAbsent(trim(capability.getIdCardNo()), k -> new ArrayList<>()).add(capability);
if (map.putIfAbsent(key, capability) != null) {
LOGGER.warn("人员导入能力信息重复key={}sheet2行号={},仅保留首条", key, capability.getRowIndex());
}
} }
return map; return map;
} }
/** /**
* null *
* null
*/ */
private OrgPersonnelImportRow.CapabilityRow matchCapability(OrgPersonnelImportRow.BasicRow basic, private OrgPersonnelImportRow.CapabilityRow matchCapability(OrgPersonnelImportRow.BasicRow basic,
Map<String, OrgPersonnelImportRow.CapabilityRow> capabilityMap) { Map<String, List<OrgPersonnelImportRow.CapabilityRow>> capabilityMap,
if (capabilityMap.isEmpty()) { List<OrgPersonnelImportErrorCO> errors) {
List<OrgPersonnelImportRow.CapabilityRow> capabilityList = capabilityMap.get(trim(basic.getIdCardNo()));
if (CollectionUtils.isEmpty(capabilityList)) {
errors.add(new OrgPersonnelImportErrorCO(basic.getRowIndex(), trim(basic.getAccount()), trim(basic.getUserName()),
"没有在专职人员能力信息中查询到数据"));
return null; return null;
} }
OrgPersonnelImportRow.CapabilityRow capability = if (capabilityList.size() > 1) {
capabilityMap.get(capabilityKey(basic.getIdCardNo(), null)); errors.add(new OrgPersonnelImportErrorCO(basic.getRowIndex(), trim(basic.getAccount()), trim(basic.getUserName()),
if (capability != null) { "专职人员能力信息中查询到多条数据"));
return capability; return null;
} }
return capabilityMap.get(capabilityKey(null, basic.getUserName())); return capabilityList.get(0);
}
/**
* ID:使 NAME:
*/
private String capabilityKey(String idCardNo, String userName) {
String idCard = trim(idCardNo);
if (StringUtils.hasText(idCard)) {
return "ID:" + idCard;
}
return "NAME:" + trim(userName);
} }
/** /**