fix(archive-service): 解决群聊消息接收者字段过长导致插入失败问题

- 添加判断接收者列表长度的逻辑
- 当接收者超过一个时,将 to_user 字段置空以避免数据库截断错误
- 单一接收者时保持原有 JSON 序列化保存方式
- 注释说明群聊场景下接收者数据保存和读取的处理机制
This commit is contained in:
jqb 2026-09-04 11:25:51 +08:00
parent ac476c1889
commit a9a762a761

View File

@ -292,7 +292,15 @@ public class ArchivePullService {
Object tolistObj = msgMap.get("tolist");
if (tolistObj instanceof java.util.List) {
message.setToUser(JsonUtils.toJson(tolistObj));
java.util.List<?> tolist = (java.util.List<?>) tolistObj;
if (tolist.size() > 1) {
// 群聊/多接收者:接收者 JSON 数组会超出 to_user(VARCHAR128) 触发 Data too long 截断,
// 导致整条群消息 INSERT 失败丢失。接收者列表已由下方 tolist(TEXT) 完整保存,
// 且读取侧(Controller/SessionService)查询会回退匹配 tolist,故此处 to_user 置空。
message.setToUser(null);
} else {
message.setToUser(JsonUtils.toJson(tolistObj));
}
} else {
message.setToUser((String) tolistObj);
}