fix(t17): 数据同步联调修复——群消息死循环 + 字段名 + schema自动升级 + maxGroups精确

联调(新疆信创测试应用 1600134460,租户sa 67群)发现并修复4类问题:
1.群消息死循环:group_msg_get_simple 的 IsFinished=2 表"还有更旧可拉",占位消息群恒为2;
  原 oldestSeq=max(seq) 游标方向反,反复拉同一批致2217次/200s超时。
  改 min(seq) 向旧翻页 + 游标未推进即停兜底 + 过滤 IsPlaceMsg=1 占位消息(119次/15.7s)
2.get_group_info 请求体字段名 GroupId→GroupIdList(腾讯要求 GroupIdList:["id"] 字符串数组)
3.运行库缺列致 upserted=0:init.sql 仅新建库执行,新增 SchemaUpgradeBootstrap 启动幂等ALTER(6条DDL)
4.maxGroups 防护:break 由 for 外移入 for 内,精确限制避免单页海量群绕过上限

联调验证(租户sa 67群):群组67/67、群成员241/13、群消息119次/imported=3,死循环消除

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
连龙刚
2026-07-10 09:55:48 +08:00
co-authored by Claude
parent fdbb7724fa
commit 968a5f2e42
3 changed files with 82 additions and 8 deletions
@@ -0,0 +1,47 @@
package com.imutil.task;
import com.imutil.mapper.PartitionMapper;
import lombok.extern.slf4j.Slf4j;
import org.noear.solon.annotation.Component;
import org.noear.solon.annotation.Init;
import org.noear.solon.annotation.Inject;
/**
* 数据库 Schema 启动自动升级(幂等)
* <p>
* 解决"实体加字段但运行库未 ALTER"问题:init.sql 仅新建库时执行,老库不会自动加列,
* 导致 MyBatis insert/update 到新列时报 column 不存在。启动时对增量列执行
* ADD COLUMN IF NOT EXISTS,老库自动补列,新库重复执行也无副作用。
*
* @author imutil
*/
@Slf4j
@Component
public class SchemaUpgradeBootstrap {
@Inject
private PartitionMapper partitionMapper;
@Init
public void init() {
// T17: group_mapping/user_mapping 同步资料列
String[] ddls = {
"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",
};
int ok = 0;
for (String sql : ddls) {
try {
partitionMapper.execute(sql);
ok++;
} catch (Exception e) {
log.warn("schema升级跳过 [{}] : {}", sql, e.getMessage());
}
}
log.info("启动 schema 升级完成({}/{} 条 DDL", ok, ddls.length);
}
}