From af85b08f94839711c974143826f9cecefcf14b40 Mon Sep 17 00:00:00 2001 From: heavyrian2012 Date: Mon, 18 May 2026 15:53:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BC=9A=E8=AE=AE=E6=80=BB?= =?UTF-8?q?=E7=BB=93=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/wildfirechat/proto/ProtoConstants.java | 2 + .../MeetingMinutesMessageContent.java | 96 ++++++++++++ .../messagecontent/MessageContentFactory.java | 2 + .../TranscriptionMessageContent.java | 144 ++++++++++++++++++ 4 files changed, 244 insertions(+) create mode 100644 sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/MeetingMinutesMessageContent.java create mode 100644 sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/TranscriptionMessageContent.java diff --git a/common/src/main/java/cn/wildfirechat/proto/ProtoConstants.java b/common/src/main/java/cn/wildfirechat/proto/ProtoConstants.java index 79fa2892..9ba6f28e 100644 --- a/common/src/main/java/cn/wildfirechat/proto/ProtoConstants.java +++ b/common/src/main/java/cn/wildfirechat/proto/ProtoConstants.java @@ -107,6 +107,8 @@ public class ProtoConstants { int StreamingText_Generationg = 14; int StreamingText_Generated = 15; int Not_Delivered = 16; + int Meeting_Minutes = 25; + int Transcription = 26; int Ptt_Voice = 23; int Enter_Channel_Chat = 71; int Leave_Channel_Chat = 72; diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/MeetingMinutesMessageContent.java b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/MeetingMinutesMessageContent.java new file mode 100644 index 00000000..af80b20d --- /dev/null +++ b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/MeetingMinutesMessageContent.java @@ -0,0 +1,96 @@ +package cn.wildfirechat.sdk.messagecontent; + +import cn.wildfirechat.pojos.MessagePayload; +import cn.wildfirechat.proto.ProtoConstants; +import org.apache.http.util.TextUtils; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.json.simple.parser.ParseException; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; + +/** + * 会议纪要消息内容类 + *

+ * 表示会议纪要类型的消息内容,包含纪要文本、会议标题和会议ID。 + *

+ */ +public class MeetingMinutesMessageContent extends MessageContent { + private String text; + private String title; + private String meetingId; + + //必须有个空的构造函数 + public MeetingMinutesMessageContent() { + } + + public MeetingMinutesMessageContent(String text, String title, String meetingId) { + this.text = text; + this.title = title; + this.meetingId = meetingId; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getMeetingId() { + return meetingId; + } + + public void setMeetingId(String meetingId) { + this.meetingId = meetingId; + } + + @Override + public int getContentType() { + return ProtoConstants.ContentType.Meeting_Minutes; + } + + @Override + public int getPersistFlag() { + return ProtoConstants.PersistFlag.Persist_And_Count; + } + + @Override + public MessagePayload encode() { + MessagePayload payload = super.encode(); + payload.setContent(text); + payload.setSearchableContent(title); + if (!TextUtils.isEmpty(meetingId)) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("meetingId", meetingId); + payload.setBase64edData(Base64.getEncoder().encodeToString(jsonObject.toJSONString().getBytes(StandardCharsets.UTF_8))); + } + return payload; + } + + @Override + public void decode(MessagePayload payload) { + super.decode(payload); + text = payload.getContent(); + title = payload.getSearchableContent(); + if (!TextUtils.isEmpty(payload.getBase64edData())) { + String jsonStr = new String(Base64.getDecoder().decode(payload.getBase64edData()), StandardCharsets.UTF_8); + try { + JSONObject jsonObject = (JSONObject) new JSONParser().parse(jsonStr); + meetingId = (String) jsonObject.get("meetingId"); + } catch (ParseException e) { + throw new RuntimeException(e); + } + } + } +} diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/MessageContentFactory.java b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/MessageContentFactory.java index 0be307b6..15e9c39f 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/MessageContentFactory.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/MessageContentFactory.java @@ -24,6 +24,8 @@ public class MessageContentFactory { private static final Map> contentClassMap = new ConcurrentHashMap<>(); private static List buildinMessageContents = Arrays.asList( + MeetingMinutesMessageContent.class, + TranscriptionMessageContent.class, ArticlesMessageContent.class, StreamTextGeneratedMessageContent.class, CallStartMessageContent.class, diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/TranscriptionMessageContent.java b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/TranscriptionMessageContent.java new file mode 100644 index 00000000..90814306 --- /dev/null +++ b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/TranscriptionMessageContent.java @@ -0,0 +1,144 @@ +package cn.wildfirechat.sdk.messagecontent; + +import cn.wildfirechat.pojos.MessagePayload; +import cn.wildfirechat.proto.ProtoConstants; +import org.apache.http.util.TextUtils; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.json.simple.parser.ParseException; + +/** + * 转换消息内容类(透传消息) + *

+ * 表示转换类型的透传消息,包含id、会议id、用户id、时间戳、时长和内容。 + *

+ */ +public class TranscriptionMessageContent extends MessageContent { + private long transcriptionId; + private String meetingId; + private String userId; + private long timestamp; + private long duration; + private String content; + + //必须有个空的构造函数 + public TranscriptionMessageContent() { + } + + public TranscriptionMessageContent(long transcriptionId, String meetingId, String userId, long timestamp, long duration, String content) { + this.transcriptionId = transcriptionId; + this.meetingId = meetingId; + this.userId = userId; + this.timestamp = timestamp; + this.duration = duration; + this.content = content; + } + + public long getTranscriptionId() { + return transcriptionId; + } + + public void setTranscriptionId(long transcriptionId) { + this.transcriptionId = transcriptionId; + } + + public String getMeetingId() { + return meetingId; + } + + public void setMeetingId(String meetingId) { + this.meetingId = meetingId; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public long getTimestamp() { + return timestamp; + } + + public void setTimestamp(long timestamp) { + this.timestamp = timestamp; + } + + public long getDuration() { + return duration; + } + + public void setDuration(long duration) { + this.duration = duration; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + @Override + public int getContentType() { + return ProtoConstants.ContentType.Transcription; + } + + @Override + public int getPersistFlag() { + return ProtoConstants.PersistFlag.Transparent; + } + + @Override + public MessagePayload encode() { + MessagePayload payload = super.encode(); + JSONObject jsonObject = new JSONObject(); + if (transcriptionId > 0) { + jsonObject.put("id", transcriptionId); + } + if (!TextUtils.isEmpty(meetingId)) { + jsonObject.put("meetingId", meetingId); + } + if (!TextUtils.isEmpty(userId)) { + jsonObject.put("userId", userId); + } + if (timestamp > 0) { + jsonObject.put("timestamp", timestamp); + } + if (duration > 0) { + jsonObject.put("duration", duration); + } + if (!TextUtils.isEmpty(content)) { + jsonObject.put("content", content); + } + payload.setContent(jsonObject.toJSONString()); + return payload; + } + + @Override + public void decode(MessagePayload payload) { + super.decode(payload); + if (!TextUtils.isEmpty(payload.getContent())) { + try { + JSONObject jsonObject = (JSONObject) new JSONParser().parse(payload.getContent()); + transcriptionId = ((Number) jsonObject.get("id")).longValue(); + meetingId = (String) jsonObject.get("meetingId"); + userId = (String) jsonObject.get("userId"); + Object ts = jsonObject.get("timestamp"); + if (ts != null) { + timestamp = ((Number) ts).longValue(); + } + Object dur = jsonObject.get("duration"); + if (dur != null) { + duration = ((Number) dur).longValue(); + } + content = (String) jsonObject.get("content"); + } catch (ParseException e) { + throw new RuntimeException(e); + } + } + } +}