WecomContactSyncService.java 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package com.qqflow.engine.domain.ewechat.service;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.qqflow.engine.domain.ewechat.api.EnterpriseWechatApi;
  4. import com.qqflow.engine.domain.ewechat.mapper.EnterpriseWechatDepartmentMapper;
  5. import com.qqflow.engine.domain.ewechat.mapper.EnterpriseWechatMemberMapper;
  6. import com.qqflow.engine.domain.ewechat.model.enterprise.rsp.EnterpriseWechatUserListRsp;
  7. import com.qqflow.engine.domain.ewechat.po.EnterpriseWechatDepartment;
  8. import com.qqflow.engine.domain.ewechat.po.EnterpriseWechatMember;
  9. import lombok.RequiredArgsConstructor;
  10. import lombok.extern.slf4j.Slf4j;
  11. import org.springframework.stereotype.Service;
  12. import java.util.ArrayList;
  13. import java.util.List;
  14. /**
  15. * 企微通讯录同步服务(懒加载:先查本地DB,没有再调企微接口同步后返回)
  16. */
  17. @Slf4j
  18. @Service
  19. @RequiredArgsConstructor
  20. public class WecomContactSyncService {
  21. private final EnterpriseWechatDepartmentMapper departmentMapper;
  22. private final EnterpriseWechatMemberMapper memberMapper;
  23. private final EnterpriseWechatApi enterpriseWechatApi;
  24. private final EnterpriseWechatMsgService wechatMsgService;
  25. /** 获取子部门列表(从本地DB查询) */
  26. public List<EnterpriseWechatDepartment> listSubDepartments(Long parentId) {
  27. return departmentMapper.selectList(
  28. new LambdaQueryWrapper<EnterpriseWechatDepartment>().eq(EnterpriseWechatDepartment::getParentId, parentId));
  29. }
  30. /** 获取部门成员(懒加载) */
  31. public List<EnterpriseWechatMember> listDepartmentMembers(Long departmentId) {
  32. List<EnterpriseWechatMember> cached = memberMapper.selectList(
  33. new LambdaQueryWrapper<EnterpriseWechatMember>().eq(EnterpriseWechatMember::getDepartmentId, departmentId));
  34. if (!cached.isEmpty()) return cached;
  35. String accessToken = wechatMsgService.getCorpAccessToken();
  36. if (accessToken == null) return List.of();
  37. EnterpriseWechatUserListRsp rsp = enterpriseWechatApi.listDepartmentUsers(accessToken, departmentId);
  38. if (rsp == null || rsp.getUserlist() == null) return List.of();
  39. List<EnterpriseWechatMember> members = new ArrayList<>();
  40. for (var u : rsp.getUserlist()) {
  41. EnterpriseWechatMember wm = new EnterpriseWechatMember();
  42. wm.setUserid(u.getUserid());
  43. wm.setName(u.getName() != null ? u.getName() : u.getUserid());
  44. wm.setDepartmentId(departmentId);
  45. wm.setOpenUserid(u.getOpenUserid());
  46. memberMapper.insert(wm);
  47. members.add(wm);
  48. }
  49. return members;
  50. }
  51. }