新增打开路由
This commit is contained in:
parent
e92196ddae
commit
fb8b9d8ad7
|
|
@ -3,9 +3,15 @@ package cn.qihangerp.erp.serviceImpl;
|
||||||
import dev.langchain4j.model.ollama.OllamaChatModel;
|
import dev.langchain4j.model.ollama.OllamaChatModel;
|
||||||
import dev.langchain4j.service.AiServices;
|
import dev.langchain4j.service.AiServices;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import cn.qihangerp.erp.service.OrderToolService;
|
import cn.qihangerp.erp.service.OrderToolService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -14,6 +20,92 @@ import cn.qihangerp.erp.service.OrderToolService;
|
||||||
@Service
|
@Service
|
||||||
public class AiService {
|
public class AiService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 页面规则类
|
||||||
|
*/
|
||||||
|
static class PageRule {
|
||||||
|
String keyword;
|
||||||
|
String route;
|
||||||
|
String message;
|
||||||
|
|
||||||
|
public PageRule(String keyword, String route, String message) {
|
||||||
|
this.keyword = keyword;
|
||||||
|
this.route = route;
|
||||||
|
this.message = message;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 页面规则列表
|
||||||
|
private List<PageRule> pageRules = new ArrayList<>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 构造方法,加载页面规则
|
||||||
|
*/
|
||||||
|
public AiService() {
|
||||||
|
loadPageRules();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 加载页面规则
|
||||||
|
*/
|
||||||
|
private void loadPageRules() {
|
||||||
|
try (InputStream inputStream = getClass().getResourceAsStream("/page-rules.md");
|
||||||
|
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) {
|
||||||
|
|
||||||
|
String line;
|
||||||
|
boolean inTable = false;
|
||||||
|
|
||||||
|
while ((line = reader.readLine()) != null) {
|
||||||
|
line = line.trim();
|
||||||
|
|
||||||
|
// 检查是否进入表格部分
|
||||||
|
if (line.equals("| 关键词 | 路由路径 | 提示消息 |")) {
|
||||||
|
inTable = true;
|
||||||
|
// 跳过下一行分隔符
|
||||||
|
reader.readLine();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果在表格中,解析规则
|
||||||
|
if (inTable && line.startsWith("|")) {
|
||||||
|
String[] parts = line.split("\\|").clone();
|
||||||
|
if (parts.length >= 4) {
|
||||||
|
String keyword = parts[1].trim();
|
||||||
|
String route = parts[2].trim();
|
||||||
|
String message = parts[3].trim();
|
||||||
|
if (!keyword.isEmpty() && !route.isEmpty() && !message.isEmpty()) {
|
||||||
|
pageRules.add(new PageRule(keyword, route, message));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查表格结束
|
||||||
|
if (inTable && line.isEmpty()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("加载页面规则成功,共加载 " + pageRules.size() + " 条规则");
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
System.out.println("加载页面规则失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检查页面跳转规则
|
||||||
|
* @param message 用户消息
|
||||||
|
* @return 页面跳转响应,null表示没有匹配的规则
|
||||||
|
*/
|
||||||
|
private String checkPageRules(String message) {
|
||||||
|
for (PageRule rule : pageRules) {
|
||||||
|
if (message.contains(rule.keyword)) {
|
||||||
|
return String.format("{\"action\": \"navigate\", \"route\": \"%s\", \"message\": \"%s\"}", rule.route, rule.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 定义AI服务接口
|
* 定义AI服务接口
|
||||||
*/
|
*/
|
||||||
|
|
@ -29,9 +121,11 @@ public class AiService {
|
||||||
*/
|
*/
|
||||||
public String processMessage(String message, String model) {
|
public String processMessage(String message, String model) {
|
||||||
try {
|
try {
|
||||||
// 检查是否包含打开页面的指令
|
// 优先检查页面跳转规则
|
||||||
if (message.contains("打开店铺管理") || message.contains("进入店铺管理") || message.contains("前往店铺管理")) {
|
String pageRuleResponse = checkPageRules(message);
|
||||||
return "{\"action\": \"navigate\", \"route\": \"/shop/shop_list\", \"message\": \"正在跳转到店铺管理页面\"}";
|
if (pageRuleResponse != null) {
|
||||||
|
System.out.println("匹配到页面跳转规则: " + pageRuleResponse);
|
||||||
|
return pageRuleResponse;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取当前日期
|
// 获取当前日期
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,36 @@
|
||||||
|
# 页面跳转规则
|
||||||
|
|
||||||
|
## 规则说明
|
||||||
|
当用户请求打开某个页面时,AI应该返回对应的路由信息,格式为JSON:
|
||||||
|
```json
|
||||||
|
{"action": "navigate", "route": "路由路径", "message": "提示消息"}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 页面映射表
|
||||||
|
|
||||||
|
| 关键词 | 路由路径 | 提示消息 |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| 打开店铺管理 | /shop/shop_list | 正在跳转到店铺管理页面 |
|
||||||
|
| 进入店铺管理 | /shop/shop_list | 正在跳转到店铺管理页面 |
|
||||||
|
| 前往店铺管理 | /shop/shop_list | 正在跳转到店铺管理页面 |
|
||||||
|
| 打开订单管理 | /order/order_list | 正在跳转到订单管理页面 |
|
||||||
|
| 进入订单管理 | /order/order_list | 正在跳转到订单管理页面 |
|
||||||
|
| 前往订单管理 | /order/order_list | 正在跳转到订单管理页面 |
|
||||||
|
| 打开商品管理 | /goods | 正在跳转到商品管理页面 |
|
||||||
|
| 进入商品管理 | /goods | 正在跳转到商品管理页面 |
|
||||||
|
| 前往商品管理 | /goods | 正在跳转到商品管理页面 |
|
||||||
|
| 打开库存管理 | /stock | 正在跳转到库存管理页面 |
|
||||||
|
| 进入库存管理 | /stock | 正在跳转到库存管理页面 |
|
||||||
|
| 前往库存管理 | /stock | 正在跳转到库存管理页面 |
|
||||||
|
| 打开发货管理 | /shipping | 正在跳转到发货管理页面 |
|
||||||
|
| 进入发货管理 | /shipping | 正在跳转到发货管理页面 |
|
||||||
|
| 前往发货管理 | /shipping | 正在跳转到发货管理页面 |
|
||||||
|
| 打开售后管理 | /refund | 正在跳转到售后管理页面 |
|
||||||
|
| 进入售后管理 | /refund | 正在跳转到售后管理页面 |
|
||||||
|
| 前往售后管理 | /refund | 正在跳转到售后管理页面 |
|
||||||
|
| 打开采购管理 | /purchase | 正在跳转到采购管理页面 |
|
||||||
|
| 进入采购管理 | /purchase | 正在跳转到采购管理页面 |
|
||||||
|
| 前往采购管理 | /purchase | 正在跳转到采购管理页面 |
|
||||||
|
| 打开系统设置 | /system | 正在跳转到系统设置页面 |
|
||||||
|
| 进入系统设置 | /system | 正在跳转到系统设置页面 |
|
||||||
|
| 前往系统设置 | /system | 正在跳转到系统设置页面 |
|
||||||
Loading…
Reference in New Issue