|
|
@@ -0,0 +1,61 @@
|
|
|
+package com.qqflow.engine.domain.ewechat.service;
|
|
|
+
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.qqflow.engine.domain.ewechat.api.EnterpriseWechatApi;
|
|
|
+import com.qqflow.engine.domain.ewechat.mapper.EnterpriseWechatDepartmentMapper;
|
|
|
+import com.qqflow.engine.domain.ewechat.mapper.EnterpriseWechatMemberMapper;
|
|
|
+import com.qqflow.engine.domain.ewechat.model.enterprise.rsp.EnterpriseWechatUserListRsp;
|
|
|
+import com.qqflow.engine.domain.ewechat.po.EnterpriseWechatDepartment;
|
|
|
+import com.qqflow.engine.domain.ewechat.po.EnterpriseWechatMember;
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 企微通讯录同步服务(懒加载:先查本地DB,没有再调企微接口同步后返回)
|
|
|
+ */
|
|
|
+@Slf4j
|
|
|
+@Service
|
|
|
+@RequiredArgsConstructor
|
|
|
+public class WecomContactSyncService {
|
|
|
+
|
|
|
+ private final EnterpriseWechatDepartmentMapper departmentMapper;
|
|
|
+ private final EnterpriseWechatMemberMapper memberMapper;
|
|
|
+ private final EnterpriseWechatApi enterpriseWechatApi;
|
|
|
+ private final EnterpriseWechatMsgService wechatMsgService;
|
|
|
+
|
|
|
+ /** 获取子部门列表(从本地DB查询) */
|
|
|
+ public List<EnterpriseWechatDepartment> listSubDepartments(Long parentId) {
|
|
|
+ return departmentMapper.selectList(
|
|
|
+ new LambdaQueryWrapper<EnterpriseWechatDepartment>().eq(EnterpriseWechatDepartment::getParentId, parentId));
|
|
|
+ }
|
|
|
+
|
|
|
+ /** 获取部门成员(懒加载) */
|
|
|
+ public List<EnterpriseWechatMember> listDepartmentMembers(Long departmentId) {
|
|
|
+ List<EnterpriseWechatMember> cached = memberMapper.selectList(
|
|
|
+ new LambdaQueryWrapper<EnterpriseWechatMember>().eq(EnterpriseWechatMember::getDepartmentId, departmentId));
|
|
|
+ if (!cached.isEmpty()) return cached;
|
|
|
+
|
|
|
+ String accessToken = wechatMsgService.getCorpAccessToken();
|
|
|
+ if (accessToken == null) return List.of();
|
|
|
+
|
|
|
+ EnterpriseWechatUserListRsp rsp = enterpriseWechatApi.listDepartmentUsers(accessToken, departmentId);
|
|
|
+ if (rsp == null || rsp.getUserlist() == null) return List.of();
|
|
|
+
|
|
|
+ List<EnterpriseWechatMember> members = new ArrayList<>();
|
|
|
+ for (var u : rsp.getUserlist()) {
|
|
|
+ EnterpriseWechatMember wm = new EnterpriseWechatMember();
|
|
|
+ wm.setUserid(u.getUserid());
|
|
|
+ wm.setName(u.getName() != null ? u.getName() : u.getUserid());
|
|
|
+ wm.setDepartmentId(departmentId);
|
|
|
+ wm.setOpenUserid(u.getOpenUserid());
|
|
|
+ memberMapper.insert(wm);
|
|
|
+ members.add(wm);
|
|
|
+ }
|
|
|
+ return members;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|