feat: 统一列表模糊搜索行为

- 统一管理端和用户中心搜索参数及多字段包含匹配

- 修复聊天搜索竞态并优化部门重名路径展示

- 补充部门展开、模型空白词和聊天查询回归测试
This commit is contained in:
2026-08-13 22:29:59 +08:00
parent 765006747a
commit 64a85c6a5b
83 changed files with 1134 additions and 208 deletions

View File

@@ -80,6 +80,16 @@ public class UcBotController extends BaseCurdController<BotService, Bot> {
this.botDocumentCollectionService = botDocumentCollectionService;
}
/**
* 获取用户中心智能体关键字搜索字段。
*
* @return 标题和描述属性
*/
@Override
protected String[] getKeywordSearchProperties() {
return new String[]{"title", "description"};
}
@Resource
private BotPluginService botPluginService;
@Resource
@@ -246,6 +256,10 @@ public class UcBotController extends BaseCurdController<BotService, Bot> {
@Override
public Result<List<Bot>> list(Bot entity, Boolean asTree, String sortKey, String sortType) {
QueryWrapper queryWrapper = QueryWrapper.create(entity, buildOperators(entity));
String keyword = entity == null ? "" : normalizeSearchKeyword(entity.getKeyword());
if (!keyword.isEmpty()) {
queryWrapper.and(buildLiteralContainsCondition(keyword, BOT.TITLE, BOT.DESCRIPTION));
}
applyCategoryPermission(queryWrapper);
queryWrapper.orderBy(buildOrderBy(sortKey, sortType, getDefaultOrderBy()));
return Result.ok(service.list(queryWrapper));

View File

@@ -34,6 +34,8 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static tech.easyflow.ai.entity.table.WorkflowTableDef.WORKFLOW;
/**
* 工作流
*/
@@ -57,6 +59,16 @@ public class UcWorkflowController extends BaseCurdController<WorkflowService, Wo
super(service);
}
/**
* 获取用户中心工作流关键字搜索字段。
*
* @return 标题和描述属性
*/
@Override
protected String[] getKeywordSearchProperties() {
return new String[]{"title", "description"};
}
/**
* 节点单独运行
*/
@@ -193,6 +205,10 @@ public class UcWorkflowController extends BaseCurdController<WorkflowService, Wo
@Override
public Result<List<Workflow>> list(Workflow entity, Boolean asTree, String sortKey, String sortType) {
QueryWrapper queryWrapper = QueryWrapper.create(entity, buildOperators(entity));
String keyword = entity == null ? "" : normalizeSearchKeyword(entity.getKeyword());
if (!keyword.isEmpty()) {
queryWrapper.and(buildLiteralContainsCondition(keyword, WORKFLOW.TITLE, WORKFLOW.DESCRIPTION));
}
workflowVisibilityQueryHelper.applyReadableAccess(queryWrapper);
queryWrapper.orderBy(buildOrderBy(sortKey, sortType, getDefaultOrderBy()));
return Result.ok(service.list(queryWrapper));