feat(channel-wecom): 实现企微联系人/群聊同步

This commit is contained in:
2026-07-07 19:57:02 +08:00
parent 7b16160bba
commit f5d07b7eb5
11 changed files with 682 additions and 0 deletions

View File

@@ -0,0 +1,54 @@
package com.sino.mci.channel.wecom.sync;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* 企业微信同步客户端的 mock 实现。
*
* <p>不发起真实企微 API 调用,仅返回固定样例数据,供开发与测试使用。</p>
*/
@Component
public class MockWeComSyncClient implements WeComSyncClient {
@Override
public List<WeComContact> syncContacts(WeComSyncConfig config) {
return List.of(
WeComContact.builder()
.userId("user001")
.name("张三")
.mobile("13800138001")
.type(WeComContactType.INTERNAL)
.departmentIds(List.of(1L, 2L))
.build(),
WeComContact.builder()
.userId("wmexternal001")
.name("客户李四")
.mobile("13900139001")
.type(WeComContactType.EXTERNAL)
.build()
);
}
@Override
public List<WeComConversation> syncConversations(WeComSyncConfig config) {
return List.of(
WeComConversation.builder()
.chatId("chat001")
.chatName("测试客户群")
.ownerUserId("user001")
.memberList(List.of(
WeComConversationMember.builder()
.userId("user001")
.name("张三")
.build(),
WeComConversationMember.builder()
.userId("wmexternal001")
.name("客户李四")
.build()
))
.build()
);
}
}

View File

@@ -0,0 +1,21 @@
package com.sino.mci.channel.wecom.sync;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class WeComContact {
private String userId;
private String name;
private String mobile;
private WeComContactType type;
private List<Long> departmentIds;
}

View File

@@ -0,0 +1,6 @@
package com.sino.mci.channel.wecom.sync;
public enum WeComContactType {
INTERNAL,
EXTERNAL
}

View File

@@ -0,0 +1,20 @@
package com.sino.mci.channel.wecom.sync;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class WeComConversation {
private String chatId;
private String chatName;
private String ownerUserId;
private List<WeComConversationMember> memberList;
}

View File

@@ -0,0 +1,16 @@
package com.sino.mci.channel.wecom.sync;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class WeComConversationMember {
private String userId;
private String name;
}

View File

@@ -0,0 +1,29 @@
package com.sino.mci.channel.wecom.sync;
import java.util.List;
/**
* 企业微信通讯录与群聊同步客户端。
*
* <p>封装企微「获取部门列表 / 部门成员详情 / 外部联系人列表 / 外部联系人详情 /
* 客户群列表 / 客户群详情」等接口调用。实际生产环境可替换为基于 {@code WxCpService}
* 的真实实现;默认提供 mock 实现用于开发/测试。</p>
*/
public interface WeComSyncClient {
/**
* 同步联系人(企业内部成员 + 外部联系人)。
*
* @param config 企微配置
* @return 联系人列表
*/
List<WeComContact> syncContacts(WeComSyncConfig config);
/**
* 同步群聊(客户群)。
*
* @param config 企微配置
* @return 群聊列表
*/
List<WeComConversation> syncConversations(WeComSyncConfig config);
}

View File

@@ -0,0 +1,17 @@
package com.sino.mci.channel.wecom.sync;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class WeComSyncConfig {
private String corpId;
private String agentId;
private String secret;
}