添加订单查询

This commit is contained in:
启航老齐 2026-03-07 16:55:13 +08:00
parent 707d59014d
commit de6f2bdba5
4 changed files with 234 additions and 15 deletions

View File

@ -0,0 +1,108 @@
package cn.qihangerp.erp.service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* 订单服务类用于查询订单信息
*/
public class OrderService {
// 模拟订单数据
private static final Map<String, Order> orderMap = new ConcurrentHashMap<>();
static {
// 初始化一些模拟订单数据
orderMap.put("ORDER001", new Order("ORDER001", "2026-03-01", "张三", 1299.99, "待发货"));
orderMap.put("ORDER002", new Order("ORDER002", "2026-03-02", "李四", 899.99, "已发货"));
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, "已发货"));
}
/**
* 根据订单号查询订单
* @param orderId 订单号
* @return 订单信息
*/
public Order getOrderById(String orderId) {
return orderMap.get(orderId);
}
/**
* 获取所有订单
* @return 订单列表
*/
public List<Order> getAllOrders() {
return new ArrayList<>(orderMap.values());
}
/**
* 根据状态查询订单
* @param status 订单状态
* @return 订单列表
*/
public List<Order> getOrdersByStatus(String status) {
List<Order> orders = new ArrayList<>();
for (Order order : orderMap.values()) {
if (order.getStatus().equals(status)) {
orders.add(order);
}
}
return orders;
}
/**
* 获取待发货订单
* @return 待发货订单列表
*/
public List<Order> getPendingOrders() {
return getOrdersByStatus("待发货");
}
/**
* 订单实体类
*/
public static class Order {
private String orderId;
private String orderDate;
private String customerName;
private double totalAmount;
private String status;
public Order(String orderId, String orderDate, String customerName, double totalAmount, String status) {
this.orderId = orderId;
this.orderDate = orderDate;
this.customerName = customerName;
this.totalAmount = totalAmount;
this.status = status;
}
public String getOrderId() {
return orderId;
}
public String getOrderDate() {
return orderDate;
}
public String getCustomerName() {
return customerName;
}
public double getTotalAmount() {
return totalAmount;
}
public String getStatus() {
return status;
}
@Override
public String toString() {
return "订单号: " + orderId + ", 日期: " + orderDate + ", 客户: " + customerName + ", 金额: " + totalAmount + ", 状态: " + status;
}
}
}

View File

@ -0,0 +1,85 @@
package cn.qihangerp.erp.service;
import dev.langchain4j.agent.tool.Tool;
import java.util.List;
/**
* 订单工具服务用于AI查询订单信息
*/
public class OrderToolService {
private final OrderService orderService;
public OrderToolService() {
this.orderService = new OrderService();
}
/**
* 查询指定订单号的订单信息
* @param orderId 订单号
* @return 订单信息
*/
@Tool("根据订单号查询订单信息")
public String getOrderById(String orderId) {
OrderService.Order order = orderService.getOrderById(orderId);
if (order == null) {
return "未找到订单号为" + orderId + "的订单";
}
return order.toString().replace("\n", "<br>");
}
/**
* 查询所有订单
* @return 所有订单信息
*/
@Tool("获取所有订单信息")
public String getAllOrders() {
List<OrderService.Order> orders = orderService.getAllOrders();
if (orders.isEmpty()) {
return "暂无订单数据";
}
StringBuilder sb = new StringBuilder();
sb.append("所有订单信息:<br>");
for (OrderService.Order order : orders) {
sb.append(order.toString()).append("<br>");
}
return sb.toString();
}
/**
* 查询指定状态的订单
* @param status 订单状态
* @return 订单信息
*/
@Tool("根据状态查询订单信息")
public String getOrdersByStatus(String status) {
List<OrderService.Order> orders = orderService.getOrdersByStatus(status);
if (orders.isEmpty()) {
return "暂无状态为" + status + "的订单";
}
StringBuilder sb = new StringBuilder();
sb.append("状态为").append(status).append("的订单:<br>");
for (OrderService.Order order : orders) {
sb.append(order.toString()).append("<br>");
}
return sb.toString();
}
/**
* 查询待发货订单
* @return 待发货订单信息
*/
@Tool("获取待发货订单信息")
public String getPendingOrders() {
List<OrderService.Order> orders = orderService.getPendingOrders();
if (orders.isEmpty()) {
return "暂无待发货订单";
}
StringBuilder sb = new StringBuilder();
sb.append("待发货订单:<br>");
for (OrderService.Order order : orders) {
sb.append(order.toString()).append("<br>");
}
return sb.toString();
}
}

View File

@ -3,6 +3,7 @@ package cn.qihangerp.erp.serviceImpl;
import dev.langchain4j.model.ollama.OllamaChatModel;
import org.springframework.stereotype.Service;
import java.time.Duration;
import cn.qihangerp.erp.service.OrderToolService;
/**
* AI服务类使用LangChain4J调用Ollama模型处理聊天内容
@ -18,6 +19,29 @@ public class AiService {
*/
public String processMessage(String message, String model) {
try {
// 检查是否是订单相关查询
if (message.contains("订单")) {
// 使用订单服务直接处理
OrderToolService orderToolService = new OrderToolService();
// 简单的意图识别
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默认端口
@ -28,6 +52,7 @@ public class AiService {
// 调用Ollama模型获取回复
return modelInstance.chat(message);
}
} catch (Exception e) {
e.printStackTrace();
return "错误: " + e.getMessage();

View File

@ -31,7 +31,7 @@
</el-avatar>
</div>
<div class="message-content">
<div class="message-text">{{ message.content }}</div>
<div class="message-text" v-html="message.content"></div>
<div class="message-time">{{ message.time }}</div>
</div>
</div>
@ -446,6 +446,7 @@ export default {
font-size: 14px;
line-height: 1.5;
margin-bottom: 4px;
white-space: pre-line;
}
.message-time {