From 1ca5584d7e3200a9af65a099bd26d3593e2ba702 Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期四, 07 五月 2026 14:36:08 +0800
Subject: [PATCH] 迁移pro

---
 src/main/java/com/ruoyi/ai/assistant/PurchaseIntentExecutor.java |  161 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 161 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/ruoyi/ai/assistant/PurchaseIntentExecutor.java b/src/main/java/com/ruoyi/ai/assistant/PurchaseIntentExecutor.java
new file mode 100644
index 0000000..5991fc3
--- /dev/null
+++ b/src/main/java/com/ruoyi/ai/assistant/PurchaseIntentExecutor.java
@@ -0,0 +1,161 @@
+package com.ruoyi.ai.assistant;
+
+import com.ruoyi.ai.tools.PurchaseAgentTools;
+import org.springframework.stereotype.Component;
+import org.springframework.util.StringUtils;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+@Component
+public class PurchaseIntentExecutor {
+
+    private static final Pattern ID_PATTERN = Pattern.compile("\\b\\d{1,12}\\b");
+    private static final Pattern LIMIT_PATTERN = Pattern.compile("(鍓峾鏈�杩�)?(\\d{1,2})鏉�");
+    private static final Pattern DATE_PATTERN = Pattern.compile("\\d{4}-\\d{2}-\\d{2}");
+
+    private final PurchaseAgentTools purchaseAgentTools;
+
+    public PurchaseIntentExecutor(PurchaseAgentTools purchaseAgentTools) {
+        this.purchaseAgentTools = purchaseAgentTools;
+    }
+
+    public String tryExecute(String memoryId, String message) {
+        if (!StringUtils.hasText(message)) {
+            return null;
+        }
+        String text = message.trim();
+
+        if (containsAny(text, "鎺掕", "鎺掑悕", "鍓嶅嚑", "鍓嶄簲", "鍓嶅崄") && containsAny(text, "鐗╂枡", "浜у搧", "鍘熸潗鏂�", "閲囪喘閲戦", "閲戦")) {
+            return purchaseAgentTools.rankPurchaseMaterials(
+                    memoryId,
+                    extractStartDate(text),
+                    extractEndDate(text),
+                    text,
+                    extractLimit(text)
+            );
+        }
+        if (containsAny(text, "鏈叆搴�", "寰呭叆搴�", "娌℃湁鍏ュ簱", "杩樻湭鍏ュ簱")) {
+            return purchaseAgentTools.listUnstockedPurchaseOrders(
+                    memoryId,
+                    extractStartDate(text),
+                    extractEndDate(text),
+                    extractKeyword(text),
+                    extractLimit(text)
+            );
+        }
+        if (containsAny(text, "鍒拌揣寮傚父", "鍒拌揣鏈夊紓甯�", "寮傚父鍒拌揣", "鍒拌揣闂", "渚涘簲鍟嗗埌璐у紓甯�")) {
+            return purchaseAgentTools.listArrivalExceptions(
+                    memoryId,
+                    extractStartDate(text),
+                    extractEndDate(text),
+                    text,
+                    extractLimit(text)
+            );
+        }
+        if (containsAny(text, "寰呬粯娆�", "鏈粯娆�", "鏈粯娓�", "寰呮敮浠�", "搴斾粯")) {
+            return purchaseAgentTools.listPendingPaymentOrders(
+                    memoryId,
+                    extractStartDate(text),
+                    extractEndDate(text),
+                    extractKeyword(text),
+                    extractLimit(text)
+            );
+        }
+        if (containsAny(text, "閫�璐�", "閫�鏂�", "鎷掓敹")) {
+            return purchaseAgentTools.listPurchaseReturns(
+                    memoryId,
+                    extractStartDate(text),
+                    extractEndDate(text),
+                    extractKeyword(text),
+                    extractLimit(text)
+            );
+        }
+        if (isStatsIntent(text)) {
+            return purchaseAgentTools.getPurchaseStats(
+                    memoryId,
+                    extractStartDate(text),
+                    extractEndDate(text),
+                    text
+            );
+        }
+        if (containsAny(text, "璇︽儏", "鏄庣粏") && extractId(text) != null) {
+            return purchaseAgentTools.getPurchaseLedgerDetail(memoryId, extractId(text));
+        }
+        if (containsAny(text, "鍙拌处", "閲囪喘鍗�", "閲囪喘璁㈠崟", "璁㈠崟", "鍚堝悓", "鍒楄〃", "鏌ヨ")) {
+            return purchaseAgentTools.listPurchaseLedgers(
+                    memoryId,
+                    extractKeyword(text),
+                    extractStartDate(text),
+                    extractEndDate(text),
+                    extractLimit(text)
+            );
+        }
+        return null;
+    }
+
+    private boolean isStatsIntent(String text) {
+        if (containsAny(text, "缁熻", "鍒嗘瀽", "鎶ヨ〃", "姹囨��", "瓒嬪娍", "鏁版嵁鐪嬫澘", "鎯呭喌", "鏈夊灏�")) {
+            return true;
+        }
+        boolean queryWord = containsAny(text, "鏌ヨ", "鏌ョ湅", "鐪嬩笅", "鐪嬬湅", "鑾峰彇");
+        boolean dataWord = containsAny(text, "鏁版嵁", "閲戦", "鏁伴噺", "鍚堝悓棰�", "浠樻棰�", "鍙戠エ棰�");
+        boolean timeWord = containsAny(text, "浠婂ぉ", "鏈懆", "鏈湀", "涓婃湀", "浠婂勾", "鍘诲勾", "杩戝崐骞�", "鏈�杩戝崐涓湀", "鍗婁釜鏈�")
+                || DATE_PATTERN.matcher(text).find();
+        return queryWord && dataWord && timeWord;
+    }
+
+    private boolean containsAny(String text, String... keywords) {
+        for (String keyword : keywords) {
+            if (text.contains(keyword)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private Long extractId(String text) {
+        Matcher matcher = ID_PATTERN.matcher(text);
+        if (!matcher.find()) {
+            return null;
+        }
+        return Long.parseLong(matcher.group());
+    }
+
+    private Integer extractLimit(String text) {
+        Matcher matcher = LIMIT_PATTERN.matcher(text);
+        return matcher.find() ? Integer.parseInt(matcher.group(2)) : 10;
+    }
+
+    private String extractStartDate(String text) {
+        Matcher matcher = DATE_PATTERN.matcher(text);
+        return matcher.find() ? matcher.group() : null;
+    }
+
+    private String extractEndDate(String text) {
+        Matcher matcher = DATE_PATTERN.matcher(text);
+        if (!matcher.find()) {
+            return null;
+        }
+        return matcher.find() ? matcher.group() : null;
+    }
+
+    private String extractKeyword(String text) {
+        String cleaned = text
+                .replace("鏌ヨ", "")
+                .replace("鏌ョ湅", "")
+                .replace("閲囪喘", "")
+                .replace("閲囪喘鍗�", "")
+                .replace("閲囪喘璁㈠崟", "")
+                .replace("璁㈠崟", "")
+                .replace("鍙拌处", "")
+                .replace("鍒楄〃", "")
+                .replace("鍝簺", "")
+                .replace("鍒楀嚭", "")
+                .replace("甯垜", "")
+                .replace("鏈�杩�10鏉�", "")
+                .replace("鍓�10鏉�", "")
+                .trim();
+        return cleaned.length() >= 2 ? cleaned : null;
+    }
+}

--
Gitblit v1.9.3