From ffbf67765d2ae447d62333eed85100a15685d781 Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期四, 19 三月 2026 12:27:59 +0800
Subject: [PATCH] #AI.内置工具治理
---
rsf-server/src/main/java/com/vincent/rsf/server/ai/tool/RsfWmsStockTools.java | 34 ++++++++++++++++++++--------------
1 files changed, 20 insertions(+), 14 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..7fcce30 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,26 @@
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,14 +72,17 @@
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("绔欑偣绫诲瀷鍒楄〃涓嶈兘涓虹┖");
- }
+ @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, types));
+ .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<>();
--
Gitblit v1.9.1