From d640da3dac5b5f811284ab9a7c386da1e7ab6739 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 30 四月 2026 17:30:57 +0800
Subject: [PATCH] feat(ai): 增强AI文件提取和审批待办功能

---
 src/main/java/com/ruoyi/ai/tools/ApproveTodoTools.java |   54 ++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 42 insertions(+), 12 deletions(-)

diff --git a/src/main/java/com/ruoyi/ai/tools/ApproveTodoTools.java b/src/main/java/com/ruoyi/ai/tools/ApproveTodoTools.java
index 8215ce8..233c459 100644
--- a/src/main/java/com/ruoyi/ai/tools/ApproveTodoTools.java
+++ b/src/main/java/com/ruoyi/ai/tools/ApproveTodoTools.java
@@ -70,36 +70,54 @@
         this.aiSessionUserContext = aiSessionUserContext;
     }
 
-    @Tool(name = "鏌ヨ瀹℃壒寰呭姙鍒楄〃", value = "鏌ヨ褰撳墠鐧诲綍浜虹浉鍏崇殑瀹℃壒寰呭姙锛屼紭鍏堣繑鍥炶嚜宸卞緟澶勭悊鐨勫鎵癸紝鏀寔鎸夌姸鎬併�佺被鍨嬨�佸叧閿瓧杩囨护銆�")
+    @Tool(name = "鏌ヨ瀹℃壒寰呭姙鍒楄〃", value = "鏌ヨ褰撳墠鐧诲綍浜虹浉鍏崇殑瀹℃壒寰呭姙锛屼紭鍏堣繑鍥炶嚜宸卞緟澶勭悊鐨勫鎵癸紝鏀寔鎸夌姸鎬併�佺被鍨嬨�佸叧閿瓧鍜岃寖鍥磋繃婊ゃ��")
     public String listTodos(@ToolMemoryId String memoryId,
                             @P(value = "瀹℃壒鐘舵�侊紝鍙�夊�硷細all銆乸ending銆乸rocessing銆乤pproved銆乺ejected銆乺esubmitted", required = false) String status,
                             @P(value = "瀹℃壒绫诲瀷缂栧彿锛屽彲涓嶄紶", required = false) Integer approveType,
                             @P(value = "鍏抽敭瀛楋紝鍙尮閰嶆祦绋嬬紪鍙枫�佹爣棰樸�佺敵璇蜂汉銆佸綋鍓嶅鎵逛汉", required = false) String keyword,
-                            @P(value = "杩斿洖鏉℃暟锛岄粯璁�10锛屾渶澶�20", required = false) Integer limit) {
+                            @P(value = "杩斿洖鏉℃暟锛岄粯璁�10锛屾渶澶�20", required = false) Integer limit,
+                            @P(value = "鏌ヨ鑼冨洿锛屽彲閫夊�硷細related銆乤pplicant銆乤pprover锛況elated 琛ㄧず褰撳墠鐢ㄦ埛鐩稿叧锛宎pplicant 琛ㄧず鎴戝彂璧风殑锛宎pprover 琛ㄧず寰呮垜澶勭悊鐨�", required = false) String scope) {
 
         LoginUser loginUser = currentLoginUser(memoryId);
         Long userId = loginUser.getUserId();
         Integer statusCode = parseStatus(status);
+        String normalizedScope = normalizeScope(scope);
 
         LambdaQueryWrapper<ApproveProcess> wrapper = new LambdaQueryWrapper<>();
-        wrapper.eq(ApproveProcess::getApproveDelete, 0)
-                .ne(ApproveProcess::getApproveStatus, 2);
+        wrapper.eq(ApproveProcess::getApproveDelete, 0);
+        if (statusCode == null) {
+            wrapper.ne(ApproveProcess::getApproveStatus, 2);
+        }
 
         if (approveType != null) {
             wrapper.eq(ApproveProcess::getApproveType, approveType);
         }
-//        if (StringUtils.hasText(keyword)) {
-//            wrapper.and(w -> w.like(ApproveProcess::getApproveId, keyword)
-//                    .or().like(ApproveProcess::getApproveReason, keyword)
-//                    .or().like(ApproveProcess::getApproveUserName, keyword)
-//                    .or().like(ApproveProcess::getApproveUserCurrentName, keyword));
-//        }
-        if (statusCode != null && (statusCode == 0 || statusCode == 1)) {
+        if (StringUtils.hasText(keyword)) {
+            wrapper.and(w -> w.like(ApproveProcess::getApproveId, keyword)
+                    .or().like(ApproveProcess::getApproveReason, keyword)
+                    .or().like(ApproveProcess::getApproveUserName, keyword)
+                    .or().like(ApproveProcess::getApproveUserCurrentName, keyword));
+        }
+        if ("applicant".equals(normalizedScope)) {
+            wrapper.eq(ApproveProcess::getApproveUser, userId);
+            if (statusCode != null) {
+                wrapper.eq(ApproveProcess::getApproveStatus, statusCode);
+            }
+        } else if ("approver".equals(normalizedScope)) {
             wrapper.eq(ApproveProcess::getApproveUserCurrentId, userId);
+            if (statusCode != null) {
+                wrapper.eq(ApproveProcess::getApproveStatus, statusCode);
+            }
+        } else if (statusCode != null && (statusCode == 0 || statusCode == 1)) {
+            wrapper.eq(ApproveProcess::getApproveUserCurrentId, userId);
+            wrapper.eq(ApproveProcess::getApproveStatus, statusCode);
         } else {
             wrapper.and(w -> w.eq(ApproveProcess::getApproveUser, userId)
                     .or().eq(ApproveProcess::getApproveUserCurrentId, userId)
                     .or().apply("FIND_IN_SET({0}, approve_user_ids)", userId));
+            if (statusCode != null) {
+                wrapper.eq(ApproveProcess::getApproveStatus, statusCode);
+            }
         }
 
         wrapper.orderByDesc(ApproveProcess::getCreateTime)
@@ -137,7 +155,8 @@
                         "count", items.size(),
                         "statusFilter", StringUtils.hasText(status) ? status : "all",
                         "approveType", approveType == null ? "" : approveType,
-                        "keyword", keyword == null ? "" : keyword
+                        "keyword", keyword == null ? "" : keyword,
+                        "scope", normalizedScope
                 ),
                 Map.of("columns", todoColumns(), "items", items),
                 Map.of());
@@ -638,6 +657,17 @@
         };
     }
 
+    private String normalizeScope(String scope) {
+        if (!StringUtils.hasText(scope)) {
+            return "related";
+        }
+        return switch (scope.trim().toLowerCase()) {
+            case "applicant", "mine", "created", "initiated" -> "applicant";
+            case "approver", "handler", "todo", "pending" -> "approver";
+            default -> "related";
+        };
+    }
+
     private String approveStatusName(Integer status) {
         if (status == null) {
             return "鏈煡";

--
Gitblit v1.9.3