Forráskód Böngészése

钉钉通讯录需要转译的情况下的部门同步处理,用dd_deptid做为name

seyason 1 éve
szülő
commit
ae10c57ca7

+ 31 - 21
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DingDingServiceImpl.java

@@ -796,11 +796,11 @@ public class DingDingServiceImpl implements DingDingService {
                 JSONArray deptArray = json.getJSONObject("auth_org_scopes").getJSONArray("authed_dept");
                 //如果授权的是全部公司部门,则递归获取子部门和人员
                 if (deptArray.size() == 1 && deptArray.getLong(0) == 1L) {
-                    getDepartmentList(roleId, roleName, dingding.getCompanyId(), dingding.getCorpid(), accessToken, 1L, addTempUserList);
+                    getDepartmentList(roleId, roleName, dingding.getCompanyId(), dingding.getCorpid(), accessToken, 1L, addTempUserList, dingding);
                 } else {
                     for (int i=0;i<deptArray.size(); i++) {
                         long deptId = deptArray.getLongValue(i);
-                        getDepartmentDetailAndUserList(roleId, roleName, dingding.getCompanyId(), dingding.getCorpid(), accessToken, deptId, addTempUserList);
+                        getDepartmentDetailAndUserList(roleId, roleName, dingding.getCompanyId(), dingding.getCorpid(), accessToken, deptId, addTempUserList, dingding);
                     }
                 }
 
@@ -860,7 +860,6 @@ public class DingDingServiceImpl implements DingDingService {
             if (dept.getDdDeptid() != null) {
                 Optional<DepartmentDingding> first = dingdingDeptList.stream().filter(ddpt -> ddpt.getDdDeptid().equals(dept.getDdDeptid())).findFirst();
                 if (first.isPresent()) {
-
                     boolean changed = false;
                     DepartmentDingding departmentDingding = first.get();
                     if (departmentDingding.getDdParentid() == 1) {
@@ -881,7 +880,8 @@ public class DingDingServiceImpl implements DingDingService {
                         }
                     }
 
-                    if (!departmentDingding.getName().equals(dept.getDepartmentName())) {
+                    //只有明文的才需要处理名称变化
+                    if (dingding.getContactNeedTranslate() == 0 && !departmentDingding.getName().equals(dept.getDepartmentName())) {
                         dept.setDepartmentName(departmentDingding.getName());
                         changed = true;
                     }
@@ -940,11 +940,13 @@ public class DingDingServiceImpl implements DingDingService {
                 User upUser = new User();
                 upUser.setId(oldUser.getId());
                 boolean changed = false;
-                if (oldUser.getName() == null || !oldUser.getName().equals(duser.getName())) {
-                    upUser.setName(duser.getName());
-                    System.out.println("更新用户姓名==" + oldUser.getName());
-                    changed = true;
-                }
+                //暂时不更新姓名,避免出现老钉钉用户姓名被冲掉的情况
+                //仅针对老用户,不需要转译的情况下,才可能出现姓名变更的情况
+//                if (dingding.getContactNeedTranslate() == 0 && duser.getName() != null && (oldUser.getName() == null || !oldUser.getName().equals(duser.getName()))) {
+//                    upUser.setName(duser.getName());
+//                    System.out.println("更新用户姓名==userId==" + oldUser.getId() + ", oldName="+ oldUser.getName()+", newName="+duser.getName());
+//                    changed = true;
+//                }
                 //可能需要更新工号
                 if (!StringUtils.isEmpty(duser.getJobNumber()) && (oldUser.getJobNumber() == null || !oldUser.getJobNumber().equals(duser.getJobNumber()))) {
                     upUser.setJobNumber(duser.getJobNumber());
@@ -1474,7 +1476,7 @@ public class DingDingServiceImpl implements DingDingService {
     }
 
     //获取部门详情和部门下的人员
-    public void getDepartmentDetailAndUserList(int roleId, String roleName, Integer companyId, String corpid, String accessToken, long deptId, List<TempDuser> addTempUserList) {
+    public void getDepartmentDetailAndUserList(int roleId, String roleName, Integer companyId, String corpid, String accessToken, long deptId, List<TempDuser> addTempUserList, CompanyDingding companyDingding) {
         try {
             DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/get");
             OapiV2DepartmentGetRequest req = new OapiV2DepartmentGetRequest();
@@ -1487,12 +1489,13 @@ public class DingDingServiceImpl implements DingDingService {
                 DepartmentDingding departmentDingding = new DepartmentDingding();
                 departmentDingding.setCorpid(corpid);
                 departmentDingding.setDdDeptid(dept.getInteger("dept_id"));
-                departmentDingding.setName(dept.getString("name"));
+                if (companyDingding.getContactNeedTranslate() == 1) {
+                    departmentDingding.setName(dept.getString("dept_id"));
+                } else {
+                    departmentDingding.setName(dept.getString("name"));
+                }
                 departmentDingding.setDdParentid(dept.getInteger("parent_id"));
                 Department department = new Department();
-                if (departmentDingding.getDdDeptid() == 661842181) {
-                    System.out.println("=========zfind 661842181"+departmentDingding.getName());
-                }
                 department.setCompanyId(companyId);
                 //检查,根部门是公司名称,不需要创建部门
                 if (departmentDingding.getDdDeptid() != 1) {
@@ -1507,7 +1510,7 @@ public class DingDingServiceImpl implements DingDingService {
                             departmentDingding.setId(old.getId());
                             //检查名称是否发生变化
                             System.out.println(departmentDingding.getName()+" -- 已存在:"+departmentDingding.getDdDeptid());
-                            if (!old.getName().equals(departmentDingding.getName()) || !old.getDdParentid().equals(departmentDingding.getDdParentid())) {
+                            if (companyDingding.getContactNeedTranslate() == 0 && (!old.getName().equals(departmentDingding.getName()) || !old.getDdParentid().equals(departmentDingding.getDdParentid()))) {
                                 departmentDingdingMapper.updateById(departmentDingding);
                                 System.out.println("更新该部门");
                             }
@@ -1520,7 +1523,7 @@ public class DingDingServiceImpl implements DingDingService {
                 //获取该部门下的人员, 如果是根部门,不会创建,人员的部门id会使用数据库默认的0
                 getDeptUserIdList(corpid, deptId, accessToken, addTempUserList);
                 //获取子部门
-                getDepartmentList(roleId, roleName, companyId, corpid, accessToken, departmentDingding.getDdDeptid(), addTempUserList);
+                getDepartmentList(roleId, roleName, companyId, corpid, accessToken, departmentDingding.getDdDeptid(), addTempUserList, companyDingding);
             }
         } catch (ApiException e) {
             e.printStackTrace();
@@ -1528,7 +1531,7 @@ public class DingDingServiceImpl implements DingDingService {
     }
 
     //获取该部门下的子部门列表,递归下一级子部门
-    public  String getDepartmentList(int roleId, String roleName, Integer companyId, String corpid, String access_token, long parentDeptId, List<TempDuser> addTempUserList) throws ApiException {
+    public  String getDepartmentList(int roleId, String roleName, Integer companyId, String corpid, String access_token, long parentDeptId, List<TempDuser> addTempUserList, CompanyDingding companyDingding) throws ApiException {
         DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/listsub");
         OapiV2DepartmentListsubRequest req = new OapiV2DepartmentListsubRequest();
         req.setDeptId(parentDeptId);
@@ -1544,7 +1547,12 @@ public class DingDingServiceImpl implements DingDingService {
                 DepartmentDingding departmentDingding = new DepartmentDingding();
                 departmentDingding.setCorpid(corpid);
                 departmentDingding.setDdDeptid(dept.getInteger("dept_id"));
-                departmentDingding.setName(dept.getString("name"));
+                //TODO:对于钉钉市场的用户,需要通讯录加密的,没有返回部门名称,用部门id替代
+                if (companyDingding.getContactNeedTranslate() == 1) {
+                    departmentDingding.setName(dept.getString("dept_id"));
+                } else {
+                    departmentDingding.setName(dept.getString("name"));
+                }
                 departmentDingding.setDdParentid(dept.getInteger("parent_id"));
                 if (departmentDingding.getDdDeptid() == 661842181) {
                     System.out.println("=========zfind 661842181"+departmentDingding.getName());
@@ -1559,7 +1567,8 @@ public class DingDingServiceImpl implements DingDingService {
                         departmentDingding.setId(old.getId());
                         //检查名称是否发生变化
                         System.out.println(departmentDingding.getName()+" -- 已存在:"+departmentDingding.getDdDeptid());
-                        if (!old.getName().equals(departmentDingding.getName()) || !old.getDdParentid().equals(departmentDingding.getDdParentid())) {
+                        //只有老用户,不需要转译的情况下才可能更新部门名称
+                        if (companyDingding.getContactNeedTranslate() == 0 && (!old.getName().equals(departmentDingding.getName()) || !old.getDdParentid().equals(departmentDingding.getDdParentid()))) {
                             departmentDingdingMapper.updateById(departmentDingding);
                             System.out.println("更新该部门");
                         }
@@ -1568,7 +1577,7 @@ public class DingDingServiceImpl implements DingDingService {
                     }
                 }
                 //获取子部门的数据
-                getDepartmentList(roleId, roleName, companyId, corpid, access_token, departmentDingding.getDdDeptid(), addTempUserList);
+                getDepartmentList(roleId, roleName, companyId, corpid, access_token, departmentDingding.getDdDeptid(), addTempUserList, companyDingding);
             }
             //获取部门下的人员列表
             getDeptUserIdList(corpid, parentDeptId, access_token, addTempUserList);
@@ -1681,7 +1690,8 @@ public class DingDingServiceImpl implements DingDingService {
             if (!addTempUserList.stream().anyMatch(add->add.getDingdingUserid().equals(dingdingUserid))) {
                 TempDuser duser = new TempDuser();
                 duser.setDingdingUserid(dingdingUserid);
-                duser.setName(userJson.getString("name"));
+                //用userId作为name,方便系统内部处理
+                duser.setName(dingdingUserid);
                 duser.setDdDeptid(ddDeptId);
                 duser.setCorpid(corpid);
                 duser.setJobNumber(userJson.getString("job_number"));

+ 13 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/CompanyDingdingMapper.xml

@@ -27,5 +27,17 @@
     <sql id="Base_Column_List">
         corpid, corp_name, auth_user_id, indate, company_id, access_token, expire_time, agent_id, inner_appkey, inner_appsecret, inner_token, inner_expire_time, web_url, pc_web_url, oa_manager_dingid, sync_contact, contact_need_translate
     </sql>
-
+    <select id="getDingdingCompanyList" resultType="com.management.platform.entity.CompanyDingding">
+        select *
+        from company_dingding
+        left join company
+        ON company_dingding.company_id = company.id
+        where company.expiration_date >= now()
+        <if test="companyIds.size()>0">
+            and company.id in
+            <foreach collection="companyIds" item="item" separator="," open="(" close=")">
+                #{item}
+            </foreach>
+        </if>
+    </select>
 </mapper>