瀏覽代碼

fix:修复用户需求由二进制数据直接tostring导致的文本丢失问题

yangyi 5 月之前
父節點
當前提交
4b337f896f

+ 4 - 2
ruoyi-modules/ruoyi-ai/src/main/java/org/dromara/ai/controller/MessageController.java

@@ -10,13 +10,15 @@ import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.time.LocalDateTime;
+
 @RestController
 @RequiredArgsConstructor
 @RequestMapping("/ai/message")
 public class MessageController {
     private final MessageService messageService;
     @GetMapping
-    public R<TableDataInfo<MessageVO>> getMessage(PageQuery pageQuery, Long conversationId) {
-        return messageService.getMessage(pageQuery,conversationId);
+    public R<TableDataInfo<MessageVO>> getMessage(PageQuery pageQuery, Long conversationId, LocalDateTime timestamp) {
+        return messageService.getMessage(pageQuery,conversationId,timestamp);
     }
 }

+ 5 - 3
ruoyi-modules/ruoyi-ai/src/main/java/org/dromara/ai/handler/AIHandlerImpl.java

@@ -41,7 +41,8 @@ public class AIHandlerImpl implements AIHandler {
         for (String tableName : tableNamesList) {
             tableNamesStringBuilder.append(tableName).append("\n");
         }
-        String prompt = new StringBuilder("用户需求:\n").append(messageContext.getMessage().getContent())
+
+        String prompt = new StringBuilder("用户需求:\n").append(new String(messageContext.getMessage().getContent(),StandardCharsets.UTF_8))
             .append("\n")
             .append(tableNamesStringBuilder)
             .append("请你根据用户需求和现有的数据表,选择满足用户需求的数据表,要求数据表要与用户需求强相关,返回数据表的名称,以json的格式返回{'tableNames':[]}").toString();
@@ -83,7 +84,7 @@ public class AIHandlerImpl implements AIHandler {
         }
         String struct = structBuilder.toString();
         String prompt = new StringBuilder("用户需求:\n")
-            .append(messageContext.getMessage().getContent())
+            .append(new String(messageContext.getMessage().getContent(),StandardCharsets.UTF_8))
             .append("涉及的表和结构如下:\n")
             .append(struct)
             .append("\n")
@@ -134,7 +135,7 @@ public class AIHandlerImpl implements AIHandler {
         messageContext.setStatus(4);
         String data = messageContext.getData();
         log.info("data = \n{}", data);
-        String prompt = new StringBuilder("用户需求:\n").append(messageContext.getMessage().getContent())
+        String prompt = new StringBuilder("用户需求:\n").append(new String(messageContext.getMessage().getContent(),StandardCharsets.UTF_8))
             .append("涉及的数据如下:\n").append(data)
             .append("\n")
 //            .append("请根据用户需求和数据给出结论(中文的),并选择表格或者图表(折线图、柱状图、饼图、热力图)将数据展示出来,表格状态为1;图标状态为2,表格或者图表使用svg格式的xml,分辨率为1920*1080,以json的格式返回.{'conclusion':'','data':'','status':0}").toString();
@@ -183,6 +184,7 @@ public class AIHandlerImpl implements AIHandler {
             message.setContent(object.toString().getBytes(StandardCharsets.UTF_8));
             messageService.save(message);
             MessageVO messageVO = new MessageVO(0,"");
+            messageVO.setContent(new String(message.getContent(), StandardCharsets.UTF_8));
             BeanUtils.copyProperties(message, messageVO);
             emitter.send(messageVO);
         } catch (IOException e) {

+ 3 - 1
ruoyi-modules/ruoyi-ai/src/main/java/org/dromara/ai/service/MessageService.java

@@ -7,6 +7,8 @@ import org.dromara.common.core.domain.R;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 
+import java.time.LocalDateTime;
+
 public interface MessageService extends IService<Message> {
-    R<TableDataInfo<MessageVO>> getMessage(PageQuery pageQuery, Long conversationId);
+    R<TableDataInfo<MessageVO>> getMessage(PageQuery pageQuery, Long conversationId, LocalDateTime timestamp);
 }

+ 10 - 2
ruoyi-modules/ruoyi-ai/src/main/java/org/dromara/ai/service/service/MessageServiceImpl.java

@@ -15,14 +15,21 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
 import java.nio.charset.StandardCharsets;
+import java.time.LocalDateTime;
+import java.util.Collections;
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 @Service
 public class MessageServiceImpl extends ServiceImpl<MessageMapper, Message> implements MessageService {
     @Override
-    public R<TableDataInfo<MessageVO>> getMessage(PageQuery pageQuery, Long conversationId) {
-        LambdaQueryWrapper<Message> queryWrapper = new QueryWrapper<Message>().lambda().eq(Message::getConversationId, conversationId).orderByDesc(Message::getTimestamp);
+    public R<TableDataInfo<MessageVO>> getMessage(PageQuery pageQuery, Long conversationId, LocalDateTime timestamp) {
+        LambdaQueryWrapper<Message> queryWrapper = new LambdaQueryWrapper<Message>()
+            .eq(Message::getConversationId, conversationId)
+            .le(Objects.nonNull(timestamp), Message::getTimestamp, timestamp)
+            .orderByDesc(Message::getTimestamp);
+
         Page<Message> page = page(pageQuery.build(), queryWrapper);
         List<MessageVO> messageVOList = page.getRecords().stream()
             .map(message -> {
@@ -31,6 +38,7 @@ public class MessageServiceImpl extends ServiceImpl<MessageMapper, Message> impl
                 messageVO.setContent(new String(message.getContent(), StandardCharsets.UTF_8));
                 return messageVO;
             }).collect((Collectors.toList()));
+        Collections.reverse(messageVOList);
         TableDataInfo<MessageVO> tableDataInfo = TableDataInfo.build(messageVOList);
         return R.ok(tableDataInfo);
     }