From a56afdd4f1856057d4996ea6d5c22c829e05f20f Mon Sep 17 00:00:00 2001 From: hongqiwei Date: Thu, 15 Jan 2026 11:49:51 +0800 Subject: [PATCH] commit --- .../app/base/config/DataCenterProperties.java | 31 +-- .../SmsYpiServiceImpl.java} | 24 +- .../app/sys/controller/SysHomeController.java | 83 ++---- .../budwk/app/sys/enums/Api2UnitFiledMap.java | 7 +- .../com/budwk/app/sys/models/Sys_user.java | 63 ++--- .../impl/SysDataUnitPullServiceImpl.java | 73 ++--- .../impl/SysDataUserPullServiceImpl.java | 253 ++++-------------- .../views/layouts/v4/home/index.html | 4 +- .../views/platform/sys/data/user/pull.html | 2 +- .../views/platform/sys/unit/index.html | 2 +- .../views/platform/zhghh5/sys/home/mine.js | 4 +- 11 files changed, 192 insertions(+), 354 deletions(-) rename src/main/java/com/budwk/app/base/sms/impl/{jshvc/SmsJshvcServiceImpl.java => ypi/SmsYpiServiceImpl.java} (87%) 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 0d01d54..1f938eb 100644 --- a/src/main/java/com/budwk/app/base/config/DataCenterProperties.java +++ b/src/main/java/com/budwk/app/base/config/DataCenterProperties.java @@ -36,16 +36,16 @@ public class DataCenterProperties { @Inject private RedisService redisService; - private String appId; + private String key; + private String secret; private String tokenUrl; - private Map codes = new HashMap<>(); private Map urls = new HashMap<>(); public void init() { Map all = conf.toMap(); - appId = all.get("data-center.app-id"); + key = all.get("data-center.key"); + secret = all.get("data-center.secret"); tokenUrl = all.get("data-center.token-url"); - extract(all, "data-center.codes.", codes); extract(all, "data-center.urls.", urls); } @@ -68,12 +68,8 @@ public class DataCenterProperties { * @return 相关配置 */ public Credential credential(String key) { - String code = codes.get(key); String url = urls.get(key); - if (code == null || url == null) { - throw new BaseException("未知业务: " + key); - } - String token = getToken(Integer.parseInt(code), key); + String token = getToken(key); return new Credential(url, token); } @@ -87,11 +83,10 @@ public class DataCenterProperties { /** * 获取token - * @param code * @param keyPrefix * @return token */ - private String getToken(Integer code, String keyPrefix) { + private String getToken(String keyPrefix) { String dateCenterPrefix = RedisConstant.DATE_CENTER_PREFIX + keyPrefix; String token = redisService.get(dateCenterPrefix); if (StrUtil.isNotBlank(token)) { @@ -99,18 +94,18 @@ public class DataCenterProperties { } else { HttpRequest httpRequest = HttpUtil.createPost(tokenUrl); Map reqBody = Map.of( - "appId", appId, - "code", code + "key", key, + "secret", secret ); httpRequest.body(JSONUtil.toJsonStr(reqBody)); JSONObject resp = JSONUtil.parseObj(httpRequest.execute().body()); - if (resp.getInt("code") != 200) { - throw new BaseException("获取token失败: " + resp.getStr("msg")); + if (!"ok".equals(resp.getStr("message"))) { + throw new BaseException("获取token失败: " + resp.getStr("description")); } else { - JSONObject data = resp.getJSONObject("data"); - String tokenStr = data.getStr("token"); - Integer expire = data.getInt("expire"); + JSONObject data = resp.getJSONObject("result"); + String tokenStr = data.getStr("access_token"); + Integer expire = data.getInt("expires_in"); redisService.setex(dateCenterPrefix, expire, tokenStr); return tokenStr; } diff --git a/src/main/java/com/budwk/app/base/sms/impl/jshvc/SmsJshvcServiceImpl.java b/src/main/java/com/budwk/app/base/sms/impl/ypi/SmsYpiServiceImpl.java similarity index 87% rename from src/main/java/com/budwk/app/base/sms/impl/jshvc/SmsJshvcServiceImpl.java rename to src/main/java/com/budwk/app/base/sms/impl/ypi/SmsYpiServiceImpl.java index 9eeb4bb..07ff729 100644 --- a/src/main/java/com/budwk/app/base/sms/impl/jshvc/SmsJshvcServiceImpl.java +++ b/src/main/java/com/budwk/app/base/sms/impl/ypi/SmsYpiServiceImpl.java @@ -1,4 +1,4 @@ -package com.budwk.app.base.sms.impl.jshvc; +package com.budwk.app.base.sms.impl.ypi; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.digest.DigestUtil; @@ -17,7 +17,7 @@ import java.util.List; import java.util.Map; /** - * @ClassName SmsJshvcServiceImpl + * @ClassName SmsYpiServiceImpl * @Author JyuHsin * @Date 2025/11/26 19:32 * @Version 1.0 @@ -25,12 +25,12 @@ import java.util.Map; */ @Slf4j @IocBean -public class SmsJshvcServiceImpl implements SmsService { +public class SmsYpiServiceImpl implements SmsService { private static final String APPID = "1430576717768122368"; private static final String APP_SECRET = "19A0ACB03FBQHL4R4XQD"; - private static final String TOKEN_URL = "https://gateway.jshvc.edu.cn/token/gateway/accessToken"; - private static final String MSG_URL = "https://gateway.jshvc.edu.cn/mp/restful/v2/message/send"; + private static final String TOKEN_URL = "https://gateway.ypi.edu.cn/token/gateway/accessToken"; + private static final String MSG_URL = "https://gateway.ypi.edu.cn/mp/restful/v2/message/send"; private static final String REDIS_KEY_MSG_ACCESS_TOKEN = "msg:token:"; @Inject @@ -38,7 +38,7 @@ public class SmsJshvcServiceImpl implements SmsService { @Override public void send(String loginName, String content) { -// send(loginName, "智慧工会", content); + send(loginName, "智慧工会", content); } @Override @@ -48,16 +48,16 @@ public class SmsJshvcServiceImpl implements SmsService { @Override public void send(String loginName, String title, String content, String link) { -// Map paramMap = Map.of("userId", loginName); -// doSend(title, content, List.of(paramMap), link); + Map paramMap = Map.of("userId", loginName); + doSend(title, content, List.of(paramMap), link); } @Override public void massSend(List loginNames, String title, String content, String link) { -// List> receivers = loginNames.stream() -// .map(name -> Map.of("userId", name)) -// .toList(); -// doSend(title, content, receivers, link); + List> receivers = loginNames.stream() + .map(name -> Map.of("userId", name)) + .toList(); + doSend(title, content, receivers, link); } /** diff --git a/src/main/java/com/budwk/app/sys/controller/SysHomeController.java b/src/main/java/com/budwk/app/sys/controller/SysHomeController.java index ffa2ed8..f2e1364 100644 --- a/src/main/java/com/budwk/app/sys/controller/SysHomeController.java +++ b/src/main/java/com/budwk/app/sys/controller/SysHomeController.java @@ -208,10 +208,10 @@ public class SysHomeController { // if (!DateUtil.isIn(today, startDate, endDate)) { // continue; // } - // 只过滤结束的 - if (DateUtil.compare(today, endDate) > 0) { - continue; - } + // 只过滤结束的 + if (DateUtil.compare(today, endDate) > 0) { + continue; + } Integer allowUserGroupId = activity.getAllowUserGroupId(); String allowUserSql = activity.getAllowUserSql(); activity.setAllowUserSql(null); @@ -264,71 +264,46 @@ public class SysHomeController { // @CacheResult(cacheKey = "news", ignoreNull = true, cacheLiveTime = 60 * 60 * 24) public Result getNews() { // 定义要爬取的URL - String domain = "https://gh.whcp.edu.cn"; + String domain = "https://gonghui.ypi.edu.cn"; try { // 使用Jsoup连接到URL并获取页面内容 Document doc = Jsoup.connect(domain).get(); JSONObject root = new JSONObject(); - // 1. 新闻快讯(来自 .list1) - /* List newsArray = new ArrayList<>(); - Elements newsItems = doc.select(".ml .main_page2 .news_list li"); - for (Element item : newsItems) { - String date = item.select(".date").text().trim(); - Element link = item.select("a.text").first(); - String title = link.select(".title").text().trim(); - String url = link.attr("href").trim(); - - JSONObject node = new JSONObject(); - node.set("title", title); - node.set("date", date); - node.set("url", domain + url); - newsArray.add(node); - } - root.set("news", newsArray);*/ - - // 2. 通知公告(来自 .list2) - List noticesArray = new ArrayList<>(); - Elements noticeItems = doc.select(".tu_text .news_list li"); - for (Element item : noticeItems) { - String date = item.select(".news_meta").text().trim(); - Element link = item.select(".news_title a").first(); - String title = link.text().trim(); - String url = link.attr("href").trim(); - JSONObject node = new JSONObject(); - node.set("title", title); - node.set("date", date); - node.set("url", domain + url); - noticesArray.add(node); - } - root.set("notices", noticesArray); - // 3. 基层风采(来自 .pic-list1) - /* List grassrootsArray = new ArrayList<>(); - Elements grassrootsItems = doc.select(".group3 .pic-list1 li"); + List grassrootsArray = new ArrayList<>(); + Elements grassrootsItems = doc.select(".news #wp_news_w21 ul li"); for (Element item : grassrootsItems) { - Element link = item.select("a.img-scale").first(); - String date = link.select(".date").text().trim(); - String title = link.select(".title").text().trim(); - String url = link.attr("href").trim(); - String summary = link.select(".info").text().trim(); - String imageUrl = ""; - Element img = link.select("img").first(); - if (img != null) { - imageUrl = img.attr("src").trim(); - } + Element aTitle = item.select("a").first(); + String title = aTitle.attr("title").trim(); + String url = aTitle.attr("href").trim(); + + Element meta = item.select(".Article_PublishDate").first(); + String date = meta.text().trim(); + + /*Element link = item.select(".nr").first(); + String date = link.select(".date").text().trim(); + String title = link.select(".news_title a").text().trim(); + String url = link.select(".news_title a").attr("href").trim(); + String summary = link.select(".news_text a").text().trim(); + + String imageUrl = ""; + Element img = link.select(".news_imgs").first(); + if (img != null) { + imageUrl = img.attr("src").trim(); + }*/ JSONObject node = new JSONObject(); node.set("title", title); node.set("date", date); - node.set("url", domain + url); - node.set("summary", summary); - node.set("image", domain + imageUrl); + node.set("url", "https://gonghui.ypi.edu.cn/" + url); + //node.set("summary", summary); + //node.set("image", StrUtil.isNotBlank(imageUrl) ? (domain + imageUrl) : ""); grassrootsArray.add(node); } - root.set("grassroots", grassrootsArray);*/ + root.set("grassroots", grassrootsArray); return Result.success(root); } catch (Exception e) { log.error(e); diff --git a/src/main/java/com/budwk/app/sys/enums/Api2UnitFiledMap.java b/src/main/java/com/budwk/app/sys/enums/Api2UnitFiledMap.java index 3a258f0..d0239a6 100644 --- a/src/main/java/com/budwk/app/sys/enums/Api2UnitFiledMap.java +++ b/src/main/java/com/budwk/app/sys/enums/Api2UnitFiledMap.java @@ -12,9 +12,10 @@ import lombok.Getter; @Getter public enum Api2UnitFiledMap { - ZZJGDM("dwdm", "id"), - ZZJGMC("dwmc", "name"), - BMLB("bmflmc", "unitType"); + ZZJGDM("DWDM", "id"), + ZZJGMC("DWMC", "name"), + DWCC("DWCC", "unitLevel"), + LSDWH("LSDWH", "parentId"); public final String apiField; public final String dbColumn; 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 48f9de9..0cf88ac 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 @@ -36,7 +36,7 @@ public class Sys_user extends BaseModel implements Serializable { @Column @Comment("工号") @ColDefine(type = ColType.VARCHAR, width = 120) - @DataCenterColumn(name = "工号", key = "JGH") + @DataCenterColumn(name = "工号", key = "ZGH") private String loginname; @Column @@ -48,7 +48,7 @@ public class Sys_user extends BaseModel implements Serializable { @Column @Comment("性别") @ColDefine(type = ColType.VARCHAR, width = 10) - @DataCenterColumn(name = "姓别", key = "XBM", dict = "USER_SEX") + @DataCenterColumn(name = "性别", key = "XBMC") private String sex; @Column @@ -64,12 +64,13 @@ public class Sys_user extends BaseModel implements Serializable { @Column @Comment("出生日期") @ColDefine(type = ColType.DATE) + @DataCenterColumn(name = "出生日期", key = "CSRQ") private Date birthday; @Column @Comment("政治面貌") @ColDefine(type = ColType.VARCHAR, width = 100) - @DataCenterColumn(name = "政治面貌", key = "ZZMMM", dict = "USER_POLITICAL") + @DataCenterColumn(name = "政治面貌", key = "ZZMM") private String political; @Column @@ -80,7 +81,7 @@ public class Sys_user extends BaseModel implements Serializable { @Column @Comment("民族") @ColDefine(type = ColType.VARCHAR, width = 20) - @DataCenterColumn(name = "民族", key = "MZM", dict = "USER_NATION") + @DataCenterColumn(name = "民族", key = "MZMC") private String nation; @Column @@ -96,6 +97,7 @@ public class Sys_user extends BaseModel implements Serializable { @Column @Comment("证件类型") @ColDefine(type = ColType.VARCHAR, width = 30) + @DataCenterColumn(name = "证件类型", key = "SFZJLXDM") private String idCardType; @Column @@ -107,72 +109,70 @@ public class Sys_user extends BaseModel implements Serializable { @Column @Comment("手机号码") @ColDefine(type = ColType.VARCHAR, width = 32) - @DataCenterColumn(name = "手机号码", key = "SJHM") + @DataCenterColumn(name = "手机号码", key = "SJH") private String mobile; @Column @Comment("学历") @ColDefine(type = ColType.VARCHAR, width = 20) - @DataCenterColumn(name = "学历", key = "ZGXLM", dict = "USER_EDUCATION") + @DataCenterColumn(name = "学历", key = "ZGXLMC") private String education; @Column @Comment("婚姻状况") @ColDefine(type = ColType.VARCHAR, width = 20) + @DataCenterColumn(name = "婚姻状况", key = "HYZKMC") private String marriage; @Column @Comment("学位") @ColDefine(type = ColType.VARCHAR, width = 50) -// @DataCenterColumn(name = "学位", key = "zgxwmc") + @DataCenterColumn(name = "学位", key = "ZGXWMC") private String academicDegree; @Column @Comment("岗位类别") @ColDefine(type = ColType.VARCHAR, width = 50) - @DataCenterColumn(name = "岗位类别", key = "JRGWDJM",dict = "USER_JOB_CATEGORY") + @DataCenterColumn(name = "岗位类别", key = "GWLBMC") private String jobCategory; @Column @Comment("职称") @ColDefine(type = ColType.VARCHAR, width = 50) - @DataCenterColumn(name = "职称", key = "DQZC", dict = "USER_PROFESSIONAL_TITLE") + @DataCenterColumn(name = "职称", key = "PRZYJSZWMC") private String professionalTitle; @Column @Comment("职级") @ColDefine(type = ColType.VARCHAR, width = 50) - @DataCenterColumn(name = "取得职称等级码", key = "QDZCDJM", dict = "USER_PROFESSIONAL_LEVEL") + @DataCenterColumn(name = "职级", key = "ZYJSZWJB") private String professionalLevel; @Column @Comment("职工来源") @ColDefine(type = ColType.VARCHAR, width = 50) -// @DataCenterColumn(name = "职工来源", key = "zgly") + @DataCenterColumn(name = "职工来源", key = "JZGLYMC") private String employeeSource; @Column @Comment("行政级别(用于管理岗位)") @ColDefine(type = ColType.VARCHAR, width = 50) -// @DataCenterColumn(name = "行政级别(用于管理岗位)", key = "xzjb") private String administrativeLevel; @Column @Comment("岗位系列") @ColDefine(type = ColType.VARCHAR, width = 50) -// @DataCenterColumn(name = "岗位系列", key = "gwxl") private String positionSeries; @Column @Comment("岗级") @ColDefine(type = ColType.VARCHAR, width = 50) -// @DataCenterColumn(name = "岗级", key = "gj") + @DataCenterColumn(name = "岗级", key = "GWDJMC") private String positionLevel; @Column @Comment("行政岗级") @ColDefine(type = ColType.VARCHAR, width = 50) -// @DataCenterColumn(name = "行政岗级", key = "xzgj") private String administrativePositionLevel; @Column @@ -189,25 +189,19 @@ public class Sys_user extends BaseModel implements Serializable { @Column @Comment("在职状态") @ColDefine(type = ColType.VARCHAR, width = 30) - @DataCenterColumn(name = "当前状态码", key = "DQZTM", dict = "USER_STATE") + @DataCenterColumn(name = "在岗状态", key = "ZGZTMC") private String userState; - @Column - @Comment("在岗情况") - @ColDefine(type = ColType.VARCHAR, width = 30) - @DataCenterColumn(name = "在岗情况码", key = "ZGQKM", dict = "USER_DUTY_SITUATION") - private String dutySituation; - @Column @Comment("教职工类别码") @ColDefine(type = ColType.VARCHAR, width = 30) - @DataCenterColumn(name = "教职工类别码", key = "JZGLBM", dict = "USER_PERSON_TYPE") + @DataCenterColumn(name = "教职工类别码", key = "JZGLBMC") private String personType; @Column @Comment("编制类别码") @ColDefine(type = ColType.VARCHAR, width = 30) - @DataCenterColumn(name = "编制类别码", key = "BZLBM", dict = "USER_PREPARED_BY_TYPE") + @DataCenterColumn(name = "编制", key = "ZBZTMC") private String preparedBy; @Column @@ -218,6 +212,7 @@ public class Sys_user extends BaseModel implements Serializable { @Column @Comment("预计离校时间/最后离校时间") @ColDefine(type = ColType.DATE) + @DataCenterColumn(name = "预计离校时间/最后离校时间", key = "LXRQ") private Date expectedLeaveSchoolDate; @Column @@ -257,7 +252,7 @@ public class Sys_user extends BaseModel implements Serializable { @Column @ColDefine(type = ColType.VARCHAR, width = 32) - @DataCenterColumn(name = "单位", key = "DWH") + @DataCenterColumn(name = "单位代码", key = "SZDWDM") private String unitId; @Column @@ -268,6 +263,7 @@ public class Sys_user extends BaseModel implements Serializable { @Comment("是否双肩挑") @ColDefine(type = ColType.BOOLEAN) @Default(value = "0") + @DataCenterColumn(name = "是否双肩挑", key = "SFSJT") private Boolean manyUnit; @Column @@ -319,17 +315,6 @@ public class Sys_user extends BaseModel implements Serializable { @ColDefine(type = ColType.VARCHAR, customType = "text") private String personalData; - @Column - @Comment("特长及获奖情况") - @ColDefine(type = ColType.VARCHAR, customType = "text") - private String specialty; - - @Column - @Comment("家庭住址") - @ColDefine(type = ColType.VARCHAR, width = 100) - private String homeAddress; - - @Column @Comment("常用审批意见") @ColDefine(type = ColType.MYSQL_JSON) @@ -394,4 +379,10 @@ public class Sys_user extends BaseModel implements Serializable { @Comment("openId") @ColDefine(type = ColType.VARCHAR, width = 50) private String openId; + + @Column + @Comment("党政职务") + @ColDefine(type = ColType.VARCHAR, width = 50) + @DataCenterColumn(name = "党政职务", key = "DZZW") + private String position; } diff --git a/src/main/java/com/budwk/app/sys/services/impl/SysDataUnitPullServiceImpl.java b/src/main/java/com/budwk/app/sys/services/impl/SysDataUnitPullServiceImpl.java index 6fb1cb8..353e4ad 100644 --- a/src/main/java/com/budwk/app/sys/services/impl/SysDataUnitPullServiceImpl.java +++ b/src/main/java/com/budwk/app/sys/services/impl/SysDataUnitPullServiceImpl.java @@ -1,7 +1,6 @@ package com.budwk.app.sys.services.impl; import cn.hutool.core.util.StrUtil; -import cn.hutool.core.util.URLUtil; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpUtil; import cn.hutool.json.JSONObject; @@ -13,16 +12,18 @@ import com.budwk.app.sys.enums.Api2UnitFiledMap; import com.budwk.app.sys.models.Sys_unit; import com.budwk.app.sys.services.SysDataUnitPullService; import com.budwk.app.sys.utils.DataCenterUtil; +import com.budwk.app.web.commons.base.Globals; import lombok.extern.slf4j.Slf4j; import org.nutz.aop.interceptor.ioc.TransAop; +import org.nutz.dao.Cnd; import org.nutz.dao.Dao; import org.nutz.dao.Sqls; +import org.nutz.dao.entity.Record; import org.nutz.dao.sql.Sql; import org.nutz.ioc.aop.Aop; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; -import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -64,36 +65,37 @@ public class SysDataUnitPullServiceImpl extends BaseServiceImpl implem @Override @Aop(TransAop.READ_COMMITTED) public void updateUnits(List unitIds) { - // token url参数 - Map tokenParams = Map.of( - "grant_type", "password", - "scope", "read", - "username", "3848A3C738EFBB2C2E76E0D59B419DACA16A80F3AB0354CD", - "password", "3848A3C738EFBB2C2E76E0D59B419DACA16A80F3AB0354CD" - ); + + // 判断有没有父节点 + /*Sys_unit parentUnit = dao().fetch(Sys_unit.class, Cnd.where(Sys_unit::getUnitcode, "=", "0000")); + if(parentUnit == null) { + Sys_unit pu = new Sys_unit(); + pu.setId("0000"); + pu.setName(Globals.AppName.replace("智慧工会", "")); + pu.setUnitcode("0000"); + pu.setHasChildren(true); + pu.setUnitLevel(1); + pu.setUnitType("根目录"); + pu.setUnitTypeCode(0); + dao().insert(pu); + }*/ - String params = URLUtil.buildQuery(tokenParams, StandardCharsets.UTF_8); - String tokenUrl = "https://bd.whcp.edu.cn/sjjkfwpt/api/bd-api/oauth/token" + (StrUtil.isBlank(params) ? "" : "?" + params); - HttpRequest tokenHttpRequest = HttpUtil.createPost(tokenUrl); - tokenHttpRequest.header("Content-Type", "application/json"); - tokenHttpRequest.header("Authorization", "Basic MTE0OjU5M2UwNGI4YTE4NWRlMzkyNjY4ZmY0ZDJhZGMyZTEw"); - - log.info("请求token: {}", tokenHttpRequest); - String tokenResBody = tokenHttpRequest.execute().body(); - - log.info("请求token结果: {}", tokenResBody); - JSONObject tokenJsonBody = JSONUtil.parseObj(tokenResBody); + // 获取配置 + DataCenterProperties.Credential credential = dcPro.credential("unit"); + String url = credential.getUrl(); + String token = credential.getToken(); // 请求数据 - HttpRequest httpRequest = HttpUtil.createGet("https://bd.whcp.edu.cn/sjjkfwpt/api/bd-api/get/YXSDWJBSJZLB"); - httpRequest.form(Map.of("access_token", tokenJsonBody.getStr("access_token"), "pageSize", 100, "page", 1)); - log.info("请求单位数据: {}", httpRequest); + HttpRequest httpRequest = HttpUtil.createPost(url); + httpRequest.header("Content-Type", "application/json"); + httpRequest.header("Authorization", "Bearer " + token); + httpRequest.body(JSONUtil.toJsonStr(Map.of("per_page", 1000))); + String resBody = httpRequest.execute().body(); - log.info("请求单位数据结果: {}", resBody); JSONObject jsonBody = JSONUtil.parseObj(resBody); - if (jsonBody.getInt("code") != 200) { - throw new BaseException("获取单位数据失败,错误码: " + jsonBody.getInt("code") + ";错误原因:" + jsonBody.getStr("msg")); + if (!"ok".equals(jsonBody.getStr("message"))) { + throw new BaseException("获取单位数据失败,错误码: " + jsonBody.getInt("code") + ";错误原因:" + jsonBody.getStr("description")); } // 需要新增的单位 @@ -101,17 +103,28 @@ public class SysDataUnitPullServiceImpl extends BaseServiceImpl implem // 需要更新的单位 List updateList = new ArrayList<>(); - // 拉取过来的数据,全部的单位,一万四千多条,这里只保留 “部门类” - List data = jsonBody.getJSONArray("data").stream() + JSONObject result = jsonBody.getJSONObject("result"); + List data = result.getJSONArray("data").stream() .map(o -> (JSONObject) o) .toList(); Map api2db = Arrays.stream(Api2UnitFiledMap.values()) .collect(Collectors.toMap(e -> e.apiField, e -> e.dbColumn)); for (JSONObject row : data) { - Sys_unit unit = DataCenterUtil.mapJsonToBean(row, Sys_unit.class, api2db); + JSONObject jsonRow = JSONUtil.parseObj(JSONUtil.toJsonStr(row)); + Sys_unit unit = DataCenterUtil.mapJsonToBean(jsonRow, Sys_unit.class, api2db); unit.setUnitcode(unit.getId()); - unit.setUnitTypeCode(1); + if(unit.getUnitLevel() == 1 || "0000".equals(unit.getUnitcode())) { + unit.setUnitType("根目录"); + unit.setUnitTypeCode(0); + unit.setParentId("0"); + } else { + unit.setUnitType("子部门"); + unit.setUnitTypeCode(1); + } + if(unit.getUnitLevel() == 2) { + unit.setParentId("0000"); + } if (unitIds.contains(unit.getId())) { // 存在则更新 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 f2d38c8..97ea5a0 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 @@ -6,7 +6,6 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.util.IdcardUtil; import cn.hutool.core.util.StrUtil; -import cn.hutool.core.util.URLUtil; import cn.hutool.crypto.digest.DigestUtil; import cn.hutool.http.Header; import cn.hutool.http.HttpRequest; @@ -33,6 +32,7 @@ import org.nutz.aop.interceptor.ioc.TransAop; import org.nutz.dao.Cnd; import org.nutz.dao.Dao; import org.nutz.dao.Sqls; +import org.nutz.dao.entity.Record; import org.nutz.dao.sql.Sql; import org.nutz.ioc.aop.Aop; import org.nutz.ioc.loader.annotation.Inject; @@ -42,7 +42,6 @@ import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import java.lang.reflect.Field; import java.math.BigDecimal; -import java.nio.charset.StandardCharsets; import java.util.*; import java.util.stream.Collectors; @@ -110,54 +109,43 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl @Aop(TransAop.READ_COMMITTED) public Date pull() { try { - // 获取数据中心的字典 - List dataDictList = dao().query(Sys_data_dict.class, Cnd.NEW()); - // 字典码表Map,key为父级编码,value为子级字典列表 - Map> dataDictMap = dataDictList.stream().collect(Collectors.groupingBy(Sys_data_dict::getParentCode)); - - // token url参数 - Map tokenParams = Map.of( - "grant_type", "password", - "scope", "read", - "username", "3848A3C738EFBB2C2E76E0D59B419DACA16A80F3AB0354CD", - "password", "3848A3C738EFBB2C2E76E0D59B419DACA16A80F3AB0354CD" - ); - - String params = URLUtil.buildQuery(tokenParams, StandardCharsets.UTF_8); - String tokenUrl = "https://bd.whcp.edu.cn/sjjkfwpt/api/bd-api/oauth/token" + (StrUtil.isBlank(params) ? "" : "?" + params); - HttpRequest tokenHttpRequest = HttpUtil.createPost(tokenUrl); - tokenHttpRequest.header("Content-Type", "application/json"); - tokenHttpRequest.header("Authorization", "Basic MTE0OjU5M2UwNGI4YTE4NWRlMzkyNjY4ZmY0ZDJhZGMyZTEw"); - - log.info("请求token: {}", tokenHttpRequest); - String tokenResBody = tokenHttpRequest.execute().body(); - log.info("请求token结果: {}", tokenResBody); - - JSONObject tokenJsonBody = JSONUtil.parseObj(tokenResBody); - - // 请求数据 - HttpRequest httpRequest = HttpUtil.createGet("https://bd.whcp.edu.cn/sjjkfwpt/api/bd-api/get/JZGJCSJZLB"); - httpRequest.form(Map.of("access_token", tokenJsonBody.getStr("access_token"), "pageSize", 5000, "page", 1)); - - log.info("请求人员数据: {}", httpRequest); - String resBody = httpRequest.execute().body(); - log.info("请求人员数据结果: {}", resBody); - JSONObject jsonBody = JSONUtil.parseObj(resBody); - - if (jsonBody.getInt("code") != 200) { - throw new BaseException("获取人员数据失败,错误码: " + jsonBody.getInt("code") + ";错误原因:" + jsonBody.getStr("msg")); - } + // 获取配置文件 接口地址 和 token + DataCenterProperties.Credential credential = dataCenterProperties.credential("teacher"); + String url = credential.getUrl(); + String token = credential.getToken(); List rawDataList = new ArrayList<>(); - JSONArray data = jsonBody.getJSONArray("data"); + int page = 1; + int maxPage; + do { + // 请求数据 + HttpRequest httpRequest = HttpUtil.createPost(url); + httpRequest.header("Content-Type", "application/json"); + httpRequest.header("Authorization", "Bearer " + token); + httpRequest.body(JSONUtil.toJsonStr(Map.of("page", page, "per_page", 500))); - if (!data.isEmpty()) { - // 先收集所有原始数据 - rawDataList = data.stream().map(v -> (JSONObject) v).toList(); - log.info("数据拉取进度: {}/{}", rawDataList.size(), jsonBody.getInt("total")); - } else { - log.warn("当前未获取到数据"); - } + String resBody = httpRequest.execute().body(); + JSONObject jsonBody = JSONUtil.parseObj(resBody); + + if (!"ok".equals(jsonBody.getStr("message"))) { + throw new BaseException("获取人员数据失败,错误码: " + jsonBody.getInt("code") + ";错误原因:" + jsonBody.getStr("description")); + } + + JSONObject result = jsonBody.getJSONObject("result"); + maxPage = result.getInt("max_page"); + int total = result.getInt("total"); + JSONArray data = result.getJSONArray("data"); + + if (!data.isEmpty()) { + // 先收集所有原始数据 + rawDataList.addAll(data.stream().map(v -> JSONUtil.parseObj(JSONUtil.toJsonStr(v))).toList()); + log.info("数据拉取进度: 总数据量:{},已经拉取{},本次拉取:{}", total, rawDataList.size(), data.size()); + } else { + log.warn("当前未获取到数据"); + } + + page ++; + } while (page <= maxPage); Date nowDate = new Date(); @@ -170,25 +158,9 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl try { // 根据字段类型设置值 if (mapping.field.getType() == String.class) { - - if (StrUtil.isNotBlank(mapping.dict)) { - Sys_data_dict sysDataDict = dataDictMap.get(mapping.dict).stream() - .filter(v -> raw.getStr(mapping.key) - .equals(v.getCode())).findFirst().orElse(new Sys_data_dict()); - mapping.field.set(sysUser, sysDataDict.getName()); - } else { - // 特殊处理 根据身份证号获取性别和出生年月 - if ("SFZJH".equals(mapping.field.getName())) { - String idCard = raw.getStr(mapping.key); - // 设置出生年月 - try { - sysUser.setBirthday(IdcardUtil.getBirthDate(idCard)); - } catch (Exception e) { - sysUser.setBirthday(null); - } - } else { - mapping.field.set(sysUser, raw.getStr(mapping.key)); - } + mapping.field.set(sysUser, raw.getStr(mapping.key)); + if("XBMC".equals(mapping.key) && StrUtil.isNotBlank(raw.getStr(mapping.key))) { + mapping.field.set(sysUser, raw.getStr(mapping.key).replace("性", "")); } } else if (mapping.field.getType() == Date.class) { mapping.field.set(sysUser, raw.getDate(mapping.key)); @@ -198,15 +170,15 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl } } - // 设置拉取时间 sysUser.setPullTime(nowDate); - return sysUser; }).toList(); log.info("用户数据初始化完成,等待插入,当前数据条数{}", latestSourceList.size()); // 插入到数据库 dao().insert(latestSourceList); + // 更新字典数据 + this.updateDict(latestSourceList); // 人员的单位数据和数据库的单位数据比较,如果人员里面有单位不存在,去更新单位数据 List sourceUnitIds = latestSourceList.stream().map(Sys_user_source::getUnitId).distinct().toList(); @@ -225,6 +197,11 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl } } + @Override + public Map pullPostDoctoral() { + return null; + } + @Async private void updateDict(List userSources) { //判断是否要更新在职状态字典 @@ -234,9 +211,7 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl //判断是否要更新学位字典 List sourceAcademicDegrees = userSources.stream().map(Sys_user::getAcademicDegree).filter(StrUtil::isNotBlank).distinct().toList(); //判断是否要更新教职工类别字典 - List personTypes = userSources.stream().map(Sys_user::getPersonType).filter(StrUtil::isNotBlank).distinct().toList(); - //判断是否要更新身份类型字典 - List sourceIdentityTypes = userSources.stream().map(Sys_user::getIdentityType).filter(StrUtil::isNotBlank).distinct().toList(); + List sourcePersonTypes = userSources.stream().map(Sys_user::getPersonType).filter(StrUtil::isNotBlank).distinct().toList(); //系统在职状态字典 List sysUserStates = sysDictService.getSubListByCode("USER_STATE"); @@ -244,10 +219,7 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl List sysEducations = sysDictService.getSubListByCode("USER_EDUCATION"); //系统学位字典 List sysAcademicDegrees = sysDictService.getSubListByCode("USER_ACADEMIC_DEGREE"); - //系统教职工类别字典 - List sysStaffTypes = sysDictService.getSubListByCode("USER_STAFF_TYPE"); - //系统身份类型字典 - List sysIdentityTypes = sysDictService.getSubListByCode("USER_IDENTITY_TYPE"); + List sysPersonTypes = sysDictService.getSubListByCode("USER_PERSON_TYPE"); //系统中不存在的就插入 List insertUserStates = sourceUserStates.stream().filter(state -> sysUserStates.stream().noneMatch(dict -> dict.getCode().equals(state))).map(state -> { @@ -271,6 +243,13 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl return dict; }).toList(); + List insertPersonTypes = sourcePersonTypes.stream().filter(personType -> sysPersonTypes.stream().noneMatch(dict -> dict.getCode().equals(personType))).map(personType -> { + Sys_dict dict = new Sys_dict(); + dict.setCode(personType); + dict.setName(personType); + return dict; + }).toList(); + for (Sys_dict dict : insertUserStates) { sysDictService.saveByParentCode(dict, "USER_STATE"); } @@ -280,63 +259,12 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl for (Sys_dict dict : insertAcademicDegrees) { sysDictService.saveByParentCode(dict, "USER_ACADEMIC_DEGREE"); } + for (Sys_dict dict : insertPersonTypes) { + sysDictService.saveByParentCode(dict, "USER_PERSON_TYPE"); + } sysDictService.clearCache(); } - - @Override - public Map pullPostDoctoral() { - String appId = "1926887238437818370"; - String secret = "32df31fcf4fc43f9a647ee1f47134f36"; - - List allUsers = new ArrayList<>(); - int skip = 0; - int totalCount = 0; - boolean firstRequest = true; - - do { - long ts = System.currentTimeMillis(); - String sign = Base64.encode(DigestUtil.md5Hex(appId + secret + ts, CharsetUtil.CHARSET_UTF_8)); - - HttpRequest httpRequest = HttpUtil.createPost("https://sjzcpt.nnu.edu.cn/cdsp/data-api/v2/DS0040"); - httpRequest.header("Content-Type", "application/json"); - httpRequest.header("appId", appId); - httpRequest.header("timestamp", String.valueOf(ts)); - httpRequest.header("sign", sign); - - HashMap reqBody = new HashMap<>(); - reqBody.put("$count", true); - reqBody.put("$skip", skip); - reqBody.put("$top", 1000); - - httpRequest.body(JSONUtil.toJsonStr(reqBody)); - String resBody = httpRequest.execute().body(); - - JSONObject entries = JSONUtil.parseObj(resBody); - - if (firstRequest) { - totalCount = entries.getInt("@odata.count", 0); - firstRequest = false; - } - - JSONArray value = entries.getJSONArray("value"); - - if (!value.isEmpty()) { - List list = value.stream().map(item -> (JSONObject) item).toList(); - allUsers.addAll(list); - skip += list.size(); - } else { - break; - } - - } while (skip < totalCount); - - Map data = allUsers.stream().filter(v -> v.getStr("进站日期") != null).collect(Collectors.toMap(v -> v.getStr("教职工号"), v -> v.getDate("进站日期"))); - - return data; - - } - @Override public NutMap searchOptions() { Sql sql = Sqls.create(""" @@ -385,73 +313,8 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl return listMap(sql); } - @Override public Map pullFinance() { - // 获取配置文件 接口地址 和 token - DataCenterProperties.Credential credential = dataCenterProperties.credential("finance"); - String url = credential.getUrl(); - String token = credential.getToken(); - - List rawDataList = new ArrayList<>(); - String year = String.valueOf(DateUtil.thisYear()); - String month = String.valueOf(DateUtil.thisMonth() + 1); - - int pageNum = 1; - int pageSize = 1000; - int totalPages = 1; - int totalCount = 0; - do { - HttpRequest httpRequest = HttpUtil.createPost(url); - httpRequest.header(Header.CONTENT_TYPE, "application/json"); - httpRequest.header("Accept-Encoding", "gzip, deflate, br"); - httpRequest.header("X-H3C-TOKEN", token); - Map reqBody = Map.of( - "nf", year, - "yf", month, - "pageNum", pageNum, - "pageSize", pageSize - ); - httpRequest.body(JSONUtil.toJsonStr(reqBody)); - - JSONObject resp = JSONUtil.parseObj(httpRequest.execute().body()); - if (resp.getInt("code") != 0) { - throw new BaseException("获取财务数据失败,错误码: " + resp.getInt("code") + ";错误原因:" + resp.getStr("msg")); - } - - JSONObject data = resp.getJSONObject("data"); - if (pageNum == 1) { - totalCount = data.getInt("total", 0); -// totalPages = data.getInt("pages", 0); - totalPages = (int) Math.ceil((double) totalCount / pageSize); - } - - JSONArray records = data.getJSONArray("records"); - if (CollUtil.isNotEmpty(records)) { - rawDataList.addAll(records.stream().map(v -> (JSONObject) v).toList()); - log.info("数据拉取进度: {}/{}", rawDataList.size(), totalCount); - } - pageNum++; // 只加页码 - } while (pageNum <= totalPages); - - // 接口数据输出 - log.info("数据拉取结果: {}", rawDataList); - - // 最后结果数据 - Map result = new HashMap<>(); - - Map api2db = Arrays.stream(Api2FinanceFiledMap.values()) - .collect(Collectors.toMap(e -> e.apiField, e -> e.dbColumn)); - - for (JSONObject row : rawDataList) { - NutMap nutMap = DataCenterUtil.mapJsonToBean(row, NutMap.class, api2db); - result.put(nutMap.getString("loginname"), nutMap); - } - - // 输出结果 - log.info("财务数据拉取转换结果: {}", result); - - log.info("数据拉取完成,共拉取 {} 条数据", result.size()); - return result; + return null; } } diff --git a/src/main/resources/views/layouts/v4/home/index.html b/src/main/resources/views/layouts/v4/home/index.html index 4ed4c7d..de8c47a 100644 --- a/src/main/resources/views/layouts/v4/home/index.html +++ b/src/main/resources/views/layouts/v4/home/index.html @@ -85,7 +85,7 @@ layout("/layouts/v4/baseLayout.html"){ - + @@ -103,7 +103,7 @@ layout("/layouts/v4/baseLayout.html"){ data(){ return{ websiteNews:{ - notices:[], + grassroots:[], } } }, diff --git a/src/main/resources/views/platform/sys/data/user/pull.html b/src/main/resources/views/platform/sys/data/user/pull.html index df21324..39d117a 100644 --- a/src/main/resources/views/platform/sys/data/user/pull.html +++ b/src/main/resources/views/platform/sys/data/user/pull.html @@ -83,7 +83,7 @@ layout("/layouts/platform.html"){ - + diff --git a/src/main/resources/views/platform/sys/unit/index.html b/src/main/resources/views/platform/sys/unit/index.html index 4145679..1ea345b 100644 --- a/src/main/resources/views/platform/sys/unit/index.html +++ b/src/main/resources/views/platform/sys/unit/index.html @@ -82,11 +82,11 @@ layout("/layouts/platform.html"){ :expand-on-click-node="false" :props="{ children: 'children', label: 'name' }" node-key="id" - default-expand-all @node-click="treeNodeClick" :filter-node-method="filterNode" highlight-current class="custom-tree" + :default-expanded-keys="['0000']" >