archive file
parent
72b5bbfa64
commit
1667ef24b0
|
|
@ -56,7 +56,7 @@ import java.util.stream.Collectors;
|
|||
* <p>
|
||||
* 模板包含两个 sheet:sheet1「专职人员基础信息」、sheet2「专职人员能力信息」,
|
||||
* 解析后按 身份证号(为空时按姓名) 将能力信息关联到基础信息行;
|
||||
* 再批量校验部门/岗位名称并回填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()))
|
||||
|
|
|
|||
Loading…
Reference in New Issue