|
|
@@ -5,6 +5,7 @@ import com.fs.app.service.OpenQwApiService;
|
|
|
import com.fs.common.core.domain.R;
|
|
|
import com.fs.common.core.redis.RedisCache;
|
|
|
import com.fs.common.utils.SecurityUtils;
|
|
|
+import com.fs.framework.datasource.TenantDataSourceUtil;
|
|
|
import com.fs.qw.domain.QwCompany;
|
|
|
import com.fs.qw.domain.QwDept;
|
|
|
import com.fs.qw.domain.QwExternalContact;
|
|
|
@@ -77,115 +78,94 @@ public class OpenQwApiServiceImpl implements OpenQwApiService {
|
|
|
@Autowired
|
|
|
private RedisCache redisCache;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private TenantDataSourceUtil tenantDataSourceUtil;
|
|
|
+
|
|
|
@Override
|
|
|
- public R getSyncQwUser(String corpId) {
|
|
|
- QwUserIdResult userList = qwApiService.getUserList(corpId);
|
|
|
- List<DeptUser> deptUser = userList.getDept_user();
|
|
|
- log.info("返回数据:{}", JSON.toJSONString(userList));
|
|
|
- log.info("同步用户数量:{}", deptUser.size());
|
|
|
- QwCompany qwCompany = iQwCompanyService.selectQwCompanyByCorpId(corpId);
|
|
|
- String accessToken = qwApiService.getToken(corpId, qwCompany.getPermanentCode());
|
|
|
- for (DeptUser user : deptUser) {
|
|
|
- QwUser qw = qwUserMapper.selectQwUserByCorpIdAndUserId(corpId, user.getUserid());
|
|
|
- String serverQwUserName = qwApiService.getServerQwUserName(corpId, qwCompany.getOpenSecret(), user.getUserid(), qwCompany.getPermanentCode());
|
|
|
- log.info("同步用户名称:{}", serverQwUserName);
|
|
|
- QwUser qwUser = new QwUser();
|
|
|
- qwUser.setQwUserId(user.getUserid());
|
|
|
- qwUser.setDepartment(user.getDepartment().toString());
|
|
|
- qwUser.setQwUserName(serverQwUserName);
|
|
|
- qwUser.setCorpId(corpId);
|
|
|
- QwOpenidByUserParams param = new QwOpenidByUserParams();
|
|
|
- param.setUserid(user.getUserid());
|
|
|
- QwOpenidResult qwOpenidResult = qwApiService.useridToOpenid(param, corpId);
|
|
|
- qwUser.setOpenid(qwOpenidResult.getOpenid());
|
|
|
-
|
|
|
- qwUser.setQwOpenUserid(qwApiService.getOpenUserid(accessToken, user.getUserid(), corpId));
|
|
|
- if (qw == null) {
|
|
|
- qwUserMapper.insertQwUser(qwUser);
|
|
|
- } else {
|
|
|
- qwUser.setId(qw.getId());
|
|
|
- qwUser.setIsDel(0);
|
|
|
- qwUserMapper.updateQwUser(qwUser);
|
|
|
+ public R getSyncQwUser(Long tenantId, String corpId) {
|
|
|
+ return tenantDataSourceUtil.executeWithResult(tenantId, () -> {
|
|
|
+ QwUserIdResult userList = qwApiService.getUserList(corpId);
|
|
|
+ List<DeptUser> deptUser = userList.getDept_user();
|
|
|
+ log.info("返回数据:{}", JSON.toJSONString(userList));
|
|
|
+ log.info("同步用户数量:{}", deptUser.size());
|
|
|
+ QwCompany qwCompany = iQwCompanyService.selectQwCompanyByCorpId(corpId);
|
|
|
+ String accessToken = qwApiService.getToken(corpId, qwCompany.getPermanentCode());
|
|
|
+ for (DeptUser user : deptUser) {
|
|
|
+ QwUser qw = qwUserMapper.selectQwUserByCorpIdAndUserId(corpId, user.getUserid());
|
|
|
+ String serverQwUserName = qwApiService.getServerQwUserName(corpId, qwCompany.getOpenSecret(), user.getUserid(), qwCompany.getPermanentCode());
|
|
|
+ log.info("同步用户名称:{}", serverQwUserName);
|
|
|
+ QwUser qwUser = new QwUser();
|
|
|
+ qwUser.setQwUserId(user.getUserid());
|
|
|
+ qwUser.setDepartment(user.getDepartment().toString());
|
|
|
+ qwUser.setQwUserName(serverQwUserName);
|
|
|
+ qwUser.setCorpId(corpId);
|
|
|
+ QwOpenidByUserParams param = new QwOpenidByUserParams();
|
|
|
+ param.setUserid(user.getUserid());
|
|
|
+ QwOpenidResult qwOpenidResult = qwApiService.useridToOpenid(param, corpId);
|
|
|
+ qwUser.setOpenid(qwOpenidResult.getOpenid());
|
|
|
+
|
|
|
+ qwUser.setQwOpenUserId(qwApiService.getOpenUserid(accessToken, user.getUserid(), corpId));
|
|
|
+ if (qw == null) {
|
|
|
+ qwUserMapper.insertQwUser(qwUser);
|
|
|
+ } else {
|
|
|
+ qwUser.setId(qw.getId());
|
|
|
+ qwUser.setIsDel(0);
|
|
|
+ qwUserMapper.updateQwUser(qwUser);
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
- return R.ok();
|
|
|
+ return R.ok();
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public R getSyncQwDept(String corpId) {
|
|
|
- QwDeptResult departmentList = qwApiService.getDepartmentList(corpId);
|
|
|
-
|
|
|
- if (departmentList.getErrcode() == 0) {
|
|
|
- List<Department> department = departmentList.getDepartment();
|
|
|
- for (Department dept : department) {
|
|
|
- QwDept qwDept = new QwDept();
|
|
|
- qwDept.setDeptId(Long.valueOf(dept.getId()));
|
|
|
- qwDept.setDeptName(dept.getName());
|
|
|
- qwDept.setCorpId(corpId);
|
|
|
- qwDept.setParentid(Long.valueOf(dept.getParentid()));
|
|
|
- int i = qwDeptMapper.insertOrUpdateQwDept(qwDept);
|
|
|
+ public R getSyncQwDept(Long tenantId, String corpId) {
|
|
|
+ return tenantDataSourceUtil.executeWithResult(tenantId, () -> {
|
|
|
+ QwDeptResult departmentList = qwApiService.getDepartmentList(corpId);
|
|
|
+
|
|
|
+ if (departmentList.getErrcode() == 0) {
|
|
|
+ List<Department> department = departmentList.getDepartment();
|
|
|
+ for (Department dept : department) {
|
|
|
+ QwDept qwDept = new QwDept();
|
|
|
+ qwDept.setDeptId(Long.valueOf(dept.getId()));
|
|
|
+ qwDept.setDeptName(dept.getName());
|
|
|
+ qwDept.setCorpId(corpId);
|
|
|
+ qwDept.setParentid(Long.valueOf(dept.getParentid()));
|
|
|
+ int i = qwDeptMapper.insertOrUpdateQwDept(qwDept);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ return R.error("同步失败:" + departmentList.getErrmsg());
|
|
|
}
|
|
|
- }else {
|
|
|
- return R.error("同步失败:"+departmentList.getErrmsg());
|
|
|
- }
|
|
|
|
|
|
- return null;
|
|
|
+ return R.ok();
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public R getSyncName(String corpId) {
|
|
|
- QwCompany qwCompany = iQwCompanyService.selectQwCompanyByCorpId(corpId);
|
|
|
- List<QwUser> qwUsers=qwUserMapper.selectQwUserByCorpId(corpId);
|
|
|
- if (qwCompany == null) {
|
|
|
- log.warn("syncQwUserName skipped: corpId={} 对应企业为空", corpId);
|
|
|
- return R.error("企业信息不存在");
|
|
|
- }
|
|
|
- if (qwUsers == null || qwUsers.isEmpty()) {
|
|
|
- log.info("syncQwUserName no users: corpId={}", corpId);
|
|
|
- return R.ok();
|
|
|
- }
|
|
|
- String currentDataSource = getCurrentDataSourceType();
|
|
|
- Long tenantId = SecurityUtils.getTenantId();
|
|
|
- String currentTraceId = MDC.get("traceId");
|
|
|
- log.info("syncQwUserName start: corpId={}, tenantId={}, dataSource={}, userCount={}",
|
|
|
- corpId, tenantId, currentDataSource, qwUsers.size());
|
|
|
- ExecutorService executorService = Executors.newFixedThreadPool(50);
|
|
|
- for (QwUser user : qwUsers) {
|
|
|
- executorService.submit(() -> {
|
|
|
- try {
|
|
|
- if (currentDataSource != null && !currentDataSource.isEmpty()) {
|
|
|
- setCurrentDataSourceType(currentDataSource);
|
|
|
- MDC.put("dataSource", currentDataSource);
|
|
|
- }
|
|
|
- if (tenantId != null) {
|
|
|
- MDC.put("tenantId", String.valueOf(tenantId));
|
|
|
- }
|
|
|
- if (currentTraceId != null && !currentTraceId.isEmpty()) {
|
|
|
- MDC.put("traceId", currentTraceId);
|
|
|
- }
|
|
|
- updateQwUserName(user, qwCompany);
|
|
|
- } finally {
|
|
|
- clearCurrentDataSourceType();
|
|
|
- MDC.remove("dataSource");
|
|
|
- MDC.remove("tenantId");
|
|
|
- MDC.remove("traceId");
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
- executorService.shutdown(); // 关闭线程池,等待所有任务完成
|
|
|
- try {
|
|
|
- if (!executorService.awaitTermination(5, TimeUnit.MINUTES)) {
|
|
|
- log.warn("syncQwUserName timeout: corpId={}, tenantId={}, dataSource={}",
|
|
|
- corpId, tenantId, currentDataSource);
|
|
|
+ public R getSyncName(Long tenantId, String corpId) {
|
|
|
+ return tenantDataSourceUtil.executeWithResult(tenantId, () -> {
|
|
|
+ QwCompany qwCompany = iQwCompanyService.selectQwCompanyByCorpId(corpId);
|
|
|
+ List<QwUser> qwUsers = qwUserMapper.selectQwUserByCorpId(corpId);
|
|
|
+ if (qwCompany == null) {
|
|
|
+ log.warn("syncQwUserName skipped: corpId={} 对应企业为空", corpId);
|
|
|
+ return R.error("企业信息不存在");
|
|
|
}
|
|
|
- } catch (InterruptedException e) {
|
|
|
- Thread.currentThread().interrupt();
|
|
|
- log.warn("syncQwUserName interrupted: corpId={}, tenantId={}, dataSource={}",
|
|
|
- corpId, tenantId, currentDataSource, e);
|
|
|
- }
|
|
|
- log.info("syncQwUserName finish: corpId={}, tenantId={}, dataSource={}",
|
|
|
- corpId, tenantId, currentDataSource);
|
|
|
- return R.ok();
|
|
|
+ if (qwUsers == null || qwUsers.isEmpty()) {
|
|
|
+ log.info("syncQwUserName no users: corpId={}", corpId);
|
|
|
+ return R.ok();
|
|
|
+ }
|
|
|
+ String currentDataSource = getCurrentDataSourceType();
|
|
|
+ log.info("syncQwUserName start: corpId={}, tenantId={}, dataSource={}, userCount={}",
|
|
|
+ corpId, tenantId, currentDataSource, qwUsers.size());
|
|
|
+ ExecutorService executorService = Executors.newFixedThreadPool(50);
|
|
|
+ for (QwUser user : qwUsers) {
|
|
|
+ executorService.submit(() -> {
|
|
|
+ updateQwUserName(user, qwCompany);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ log.info("syncQwUserName finish: corpId={}, tenantId={}, dataSource={}",
|
|
|
+ corpId, tenantId, currentDataSource);
|
|
|
+ return R.ok();
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
@Override
|