소스 검색

Merge branch 'master' of ssh://10.10.100.21/source/uas-office-integration

RaoMeng 6 년 전
부모
커밋
d1c15dea1f

+ 9 - 2
dingtalk-sdk/src/main/java/com/usoftchina/dingtalk/sdk/AddrBookSdk.java

@@ -9,6 +9,8 @@ import org.springframework.util.CollectionUtils;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * 通讯录
@@ -164,7 +166,7 @@ public class AddrBookSdk extends BaseSdk {
      *
      * @param agentCode    应用code
      * @param departmentId 部门ID
-     * @param fetchChild 包含下级部门的
+     * @param fetchChild   包含下级部门的
      * @return
      */
     public List<OapiUserListbypageResponse.Userlist> getUserList(String agentCode, long departmentId, boolean fetchChild) {
@@ -185,8 +187,13 @@ public class AddrBookSdk extends BaseSdk {
         if (fetchChild) {
             List<Long> subList = getSubDepartmentIdList(agentCode, departmentId);
             if (!CollectionUtils.isEmpty(subList)) {
+                Set<String> userIdSet = userList.stream().map(user -> user.getUserid()).collect(Collectors.toSet());
                 for (Long subId : subList) {
-                    userList.addAll(getUserList(agentCode, subId, fetchChild));
+                    List<OapiUserListbypageResponse.Userlist> tempList = getUserList(agentCode, subId, fetchChild);
+                    if (!CollectionUtils.isEmpty(tempList)) {
+                        userList.addAll(tempList.stream().filter(user -> !userIdSet.contains(user.getUserid())).collect(Collectors.toList()));
+                        userIdSet.addAll(tempList.stream().map(user -> user.getUserid()).collect(Collectors.toSet()));
+                    }
                 }
             }
         }

+ 30 - 0
dingtalk-sdk/src/test/java/com/usoftchina/dingtalk/sdk/test/AddrBookSdkTest.java

@@ -0,0 +1,30 @@
+package com.usoftchina.dingtalk.sdk.test;
+
+import com.alibaba.fastjson.JSON;
+import com.dingtalk.api.response.OapiUserListbypageResponse;
+import com.usoftchina.dingtalk.sdk.AddrBookSdk;
+import org.junit.Test;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+
+/**
+ * @author yingp
+ * @date 2020/3/6
+ */
+public class AddrBookSdkTest extends BaseTest {
+
+    private static AddrBookSdk sdk;
+
+    static {
+        sdk = new AddrBookSdk(properties);
+    }
+
+    @Test
+    public void getUserList() {
+        List<OapiUserListbypageResponse.Userlist> userList = sdk.getUserList("Uas", 1, true);
+        if (!CollectionUtils.isEmpty(userList)) {
+            userList.stream().filter(user -> "13537112306".equals(user.getMobile())).forEach(user -> System.out.println(JSON.toJSONString(user)));
+        }
+    }
+}

+ 4 - 2
dingtalk-sdk/src/test/java/com/usoftchina/dingtalk/sdk/test/BaseTest.java

@@ -15,7 +15,9 @@ public class BaseTest {
 
     static {
         properties = new DingTalkProperties();
-        properties.setCorpId("ding0fb1b0cd2510faf7ffe93478753d9884");
-        properties.setAgents(Arrays.asList(new Agent("Uas", 508343055L, "dingibz8hztjohd4epzp", "Kwkf2aq4k35Crjw2smSAGH9diTj5q--c0Qg4TsyoFxfurOkiIoKzmOd-VCLJ1kEc")));
+//        properties.setCorpId("ding0fb1b0cd2510faf7ffe93478753d9884");
+//        properties.setAgents(Arrays.asList(new Agent("Uas", 508343055L, "dingibz8hztjohd4epzp", "Kwkf2aq4k35Crjw2smSAGH9diTj5q--c0Qg4TsyoFxfurOkiIoKzmOd-VCLJ1kEc")));
+        properties.setCorpId("dingf484d054c7fcbf4435c2f4657eb6378f");
+        properties.setAgents(Arrays.asList(new Agent("Uas", 587373913L, "dingk8oe4y0efafgwe4m", "n_xcuKNsqcID8GvXPVtXlFEWnw4WJLIXqSc4zR67Y8MrLHUYCw20yF_Gifu9ctRi")));
     }
 }

+ 21 - 0
uas-office-dingtalk/src/main/java/com/usoftchina/uas/office/dingtalk/manage/controller/DingTalkAddrBookController.java

@@ -1,15 +1,21 @@
 package com.usoftchina.uas.office.dingtalk.manage.controller;
 
+import com.dingtalk.api.response.OapiDepartmentListResponse;
+import com.dingtalk.api.response.OapiUserListbypageResponse;
+import com.usoftchina.dingtalk.sdk.AddrBookSdk;
 import com.usoftchina.uas.office.dingtalk.service.UasEmployeeService;
 import com.usoftchina.uas.office.dingtalk.service.UasOrgService;
 import com.usoftchina.uas.office.dto.Result;
 import com.usoftchina.uas.office.entity.DataCenter;
 import com.usoftchina.uas.office.jdbc.DataSourceHolder;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
+
 /**
  * @author yingp
  * @date 2020/2/16
@@ -24,6 +30,9 @@ public class DingTalkAddrBookController {
     @Autowired
     private UasEmployeeService employeeService;
 
+    @Autowired
+    private AddrBookSdk addrBookSdk;
+
     @PostMapping(path = "/addrbook/sync")
     public Result syncAll() {
         DataCenter dataCenter = DataCenter.INSTANCE;
@@ -41,4 +50,16 @@ public class DingTalkAddrBookController {
             DataSourceHolder.clear();
         }
     }
+
+    @GetMapping(path = "/addrbook/user")
+    public Result getUserList() {
+        List<OapiUserListbypageResponse.Userlist> userList = addrBookSdk.getUserList("Uas", 1, true);
+        return Result.success(userList);
+    }
+
+    @GetMapping(path = "/addrbook/org")
+    public Result getDepartmentList() {
+        List<OapiDepartmentListResponse.Department> departmentList = addrBookSdk.getDepartmentList("Uas");
+        return Result.success(departmentList);
+    }
 }

+ 3 - 0
uas-office-dingtalk/src/main/java/com/usoftchina/uas/office/dingtalk/service/UasEmployeeService.java

@@ -247,6 +247,9 @@ public class UasEmployeeService extends AbstractService {
             nameGroup = new HashMap<>();
             idMap = new HashMap<>(userList.size());
             for (OapiUserListbypageResponse.Userlist user : userList) {
+                if (idMap.containsKey(user.getUserid())) {
+                    continue;
+                }
                 if (StringUtils.hasText(user.getMobile())) {
                     List<OapiUserListbypageResponse.Userlist> users = mobileGroup.get(user.getMobile());
                     if (null == users) {