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 @Inject
private PropertiesProxy conf; private PropertiesProxy conf;
private boolean tokenEnabled;
private String tokenUrl; private String tokenUrl;
private String key; private String key;
private String secret; private String secret;
@@ -31,6 +32,7 @@ public class DataCenterProperties {
public void init() { public void init() {
Map<String, String> all = conf.toMap(); Map<String, String> all = conf.toMap();
tokenEnabled = conf.getBoolean("data-center.token-enabled", true);
tokenUrl = all.get("data-center.token-url"); tokenUrl = all.get("data-center.token-url");
key = all.get("data-center.key"); key = all.get("data-center.key");
secret = all.get("data-center.secret"); secret = all.get("data-center.secret");
@@ -65,6 +65,7 @@ public class Sys_user extends BaseModel implements Serializable {
@Column @Column
@Comment("出生日期") @Comment("出生日期")
@ColDefine(type = ColType.DATE) @ColDefine(type = ColType.DATE)
@DataCenterColumn(name = "出生日期", key = "CSRQ")
private Date birthday; private Date birthday;
@Column @Column
@@ -114,6 +115,7 @@ public class Sys_user extends BaseModel implements Serializable {
@Column @Column
@Comment("学历") @Comment("学历")
@ColDefine(type = ColType.VARCHAR, width = 20) @ColDefine(type = ColType.VARCHAR, width = 20)
@DataCenterColumn(name = "学历", key = "ZGXLMC")
private String education; private String education;
@Column @Column
@@ -125,6 +127,7 @@ public class Sys_user extends BaseModel implements Serializable {
@Comment("学位") @Comment("学位")
@ColDefine(type = ColType.VARCHAR, width = 50) @ColDefine(type = ColType.VARCHAR, width = 50)
// @DataCenterColumn(name = "学位", key = "zgxwmc") // @DataCenterColumn(name = "学位", key = "zgxwmc")
@DataCenterColumn(name = "学位", key = "ZGXWMC")
private String academicDegree; private String academicDegree;
@Column @Column
@@ -135,6 +138,7 @@ public class Sys_user extends BaseModel implements Serializable {
@Column @Column
@Comment("职称") @Comment("职称")
@ColDefine(type = ColType.VARCHAR, width = 50) @ColDefine(type = ColType.VARCHAR, width = 50)
@DataCenterColumn(name = "职称", key = "ZYJSZWDMMC")
private String professionalTitle; private String professionalTitle;
@Column @Column
@@ -220,6 +224,7 @@ public class Sys_user extends BaseModel implements Serializable {
@Column @Column
@Comment("编制类别码") @Comment("编制类别码")
@ColDefine(type = ColType.VARCHAR, width = 30) @ColDefine(type = ColType.VARCHAR, width = 30)
@DataCenterColumn(name = "编制类别", key = "BZLBDMMC")
private String preparedBy; private String preparedBy;
@Column @Column
@@ -121,14 +121,24 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl<Sys_user_source>
// 字典码表Map,key为父级编码,value为子级字典列表 // 字典码表Map,key为父级编码,value为子级字典列表
Map<String, List<Sys_data_dict>> dataDictMap = dataDictList.stream().collect(Collectors.groupingBy(Sys_data_dict::getParentCode)); Map<String, List<Sys_data_dict>> dataDictMap = dataDictList.stream().collect(Collectors.groupingBy(Sys_data_dict::getParentCode));
String accessToken = getDmpAccessToken();
List<JSONObject> rawDataList = new ArrayList<>(); List<JSONObject> rawDataList = new ArrayList<>();
if (dataCenterProperties.isTokenEnabled()) {
String accessToken = getDmpAccessToken();
rawDataList.addAll(pullDmpUsers(getDmpUrl(DMP_TEACHER_KEY), accessToken, "在岗教职工")); rawDataList.addAll(pullDmpUsers(getDmpUrl(DMP_TEACHER_KEY), accessToken, "在岗教职工"));
rawDataList.addAll(pullDmpUsers(getDmpUrl(DMP_DISPATCH_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); rawDataList = distinctDmpUsers(rawDataList);
if (rawDataList.isEmpty()) { if (rawDataList.isEmpty()) {
log.warn("当前未获取到人员数据"); throw new BaseException("当前未获取到人员数据,中止本次同步");
} }
Date nowDate = new Date(); Date nowDate = new Date();
@@ -166,6 +176,7 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl<Sys_user_source>
tertiaryParentUnitIds.put(sourceUnitId, parentUnit.getId()); tertiaryParentUnitIds.put(sourceUnitId, parentUnit.getId());
} }
Map<String, Sys_unit> resolvedUnitMap = unitMap;
// 赋值 // 赋值
List<Sys_user_source> latestSourceList = rawDataList.stream().map(raw -> { List<Sys_user_source> latestSourceList = rawDataList.stream().map(raw -> {
Sys_user_source sysUser = new Sys_user_source(); 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()); .findFirst().orElse(new Sys_data_dict());
mapping.field.set(sysUser, StrUtil.blankToDefault(sysDataDict.getName(), raw.getStr(mapping.key))); mapping.field.set(sysUser, StrUtil.blankToDefault(sysDataDict.getName(), raw.getStr(mapping.key)));
} else { } else {
// 特殊处理 根据身份证号获取性别和出生年月 if ("LXNY".equals(mapping.key)) {
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)) {
mapping.field.set(sysUser, normalizeArrivalAtSchoolDate(raw.getStr(mapping.key))); mapping.field.set(sysUser, normalizeArrivalAtSchoolDate(raw.getStr(mapping.key)));
} else { } else {
mapping.field.set(sysUser, raw.getStr(mapping.key)); mapping.field.set(sysUser, raw.getStr(mapping.key));
} }
} }
} else if (mapping.field.getType() == Date.class) { } 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) { } catch (IllegalAccessException e) {
log.error("设置字段值失败: {}", mapping.field.getName(), 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")); sysUser.setUnitName(raw.getStr("SZDW"));
String sourceUnitId = raw.getStr("SZDWH"); String sourceUnitId = raw.getStr("SZDWH");
String parentUnitId = tertiaryParentUnitIds.get(sourceUnitId); String parentUnitId = tertiaryParentUnitIds.get(sourceUnitId);
sysUser.setUnitId(StrUtil.blankToDefault(parentUnitId, sourceUnitId)); sysUser.setUnitId(StrUtil.blankToDefault(parentUnitId, sourceUnitId));
sysUser.setThreeUnitId(parentUnitId == null ? null : 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); sysUser.setPullTime(nowDate);
@@ -255,7 +276,8 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl<Sys_user_source>
String[] parts = dateText.split("-"); String[] parts = dateText.split("-");
return parts[0] + "-" + StrUtil.padPre(parts[1], 2, '0') + "-01"; 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)) { if (StrUtil.isBlank(loginName)) {
loginName = raw.getStr("ID"); loginName = raw.getStr("ID");
} }
if (StrUtil.isBlank(raw.getStr("ZGH"))) {
throw new BaseException("人员接口存在缺少职工号 ZGH 的记录");
}
userMap.putIfAbsent(loginName, raw); userMap.putIfAbsent(loginName, raw);
} }
return new ArrayList<>(userMap.values()); return new ArrayList<>(userMap.values());
+1
View File
@@ -55,6 +55,7 @@ custom:
keyHex: 00112233445566778899aabbccddeeff keyHex: 00112233445566778899aabbccddeeff
ivHex: 0102030405060708090a0b0c0d0e0f10 ivHex: 0102030405060708090a0b0c0d0e0f10
data-center: data-center:
token-enabled: false
grant_type: password grant_type: password
scope: read scope: read
username: 3848A3C738EFBB2C2E76E0D59B419DACA16A80F3AB0354CD username: 3848A3C738EFBB2C2E76E0D59B419DACA16A80F3AB0354CD
+1
View File
@@ -56,6 +56,7 @@ custom:
keyHex: 00112233445566778899aabbccddeeff keyHex: 00112233445566778899aabbccddeeff
ivHex: 0102030405060708090a0b0c0d0e0f10 ivHex: 0102030405060708090a0b0c0d0e0f10
data-center: data-center:
token-enabled: false
grant_type: password grant_type: password
scope: read scope: read
username: 3848A3C738EFBB2C2E76E0D59B419DACA16A80F3AB0354CD username: 3848A3C738EFBB2C2E76E0D59B419DACA16A80F3AB0354CD
+1
View File
@@ -178,6 +178,7 @@ minio:
bucket: '${sdk.minio.bucket}' bucket: '${sdk.minio.bucket}'
data-center: data-center:
token-enabled: '${custom.data-center.token-enabled}'
grant_type: '${custom.data-center.grant_type}' grant_type: '${custom.data-center.grant_type}'
scope: '${custom.data-center.scope}' scope: '${custom.data-center.scope}'
username: '${custom.data-center.username}' username: '${custom.data-center.username}'