From d3fa137ab2dd1805f438a3dbf997089a87a98fcf Mon Sep 17 00:00:00 2001 From: zichun <26684461+reporkey@users.noreply.github.com> Date: Tue, 28 Jul 2026 00:38:17 +0800 Subject: [PATCH] fix(locate): search by sBillNo when record keyword looks like a bill number --- src/main/java/com/xly/service/FormResolverService.java | 9 +++++++++ src/main/java/com/xly/tool/ErpReadTool.java | 2 +- src/main/java/com/xly/tool/ProposeWriteTool.java | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/xly/service/FormResolverService.java b/src/main/java/com/xly/service/FormResolverService.java index 9c92b1b..88f6179 100644 --- a/src/main/java/com/xly/service/FormResolverService.java +++ b/src/main/java/com/xly/service/FormResolverService.java @@ -83,6 +83,15 @@ public class FormResolverService { "ORDER BY iFormUses DESC LIMIT 1", table); } + /** 按关键词形态选检索字段:形如单号(字母前缀+数字)且表有 sBillNo 列 → 用单号列;否则名称列。 */ + public String searchField(String table, String keyword) { + if (keyword != null && keyword.trim().matches("[A-Za-z]{1,6}\\d{4,}") + && columnTypes(table).containsKey("sBillNo")) { + return "sBillNo"; + } + return resolveNameField(table); + } + /** 同 {@link #resolveNameField},但从 formId 出发(经表单目录找到数据源表)。 */ public String resolveNameFieldByFormId(String formId) { return queryOne( diff --git a/src/main/java/com/xly/tool/ErpReadTool.java b/src/main/java/com/xly/tool/ErpReadTool.java index f954466..f17aa56 100644 --- a/src/main/java/com/xly/tool/ErpReadTool.java +++ b/src/main/java/com/xly/tool/ErpReadTool.java @@ -57,7 +57,7 @@ public class ErpReadTool { if (!identity.canAccessModule(moduleId)) { return "你没有访问「" + entityKeyword + "」的权限。"; } - String nameField = resolver.resolveNameField(table); + String nameField = resolver.searchField(table, recordKeyword.trim()); JsonNode root; try { diff --git a/src/main/java/com/xly/tool/ProposeWriteTool.java b/src/main/java/com/xly/tool/ProposeWriteTool.java index ccdd491..8e4bfbb 100644 --- a/src/main/java/com/xly/tool/ProposeWriteTool.java +++ b/src/main/java/com/xly/tool/ProposeWriteTool.java @@ -501,7 +501,7 @@ public class ProposeWriteTool { l.error = err("你没有" + verb + "「" + entityKeyword + "」的权限。"); return l; } - String nameField = resolver.resolveNameField(l.table); + String nameField = resolver.searchField(l.table, recordKeyword); JsonNode root; try { root = erp.readForm(identity.token(), l.formId, l.moduleId, 1, 5, nameField, recordKeyword.trim()); -- libgit2 0.22.2