查询订单

This commit is contained in:
启航老齐 2026-03-07 18:16:39 +08:00
parent de6f2bdba5
commit 399f88dae5
6 changed files with 106 additions and 38 deletions

View File

@ -143,6 +143,7 @@
<!-- </dependency>-->
<!-- LangChain4J 依赖 -->
<!-- Source: https://mvnrepository.com/artifact/dev.langchain4j/langchain4j -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j</artifactId>

View File

@ -71,10 +71,17 @@ public class SseController {
try {
// 使用AiService处理消息传递模型参数
String response = aiService.processMessage(message, model);
log.info("==========AI回复{}",response);
// 确保SSE消息格式正确处理多行消息
String[] lines = response.split("\n");
StringBuilder formattedResponse = new StringBuilder();
for (String line : lines) {
formattedResponse.append("data:").append(line).append("\n");
}
formattedResponse.append("\n"); // 结束消息
emitter.send(SseEmitter.event()
.name("message")
.data(response));
emitter.send(formattedResponse.toString());
log.info("发送给前端的消息: {}", response);
return "消息发送成功";
} catch (Exception e) {

View File

@ -1,5 +1,7 @@
package cn.qihangerp.erp.service;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@ -8,6 +10,7 @@ import java.util.concurrent.ConcurrentHashMap;
/**
* 订单服务类用于查询订单信息
*/
@Slf4j
public class OrderService {
// 模拟订单数据
@ -20,6 +23,8 @@ public class OrderService {
orderMap.put("ORDER003", new Order("ORDER003", "2026-03-03", "王五", 599.99, "已完成"));
orderMap.put("ORDER004", new Order("ORDER004", "2026-03-04", "赵六", 1999.99, "待发货"));
orderMap.put("ORDER005", new Order("ORDER005", "2026-03-05", "钱七", 399.99, "已发货"));
orderMap.put("ORDER006", new Order("ORDER006", "2026-03-06", "", 399.99, "已发货"));
orderMap.put("ORDER007", new Order("ORDER007", "2026-03-07", "", 399.99, "未发货"));
}
/**
@ -62,6 +67,22 @@ public class OrderService {
return getOrdersByStatus("待发货");
}
/**
* 根据日期查询订单
* @param date 订单日期
* @return 订单列表
*/
public List<Order> getOrdersByDate(String date) {
log.info("=========根据日期查询订单:{}",date);
List<Order> orders = new ArrayList<>();
for (Order order : orderMap.values()) {
if (order.getOrderDate().equals(date)) {
orders.add(order);
}
}
return orders;
}
/**
* 订单实体类
*/

View File

@ -2,6 +2,8 @@ package cn.qihangerp.erp.service;
import dev.langchain4j.agent.tool.Tool;
import java.util.List;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
/**
* 订单工具服务用于AI查询订单信息
@ -82,4 +84,32 @@ public class OrderToolService {
}
return sb.toString();
}
/**
* 根据日期查询订单
* @param date 订单日期可以是具体日期或"今天""昨天""明天"等时间表达式
* @return 订单信息
*/
@Tool("根据日期查询订单信息")
public String getOrdersByDate(String date) {
// 处理时间表达式
if ("今天".equals(date)) {
date = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
} else if ("昨天".equals(date)) {
date = LocalDate.now().minusDays(1).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
} else if ("明天".equals(date)) {
date = LocalDate.now().plusDays(1).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
}
List<OrderService.Order> orders = orderService.getOrdersByDate(date);
if (orders.isEmpty()) {
return "暂无日期为" + date + "的订单";
}
StringBuilder sb = new StringBuilder();
sb.append("日期为").append(date).append("的订单:<br>");
for (OrderService.Order order : orders) {
sb.append(order.toString()).append("<br>");
}
return sb.toString();
}
}

View File

@ -1,8 +1,11 @@
package cn.qihangerp.erp.serviceImpl;
import dev.langchain4j.model.ollama.OllamaChatModel;
import dev.langchain4j.service.AiServices;
import org.springframework.stereotype.Service;
import java.time.Duration;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import cn.qihangerp.erp.service.OrderToolService;
/**
@ -11,6 +14,13 @@ import cn.qihangerp.erp.service.OrderToolService;
@Service
public class AiService {
/**
* 定义AI服务接口
*/
interface OrderAiService {
String chat(String message);
}
/**
* 处理聊天消息
* @param message 用户消息
@ -19,29 +29,12 @@ public class AiService {
*/
public String processMessage(String message, String model) {
try {
// 检查是否是订单相关查询
if (message.contains("订单")) {
// 使用订单服务直接处理
OrderToolService orderToolService = new OrderToolService();
// 获取当前日期
String today = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
// 替换消息中的"今天"为具体日期
message = message.replace("今天", today);
// 简单的意图识别
if (message.contains("待发货") || message.contains("未发货")) {
return orderToolService.getPendingOrders();
} else if (message.contains("所有")) {
return orderToolService.getAllOrders();
} else if (message.contains("状态")) {
// 提取状态
String status = message.replaceAll(".*状态为([^,。]+).*", "$1");
return orderToolService.getOrdersByStatus(status);
} else if (message.contains("订单号") || message.contains("订单ID")) {
// 提取订单号
String orderId = message.replaceAll(".*[订单号|订单ID][:]([^,。]+).*", "$1");
return orderToolService.getOrderById(orderId);
} else {
// 默认返回所有订单
return orderToolService.getAllOrders();
}
} else {
// 根据模型名称创建对应的ChatModel
OllamaChatModel modelInstance = OllamaChatModel.builder()
.baseUrl("http://localhost:11434") // Ollama默认端口
@ -50,9 +43,21 @@ public class AiService {
.timeout(Duration.ofSeconds(300)) // 超时时间设置为300秒5分钟
.build();
// 调用Ollama模型获取回复
return modelInstance.chat(message);
}
// 创建订单工具服务
OrderToolService orderToolService = new OrderToolService();
// 使用AiServices创建AI服务自动处理工具调用
OrderAiService aiService = AiServices.builder(OrderAiService.class)
.chatModel(modelInstance)
.tools(orderToolService)
.build();
// 执行AI服务添加今天的日期信息
String enhancedMessage = "今天的日期是:" + today + "\n" + message;
System.out.println("发送给AI的消息: " + enhancedMessage);
String result = aiService.chat(enhancedMessage);
System.out.println("AI返回的结果: " + result);
return result;
} catch (Exception e) {
e.printStackTrace();
return "错误: " + e.getMessage();

View File

@ -209,8 +209,12 @@ export default {
this.isLoading = false;
}
//
//
let messageContent = event.data;
// data:
messageContent = messageContent.replace(/^data:/g, '');
this.messages.push({
content: event.data,
content: messageContent,
time: this.formatTime(new Date()),
isMe: false,
avatar: ''