From 7b7a2cc050d55af2eed2cccb3761a91314c9b9f6 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期四, 30 四月 2026 15:07:32 +0800
Subject: [PATCH] feat:1.产品维护,增加产品编号字段 2.入库批号添加 3.是否质检仅添加入库记录(待审核) 4.是否生产报工更改 5.入库做审核

---
 src/main/java/com/ruoyi/ai/assistant/ApproveTodoIntentExecutor.java |   29 +++++++++++++++++++++++------
 1 files changed, 23 insertions(+), 6 deletions(-)

diff --git a/src/main/java/com/ruoyi/ai/assistant/ApproveTodoIntentExecutor.java b/src/main/java/com/ruoyi/ai/assistant/ApproveTodoIntentExecutor.java
index daaaf74..5911521 100644
--- a/src/main/java/com/ruoyi/ai/assistant/ApproveTodoIntentExecutor.java
+++ b/src/main/java/com/ruoyi/ai/assistant/ApproveTodoIntentExecutor.java
@@ -18,6 +18,9 @@
     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 static final Pattern NUMBER_PATTERN = Pattern.compile("(\\d+(?:\\.\\d+)?)");
+    private static final Pattern RECENT_RANGE_PATTERN = Pattern.compile("杩慭\d+(澶﹟鍛▅涓湀|鏈坾骞�)");
+    private static final Pattern HALF_RANGE_PATTERN = Pattern.compile("(鏈�杩憒杩�)?鍗�(涓�)?(鏈坾骞�)");
+    private static final Pattern EXPLICIT_RANGE_PATTERN = Pattern.compile(".*(鍒皘鑷�).*");
 
     private final ApproveTodoTools approveTodoTools;
 
@@ -33,7 +36,7 @@
         String text = message.trim();
         String approveId = extractApproveId(text);
 
-        if (containsAny(text, "缁熻", "鍒嗘瀽", "鍥捐〃", "瓒嬪娍", "鍗犳瘮")) {
+        if (isStatsIntent(text)) {
             return approveTodoTools.getTodoStats(
                     memoryId,
                     extractStartDate(text),
@@ -99,6 +102,20 @@
                     extractLimit(text));
         }
         return null;
+    }
+
+    private boolean isStatsIntent(String text) {
+        if (containsAny(text, "缁熻", "鍒嗘瀽", "鍥捐〃", "瓒嬪娍", "鍗犳瘮", "姹囨��", "鎬婚噺")) {
+            return true;
+        }
+        boolean hasQueryWord = containsAny(text, "鏌ヨ", "鏌ョ湅", "鐪嬩笅", "鐪嬬湅", "鑾峰彇");
+        boolean hasDataWord = containsAny(text, "鏁版嵁", "鎶ヨ〃", "鎯呭喌", "鏁伴噺", "閲戦");
+        boolean hasTimeWord = containsAny(text, "浠婂ぉ", "鏄ㄦ棩", "鏄ㄥぉ", "鏈懆", "涓婂懆", "鏈湀", "涓婃湀", "鏈勾", "浠婂勾", "鍘诲勾")
+                || DATE_PATTERN.matcher(text).find()
+                || RECENT_RANGE_PATTERN.matcher(text).find()
+                || HALF_RANGE_PATTERN.matcher(text).find()
+                || EXPLICIT_RANGE_PATTERN.matcher(text).matches();
+        return hasQueryWord && hasDataWord && hasTimeWord;
     }
 
     private boolean containsAny(String text, String... keywords) {
@@ -180,7 +197,7 @@
     }
 
     private String extractValue(String text, String fieldName) {
-        Pattern pattern = Pattern.compile(fieldName + "(鏀逛负|淇敼涓簗鏄�)?[:锛歖?[\\s]*([^,锛屻�傦紱;\\s]+)");
+        Pattern pattern = Pattern.compile(fieldName + "(鏀逛负|淇敼涓簗鏄�)[:锛歖?[\\s]*([^,锛屻�傦紱;\\s]+)");
         Matcher matcher = pattern.matcher(text);
         return matcher.find() ? matcher.group(2) : null;
     }
@@ -211,13 +228,13 @@
         if (containsAny(text, "浠婂ぉ", "鏄ㄦ棩", "鏄ㄥぉ", "鏈懆", "涓婂懆", "鏈湀", "涓婃湀", "鏈勾", "浠婂勾", "鍘诲勾")) {
             return text;
         }
-        if (Pattern.compile("杩慭\d+(澶﹟鍛▅涓湀|鏈坾骞�)").matcher(text).find()) {
+        if (RECENT_RANGE_PATTERN.matcher(text).find()) {
             return text;
         }
-        if (Pattern.compile("鏈�杩慭\d+(澶﹟鍛▅涓湀|鏈坾骞�)").matcher(text).find()) {
+        if (HALF_RANGE_PATTERN.matcher(text).find()) {
             return text;
         }
-        if (text.contains("鍒�") || text.contains("鑷�")) {
+        if (EXPLICIT_RANGE_PATTERN.matcher(text).matches()) {
             return text;
         }
         return null;
@@ -227,7 +244,7 @@
         if (!text.contains(fieldName)) {
             return null;
         }
-        Matcher matcher = Pattern.compile(fieldName + "(鏀逛负|淇敼涓簗鏄�)?[:锛歖?[\\s]*(\\d{1,2})").matcher(text);
+        Matcher matcher = Pattern.compile(fieldName + "(鏀逛负|淇敼涓簗鏄�)[:锛歖?[\\s]*(\\d{1,2})").matcher(text);
         return matcher.find() ? Integer.parseInt(matcher.group(2)) : null;
     }
 

--
Gitblit v1.9.3