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 listSubDepartments(Long parentId) { return departmentMapper.selectList( new LambdaQueryWrapper().eq(EnterpriseWechatDepartment::getParentId, parentId)); } /** 获取部门成员(懒加载) */ public List listDepartmentMembers(Long departmentId) { List cached = memberMapper.selectList( new LambdaQueryWrapper().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 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; } }