From e711c834aec2293c53b07efe53e81e3573c289b6 Mon Sep 17 00:00:00 2001
From: 1 <1@123>
Date: 星期三, 01 四月 2026 11:42:44 +0800
Subject: [PATCH] lsh#

---
 rsf-server/src/main/java/com/vincent/rsf/server/ai/tool/RsfWmsStockTools.java |   74 ++++++++++++++++++++++---------------
 1 files changed, 44 insertions(+), 30 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/ai/tool/RsfWmsStockTools.java b/rsf-server/src/main/java/com/vincent/rsf/server/ai/tool/RsfWmsStockTools.java
index 78994a2..f4f84c3 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/ai/tool/RsfWmsStockTools.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/ai/tool/RsfWmsStockTools.java
@@ -27,23 +27,30 @@
     private final LocItemService locItemService;
     private final DeviceSiteService deviceSiteService;
 
-    @Tool(name = "rsf_query_available_inventory", description = "鏍规嵁鐗╂枡缂栫爜鎴栫墿鏂欏悕绉版煡璇㈠綋鍓嶅湪搴撲笖鍙敤浜庡嚭搴撶殑搴撳瓨鏄庣粏銆�")
+    /**
+     * 鏌ヨ褰撳墠鍙敤浜庡嚭搴撶殑搴撳瓨鏄庣粏銆�
+     * 璇ュ伐鍏峰彧鍏佽鎸夌墿鏂欑紪鐮佹垨鐗╂枡鍚嶇О鍋氬畾鍚戞煡璇紝涓嶅厑璁告棤鏉′欢鎵弿搴撳瓨琛ㄣ��
+     */
+    @Tool(name = "rsf_query_available_inventory", description = "鍙鏌ヨ宸ュ叿銆傛牴鎹墿鏂欑紪鐮佹垨鐗╂枡鍚嶇О鏌ヨ褰撳墠鍦ㄥ簱涓斿彲鐢ㄤ簬鍑哄簱鐨勫簱瀛樻槑缁嗐��")
     public List<Map<String, Object>> queryAvailableInventory(
             @ToolParam(description = "鐗╂枡缂栫爜锛屼紭鍏堜娇鐢�") String matnr,
-            @ToolParam(description = "鐗╂枡鍚嶇О锛屽綋娌℃湁鐗╂枡缂栫爜鏃朵娇鐢�") String maktx) {
-        if (!StringUtils.hasText(matnr) && !StringUtils.hasText(maktx)) {
-            throw new CoolException("鐗╂枡缂栫爜鎴栫墿鏂欏悕绉拌嚦灏戦渶瑕佹彁渚涗竴涓�");
-        }
+            @ToolParam(description = "鐗╂枡鍚嶇О锛屽綋娌℃湁鐗╂枡缂栫爜鏃朵娇鐢�") String maktx,
+            @ToolParam(description = "杩斿洖鏉℃暟锛岄粯璁� 10锛屾渶澶� 50") Integer limit) {
+        String normalizedMatnr = BuiltinToolGovernanceSupport.sanitizeQueryText(matnr, "鐗╂枡缂栫爜", 64);
+        String normalizedMaktx = BuiltinToolGovernanceSupport.sanitizeQueryText(maktx, "鐗╂枡鍚嶇О", 100);
+        BuiltinToolGovernanceSupport.requireAnyFilter("鐗╂枡缂栫爜鎴栫墿鏂欏悕绉拌嚦灏戦渶瑕佹彁渚涗竴涓�", normalizedMatnr, normalizedMaktx);
+        int finalLimit = BuiltinToolGovernanceSupport.normalizeLimit(limit, 10, 50);
         LambdaQueryWrapper<LocItem> queryWrapper = new LambdaQueryWrapper<>();
-        if (StringUtils.hasText(matnr)) {
-            queryWrapper.eq(LocItem::getMatnrCode, matnr);
+        if (StringUtils.hasText(normalizedMatnr)) {
+            queryWrapper.eq(LocItem::getMatnrCode, normalizedMatnr);
         } else {
-            queryWrapper.eq(LocItem::getMaktx, maktx);
+            queryWrapper.like(LocItem::getMaktx, normalizedMaktx);
         }
         queryWrapper.apply(
                 "EXISTS (SELECT 1 FROM man_loc ml WHERE ml.use_status = {0} AND ml.id = man_loc_item.loc_id)",
                 LocStsType.LOC_STS_TYPE_F.type
         );
+        queryWrapper.orderByDesc(LocItem::getId).last("LIMIT " + finalLimit);
         List<LocItem> locItems = locItemService.list(queryWrapper);
         List<Map<String, Object>> result = new ArrayList<>();
         for (LocItem locItem : locItems) {
@@ -69,30 +76,37 @@
         return result;
     }
 
-    @Tool(name = "rsf_query_station_list", description = "鏍规嵁浣滀笟绫诲瀷鍒楄〃鏌ヨ鍙敤绔欑偣锛岃繑鍥炵珯鐐圭紪鍙枫�佸悕绉般�佺洰鏍囦綅缃拰鐘舵�佺瓑淇℃伅銆�")
+    /**
+     * 鏌ヨ鎸囧畾浣滀笟绫诲瀷鍙敤鐨勮澶囩珯鐐广��
+     * 杩斿洖鐨勬槸妯″瀷鏇村鏄撴秷璐圭殑鎵佸钩缁撴瀯锛岃�屼笉鏄洿鎺ユ毚闇插畬鏁村疄浣撳璞°��
+     */
+    @Tool(name = "rsf_query_station_list", description = "鍙鏌ヨ宸ュ叿銆傛牴鎹綔涓氱被鍨嬪垪琛ㄦ煡璇㈠彲鐢ㄧ珯鐐癸紝杩斿洖绔欑偣缂栧彿銆佸悕绉般�佺洰鏍囦綅缃拰鐘舵�佺瓑淇℃伅銆�")
     public List<Map<String, Object>> queryStationList(
-            @ToolParam(required = true, description = "浣滀笟绫诲瀷鍒楄〃") List<String> types) {
-        if (types == null || types.isEmpty()) {
-            throw new CoolException("绔欑偣绫诲瀷鍒楄〃涓嶈兘涓虹┖");
-        }
-        List<DeviceSite> sites = deviceSiteService.list(new LambdaQueryWrapper<DeviceSite>()
-                .in(DeviceSite::getType, types));
+            @ToolParam(required = true, description = "浣滀笟绫诲瀷鍒楄〃") List<String> types,
+            @ToolParam(description = "杩斿洖鏉℃暟锛岄粯璁� 20锛屾渶澶� 50") Integer limit) {
+        List<String> normalizedTypes = BuiltinToolGovernanceSupport.sanitizeStringList(types, "绔欑偣绫诲瀷鍒楄〃", 10, 32);
+//        int finalLimit = BuiltinToolGovernanceSupport.normalizeLimit(limit, 20, 50);
+//        List<DeviceSite> sites = deviceSiteService.list(new LambdaQueryWrapper<DeviceSite>()
+//                .in(DeviceSite::getType, normalizedTypes)
+//                .orderByAsc(DeviceSite::getType)
+//                .orderByAsc(DeviceSite::getSite)
+//                .last("LIMIT " + finalLimit));
         List<Map<String, Object>> result = new ArrayList<>();
-        for (DeviceSite site : sites) {
-            Map<String, Object> item = new LinkedHashMap<>();
-            item.put("id", site.getId());
-            item.put("type", site.getType());
-            item.put("site", site.getSite());
-            item.put("name", site.getName());
-            item.put("target", site.getTarget());
-            item.put("label", site.getLabel());
-            item.put("device", site.getDevice());
-            item.put("deviceCode", site.getDeviceCode());
-            item.put("deviceSite", site.getDeviceSite());
-            item.put("channel", site.getChannel());
-            item.put("status", site.getStatus());
-            result.add(item);
-        }
+//        for (DeviceSite site : sites) {
+//            Map<String, Object> item = new LinkedHashMap<>();
+//            item.put("id", site.getId());
+//            item.put("type", site.getType());
+//            item.put("site", site.getSite());
+//            item.put("name", site.getName());
+//            item.put("target", site.getTarget());
+//            item.put("label", site.getLabel());
+//            item.put("device", site.getDevice());
+//            item.put("deviceCode", site.getDeviceCode());
+//            item.put("deviceSite", site.getDeviceSite());
+//            item.put("channel", site.getChannel());
+//            item.put("status", site.getStatus());
+//            result.add(item);
+//        }
         return result;
     }
 }

--
Gitblit v1.9.1