From 0268f58a18bfcf061389387ef5322bf11aece154 Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期二, 28 四月 2026 14:22:54 +0800
Subject: [PATCH] Merge branch 'dev_New_pro' of http://114.132.189.42:9002/r/product-inventory-management-after into dev_New_pro

---
 src/main/java/com/ruoyi/ai/assistant/ApproveTodoIntentExecutor.java |   85 ++++++++++++++++++++++++++++++++++--------
 1 files changed, 68 insertions(+), 17 deletions(-)

diff --git a/src/main/java/com/ruoyi/ai/assistant/ApproveTodoIntentExecutor.java b/src/main/java/com/ruoyi/ai/assistant/ApproveTodoIntentExecutor.java
index 6e1a948..daaaf74 100644
--- a/src/main/java/com/ruoyi/ai/assistant/ApproveTodoIntentExecutor.java
+++ b/src/main/java/com/ruoyi/ai/assistant/ApproveTodoIntentExecutor.java
@@ -16,6 +16,8 @@
 
     private static final Pattern APPROVE_ID_PATTERN = Pattern.compile("\\b[A-Za-z]*\\d{8,}\\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 static final Pattern NUMBER_PATTERN = Pattern.compile("(\\d+(?:\\.\\d+)?)");
 
     private final ApproveTodoTools approveTodoTools;
 
@@ -23,7 +25,7 @@
         this.approveTodoTools = approveTodoTools;
     }
 
-    public String tryExecute(String message) {
+    public String tryExecute(String memoryId, String message) {
         if (!StringUtils.hasText(message)) {
             return null;
         }
@@ -32,46 +34,52 @@
         String approveId = extractApproveId(text);
 
         if (containsAny(text, "缁熻", "鍒嗘瀽", "鍥捐〃", "瓒嬪娍", "鍗犳瘮")) {
-            return approveTodoTools.getTodoStats();
+            return approveTodoTools.getTodoStats(
+                    memoryId,
+                    extractStartDate(text),
+                    extractEndDate(text),
+                    extractTimeRange(text)
+            );
         }
         if (containsAny(text, "娴佽浆", "杩涘害", "鑺傜偣", "鏃ュ織")) {
             return StringUtils.hasText(approveId)
-                    ? approveTodoTools.getTodoProgress(approveId)
+                    ? approveTodoTools.getTodoProgress(memoryId, approveId)
                     : missingApproveId("todo_progress", "鏌ヨ瀹℃壒杩涘害闇�瑕佹彁渚涙祦绋嬬紪鍙枫��");
         }
         if (containsAny(text, "璇︽儏", "鏄庣粏") && !containsAny(text, "鍒楄〃")) {
             return StringUtils.hasText(approveId)
-                    ? approveTodoTools.getTodoDetail(approveId)
+                    ? approveTodoTools.getTodoDetail(memoryId, approveId)
                     : missingApproveId("todo_detail", "鏌ヨ瀹℃壒璇︽儏闇�瑕佹彁渚涙祦绋嬬紪鍙枫��");
         }
         if (containsAny(text, "鍙栨秷瀹℃牳", "鎾ら攢瀹℃牳", "鍥為��瀹℃牳")) {
             return StringUtils.hasText(approveId)
-                    ? approveTodoTools.cancelReviewTodo(approveId, extractTail(text, "鍘熷洜"))
+                    ? approveTodoTools.cancelReviewTodo(memoryId, approveId, extractTail(text, "鍘熷洜"))
                     : missingApproveId("cancel_review_action", "鍙栨秷瀹℃牳闇�瑕佹彁渚涙祦绋嬬紪鍙枫��");
         }
         if (containsAny(text, "鍒犻櫎")) {
             return StringUtils.hasText(approveId)
-                    ? approveTodoTools.deleteTodo(approveId)
+                    ? approveTodoTools.deleteTodo(memoryId, approveId)
                     : missingApproveId("delete_action", "鍒犻櫎瀹℃壒鍗曢渶瑕佹彁渚涙祦绋嬬紪鍙枫��");
         }
         if (containsAny(text, "椹冲洖", "鎷掔粷")) {
             return StringUtils.hasText(approveId)
-                    ? approveTodoTools.reviewTodo(approveId, "reject", extractTail(text, "鍘熷洜"))
+                    ? approveTodoTools.reviewTodo(memoryId, approveId, "reject", extractTail(text, "鍘熷洜"))
                     : missingApproveId("review_action", "椹冲洖瀹℃壒闇�瑕佹彁渚涙祦绋嬬紪鍙枫��");
         }
         if (containsAny(text, "瀹℃牳閫氳繃", "瀹℃壒閫氳繃", "閫氳繃瀹℃壒", "鍚屾剰瀹℃壒", "瀹℃壒鍚屾剰")) {
             return StringUtils.hasText(approveId)
-                    ? approveTodoTools.reviewTodo(approveId, "approve", extractTail(text, "澶囨敞"))
+                    ? approveTodoTools.reviewTodo(memoryId, approveId, "approve", extractTail(text, "澶囨敞"))
                     : missingApproveId("review_action", "瀹℃壒閫氳繃闇�瑕佹彁渚涙祦绋嬬紪鍙枫��");
         }
         if (StringUtils.hasText(approveId)
                 && containsAny(text, "閫氳繃", "鍚屾剰")
                 && !containsAny(text, "鏈�氳繃", "閫氳繃鐜�", "瀹℃壒閫氳繃鐜�", "瀹℃牳閫氳繃鐜�")) {
-            return approveTodoTools.reviewTodo(approveId, "approve", extractTail(text, "澶囨敞"));
+            return approveTodoTools.reviewTodo(memoryId, approveId, "approve", extractTail(text, "澶囨敞"));
         }
         if (containsAny(text, "淇敼")) {
             return StringUtils.hasText(approveId)
                     ? approveTodoTools.updateTodo(
+                    memoryId,
                     approveId,
                     extractValue(text, "鏍囬"),
                     extractDateValue(text, "寮�濮嬫棩鏈�"),
@@ -84,6 +92,7 @@
         }
         if (containsAny(text, "鍒楄〃", "寰呭姙", "鏌ヨ瀹℃壒")) {
             return approveTodoTools.listTodos(
+                    memoryId,
                     extractStatus(text),
                     extractApproveType(text),
                     extractKeyword(text),
@@ -165,33 +174,75 @@
                 .replace("寰呭姙", "")
                 .replace("鍒楄〃", "")
                 .replace("鍓�10鏉�", "")
-                .replace("鍓�20鏉�", "")
+                .replace("鏈�杩�10鏉�", "")
                 .trim();
         return cleaned.length() >= 2 ? cleaned : null;
     }
 
     private String extractValue(String text, String fieldName) {
-        Matcher matcher = Pattern.compile(fieldName + "(鏀逛负|淇敼涓簗涓簗鏄�)([^锛屻��,锛�;\\s]+)").matcher(text);
+        Pattern pattern = Pattern.compile(fieldName + "(鏀逛负|淇敼涓簗鏄�)?[:锛歖?[\\s]*([^,锛屻�傦紱;\\s]+)");
+        Matcher matcher = pattern.matcher(text);
         return matcher.find() ? matcher.group(2) : null;
     }
 
     private String extractDateValue(String text, String fieldName) {
-        Matcher matcher = Pattern.compile(fieldName + "(鏀逛负|淇敼涓簗涓簗鏄�)(\\d{4}-\\d{2}-\\d{2})").matcher(text);
-        return matcher.find() ? matcher.group(2) : null;
+        int index = text.indexOf(fieldName);
+        if (index < 0) {
+            return null;
+        }
+        Matcher matcher = DATE_PATTERN.matcher(text.substring(index));
+        return matcher.find() ? matcher.group(1) : null;
+    }
+
+    private String extractStartDate(String text) {
+        Matcher matcher = DATE_PATTERN.matcher(text);
+        return matcher.find() ? matcher.group(1) : null;
+    }
+
+    private String extractEndDate(String text) {
+        Matcher matcher = DATE_PATTERN.matcher(text);
+        if (!matcher.find()) {
+            return null;
+        }
+        return matcher.find() ? matcher.group(1) : null;
+    }
+
+    private String extractTimeRange(String text) {
+        if (containsAny(text, "浠婂ぉ", "鏄ㄦ棩", "鏄ㄥぉ", "鏈懆", "涓婂懆", "鏈湀", "涓婃湀", "鏈勾", "浠婂勾", "鍘诲勾")) {
+            return text;
+        }
+        if (Pattern.compile("杩慭\d+(澶﹟鍛▅涓湀|鏈坾骞�)").matcher(text).find()) {
+            return text;
+        }
+        if (Pattern.compile("鏈�杩慭\d+(澶﹟鍛▅涓湀|鏈坾骞�)").matcher(text).find()) {
+            return text;
+        }
+        if (text.contains("鍒�") || text.contains("鑷�")) {
+            return text;
+        }
+        return null;
     }
 
     private Integer extractIntegerValue(String text, String fieldName) {
-        Matcher matcher = Pattern.compile(fieldName + "(鏀逛负|淇敼涓簗涓簗鏄�)(\\d{1,2})").matcher(text);
+        if (!text.contains(fieldName)) {
+            return null;
+        }
+        Matcher matcher = Pattern.compile(fieldName + "(鏀逛负|淇敼涓簗鏄�)?[:锛歖?[\\s]*(\\d{1,2})").matcher(text);
         return matcher.find() ? Integer.parseInt(matcher.group(2)) : null;
     }
 
     private BigDecimal extractBigDecimalValue(String text, String fieldName) {
-        Matcher matcher = Pattern.compile(fieldName + "(鏀逛负|淇敼涓簗涓簗鏄�)(\\d+(\\.\\d+)?)").matcher(text);
-        return matcher.find() ? new BigDecimal(matcher.group(2)) : null;
+        int index = text.indexOf(fieldName);
+        if (index < 0) {
+            return null;
+        }
+        Matcher matcher = NUMBER_PATTERN.matcher(text.substring(index));
+        return matcher.find() ? new BigDecimal(matcher.group(1)) : null;
     }
 
     private String extractTail(String text, String key) {
-        Matcher matcher = Pattern.compile(key + "(鏄瘄涓簗锛殀:)?(.+)").matcher(text);
+        Pattern pattern = Pattern.compile(key + "(鏄瘄涓�)?[:锛歖?[\\s]*(.+)");
+        Matcher matcher = pattern.matcher(text);
         return matcher.find() ? matcher.group(2).trim() : null;
     }
 

--
Gitblit v1.9.3