Przeglądaj źródła

update 同步企微用户原始userId

ct 5 dni temu
rodzic
commit
b810a62bab

+ 5 - 4
fs-company/src/main/resources/application-dev.yml

@@ -1,10 +1,11 @@
 # 数据源配置
 # 数据源配置
 spring:
 spring:
-    # redis 配置
+#    devtools:
+#        restart:
+#            enabled: false
     redis:
     redis:
-        # 地址
-        host: localhost
-        # 端口,默认为6379
+#        host: localhost
+        host: 172.27.0.7
         port: 6379
         port: 6379
         # 数据库索引
         # 数据库索引
         database: 0
         database: 0

+ 1 - 0
fs-framework/src/main/java/com/fs/framework/config/SecurityConfig.java

@@ -149,6 +149,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                 .antMatchers("/course/userVideo/videoTranscode").anonymous()
                 .antMatchers("/course/userVideo/videoTranscode").anonymous()
                 .antMatchers("/system/config/getConfigByKey/his.adminUi.config").permitAll()
                 .antMatchers("/system/config/getConfigByKey/his.adminUi.config").permitAll()
                 .antMatchers("/erp/call/**").anonymous()
                 .antMatchers("/erp/call/**").anonymous()
+                .antMatchers("/app/common/**").anonymous()
                 // 除上面外的所有请求全部需要鉴权认证
                 // 除上面外的所有请求全部需要鉴权认证
                 .anyRequest().authenticated()
                 .anyRequest().authenticated()
                 .and()
                 .and()

+ 25 - 0
fs-qw-api/src/main/java/com/fs/app/controller/OpenQwApiController.java

@@ -10,6 +10,7 @@ import com.fs.qw.domain.QwExternalContact;
 import com.fs.qw.param.QwExternalContactAddTagParam;
 import com.fs.qw.param.QwExternalContactAddTagParam;
 import com.fs.qw.param.QwExternalContactUpdateNoteParam;
 import com.fs.qw.param.QwExternalContactUpdateNoteParam;
 import com.fs.qwApi.param.QwUploadImageByCourseParam;
 import com.fs.qwApi.param.QwUploadImageByCourseParam;
+import com.fs.qwApi.service.QwApiService;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
@@ -27,6 +28,9 @@ public class OpenQwApiController extends BaseController {
 
 
     @Autowired
     @Autowired
     private TenantDataSourceUtil tenantDataSourceUtil;
     private TenantDataSourceUtil tenantDataSourceUtil;
+
+    @Autowired
+    private QwApiService qwApiService;
     /**
     /**
      * 同步企微员工
      * 同步企微员工
      * @param tenantId
      * @param tenantId
@@ -169,6 +173,27 @@ public class OpenQwApiController extends BaseController {
         }
         }
     }
     }
 
 
+
+    /**
+     * 加密qwUser的userId
+     */
+    @PostMapping("/getOpenUserid")
+    public R getOpenUserid(@RequestParam("userId") String  userId,
+                                   @RequestParam("corpId") String  corpId,
+                                   @RequestParam("permanentCode") String  permanentCode,
+                                   @RequestParam(value = "tenantId", required = true) Long tenantId){
+        try {
+            return R.ok().put("userId",tenantDataSourceUtil.executeWithResult(tenantId,
+                    () ->  qwApiService.getOpenUserid(qwApiService.getToken(corpId,permanentCode),userId,corpId)));
+        } catch (IllegalArgumentException e) {
+            log.error("加密ExternalUserid,租户不存在或已禁用,tenantId={}", tenantId, e);
+            return R.error("租户不存在或已禁用");
+        } catch (Exception e) {
+            log.error("加密ExternalUserid,tenantId={}", tenantId, e);
+            return R.error("加密ExternalUserid失败: " + e.getMessage());
+        }
+    }
+
     /**
     /**
      * 上传图片
      * 上传图片
      */
      */

+ 1 - 1
fs-service/src/main/java/com/fs/qw/service/IQwUserService.java

@@ -97,7 +97,7 @@ public interface IQwUserService
     */
     */
     List<QwUserVO> selectQwUserListBindVO(QwUserParam qwUser);
     List<QwUserVO> selectQwUserListBindVO(QwUserParam qwUser);
 
 
-    R syncQwUser(String corpId);
+    R syncQwUser(String corpId,Long tenantId);
 
 
     R unlockQwUserLoginCodeUrlTask();
     R unlockQwUserLoginCodeUrlTask();
 
 

+ 1 - 1
fs-service/src/main/java/com/fs/qw/service/IQwUserServiceAsyncHelper.java

@@ -17,7 +17,7 @@ public interface IQwUserServiceAsyncHelper {
      * @param corpId
      * @param corpId
      * @param company
      * @param company
      */
      */
-    void syncQwUserAsync(String corpId, Company company);
+//    void syncQwUserAsync(String corpId, Company company);
 
 
     /**
     /**
      * 同步企微用户名称
      * 同步企微用户名称

+ 27 - 27
fs-service/src/main/java/com/fs/qw/service/impl/QwUserServiceAsyncHelperImpl.java

@@ -104,33 +104,33 @@ public class QwUserServiceAsyncHelperImpl implements IQwUserServiceAsyncHelper {
 
 
     org.slf4j.Logger logger = LoggerFactory.getLogger(getClass());
     org.slf4j.Logger logger = LoggerFactory.getLogger(getClass());
 
 
-    /**
-     * 同步企微用户
-     *
-     * @param corpId
-     * @param company
-     */
-    @Async
-    @Override
-    public void syncQwUserAsync(String corpId, Company company) {
-        try {
-            log.info("同步企微用户Async");
-            List<String> strings = qwCompanyMapper.selectQwCompanyCorpIdListByCompanyId(company.getCompanyId());
-            log.info("strings:{}", strings);
-            log.info("corpId:{}", corpId);
-            for (String string : strings) {
-                if (string.equals(corpId)) {
-                    log.info("瞒住条件");
-                    qwUserService.syncQwUser(string);
-                    qwDeptService.insertOrUpdateQwDept(string);
-                }
-            }
-            log.info("同步完成");
-        } catch (Exception e) {
-            log.error("异步任务执行异常", e);
-            log.info("同步企微员工和部门,同步失败");
-        }
-    }
+//    /**
+//     * 同步企微用户
+//     *
+//     * @param corpId
+//     * @param company
+//     */
+//    @Async
+//    @Override
+//    public void syncQwUserAsync(String corpId, Company company) {
+//        try {
+//            log.info("同步企微用户Async");
+//            List<String> strings = qwCompanyMapper.selectQwCompanyCorpIdListByCompanyId(company.getCompanyId());
+//            log.info("strings:{}", strings);
+//            log.info("corpId:{}", corpId);
+//            for (String string : strings) {
+//                if (string.equals(corpId)) {
+//                    log.info("瞒住条件");
+//                    qwUserService.syncQwUser(string);
+//                    qwDeptService.insertOrUpdateQwDept(string);
+//                }
+//            }
+//            log.info("同步完成");
+//        } catch (Exception e) {
+//            log.error("异步任务执行异常", e);
+//            log.info("同步企微员工和部门,同步失败");
+//        }
+//    }
 
 
     /**
     /**
      * 同步企微用户名称
      * 同步企微用户名称

+ 57 - 15
fs-service/src/main/java/com/fs/qw/service/impl/QwUserServiceImpl.java

@@ -3,6 +3,7 @@ package com.fs.qw.service.impl;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.http.HttpRequest;
 import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -44,6 +45,7 @@ import com.fs.qw.utils.RSAUtils;
 import com.fs.qw.vo.*;
 import com.fs.qw.vo.*;
 import com.fs.qwApi.Result.QwOpenidResult;
 import com.fs.qwApi.Result.QwOpenidResult;
 import com.fs.qwApi.Result.QwUploadImgResult;
 import com.fs.qwApi.Result.QwUploadImgResult;
+import com.fs.qwApi.config.OpenQwConfig;
 import com.fs.qwApi.domain.QwUserIdResult;
 import com.fs.qwApi.domain.QwUserIdResult;
 import com.fs.qwApi.domain.inner.DeptUser;
 import com.fs.qwApi.domain.inner.DeptUser;
 import com.fs.qwApi.param.QwOpenidByUserParams;
 import com.fs.qwApi.param.QwOpenidByUserParams;
@@ -65,6 +67,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 
 
 import java.io.*;
 import java.io.*;
+import java.net.SocketTimeoutException;
 import java.net.URL;
 import java.net.URL;
 import java.security.KeyFactory;
 import java.security.KeyFactory;
 import java.security.PrivateKey;
 import java.security.PrivateKey;
@@ -935,30 +938,69 @@ public class QwUserServiceImpl implements IQwUserService
     }
     }
 
 
     @Override
     @Override
-    public R syncQwUser(String corpId) {
+    public R syncQwUser(String corpId,Long tenantId) {
         QwUserIdResult userList = qwApiService.getUserList(corpId);
         QwUserIdResult userList = qwApiService.getUserList(corpId);
         List<DeptUser> deptUser = userList.getDept_user();
         List<DeptUser> deptUser = userList.getDept_user();
         log.info("返回数据:{}", JSON.toJSONString(userList));
         log.info("返回数据:{}", JSON.toJSONString(userList));
         log.info("同步用户数量:{}", deptUser.size());
         log.info("同步用户数量:{}", deptUser.size());
         QwCompany qwCompany = iQwCompanyService.selectQwCompanyByCorpId(corpId);
         QwCompany qwCompany = iQwCompanyService.selectQwCompanyByCorpId(corpId);
         for (DeptUser user : deptUser) {
         for (DeptUser user : deptUser) {
-            QwUser qw=qwUserMapper.selectQwUserByCorpIdAndUserId(corpId,qwApiService.getOpenUserid(qwApiService.getToken(corpId,qwCompany.getPermanentCode()),user.getUserid(),corpId));
+            String userid = user.getUserid();
+            String openUserIdRedisKey = "corpId:" + userid;
+            String  redisResult= redisCache.getCacheObject(openUserIdRedisKey);
+            String openUserId = "";
+            if (StringUtils.isNotBlank(redisResult)){
+                openUserId = redisResult;
+            } else {
+                if (userid != null && tenantId != null && qwCompany.getPermanentCode() != null) {
+                    // 远程调用 fs-qw-api 同步企微用户
+                    String url = OpenQwConfig.baseApi + "/getOpenUserid?userId=" + userid + "&corpId=" + corpId + "&permanentCode=" + qwCompany.getPermanentCode() + "&tenantId=" + tenantId;
+                    try {
+                        String result = HttpUtil.createPost(url)
+                                .execute()
+                                .body();
+                        if (StringUtils.isNotBlank(result)) {
+                            R r = JSON.parseObject(result, R.class);
+                            if (!"200".equals(r.get("code").toString())) {
+                                log.error("企微用户获取加密userId,HTTP状态码: {}", r.get("code").toString());
+                                return R.error("企微用户获取加密userId,服务返回状态码: " + r.get("code").toString());
+                            } else {
+                                openUserId = r.get("userId").toString();
+                            }
+                        }
+
+                    } catch (Exception e) {
+                        log.error("企微用户获取加密userId异常, url={}", url, e);
+                        if (e.getCause() instanceof SocketTimeoutException) {
+                            return R.error("企微用户获取加密userId超时,请稍后重试");
+                        }
+                        return R.error("企微用户获取加密userId失败: " + e.getMessage());
+                    }
+                }
+            }
+
+            if (StringUtils.isNotBlank(openUserId)) {
+                QwUser qw=qwUserMapper.selectQwUserByCorpIdAndUserId(corpId, openUserId);
 //            String serverQwUserName = qwApiService.getServerQwUserName(corpId, qwCompany.getOpenSecret(), user.getUserid(),qwCompany.getPermanentCode());
 //            String serverQwUserName = qwApiService.getServerQwUserName(corpId, qwCompany.getOpenSecret(), user.getUserid(),qwCompany.getPermanentCode());
 //            log.info("同步用户名称:{}", serverQwUserName);
 //            log.info("同步用户名称:{}", serverQwUserName);
-            QwUser qwUser = new QwUser();
-            qwUser.setQwUserId(user.getUserid());
-            qwUser.setDepartment(user.getDepartment().toString());
+                QwUser qwUser = new QwUser();
+                qwUser.setQwUserId(userid);
+                qwUser.setDepartment(user.getDepartment().toString());
 //            qwUser.setQwUserName(serverQwUserName);
 //            qwUser.setQwUserName(serverQwUserName);
-            qwUser.setCorpId(corpId);
-            QwOpenidByUserParams param=new QwOpenidByUserParams();
-            param.setUserid(user.getUserid());
-            QwOpenidResult qwOpenidResult = qwApiService.useridToOpenid(param, corpId);
-            qwUser.setOpenid(qwOpenidResult.getOpenid());
-             if (qw!=null){
-                 qwUser.setId(qw.getId());
-                 qwUser.setIsDel(0);
-                 qwUserMapper.updateQwUser(qwUser);
-             }
+                qwUser.setCorpId(corpId);
+//            QwOpenidByUserParams param=new QwOpenidByUserParams();
+//            param.setUserid(user.getUserid());
+//            QwOpenidResult qwOpenidResult = qwApiService.useridToOpenid(param, corpId);
+//            qwUser.setOpenid(qwOpenidResult.getOpenid());
+                if (qw!=null){
+                    qwUser.setId(qw.getId());
+                    qwUser.setIsDel(0);
+                    qwUserMapper.updateQwUser(qwUser);
+                }
+            } else {
+                log.error("企微用户获取加密userId为空, userid={}", userid);
+            }
+
         }
         }
         return R.ok();
         return R.ok();
     }
     }

+ 2 - 1
fs-service/src/main/java/com/fs/qwApi/config/OpenQwConfig.java

@@ -6,5 +6,6 @@ public interface OpenQwConfig {
     String api ="http://newsaasqwapi.ylrzcloud.com";
     String api ="http://newsaasqwapi.ylrzcloud.com";
 //    String api ="http://127.0.0.1:8007";
 //    String api ="http://127.0.0.1:8007";
 //    String taskApi ="192.168.0.64:7006";
 //    String taskApi ="192.168.0.64:7006";
-    String taskApi ="127.0.0.1:7006";
+    String taskApi ="http://172.27.0.7:7006";
+//    String taskApi ="http://129.28.41.190:7006";
 }
 }

+ 1 - 1
fs-task/src/main/java/com/fs/task/controller/TaskManualController.java

@@ -191,7 +191,7 @@ public class TaskManualController {
             log.info("开始同步企微用户,租户={}, corpId={}", tenantInfo.getId(), qwCompany.getCorpId());
             log.info("开始同步企微用户,租户={}, corpId={}", tenantInfo.getId(), qwCompany.getCorpId());
 
 
             // 执行同步操作
             // 执行同步操作
-            qwUserService.syncQwUser(qwCompany.getCorpId());
+            qwUserService.syncQwUser(qwCompany.getCorpId(),tenantInfo.getId());
 
 
             log.info("同步完成,租户={}", tenantInfo.getId());
             log.info("同步完成,租户={}", tenantInfo.getId());
 
 

+ 1 - 1
fs-task/src/main/java/com/fs/task/jobs/QwUserAsyncTask.java

@@ -62,7 +62,7 @@ public class QwUserAsyncTask {
                 log.info("开始同步企微用户,租户={}, corpId={}", tenantInfo.getId(), qwCompany.getCorpId());
                 log.info("开始同步企微用户,租户={}, corpId={}", tenantInfo.getId(), qwCompany.getCorpId());
 
 
                 // 执行同步操作
                 // 执行同步操作
-                qwUserService.syncQwUser(qwCompany.getCorpId());
+                qwUserService.syncQwUser(qwCompany.getCorpId(),tenantInfo.getId());
 //                qwDeptService.insertOrUpdateQwDept(qwCompany.getCorpId());
 //                qwDeptService.insertOrUpdateQwDept(qwCompany.getCorpId());
 
 
                 log.info("同步完成,租户={}", tenantInfo.getId());
                 log.info("同步完成,租户={}", tenantInfo.getId());

+ 1 - 1
fs-task/src/main/resources/application-dev.yml

@@ -2,7 +2,7 @@
 spring:
 spring:
     # redis 配置
     # redis 配置
     redis:
     redis:
-        #host: localhost
+#        host: localhost
         host: 172.27.0.7
         host: 172.27.0.7
         port: 6379
         port: 6379
         database: 0
         database: 0