archive file

dev-tmp1
luotaiqian 2026-08-26 15:18:57 +08:00
parent 72b5bbfa64
commit 1667ef24b0
1 changed files with 44 additions and 34 deletions

View File

@ -56,7 +56,7 @@ import java.util.stream.Collectors;
* <p>
* sheetsheet1sheet2
*
* /ID -> ->
* /ID -> / -> ->
* </p>
*
* @author safety-eval
@ -144,13 +144,8 @@ public class OrgPersonnelExcelImporter {
return result;
}
// 3. 批量校验所学专业、系列/专业(两个字段名称合并为一次 in 查询基础学科专业对照表)
validateAndFillMajor(rows, errors);
rows = rows.stream().filter(it -> !it.isValidateFail()).collect(Collectors.toList());
if (rows.isEmpty()) {
result.setErrors(errors);
return result;
}
// 3. 批量设置所学专业、系列/专业(基础学科专业对照表中已存在则使用库中记录,不存在则自动新增)
fillOrCreateMajor(rows);
// 4. 批量查询库中已存在的账号(未删除)
Set<String> existingAccounts = batchQueryExistingAccounts(rows, orgId);
@ -1013,15 +1008,15 @@ public class OrgPersonnelExcelImporter {
}
/**
* major /seriesMajor
* basic_discipline_major.professional_name in
* validateFail
* major /seriesMajor
* in basic_discipline_major.professional_name
* 使使
* <p>
* -> basicDisciplineMajorId {@link OrgPersonnelImportRow.CapabilityRow#setBdmMajor}
* / -> {@link OrgPersonnelImportRow.CapabilityRow#setBdmSeriesMajor}
* -> basicDisciplineMajorId {@link OrgPersonnelImportRow.CapabilityRow#setBdmMajor}
* / -> {@link OrgPersonnelImportRow.CapabilityRow#setBdmSeriesMajor}
* </p>
*/
private void validateAndFillMajor(List<OrgPersonnelImportRow> rows, List<OrgPersonnelImportErrorCO> errors) {
private void fillOrCreateMajor(List<OrgPersonnelImportRow> rows) {
// 所学专业、系列/专业 两个字段名称合并收集,一次 in 查询
Set<String> majorNames = new LinkedHashSet<>();
for (OrgPersonnelImportRow row : rows) {
@ -1049,42 +1044,57 @@ public class OrgPersonnelExcelImporter {
}
}
// 逐行校验:字段为空跳过;对照表中不存在的记录异常并标记;校验通过则回填
// 逐行回填:字段为空跳过;库中已存在使用库中记录,不存在自动新增
for (OrgPersonnelImportRow row : rows) {
OrgPersonnelImportRow.CapabilityRow capability = row.getCapability();
if (capability == null) {
continue;
}
// 所学专业:查询不到记录异常;查询到回填 basicDisciplineMajorId、bdmMajor
// 所学专业:回填 basicDisciplineMajorId、bdmMajor
String majorName = trim(capability.getMajor());
if (StringUtils.hasText(majorName)) {
BasicDisciplineMajorE major = majorMap.get(majorName);
if (major == null) {
errors.add(new OrgPersonnelImportErrorCO(row.getBasic().getRowIndex(), row.getBasic().getAccount(), row.getBasic().getUserName(),
ErrorCode.ORG_PERSONNEL_IMPORT_MAJOR_NOT_FOUND.getMessage() + "" + majorName));
row.setValidateFail(true);
} else {
row.setBasicDisciplineMajorId(major.getId());
capability.setBdmMajor(basicDisciplineMajorDoConvertor.convertEeToDo(major));
}
BasicDisciplineMajorE major = getOrCreateMajor(majorName, majorMap);
row.setBasicDisciplineMajorId(major.getId());
capability.setBdmMajor(basicDisciplineMajorDoConvertor.convertEeToDo(major));
}
// 系列/专业:查询不到记录异常;查询到回填 bdmSeriesMajor
// 系列/专业:回填 bdmSeriesMajor
String seriesMajorName = trim(capability.getSeriesMajor());
if (StringUtils.hasText(seriesMajorName)) {
BasicDisciplineMajorE seriesMajor = majorMap.get(seriesMajorName);
if (seriesMajor == null) {
errors.add(new OrgPersonnelImportErrorCO(row.getBasic().getRowIndex(), row.getBasic().getAccount(), row.getBasic().getUserName(),
ErrorCode.ORG_PERSONNEL_IMPORT_MAJOR_NOT_FOUND.getMessage() + "" + seriesMajorName));
row.setValidateFail(true);
} else {
capability.setBdmSeriesMajor(basicDisciplineMajorDoConvertor.convertEeToDo(seriesMajor));
}
BasicDisciplineMajorE seriesMajor = getOrCreateMajor(seriesMajorName, majorMap);
capability.setBdmSeriesMajor(basicDisciplineMajorDoConvertor.convertEeToDo(seriesMajor));
}
}
}
/**
*
*
*
* @param professionalName
* @param majorMap key:
* @return
*/
private BasicDisciplineMajorE getOrCreateMajor(String professionalName, Map<String, BasicDisciplineMajorE> majorMap) {
BasicDisciplineMajorE exist = majorMap.get(professionalName);
if (exist != null) {
return exist;
}
BasicDisciplineMajorE created = new BasicDisciplineMajorE();
created.setProfessionalName(professionalName);
InsertFieldDefaults.apply(created);
Boolean res = basicDisciplineMajorGateway.add(created);
if (res == null || !res) {
throw new BizException(ErrorCode.ORG_PERSONNEL_IMPORT_MAJOR_NOT_FOUND,
"基础学科专业[" + professionalName + "]自动新增失败");
}
majorMap.put(professionalName, created);
LOGGER.info("人员导入自动新增基础学科专业, professionalName={}, id={}", professionalName, created.getId());
return created;
}
private Set<String> batchQueryExistingAccounts(List<OrgPersonnelImportRow> rows, Long orgId) {
Set<String> accounts = rows.stream()
.map(r -> trim(r.getBasic().getAccount()))