From f7e6547b1ee2c085c6c7f9281437b7080f9f5fdd Mon Sep 17 00:00:00 2001 From: liyawei Date: Mon, 8 Aug 2022 17:59:12 +0800 Subject: [PATCH] =?UTF-8?q?people-=E5=90=8C=E6=AD=A5=E7=94=A8=E6=88=B7-?= =?UTF-8?q?=E6=AC=A7=E6=B4=B2=E7=8E=AF=E5=A2=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SyncDataServiceImpl.java | 107 ++++++++++++++++-- .../src/main/resources/application-dev.yml | 5 + 2 files changed, 104 insertions(+), 8 deletions(-) diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SyncDataServiceImpl.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SyncDataServiceImpl.java index d207015c4..cf51a5f4f 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SyncDataServiceImpl.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SyncDataServiceImpl.java @@ -44,6 +44,15 @@ public class SyncDataServiceImpl implements ISyncDataService{ @Value("${people.secret}") private String secret; + @Value("${people.appIdEU}") + private String appIdEU; + + @Value("${people.hostEU}") + private String hostEU; + + @Value("${people.secretEU}") + private String secretEU; + @Autowired private ISysUserService sysUserService; @Autowired @@ -163,22 +172,26 @@ public class SyncDataServiceImpl implements ISyncDataService{ List sysUserList = sysUserService.getPPEmployeeList(); // log.info("查询到的用户信息结果集为:"+JSONObject.toJSONString(userEOList)); for(SysUser user:sysUserList){ - localUserMap.put(user.getThirdId(),user); + if (StringUtils.isNotBlank(user.getThirdId())) { + localUserMap.put(user.getThirdId().toLowerCase(), user); + } } + List ppEmployeeList = new ArrayList<>(); + // 获取people 国内 用户信息 String path = "/people/v1/employee/all-info"; String queryStr = "app_id=" + appId + "&hash_type=sha256&offset=0&limit=100"; String response = getResultDataOfGet(path, queryStr); JSONObject myJson = JSONObject.parseObject(response); log.debug(myJson.toJSONString()); if(!myJson.get("result_code").toString().equals("success")){ - log.error("请求出现异常:"+myJson.get("message")+" "+myJson); + log.error("【国内】请求国内用户数据出现异常:"+myJson.get("message")+" "+myJson); }else{ - log.debug("打印输出本次同步信息返回结果:"+myJson.get("data").toString()); + log.debug("【国内】打印输出本次同步信息返回结果:"+myJson.get("data").toString()); JSONObject resultJson = (JSONObject) myJson.get("data"); //将第一页的账户信息转换为本地dto集合 List userList = JSONObject.parseArray(resultJson.get("list").toString(), JSONObject.class); - List ppEmployeeList = getPPEmployeeList(userList); + ppEmployeeList = getPPEmployeeList(userList, "CN"); //获取总记录数 int total = (int) resultJson.get("amount"); @@ -188,18 +201,57 @@ public class SyncDataServiceImpl implements ISyncDataService{ pageSum += 1; } //循环查询统一认证系统所有账户信息(从第二页开始) - for(int page = 1; page < pageSum; page++){ + for(int page = 1; page < 2; page++){ path = "/people/v1/employee/all-info"; queryStr = "app_id=" + appId + "&hash_type=sha256&limit=100&offset=" + (page*100); response = getResultDataOfGet(path, queryStr); myJson = JSONObject.parseObject(response); - log.debug("打印输出本次同步信息返回结果:"+myJson.get("data").toString()); + log.debug("【国内】打印输出本次同步信息返回结果:"+myJson.get("data").toString()); resultJson = (JSONObject) myJson.get("data"); userList = JSONObject.parseArray(resultJson.get("list").toString(), JSONObject.class); - List currentPPEmployeeList = getPPEmployeeList(userList); + List currentPPEmployeeList = getPPEmployeeList(userList, "CN"); ppEmployeeList.addAll(currentPPEmployeeList); } } + + // 获取people 欧洲 用户信息 + path = "/people/v1/employee/all-info"; + String queryStrEU = "app_id=" + appIdEU + "&hash_type=sha256&offset=0&limit=100"; + String responseEU = getResultDataOfGetEU(path, queryStrEU); + JSONObject myJsonEU = JSONObject.parseObject(responseEU); + log.debug(myJsonEU.toJSONString()); + if(!myJsonEU.get("result_code").toString().equals("success")){ + log.error("【欧洲】请求欧洲用户数据出现异常:"+myJsonEU.get("message")+" "+myJsonEU); + }else{ + log.debug("【欧洲】打印输出本次同步信息返回结果:"+myJsonEU.get("data").toString()); + JSONObject resultJsonEU = (JSONObject) myJsonEU.get("data"); + //将第一页的账户信息转换为本地dto集合 + List userListEU = JSONObject.parseArray(resultJsonEU.get("list").toString(), JSONObject.class); + List currentPPEmployeeListEU = getPPEmployeeList(userListEU, "EN"); + ppEmployeeList.addAll(currentPPEmployeeListEU); + + //获取总记录数 + int totalEU = (int) resultJsonEU.get("amount"); + if(totalEU > 100){ + int pageSumEU = totalEU / 100; // 总页数 + if((totalEU % 100) > 0){ + pageSumEU += 1; + } + //循环查询统一认证系统所有账户信息(从第二页开始) + for(int page = 1; page < pageSumEU; page++){ + path = "/people/v1/employee/all-info"; + queryStrEU = "app_id=" + appIdEU + "&hash_type=sha256&limit=100&offset=" + (page*100); + responseEU = getResultDataOfGetEU(path, queryStrEU); + myJsonEU = JSONObject.parseObject(responseEU); + log.debug("【欧洲】打印输出本次同步信息返回结果:"+myJsonEU.get("data").toString()); + resultJsonEU = (JSONObject) myJsonEU.get("data"); + userListEU = JSONObject.parseArray(resultJsonEU.get("list").toString(), JSONObject.class); + currentPPEmployeeListEU = getPPEmployeeList(userListEU, "EN"); + ppEmployeeList.addAll(currentPPEmployeeListEU); + } + } + } + // 处理同步过来的数据id不同,username相同的情况 creation_time不能为空 // ppEmployeeList.sort(Comparator.comparing(PPEmployee::getCreation_time).reversed()); ppEmployeeList = ppEmployeeList.stream().distinct().collect(Collectors.toList()); // 去重 @@ -249,10 +301,14 @@ public class SyncDataServiceImpl implements ISyncDataService{ } - private static List getPPEmployeeList(List userList) { + private static List getPPEmployeeList(List userList, String region) { List ppEmployeeList = new ArrayList<>(); for (JSONObject user : userList) { PPEmployee userMainInfo = JSONObject.parseObject(user.get("people_info").toString(), PPEmployee.class); + if ("EU".equals(region)) { + String newId = "EU" + userMainInfo.getId(); + userMainInfo.setId(newId); + } List userJobInfoList = JSONObject.parseArray(user.get("people_job_info").toString(), PPEmployee.class); if (CollectionUtil.isNotEmpty(userJobInfoList)) { @@ -315,6 +371,41 @@ public class SyncDataServiceImpl implements ISyncDataService{ // return myJson.get("data").toString(); } + /** + * 发送请求,获取同步数据-欧洲 + * @param uri + * @param queryString + * @return + * @throws IOException + * @throws NoSuchAlgorithmException + * @throws InvalidKeyException + */ + private String getResultDataOfGetEU(String uri, String queryString) throws IOException, NoSuchAlgorithmException, InvalidKeyException { + // 获取签名 + String method ="GET"; + String path = uri; + String queryStr = queryString; + Map header = new HashMap<>(); + String timestamp = HmacSignUtil.getSecondTimestamp(new Date()); + queryStr += "×tamp=" + timestamp; + String sign = HmacSignUtil.getSign(secretEU,method,path,queryStr,header); + String url = hostEU; + url += path + "?"; + url += queryStr; + url += "&sign=" + sign; + Map headerMap = new HashMap<>(); + String response = HttpRequestUtil.getResponseOfGET(url, headerMap); + JSONObject myJson = JSONObject.parseObject(response); + + return myJson.toJSONString(); +// log.debug(myJson.toJSONString()); +// if(!myJson.get("result_code").toString().equals("success")) { +// log.error("请求出现异常:" + myJson.get("result_code") + " " + myJson); +// } +// log.debug("打印输出本次同步信息返回结果:"+myJson.get("data").toString()); +// return myJson.get("data").toString(); + } + public static void main(String[] args) throws IOException, NoSuchAlgorithmException, InvalidKeyException { String path = "/people/v1/employee/all-info"; diff --git a/jero-boot/jero-boot-single-startup/src/main/resources/application-dev.yml b/jero-boot/jero-boot-single-startup/src/main/resources/application-dev.yml index d8af54a19..512e14819 100644 --- a/jero-boot/jero-boot-single-startup/src/main/resources/application-dev.yml +++ b/jero-boot/jero-boot-single-startup/src/main/resources/application-dev.yml @@ -407,6 +407,11 @@ people: # appSecret CN PROD版 secret: 7C3F03170E3ea489df04Ce8DEC7Df4f7 cronJobIsOpen: false + + # appSecret EU PROD版 + appIdEU: 1000233 + secretEU: 32172576EB3a6fd4d483de11C6f60828 + hostEU: http://napoleon-eu.nioint.com ## Feishu Feishu: # 测试