feat: 优化2

This commit is contained in:
2026-10-22 14:15:35 +08:00
parent fa9ff1e9d5
commit c497c0c0cc
6 changed files with 52 additions and 17 deletions
@@ -24,6 +24,7 @@ public class DataCenterProperties {
@Inject
private PropertiesProxy conf;
private boolean tokenEnabled;
private String tokenUrl;
private String key;
private String secret;
@@ -31,6 +32,7 @@ public class DataCenterProperties {
public void init() {
Map<String, String> all = conf.toMap();
tokenEnabled = conf.getBoolean("data-center.token-enabled", true);
tokenUrl = all.get("data-center.token-url");
key = all.get("data-center.key");
secret = all.get("data-center.secret");
@@ -65,6 +65,7 @@ public class Sys_user extends BaseModel implements Serializable {
@Column
@Comment("出生日期")
@ColDefine(type = ColType.DATE)
@DataCenterColumn(name = "出生日期", key = "CSRQ")
private Date birthday;
@Column
@@ -114,6 +115,7 @@ public class Sys_user extends BaseModel implements Serializable {
@Column
@Comment("学历")
@ColDefine(type = ColType.VARCHAR, width = 20)
@DataCenterColumn(name = "学历", key = "ZGXLMC")
private String education;
@Column
@@ -125,6 +127,7 @@ public class Sys_user extends BaseModel implements Serializable {
@Comment("学位")
@ColDefine(type = ColType.VARCHAR, width = 50)
// @DataCenterColumn(name = "学位", key = "zgxwmc")
@DataCenterColumn(name = "学位", key = "ZGXWMC")
private String academicDegree;
@Column
@@ -135,6 +138,7 @@ public class Sys_user extends BaseModel implements Serializable {
@Column
@Comment("职称")
@ColDefine(type = ColType.VARCHAR, width = 50)
@DataCenterColumn(name = "职称", key = "ZYJSZWDMMC")
private String professionalTitle;
@Column
@@ -220,6 +224,7 @@ public class Sys_user extends BaseModel implements Serializable {
@Column
@Comment("编制类别码")
@ColDefine(type = ColType.VARCHAR, width = 30)
@DataCenterColumn(name = "编制类别", key = "BZLBDMMC")
private String preparedBy;
@Column
@@ -121,14 +121,24 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl<Sys_user_source>
// 字典码表Map,key为父级编码,value为子级字典列表
Map<String, List<Sys_data_dict>> dataDictMap = dataDictList.stream().collect(Collectors.groupingBy(Sys_data_dict::getParentCode));
String accessToken = getDmpAccessToken();
List<JSONObject> rawDataList = new ArrayList<>();
rawDataList.addAll(pullDmpUsers(getDmpUrl(DMP_TEACHER_KEY), accessToken, "在岗教职工"));
rawDataList.addAll(pullDmpUsers(getDmpUrl(DMP_DISPATCH_KEY), accessToken, "在岗劳务派遣"));
if (dataCenterProperties.isTokenEnabled()) {
String accessToken = getDmpAccessToken();
rawDataList.addAll(pullDmpUsers(getDmpUrl(DMP_TEACHER_KEY), accessToken, "在岗教职工"));
rawDataList.addAll(pullDmpUsers(getDmpUrl(DMP_DISPATCH_KEY), accessToken, "在岗劳务派遣"));
} else {
rawDataList.addAll(DataCenterUtil.pullData(getDmpUrl(DMP_TEACHER_KEY)));
// 将浙师大字段转为现有中间表映射使用的键,保留Token模式的字段协议。
Map<String, String> fieldAliases = Map.of("XBMC", "XB", "SJHM", "YDDH",
"LXRQ", "LXNY", "DQZTMC", "DQZT", "YRFSDM", "RYLX", "SZDWDM", "SZDWH");
for (JSONObject raw : rawDataList) {
fieldAliases.forEach((source, target) -> raw.set(target, raw.get(source)));
}
}
rawDataList = distinctDmpUsers(rawDataList);
if (rawDataList.isEmpty()) {
log.warn("当前未获取到人员数据");
throw new BaseException("当前未获取到人员数据,中止本次同步");
}
Date nowDate = new Date();
@@ -166,6 +176,7 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl<Sys_user_source>
tertiaryParentUnitIds.put(sourceUnitId, parentUnit.getId());
}
Map<String, Sys_unit> resolvedUnitMap = unitMap;
// 赋值
List<Sys_user_source> latestSourceList = rawDataList.stream().map(raw -> {
Sys_user_source sysUser = new Sys_user_source();
@@ -183,35 +194,45 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl<Sys_user_source>
.findFirst().orElse(new Sys_data_dict());
mapping.field.set(sysUser, StrUtil.blankToDefault(sysDataDict.getName(), raw.getStr(mapping.key)));
} else {
// 特殊处理 根据身份证号获取性别和出生年月
if ("SFZJH".equals(mapping.key)) {
String idCard = raw.getStr(mapping.key);
mapping.field.set(sysUser, idCard);
// 设置出生年月
try {
sysUser.setBirthday(IdcardUtil.getBirthDate(idCard));
} catch (Exception e) {
sysUser.setBirthday(null);
}
} else if ("LXNY".equals(mapping.key)) {
if ("LXNY".equals(mapping.key)) {
mapping.field.set(sysUser, normalizeArrivalAtSchoolDate(raw.getStr(mapping.key)));
} else {
mapping.field.set(sysUser, raw.getStr(mapping.key));
}
}
} else if (mapping.field.getType() == Date.class) {
mapping.field.set(sysUser, raw.getDate(mapping.key));
String dateText = StrUtil.trim(raw.getStr(mapping.key));
if (StrUtil.isNotBlank(dateText)) {
mapping.field.set(sysUser, dateText.matches("\\d{8}")
? DateUtil.parse(dateText, "yyyyMMdd") : DateUtil.parse(dateText));
}
}
} catch (IllegalAccessException e) {
log.error("设置字段值失败: {}", mapping.field.getName(), e);
}
}
if (sysUser.getBirthday() == null && StrUtil.isNotBlank(sysUser.getIdCard())) {
try {
sysUser.setBirthday(IdcardUtil.getBirthDate(sysUser.getIdCard()));
} catch (Exception e) {
sysUser.setBirthday(null);
}
}
sysUser.setUnitName(raw.getStr("SZDW"));
String sourceUnitId = raw.getStr("SZDWH");
String parentUnitId = tertiaryParentUnitIds.get(sourceUnitId);
sysUser.setUnitId(StrUtil.blankToDefault(parentUnitId, sourceUnitId));
sysUser.setThreeUnitId(parentUnitId == null ? null : sourceUnitId);
Sys_unit resolvedUnit = resolvedUnitMap.get(sysUser.getUnitId());
if (resolvedUnit != null) {
sysUser.setUnitName(resolvedUnit.getName());
sysUser.setUnitPath(resolvedUnit.getPath());
}
if (!dataCenterProperties.isTokenEnabled()
&& (resolvedUnit == null || StrUtil.isBlank(resolvedUnit.getPath()))) {
throw new BaseException("人员{}所属机构不存在或路径为空,中止本次同步", sysUser.getLoginname());
}
// 设置拉取时间
sysUser.setPullTime(nowDate);
@@ -255,7 +276,8 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl<Sys_user_source>
String[] parts = dateText.split("-");
return parts[0] + "-" + StrUtil.padPre(parts[1], 2, '0') + "-01";
}
return dateText;
return DateUtil.formatDate(dateText.matches("\\d{8}")
? DateUtil.parse(dateText, "yyyyMMdd") : DateUtil.parse(dateText));
}
/**
@@ -369,6 +391,9 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl<Sys_user_source>
if (StrUtil.isBlank(loginName)) {
loginName = raw.getStr("ID");
}
if (StrUtil.isBlank(raw.getStr("ZGH"))) {
throw new BaseException("人员接口存在缺少职工号 ZGH 的记录");
}
userMap.putIfAbsent(loginName, raw);
}
return new ArrayList<>(userMap.values());
+1
View File
@@ -55,6 +55,7 @@ custom:
keyHex: 00112233445566778899aabbccddeeff
ivHex: 0102030405060708090a0b0c0d0e0f10
data-center:
token-enabled: false
grant_type: password
scope: read
username: 3848A3C738EFBB2C2E76E0D59B419DACA16A80F3AB0354CD
+1
View File
@@ -56,6 +56,7 @@ custom:
keyHex: 00112233445566778899aabbccddeeff
ivHex: 0102030405060708090a0b0c0d0e0f10
data-center:
token-enabled: false
grant_type: password
scope: read
username: 3848A3C738EFBB2C2E76E0D59B419DACA16A80F3AB0354CD
+1
View File
@@ -178,6 +178,7 @@ minio:
bucket: '${sdk.minio.bucket}'
data-center:
token-enabled: '${custom.data-center.token-enabled}'
grant_type: '${custom.data-center.grant_type}'
scope: '${custom.data-center.scope}'
username: '${custom.data-center.username}'