From 8c2fe249e72e9dbfe9d8d073a941960b27ddc5e2 Mon Sep 17 00:00:00 2001 From: Peanut Date: Sun, 26 Jul 2026 15:12:50 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9AsaveNovelResult=20=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=20clarification/outline=20=E4=B8=AD=E9=97=B4=E6=AD=A5?= =?UTF-8?q?=E9=AA=A4=20message?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/EpicScriptDialogueServiceImpl.java | 73 +++++++++++++++++-- 1 file changed, 66 insertions(+), 7 deletions(-) diff --git a/server/src/main/java/com/emotion/service/impl/EpicScriptDialogueServiceImpl.java b/server/src/main/java/com/emotion/service/impl/EpicScriptDialogueServiceImpl.java index 97c534f..a63c904 100644 --- a/server/src/main/java/com/emotion/service/impl/EpicScriptDialogueServiceImpl.java +++ b/server/src/main/java/com/emotion/service/impl/EpicScriptDialogueServiceImpl.java @@ -271,10 +271,69 @@ public class EpicScriptDialogueServiceImpl implements EpicScriptDialogueService conversation.setConversationStatus("active"); conversation.setStartTime(now); conversation.setLastActiveTime(now); - conversation.setMessageCount(3); + // 读取累积的中间步骤(clarification_question/answer/outline) + @SuppressWarnings("unchecked") + java.util.List stagesHistory = + metadata != null && metadata.get("stagesHistory") instanceof java.util.List + ? (java.util.List) metadata.get("stagesHistory") + : java.util.Collections.emptyList(); + + long messageOrder = 1L; + + // 2.5 创建中间步骤 message(clarification_question/answer/outline),按累积顺序 + for (com.alibaba.fastjson2.JSONObject stage : stagesHistory) { + String kind = stage.getString("kind"); + if ("clarification_question".equals(kind)) { + com.alibaba.fastjson2.JSONObject card = stage.getJSONObject("card"); + Message qMsg = new Message(); + qMsg.setId(snowflakeIdGenerator.nextIdAsString()); + qMsg.setConversationId(conversationId); + qMsg.setScriptId(scriptId); + qMsg.setUserId(currentUserId); + qMsg.setContent(card != null ? card.toJSONString() : "{}"); + qMsg.setType("clarification_question"); + qMsg.setSender("assistant"); + qMsg.setTimestamp(now); + qMsg.setMessageOrder(messageOrder++); + qMsg.setStatus("sent"); + qMsg.setIsRead(1); + messageService.createMessage(qMsg); + } else if ("clarification_answer".equals(kind)) { + Message aMsg = new Message(); + aMsg.setId(snowflakeIdGenerator.nextIdAsString()); + aMsg.setConversationId(conversationId); + aMsg.setScriptId(scriptId); + aMsg.setUserId(currentUserId); + aMsg.setContent(stage.getString("answer")); + aMsg.setType("clarification_answer"); + aMsg.setSender("user"); + aMsg.setTimestamp(now); + aMsg.setMessageOrder(messageOrder++); + aMsg.setStatus("sent"); + aMsg.setIsRead(1); + messageService.createMessage(aMsg); + } else if ("outline".equals(kind)) { + com.alibaba.fastjson2.JSONObject outline = stage.getJSONObject("outline"); + Message oMsg = new Message(); + oMsg.setId(snowflakeIdGenerator.nextIdAsString()); + oMsg.setConversationId(conversationId); + oMsg.setScriptId(scriptId); + oMsg.setUserId(currentUserId); + oMsg.setContent(outline != null ? outline.toJSONString() : "{}"); + oMsg.setType("outline"); + oMsg.setSender("assistant"); + oMsg.setTimestamp(now); + oMsg.setMessageOrder(messageOrder++); + oMsg.setStatus("sent"); + oMsg.setIsRead(1); + messageService.createMessage(oMsg); + } + } + + conversation.setMessageCount((int) (stagesHistory.size() + 3)); conversationService.save(conversation); - // 3. 系统欢迎消息(messageOrder = 1) + // 3. 系统欢迎消息(messageOrder 动态递增) Message systemWelcome = new Message(); systemWelcome.setId(snowflakeIdGenerator.nextIdAsString()); systemWelcome.setConversationId(conversationId); @@ -284,12 +343,12 @@ public class EpicScriptDialogueServiceImpl implements EpicScriptDialogueService systemWelcome.setType("system"); systemWelcome.setSender("system"); systemWelcome.setTimestamp(now); - systemWelcome.setMessageOrder(1L); + systemWelcome.setMessageOrder(messageOrder++); systemWelcome.setStatus("sent"); systemWelcome.setIsRead(1); messageService.createMessage(systemWelcome); - // 4. 用户输入消息(messageOrder = 2) + // 4. 用户输入消息(messageOrder 动态递增) Message userMessage = new Message(); userMessage.setId(snowflakeIdGenerator.nextIdAsString()); userMessage.setConversationId(conversationId); @@ -299,12 +358,12 @@ public class EpicScriptDialogueServiceImpl implements EpicScriptDialogueService userMessage.setType("chat"); userMessage.setSender("user"); userMessage.setTimestamp(now); - userMessage.setMessageOrder(2L); + userMessage.setMessageOrder(messageOrder++); userMessage.setStatus("sent"); userMessage.setIsRead(1); messageService.createMessage(userMessage); - // 5. AI 小说全文消息(messageOrder = 3) + // 5. AI 小说全文消息(messageOrder 动态递增) Message aiMessage = new Message(); aiMessage.setId(snowflakeIdGenerator.nextIdAsString()); aiMessage.setConversationId(conversationId); @@ -314,7 +373,7 @@ public class EpicScriptDialogueServiceImpl implements EpicScriptDialogueService aiMessage.setType("script"); aiMessage.setSender("assistant"); aiMessage.setTimestamp(now); - aiMessage.setMessageOrder(3L); + aiMessage.setMessageOrder(messageOrder++); aiMessage.setVersionNumber(1); aiMessage.setStatus("sent"); aiMessage.setMetadata(metadata != null ? JSON.toJSONString(metadata) : "{}");