From c497c0c0cc670b3b63bdd3b075b5d9d0eb3d5b0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=8C=E5=85=88=E8=88=9C?= <2499071264@qq.com> Date: Thu, 22 Oct 2026 14:15:35 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=962?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/base/config/DataCenterProperties.java | 2 + .../com/budwk/app/sys/models/Sys_user.java | 5 ++ .../impl/SysDataUserPullServiceImpl.java | 59 +++++++++++++------ src/main/resources/application-dev.yaml | 1 + src/main/resources/application-prd.yaml | 1 + src/main/resources/application.yaml | 1 + 6 files changed, 52 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/budwk/app/base/config/DataCenterProperties.java b/src/main/java/com/budwk/app/base/config/DataCenterProperties.java index 4c51fee..fa4cc5a 100644 --- a/src/main/java/com/budwk/app/base/config/DataCenterProperties.java +++ b/src/main/java/com/budwk/app/base/config/DataCenterProperties.java @@ -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 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"); diff --git a/src/main/java/com/budwk/app/sys/models/Sys_user.java b/src/main/java/com/budwk/app/sys/models/Sys_user.java index 28b4e43..48f34b5 100644 --- a/src/main/java/com/budwk/app/sys/models/Sys_user.java +++ b/src/main/java/com/budwk/app/sys/models/Sys_user.java @@ -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 diff --git a/src/main/java/com/budwk/app/sys/services/impl/SysDataUserPullServiceImpl.java b/src/main/java/com/budwk/app/sys/services/impl/SysDataUserPullServiceImpl.java index 60e2f71..f41d641 100644 --- a/src/main/java/com/budwk/app/sys/services/impl/SysDataUserPullServiceImpl.java +++ b/src/main/java/com/budwk/app/sys/services/impl/SysDataUserPullServiceImpl.java @@ -121,14 +121,24 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl // 字典码表Map,key为父级编码,value为子级字典列表 Map> dataDictMap = dataDictList.stream().collect(Collectors.groupingBy(Sys_data_dict::getParentCode)); - String accessToken = getDmpAccessToken(); List 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 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 tertiaryParentUnitIds.put(sourceUnitId, parentUnit.getId()); } + Map resolvedUnitMap = unitMap; // 赋值 List latestSourceList = rawDataList.stream().map(raw -> { Sys_user_source sysUser = new Sys_user_source(); @@ -183,35 +194,45 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl .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 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 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()); diff --git a/src/main/resources/application-dev.yaml b/src/main/resources/application-dev.yaml index f6269ac..5d961e6 100644 --- a/src/main/resources/application-dev.yaml +++ b/src/main/resources/application-dev.yaml @@ -55,6 +55,7 @@ custom: keyHex: 00112233445566778899aabbccddeeff ivHex: 0102030405060708090a0b0c0d0e0f10 data-center: + token-enabled: false grant_type: password scope: read username: 3848A3C738EFBB2C2E76E0D59B419DACA16A80F3AB0354CD diff --git a/src/main/resources/application-prd.yaml b/src/main/resources/application-prd.yaml index df9c199..36f59f2 100644 --- a/src/main/resources/application-prd.yaml +++ b/src/main/resources/application-prd.yaml @@ -56,6 +56,7 @@ custom: keyHex: 00112233445566778899aabbccddeeff ivHex: 0102030405060708090a0b0c0d0e0f10 data-center: + token-enabled: false grant_type: password scope: read username: 3848A3C738EFBB2C2E76E0D59B419DACA16A80F3AB0354CD diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index f9a3b60..467a347 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -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}'