From 1e911f50ffdca3b1225c384ac42be296b674289c Mon Sep 17 00:00:00 2001 From: wangzhijiang <12345678> Date: Tue, 3 Jan 2023 13:52:28 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9F=A5=E8=AF=86=E5=88=86=E4=BA=AB-=E8=81=94?= =?UTF-8?q?=E7=B3=BB=E5=88=9B=E5=BB=BA=E4=BA=BA-=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E9=A3=9E=E4=B9=A6=E4=BF=A1=E6=81=AF=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E4=BF=AE=E6=94=B9=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../feishu/service/IFeishuService.java | 6 + .../service/impl/FeishuServiceImpl.java | 105 ++++++++++++++---- 2 files changed, 91 insertions(+), 20 deletions(-) diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/feishu/service/IFeishuService.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/feishu/service/IFeishuService.java index 61fba821a..3d1eb5108 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/feishu/service/IFeishuService.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/feishu/service/IFeishuService.java @@ -116,4 +116,10 @@ public interface IFeishuService { * @return */ Result getLarkApplinkByUserName(JSONObject json); + + /** + * 根据邮箱,获取来自飞书的用户信息 + * @param emailList + */ + JSONObject getUserInfoFromLarkByEmainList(List emailList) throws IOException ; } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/feishu/service/impl/FeishuServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/feishu/service/impl/FeishuServiceImpl.java index e3ed71c71..f493376e1 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/feishu/service/impl/FeishuServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/feishu/service/impl/FeishuServiceImpl.java @@ -1296,32 +1296,64 @@ public class FeishuServiceImpl implements IFeishuService { throw new JeroBootException("User not found" + userName + ", please check!"); } } - String phone = sysUserInfo.getPhone(); - JSONObject responseJson = null; - List phoneList = Arrays.asList(phone.split(",")); - try { - // 根据用户手机号获取该用户在飞书中的信息 - responseJson = this.getUserInfoFromLarkByPhoneList(phoneList); - }catch (Exception ex){ - ex.printStackTrace(); - log.error("根据用户手机号获取该用户在飞书中的信息失败:" + ex.getMessage()); - } + String phone = sysUserInfo.getTelephone(); + String email = sysUserInfo.getEmail(); + if(StringUtils.isNotEmpty(phone)){ + List phoneList = Arrays.asList(phone.split(",")); + try { + // 根据用户手机号获取该用户在飞书中的信息 + responseJson = this.getUserInfoFromLarkByPhoneList(phoneList); + }catch (Exception ex){ + ex.printStackTrace(); + log.error("根据用户手机号获取该用户在飞书中的信息失败:" + ex.getMessage()); - JSONArray userJsonArray = JSONObject.parseObject(JSONObject.toJSONString(responseJson.get("data"))).getJSONArray("user_list"); - Map userJsonMap = null; - for (Object userJson : userJsonArray) { - userJsonMap = JSONObject.parseObject(JSONObject.toJSONString(userJson),Map.class); - if(userJsonMap.get("user_id") != null){ - if(StringUtils.isNotEmpty(userJsonMap.get("user_id").toString()) && StringUtils.equals(userJsonMap.get("mobile").toString(),phone)){ - result = this.appLinkUrl + userJsonMap.get("user_id").toString(); - break; + if(StringUtils.equals(cut,CutEnum.CN.getValue())){ + throw new JeroBootException("暂无该用户联系方式"); + }else if(StringUtils.equals(cut,CutEnum.EN.getValue())){ + throw new JeroBootException("No contact information for this user is available."); } - }else { - throw new JeroBootException("用户:" + userName + ",在飞书中未找到对应user_id信息"); + } + }else if(StringUtils.isNotEmpty(email)){ + List emailList = Arrays.asList(email.split(",")); + try { + // 根据用户邮箱获取该用户在飞书中的信息 + responseJson = this.getUserInfoFromLarkByEmainList(emailList); + }catch (Exception ex){ + ex.printStackTrace(); + log.error("根据用户邮箱获取该用户在飞书中的信息失败:" + ex.getMessage()); + + if(StringUtils.equals(cut,CutEnum.CN.getValue())){ + throw new JeroBootException("暂无该用户联系方式"); + }else if(StringUtils.equals(cut,CutEnum.EN.getValue())){ + throw new JeroBootException("No contact information for this user is available."); + } + } + }else { + if(StringUtils.equals(cut,CutEnum.CN.getValue())){ + throw new JeroBootException("暂无该用户联系方式"); + }else if(StringUtils.equals(cut,CutEnum.EN.getValue())){ + throw new JeroBootException("No contact information for this user is available."); } } + + if(responseJson != null){ + JSONArray userJsonArray = JSONObject.parseObject(JSONObject.toJSONString(responseJson.get("data"))).getJSONArray("user_list"); + Map userJsonMap = null; + for (Object userJson : userJsonArray) { + userJsonMap = JSONObject.parseObject(JSONObject.toJSONString(userJson),Map.class); + if(userJsonMap.get("user_id") != null){ + if(StringUtils.isNotEmpty(userJsonMap.get("user_id").toString()) && StringUtils.equals(userJsonMap.get("mobile").toString(),phone)){ + result = this.appLinkUrl + userJsonMap.get("user_id").toString(); + break; + } + }else { + throw new JeroBootException("用户:" + userName + ",在飞书中未找到对应user_id信息"); + } + } + } + if(StringUtils.isNotEmpty(result)){ return Result.OK("获取" +userName+ "用户飞书AppLink成功!",result); }else { @@ -1329,4 +1361,37 @@ public class FeishuServiceImpl implements IFeishuService { } } + /** + * 根据邮箱,获取来自飞书的用户信息 + * @param emailList + * @throws IOException + */ + @Override + public JSONObject getUserInfoFromLarkByEmainList(List emailList) throws IOException { + + String token = getTenantAccessToken(); + // 设置请求头 + Map headerMap = new HashMap<>(); + headerMap.put("Authorization", "Bearer " + token); + headerMap.put("Content-Type", "application/json; charset=utf-8"); + + // 设置请求参数 + JSONObject paramsMap = new JSONObject(); + paramsMap.put("emails", emailList); + + // 发送请求给飞书 + String response = null; + try { + response = HttpRequestUtil.getResponseOfPOST(getUserInfoUrl, headerMap, paramsMap.toJSONString()); + } catch (IOException e) { + e.printStackTrace(); + } + // 获取返回结果 + JSONObject responseJson = JSONObject.parseObject(response); + if(!responseJson.get("code").toString().equals("0")) { + log.error("请求出现异常:" + responseJson.get("msg") + " " + responseJson); + } + return responseJson; + } + }