This commit is contained in:
2025-11-05 10:25:22 +08:00
parent 375eb81203
commit aa94662db0
4 changed files with 45 additions and 77 deletions
@@ -12,13 +12,13 @@ import lombok.Getter;
@Getter @Getter
public enum Api2UnitFiledMap { public enum Api2UnitFiledMap {
ZZJGDM("zzjgdm", "id"), ZZJGDM("dm", "id"),
ZZJGMC("zzjgmc", "name"), ZZJGMC("mc", "name"),
FJZZJGDM("fjzzjgdm", "parentId"), FJZZJGDM("ls", "parentId");
JDCJDM("jdcjdm", "unitLevel"), // JDCJDM("jdcjdm", "unitLevel"),
CJ_XYDWH("cj_xydwh", "divisionCollegeCode"), // CJ_XYDWH("cj_xydwh", "divisionCollegeCode"),
JGLX("jglx", "institutionType"), // JGLX("jglx", "institutionType"),
BMLB("bmlb", "unitType"); // BMLB("bmlb", "unitType");
// SFQY("sfqy", "delFlag"); // SFQY("sfqy", "delFlag");
public final String apiField; public final String apiField;
@@ -36,7 +36,7 @@ public class Sys_user extends BaseModel implements Serializable {
@Column @Column
@Comment("工号") @Comment("工号")
@ColDefine(type = ColType.VARCHAR, width = 120) @ColDefine(type = ColType.VARCHAR, width = 120)
@DataCenterColumn(name = "工号", key = "gh") @DataCenterColumn(name = "工号", key = "zgh")
private String loginname; private String loginname;
@Column @Column
@@ -48,6 +48,7 @@ public class Sys_user extends BaseModel implements Serializable {
@Column @Column
@Comment("性别") @Comment("性别")
@ColDefine(type = ColType.VARCHAR, width = 10) @ColDefine(type = ColType.VARCHAR, width = 10)
@DataCenterColumn(name = "性别", key = "xbmc")
private String sex; private String sex;
@Column @Column
@@ -69,7 +70,7 @@ public class Sys_user extends BaseModel implements Serializable {
@Column @Column
@Comment("政治面貌") @Comment("政治面貌")
@ColDefine(type = ColType.VARCHAR, width = 100) @ColDefine(type = ColType.VARCHAR, width = 100)
@DataCenterColumn(name = "政治面貌", key = "zzmmm", dict = "USER_POLITICAL") @DataCenterColumn(name = "政治面貌", key = "zzmmmc")
private String political; private String political;
@Column @Column
@@ -80,37 +81,34 @@ 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 = "mzm", dict = "USER_NATION") @DataCenterColumn(name = "民族", key = "mzmc")
private String nation; private String nation;
@Column @Column
@Comment("籍贯") @Comment("籍贯")
@ColDefine(type = ColType.VARCHAR, width = 100) @ColDefine(type = ColType.VARCHAR, width = 100)
@DataCenterColumn(name = "籍贯", key = "dqm") @DataCenterColumn(name = "籍贯", key = "jgmc")
private String nativePlace; private String nativePlace;
@Column @Column
@Comment("国籍") @Comment("国籍")
@ColDefine(type = ColType.VARCHAR, width = 20) @ColDefine(type = ColType.VARCHAR, width = 20)
@DataCenterColumn(name = "国籍", key = "gjdqm", dict = "USER_NATIONALITY")
private String nationality; private String nationality;
@Column @Column
@Comment("证件类型") @Comment("证件类型")
@ColDefine(type = ColType.VARCHAR, width = 30) @ColDefine(type = ColType.VARCHAR, width = 30)
@DataCenterColumn(name = "证件类型", key = "sfzjlxm", dict = "USER_IDENTITY_TYPE")
private String idCardType; private String idCardType;
@Column @Column
@Comment("证件号码") @Comment("证件号码")
@ColDefine(type = ColType.VARCHAR, width = 30) @ColDefine(type = ColType.VARCHAR, width = 30)
@DataCenterColumn(name = "证件号码", key = "sfzjh")
private String idCard; private String idCard;
@Column @Column
@Comment("手机号码") @Comment("手机号码")
@ColDefine(type = ColType.VARCHAR, width = 32) @ColDefine(type = ColType.VARCHAR, width = 32)
// @DataCenterColumn(name = "手机号码", key = "sjh") @DataCenterColumn(name = "手机号码", key = "sjh")
private String mobile; private String mobile;
@Column @Column
@@ -122,7 +120,6 @@ 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 = "hyztm", dict = "USER_MARRIAGE")
private String marriage; private String marriage;
@Column @Column
@@ -134,7 +131,6 @@ 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 = "prgw")
private String jobCategory; private String jobCategory;
@Column @Column
@@ -194,31 +190,29 @@ 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 = "zgzt") @DataCenterColumn(name = "在岗状态", key = "dqztmc")
private String userState; private String userState;
@Column @Column
@Comment("教职工类别码") @Comment("教职工类别码")
@ColDefine(type = ColType.VARCHAR, width = 30) @ColDefine(type = ColType.VARCHAR, width = 30)
@DataCenterColumn(name = "教职工类别码", key = "jzglbm", dict = "USER_PERSON_TYPE") @DataCenterColumn(name = "教职工类别码", key = "jzgrylbmc")
private String personType; private String personType;
@Column @Column
@Comment("编制类别码") @Comment("编制类别码")
@ColDefine(type = ColType.VARCHAR, width = 30) @ColDefine(type = ColType.VARCHAR, width = 30)
@DataCenterColumn(name = "编制类别码", key = "bzlxm", dict = "USER_PREPARED_BY_TYPE") @DataCenterColumn(name = "编制类别码", key = "zbqkmc")
private String preparedBy; private String preparedBy;
@Column @Column
@Comment("从教年月") @Comment("从教年月")
@ColDefine(type = ColType.DATE) @ColDefine(type = ColType.DATE)
@DataCenterColumn(name = "从教年月", key = "cjny")
private Date teachingTime; private Date teachingTime;
@Column @Column
@Comment("预计离校时间/最后离校时间") @Comment("预计离校时间/最后离校时间")
@ColDefine(type = ColType.DATE) @ColDefine(type = ColType.DATE)
@DataCenterColumn(name = "预计离校时间/最后离校时间", key = "yjlxsj")
private Date expectedLeaveSchoolDate; private Date expectedLeaveSchoolDate;
@Column @Column
@@ -3,6 +3,7 @@ package com.budwk.app.sys.services.impl;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpUtil; import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.budwk.app.base.config.DataCenterProperties; import com.budwk.app.base.config.DataCenterProperties;
@@ -62,18 +63,17 @@ public class SysDataUnitPullServiceImpl extends BaseServiceImpl<Sys_unit> implem
@Override @Override
@Aop(TransAop.READ_COMMITTED) @Aop(TransAop.READ_COMMITTED)
public void updateUnits(List<String> unitIds) { public void updateUnits(List<String> unitIds) {
// 获取配置
DataCenterProperties.Credential credential = dcPro.credential("unit");
String url = credential.getUrl();
String token = credential.getToken();
// 请求数据 // 请求数据
HttpRequest httpRequest = HttpUtil.createPost(url); String tokenUrl = "https://dcs.hgu.edu.cn:8888/openApi/API/zzjg";
HttpRequest httpRequest = HttpUtil.createPost(tokenUrl);
httpRequest.header("Content-Type", "application/json"); httpRequest.header("Content-Type", "application/json");
httpRequest.header("X-H3C-TOKEN", token); httpRequest.header("applyId", "39923603855883264");
httpRequest.body(JSONUtil.toJsonStr(Map.of())); httpRequest.header("secretKey", "169a960048124f4483e9637807afc9f6");
httpRequest.body(JSONUtil.toJsonStr(Map.of("page", 1, "pagesize", 1000)));
log.info("请求人员数据: {}", httpRequest);
String resBody = httpRequest.execute().body(); String resBody = httpRequest.execute().body();
log.info("请求人员数据结果: {}", resBody);
JSONObject jsonBody = JSONUtil.parseObj(resBody); JSONObject jsonBody = JSONUtil.parseObj(resBody);
if (jsonBody.getInt("code") != 200) { if (jsonBody.getInt("code") != 200) {
@@ -85,18 +85,17 @@ public class SysDataUnitPullServiceImpl extends BaseServiceImpl<Sys_unit> implem
// 需要更新的单位 // 需要更新的单位
List<Sys_unit> updateList = new ArrayList<>(); List<Sys_unit> updateList = new ArrayList<>();
// 拉取过来的数据,全部的单位,一万四千多条,这里只保留 “部门类” JSONObject dataJson = jsonBody.getJSONObject("data");
List<JSONObject> data = jsonBody.getJSONArray("data").stream() JSONArray rows = dataJson.get("Rows", JSONArray.class);
.map(o -> (JSONObject) o)
.filter(row -> StrUtil.isNotBlank(row.getStr("bmlb"))) List<JSONObject> data = rows.stream().map(v -> (JSONObject) v).toList();
.toList();
Map<String, String> api2db = Arrays.stream(Api2UnitFiledMap.values()) Map<String, String> api2db = Arrays.stream(Api2UnitFiledMap.values())
.collect(Collectors.toMap(e -> e.apiField, e -> e.dbColumn)); .collect(Collectors.toMap(e -> e.apiField, e -> e.dbColumn));
for (JSONObject row : data) { for (JSONObject row : data) {
Sys_unit unit = DataCenterUtil.mapJsonToBean(row, Sys_unit.class, api2db); Sys_unit unit = DataCenterUtil.mapJsonToBean(row, Sys_unit.class, api2db);
unit.setUnitcode(unit.getId()); unit.setUnitcode(unit.getId());
unit.setUnitTypeCode(unit.getUnitType().contains("部门") ? 1 : 0); unit.setUnitTypeCode(unit.getParentId().length() == 2 ? 0 : 1);
if (unitIds.contains(unit.getId())) { if (unitIds.contains(unit.getId())) {
// 存在则更新 // 存在则更新
@@ -113,34 +113,30 @@ 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));
Map<String, NutMap> financeUserMap = pullFinance();
// // 博士后进站日期数据
// Map<String, Date> doctoralData = pullPostDoctoral();
// 获取配置文件 接口地址 和 token
DataCenterProperties.Credential credential = dataCenterProperties.credential("teacher");
String url = credential.getUrl();
String token = credential.getToken();
// 请求数据 // 请求数据
HttpRequest httpRequest = HttpUtil.createPost(url); String tokenUrl = "https://dcs.hgu.edu.cn:8888/openApi/API/jzgjbxx";
HttpRequest httpRequest = HttpUtil.createPost(tokenUrl);
httpRequest.header("Content-Type", "application/json"); httpRequest.header("Content-Type", "application/json");
httpRequest.header("X-H3C-TOKEN", token); httpRequest.header("applyId", "39923603855883264");
httpRequest.body(JSONUtil.toJsonStr(Map.of())); httpRequest.header("secretKey", "169a960048124f4483e9637807afc9f6");
httpRequest.body(JSONUtil.toJsonStr(Map.of("page", 1, "pagesize", 3000)));
log.info("请求人员数据: {}", httpRequest);
String resBody = httpRequest.execute().body(); String resBody = httpRequest.execute().body();
log.info("请求人员数据结果: {}", resBody);
JSONObject jsonBody = JSONUtil.parseObj(resBody); JSONObject jsonBody = JSONUtil.parseObj(resBody);
if (jsonBody.getInt("code") != 200) { if (jsonBody.getInt("status") != 200) {
throw new BaseException("获取人员数据失败,错误码: " + jsonBody.getInt("code") + ";错误原因:" + jsonBody.getStr("msg")); throw new BaseException("获取人员数据失败,错误码: " + jsonBody.getInt("code") + ";错误原因:" + jsonBody.getStr("msg"));
} }
List<JSONObject> rawDataList = new ArrayList<>(); List<JSONObject> rawDataList = new ArrayList<>();
JSONArray data = jsonBody.getJSONArray("data"); JSONObject data = jsonBody.getJSONObject("data");
JSONArray rows = data.get("Rows", JSONArray.class);
if (!data.isEmpty()) { if (!data.isEmpty()) {
// 先收集所有原始数据 // 先收集所有原始数据
rawDataList = data.stream().map(v -> (JSONObject) v).toList(); rawDataList = rows.stream().map(v -> (JSONObject) v).toList();
log.info("数据拉取进度: {}/{}", rawDataList.size(), jsonBody.getInt("total")); log.info("数据拉取进度: {}/{}", rawDataList.size(), jsonBody.getInt("total"));
} else { } else {
log.warn("当前未获取到数据"); log.warn("当前未获取到数据");
@@ -164,18 +160,7 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl<Sys_user_source>
.equals(v.getCode())).findFirst().orElse(new Sys_data_dict()); .equals(v.getCode())).findFirst().orElse(new Sys_data_dict());
mapping.field.set(sysUser, sysDataDict.getName()); mapping.field.set(sysUser, sysDataDict.getName());
} else { } else {
// 特殊处理 根据身份证号获取性别和出生年月 mapping.field.set(sysUser, raw.getStr(mapping.key));
if ("sfzjh".equals(mapping.field.getName())) {
String idCard = raw.getStr(mapping.key);
if (StrUtil.isNotBlank(idCard)) {
int gender = IdcardUtil.getGenderByIdCard(idCard);
// 性别(1 : 男 0 : 女)
sysUser.setSex(gender == 1 ? "" : "");
mapping.field.set(sysUser, raw.getStr(mapping.key));
}
} else {
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)); mapping.field.set(sysUser, raw.getDate(mapping.key));
@@ -186,20 +171,9 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl<Sys_user_source>
} }
// 设置单位相关信息 // 设置单位相关信息
sysUser.setUnitId(raw.getStr("dwh")); sysUser.setUnitId(raw.getStr("szdwdm"));
sysUser.setPullTime(nowDate); sysUser.setPullTime(nowDate);
// 判断财务信息有没有值,
if (financeUserMap.containsKey(sysUser.getLoginname())) {
NutMap nutMap = financeUserMap.get(sysUser.getLoginname());
sysUser.setMember(true);
sysUser.setWelfareMember(true);
sysUser.setPreparationMemberFee(BigDecimal.valueOf(nutMap.getDouble("preparationMemberFee")));
sysUser.setContractMemberFee(BigDecimal.valueOf(nutMap.getDouble("contractMemberFee")));
} else {
sysUser.setMember(false);
sysUser.setWelfareMember(false);
}
return sysUser; return sysUser;
}).toList(); }).toList();
@@ -286,7 +260,7 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl<Sys_user_source>
@Override @Override
public Map<String, Date> pullPostDoctoral() { public Map<String, Date> pullPostDoctoral() {
String appId = "1926887238437818370"; /* String appId = "1926887238437818370";
String secret = "32df31fcf4fc43f9a647ee1f47134f36"; String secret = "32df31fcf4fc43f9a647ee1f47134f36";
List<JSONObject> allUsers = new ArrayList<>(); List<JSONObject> allUsers = new ArrayList<>();
@@ -333,7 +307,8 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl<Sys_user_source>
Map<String, Date> data = allUsers.stream().filter(v -> v.getStr("进站日期") != null).collect(Collectors.toMap(v -> v.getStr("教职工号"), v -> v.getDate("进站日期"))); Map<String, Date> data = allUsers.stream().filter(v -> v.getStr("进站日期") != null).collect(Collectors.toMap(v -> v.getStr("教职工号"), v -> v.getDate("进站日期")));
return data; return data;*/
return null;
} }