feat(t17): 数据同步——只读拉取群组/群成员/群消息到本地表,按租户查看

主体(T17 数据同步,/admin/sync 三个独立按钮):
- 同步群组:get_appid_group_list 全量 Next 分页 + 逐群 get_group_info → group_mapping
- 同步群成员(→用户):遍历该租户群取 MemberList → user_mapping(腾讯无全量用户API,靠群成员反推)
- 同步群消息:遍历该租户群 getGroupMsg + IsFinished 滚动全量 → im_message(source=SYNC)
- DB: group_mapping 加 name/owner_account/member_count/last_synced_at;user_mapping 加 nick/last_synced_at
  (init.sql 建表 + ADD COLUMN IF NOT EXISTS 老库升级补丁,幂等)
- TencentImClient: 新增 getAppidGroupList(limit,next[,sdkAppId,secretKey])
- 已知限制:C2C单聊无全量会话API;超大群成员需换 get_group_member_info 分页

附带收尾此前未提交的改动:
- 回调字段名修正(FromAccount→From_Account 等腾讯标准字段) + pickMsgRandom/Time/Type 兼容字段差异
- 租户识别重构:前缀经 TenantService.getByPrefixCode 反查 tenantId(主键雪花化与前缀解耦)
- FreeMarker java.time ?string 坑修复(usage/queue Controller 预格式化) + 消息记录"全部"状态修复
- 新增项目 CLAUDE.md + .claude/memory 基建(gitignore 含密钥记忆,不进 git)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
连龙刚
2026-07-10 08:40:46 +08:00
co-authored by Claude
parent b679d47adb
commit fdbb7724fa
19 changed files with 1120 additions and 52 deletions
+15
View File
@@ -19,6 +19,7 @@ CREATE TABLE IF NOT EXISTS tenant (
CONSTRAINT pk_tenant PRIMARY KEY (tenant_id)
);
CREATE UNIQUE INDEX IF NOT EXISTS uk_tenant_app_key ON tenant(app_key);
CREATE UNIQUE INDEX IF NOT EXISTS uk_tenant_prefix ON tenant(prefix_code);
-- ===== 2. 用户映射(业务用户 ↔ IM 用户) =====
CREATE TABLE IF NOT EXISTS user_mapping (
@@ -29,6 +30,8 @@ CREATE TABLE IF NOT EXISTS user_mapping (
is_default boolean NOT NULL DEFAULT false,
is_global boolean NOT NULL DEFAULT false,
status smallint NOT NULL DEFAULT 1, -- 1=正常 0=封禁
nick varchar(128), -- 用户昵称(T17 数据同步拉取自群成员资料)
last_synced_at timestamptz, -- 最近一次同步时间(T17
created_at timestamptz NOT NULL DEFAULT now(),
CONSTRAINT pk_user_mapping PRIMARY KEY (id)
);
@@ -42,6 +45,10 @@ CREATE TABLE IF NOT EXISTS group_mapping (
biz_group_id varchar(128) NOT NULL,
im_group_id varchar(128) NOT NULL,
group_type varchar(16) NOT NULL DEFAULT 'Public',
name varchar(256), -- 群名称(T17 数据同步拉取)
owner_account varchar(128), -- 群主账号(T17 数据同步拉取)
member_count int, -- 群成员数(T17 数据同步拉取)
last_synced_at timestamptz, -- 最近一次同步时间(T17
created_at timestamptz NOT NULL DEFAULT now(),
CONSTRAINT pk_group_mapping PRIMARY KEY (id)
);
@@ -243,3 +250,11 @@ CREATE TABLE IF NOT EXISTS migrate_task (
CONSTRAINT pk_migrate_task PRIMARY KEY (id)
);
CREATE INDEX IF NOT EXISTS idx_migrate_task_app ON migrate_task(source_app_id, object_type, status);
-- ===== T17 数据同步:老库升级补丁(ADD COLUMN IF NOT EXISTS,幂等可重跑) =====
ALTER TABLE group_mapping ADD COLUMN IF NOT EXISTS name varchar(256);
ALTER TABLE group_mapping ADD COLUMN IF NOT EXISTS owner_account varchar(128);
ALTER TABLE group_mapping ADD COLUMN IF NOT EXISTS member_count int;
ALTER TABLE group_mapping ADD COLUMN IF NOT EXISTS last_synced_at timestamptz;
ALTER TABLE user_mapping ADD COLUMN IF NOT EXISTS nick varchar(128);
ALTER TABLE user_mapping ADD COLUMN IF NOT EXISTS last_synced_at timestamptz;