diff --git a/backend/services/data-cleaning-service/src/main/java/com/datamate/cleaning/infrastructure/persistence/Impl/CleaningTaskRepositoryImpl.java b/backend/services/data-cleaning-service/src/main/java/com/datamate/cleaning/infrastructure/persistence/Impl/CleaningTaskRepositoryImpl.java index 455f8d5..a8b3558 100644 --- a/backend/services/data-cleaning-service/src/main/java/com/datamate/cleaning/infrastructure/persistence/Impl/CleaningTaskRepositoryImpl.java +++ b/backend/services/data-cleaning-service/src/main/java/com/datamate/cleaning/infrastructure/persistence/Impl/CleaningTaskRepositoryImpl.java @@ -24,9 +24,14 @@ public class CleaningTaskRepositoryImpl extends CrudRepository findTasks(String status, String keywords, Integer page, Integer size) { LambdaQueryWrapper lambdaWrapper = new LambdaQueryWrapper<>(); - lambdaWrapper.eq(StringUtils.isNotBlank(status), CleaningTask::getStatus, status) - .like(StringUtils.isNotBlank(keywords), CleaningTask::getName, keywords) - .orderByDesc(CleaningTask::getCreatedAt); + lambdaWrapper.eq(StringUtils.isNotBlank(status), CleaningTask::getStatus, status); + if (StringUtils.isNotBlank(keywords)) { + lambdaWrapper.and(w -> + w.like(CleaningTask::getName, keywords) + .or() + .like(CleaningTask::getDescription, keywords)); + } + lambdaWrapper.orderByDesc(CleaningTask::getCreatedAt); if (size != null && page != null) { Page queryPage = new Page<>(page + 1, size); IPage resultPage = mapper.selectPage(queryPage, lambdaWrapper); diff --git a/backend/services/data-cleaning-service/src/main/java/com/datamate/cleaning/infrastructure/persistence/Impl/CleaningTemplateRepositoryImpl.java b/backend/services/data-cleaning-service/src/main/java/com/datamate/cleaning/infrastructure/persistence/Impl/CleaningTemplateRepositoryImpl.java index bb04326..2afc861 100644 --- a/backend/services/data-cleaning-service/src/main/java/com/datamate/cleaning/infrastructure/persistence/Impl/CleaningTemplateRepositoryImpl.java +++ b/backend/services/data-cleaning-service/src/main/java/com/datamate/cleaning/infrastructure/persistence/Impl/CleaningTemplateRepositoryImpl.java @@ -25,8 +25,12 @@ public class CleaningTemplateRepositoryImpl extends CrudRepository findAllTemplates(String keywords) { QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.like(StringUtils.isNotBlank(keywords), "name", keywords) - .orderByDesc("created_at"); + if (StringUtils.isNotBlank(keywords)) { + queryWrapper.like("name", keywords) + .or() + .like("description", keywords); + } + queryWrapper.orderByDesc("created_at"); return mapper.findAllTemplates(queryWrapper); } diff --git a/backend/services/data-cleaning-service/src/main/java/com/datamate/cleaning/interfaces/rest/CleaningTaskController.java b/backend/services/data-cleaning-service/src/main/java/com/datamate/cleaning/interfaces/rest/CleaningTaskController.java index 25ec2e8..842f7a4 100644 --- a/backend/services/data-cleaning-service/src/main/java/com/datamate/cleaning/interfaces/rest/CleaningTaskController.java +++ b/backend/services/data-cleaning-service/src/main/java/com/datamate/cleaning/interfaces/rest/CleaningTaskController.java @@ -20,9 +20,9 @@ public class CleaningTaskController { public PagedResponse cleaningTasksGet( @RequestParam("page") Integer page, @RequestParam("size") Integer size, @RequestParam(value = "status", required = false) String status, - @RequestParam(value = "keywords", required = false) String keywords) { - List tasks = cleaningTaskService.getTasks(status, keywords, page, size); - int count = cleaningTaskService.countTasks(status, keywords); + @RequestParam(value = "keyword", required = false) String keyword) { + List tasks = cleaningTaskService.getTasks(status, keyword, page, size); + int count = cleaningTaskService.countTasks(status, keyword); int totalPages = (count + size + 1) / size; return PagedResponse.of(tasks, page, count, totalPages); } diff --git a/backend/services/data-cleaning-service/src/main/java/com/datamate/cleaning/interfaces/rest/CleaningTemplateController.java b/backend/services/data-cleaning-service/src/main/java/com/datamate/cleaning/interfaces/rest/CleaningTemplateController.java index 5079500..3197b9d 100644 --- a/backend/services/data-cleaning-service/src/main/java/com/datamate/cleaning/interfaces/rest/CleaningTemplateController.java +++ b/backend/services/data-cleaning-service/src/main/java/com/datamate/cleaning/interfaces/rest/CleaningTemplateController.java @@ -30,7 +30,7 @@ public class CleaningTemplateController { public PagedResponse cleaningTemplatesGet( @RequestParam(value = "page", required = false) Integer page, @RequestParam(value = "size", required = false) Integer size, - @RequestParam(value = "keywords", required = false) String keyword) { + @RequestParam(value = "keyword", required = false) String keyword) { List templates = cleaningTemplateService.getTemplates(keyword); if (page == null || size == null) { return PagedResponse.of(templates.stream() diff --git a/backend/services/operator-market-service/src/main/java/com/datamate/operator/application/OperatorService.java b/backend/services/operator-market-service/src/main/java/com/datamate/operator/application/OperatorService.java index abc82a7..f1cb5da 100644 --- a/backend/services/operator-market-service/src/main/java/com/datamate/operator/application/OperatorService.java +++ b/backend/services/operator-market-service/src/main/java/com/datamate/operator/application/OperatorService.java @@ -49,12 +49,12 @@ public class OperatorService { private String operatorBasePath; public List getOperators(Integer page, Integer size, List categories, - String operatorName, Boolean isStar) { - return operatorViewRepo.findOperatorsByCriteria(page, size, operatorName, categories, isStar); + String keyword, Boolean isStar) { + return operatorViewRepo.findOperatorsByCriteria(page, size, keyword, categories, isStar); } - public int getOperatorsCount(List categories, String operatorName, Boolean isStar) { - return operatorViewRepo.countOperatorsByCriteria(operatorName, categories, isStar); + public int getOperatorsCount(List categories, String keyword, Boolean isStar) { + return operatorViewRepo.countOperatorsByCriteria(keyword, categories, isStar); } public OperatorDto getOperatorById(String id) { diff --git a/backend/services/operator-market-service/src/main/java/com/datamate/operator/domain/repository/OperatorViewRepository.java b/backend/services/operator-market-service/src/main/java/com/datamate/operator/domain/repository/OperatorViewRepository.java index a1c0688..8bcc7d7 100644 --- a/backend/services/operator-market-service/src/main/java/com/datamate/operator/domain/repository/OperatorViewRepository.java +++ b/backend/services/operator-market-service/src/main/java/com/datamate/operator/domain/repository/OperatorViewRepository.java @@ -7,10 +7,10 @@ import com.datamate.operator.interfaces.dto.OperatorDto; import java.util.List; public interface OperatorViewRepository extends IRepository { - List findOperatorsByCriteria(Integer page, Integer size, String operatorName, + List findOperatorsByCriteria(Integer page, Integer size, String keyword, List categories, Boolean isStar); - Integer countOperatorsByCriteria(String operatorName, List categories, Boolean isStar); + Integer countOperatorsByCriteria(String keyword, List categories, Boolean isStar); OperatorView findOperatorById(String id); } diff --git a/backend/services/operator-market-service/src/main/java/com/datamate/operator/infrastructure/persistence/Impl/OperatorViewRepositoryImpl.java b/backend/services/operator-market-service/src/main/java/com/datamate/operator/infrastructure/persistence/Impl/OperatorViewRepositoryImpl.java index 1fe41e0..bae4b6f 100644 --- a/backend/services/operator-market-service/src/main/java/com/datamate/operator/infrastructure/persistence/Impl/OperatorViewRepositoryImpl.java +++ b/backend/services/operator-market-service/src/main/java/com/datamate/operator/infrastructure/persistence/Impl/OperatorViewRepositoryImpl.java @@ -23,13 +23,18 @@ public class OperatorViewRepositoryImpl extends CrudRepository findOperatorsByCriteria(Integer page, Integer size, String operatorName, + public List findOperatorsByCriteria(Integer page, Integer size, String keyword, List categories, Boolean isStar) { QueryWrapper queryWrapper = Wrappers.query(); queryWrapper.in(CollectionUtils.isNotEmpty(categories), "category_id", categories) - .like(StringUtils.isNotBlank(operatorName), "operator_name", operatorName) - .eq(isStar != null, "is_star", isStar) - .groupBy("operator_id") + .eq(isStar != null, "is_star", isStar); + if (StringUtils.isNotEmpty(keyword)) { + queryWrapper.and(w -> + w.like("operator_name", keyword) + .or() + .like("description", keyword)); + } + queryWrapper.groupBy("operator_id") .orderByDesc("created_at"); Page queryPage; if (size != null && page != null) { @@ -43,11 +48,16 @@ public class OperatorViewRepositoryImpl extends CrudRepository categories, Boolean isStar) { + public Integer countOperatorsByCriteria(String keyword, List categories, Boolean isStar) { QueryWrapper queryWrapper = Wrappers.query(); queryWrapper.in(CollectionUtils.isNotEmpty(categories),"category_id", categories) - .like(StringUtils.isNotBlank(operatorName), "operator_name", operatorName) .eq(isStar != null, "is_star", isStar); + if (StringUtils.isNotEmpty(keyword)) { + queryWrapper.and(w -> + w.like("operator_name", keyword) + .or() + .like("description", keyword)); + } return mapper.countOperatorsByCriteria(queryWrapper); } diff --git a/backend/services/operator-market-service/src/main/java/com/datamate/operator/interfaces/dto/OperatorsListPostRequest.java b/backend/services/operator-market-service/src/main/java/com/datamate/operator/interfaces/dto/OperatorsListPostRequest.java index 44fa10f..47f8683 100644 --- a/backend/services/operator-market-service/src/main/java/com/datamate/operator/interfaces/dto/OperatorsListPostRequest.java +++ b/backend/services/operator-market-service/src/main/java/com/datamate/operator/interfaces/dto/OperatorsListPostRequest.java @@ -17,7 +17,7 @@ import lombok.Setter; public class OperatorsListPostRequest extends PagingQuery { private List categories = new ArrayList<>(); - private String operatorName; + private String keyword; private String labelName; diff --git a/backend/services/operator-market-service/src/main/java/com/datamate/operator/interfaces/rest/OperatorController.java b/backend/services/operator-market-service/src/main/java/com/datamate/operator/interfaces/rest/OperatorController.java index ac06862..af02ab2 100644 --- a/backend/services/operator-market-service/src/main/java/com/datamate/operator/interfaces/rest/OperatorController.java +++ b/backend/services/operator-market-service/src/main/java/com/datamate/operator/interfaces/rest/OperatorController.java @@ -29,8 +29,8 @@ public class OperatorController { categories.remove(OperatorConstant.CATEGORY_STAR_ID); } List responses = operatorService.getOperators(request.getPage(), request.getSize(), - categories, request.getOperatorName(), isStar); - int count = operatorService.getOperatorsCount(categories, request.getOperatorName(), isStar); + categories, request.getKeyword(), isStar); + int count = operatorService.getOperatorsCount(categories, request.getKeyword(), isStar); int totalPages = (count + request.getSize() + 1) / request.getSize(); return PagedResponse.of(responses, request.getPage(), count, totalPages); } diff --git a/deployment/helm/milvus/charts/etcd/templates/deployment.yaml b/deployment/helm/milvus/charts/etcd/templates/deployment.yaml index 6166cba..42aaff9 100644 --- a/deployment/helm/milvus/charts/etcd/templates/deployment.yaml +++ b/deployment/helm/milvus/charts/etcd/templates/deployment.yaml @@ -172,11 +172,11 @@ spec: # 警告:以下 Env Vars 依赖 StatefulSet 命名 (headless service 和 ordered names) # 在 Deployment 中如果不修改副本数为 1,这些配置会导致集群发现失败。 - name: ETCD_ADVERTISE_CLIENT_URLS - value: "{{ $etcdClientProtocol }}://$(MY_POD_NAME).{{ $etcdHeadlessServiceName }}.{{ .Release.Namespace }}.svc.{{ $clusterDomain }}:{{ .Values.containerPorts.client }},{{ $etcdClientProtocol }}://{{ $etcdFullname }}.{{ .Release.Namespace }}.svc.{{ $clusterDomain }}:{{ coalesce .Values.service.ports.client .Values.service.port }}" + value: "{{ $etcdClientProtocol }}://{{ $etcdHeadlessServiceName }}.{{ .Release.Namespace }}.svc.{{ $clusterDomain }}:{{ .Values.containerPorts.client }},{{ $etcdClientProtocol }}://{{ $etcdFullname }}.{{ .Release.Namespace }}.svc.{{ $clusterDomain }}:{{ coalesce .Values.service.ports.client .Values.service.port }}" - name: ETCD_LISTEN_CLIENT_URLS value: "{{ $etcdClientProtocol }}://0.0.0.0:{{ .Values.containerPorts.client }}" - name: ETCD_INITIAL_ADVERTISE_PEER_URLS - value: "{{ $etcdPeerProtocol }}://$(MY_POD_NAME).{{ $etcdHeadlessServiceName }}.{{ .Release.Namespace }}.svc.{{ $clusterDomain }}:{{ .Values.containerPorts.peer }}" + value: "{{ $etcdPeerProtocol }}://{{ $etcdHeadlessServiceName }}.{{ .Release.Namespace }}.svc.{{ $clusterDomain }}:{{ .Values.containerPorts.peer }}" - name: ETCD_LISTEN_PEER_URLS value: "{{ $etcdPeerProtocol }}://0.0.0.0:{{ .Values.containerPorts.peer }}" {{- if .Values.autoCompactionMode }} diff --git a/deployment/helm/milvus/templates/config.tpl b/deployment/helm/milvus/templates/config.tpl index 1eaa6f2..883aafe 100644 --- a/deployment/helm/milvus/templates/config.tpl +++ b/deployment/helm/milvus/templates/config.tpl @@ -28,6 +28,9 @@ etcd: {{- range .Values.externalEtcd.endpoints }} - {{ . }} {{- end }} +{{- else if eq (.Values.etcd.workload | lower) "deployment" }} + endpoints: + - {{ $etcdReleaseName }}-headless.{{ $namespace }}.svc.{{ $.Values.etcd.clusterDomain }}:{{ $etcdPort }} {{- else }} endpoints: {{- range $i := until ( .Values.etcd.replicaCount | int ) }} diff --git a/frontend/src/hooks/useFetchData.ts b/frontend/src/hooks/useFetchData.ts index 8d4b056..a4c29ca 100644 --- a/frontend/src/hooks/useFetchData.ts +++ b/frontend/src/hooks/useFetchData.ts @@ -71,6 +71,14 @@ export default function useFetchData( }); }; + const handleKeywordChange = (keyword: string) => { + setSearchParams({ + ...searchParams, + current: 1, + keyword: keyword, + }); + }; + function getFirstOfArray(arr: string[]) { if (!arr || arr.length === 0 || !Array.isArray(arr)) return undefined; if (arr[0] === "all") return undefined; @@ -217,6 +225,7 @@ export default function useFetchData( setSearchParams, setPagination, handleFiltersChange, + handleKeywordChange, fetchData, isPolling, startPolling, diff --git a/frontend/src/pages/DataAnnotation/Home/DataAnnotation.tsx b/frontend/src/pages/DataAnnotation/Home/DataAnnotation.tsx index 68ab391..1afdaad 100644 --- a/frontend/src/pages/DataAnnotation/Home/DataAnnotation.tsx +++ b/frontend/src/pages/DataAnnotation/Home/DataAnnotation.tsx @@ -32,9 +32,9 @@ export default function DataAnnotation() { tableData, pagination, searchParams, - setSearchParams, fetchData, handleFiltersChange, + handleKeywordChange, } = useFetchData(queryAnnotationTasksUsingGet, mapAnnotationTask, 30000, true, [], 0); const [labelStudioBase, setLabelStudioBase] = useState(null); @@ -313,9 +313,7 @@ export default function DataAnnotation() {
- setSearchParams({ ...searchParams, keyword }) - } + onSearchChange={handleKeywordChange} searchPlaceholder="搜索任务名称、描述" onFiltersChange={handleFiltersChange} viewMode={viewMode} diff --git a/frontend/src/pages/DataCleansing/Home/components/TaskList.tsx b/frontend/src/pages/DataCleansing/Home/components/TaskList.tsx index 8bdd1de..7c08b2b 100644 --- a/frontend/src/pages/DataCleansing/Home/components/TaskList.tsx +++ b/frontend/src/pages/DataCleansing/Home/components/TaskList.tsx @@ -41,6 +41,7 @@ export default function TaskList() { setSearchParams, fetchData, handleFiltersChange, + handleKeywordChange, } = useFetchData(queryCleaningTasksUsingGet, mapTask); const pauseTask = async (item: CleansingTask) => { @@ -270,9 +271,7 @@ export default function TaskList() { {/* Search and Filters */} - setSearchParams({ ...searchParams, keyword }) - } + onSearchChange={handleKeywordChange} searchPlaceholder="搜索任务名称、描述" filters={filterOptions} onFiltersChange={handleFiltersChange} diff --git a/frontend/src/pages/DataCleansing/Home/components/TemplateList.tsx b/frontend/src/pages/DataCleansing/Home/components/TemplateList.tsx index 696e1cf..76fdf85 100644 --- a/frontend/src/pages/DataCleansing/Home/components/TemplateList.tsx +++ b/frontend/src/pages/DataCleansing/Home/components/TemplateList.tsx @@ -24,6 +24,7 @@ export default function TemplateList() { setSearchParams, fetchData, handleFiltersChange, + handleKeywordChange, } = useFetchData(queryCleaningTemplatesUsingGet, mapTemplate); const templateOperations = () => { @@ -120,9 +121,7 @@ export default function TemplateList() { {/* Search and Filters */} - setSearchParams({ ...searchParams, keyword }) - } + onSearchChange={handleKeywordChange} searchPlaceholder="搜索模板名称、描述" onFiltersChange={handleFiltersChange} viewMode={viewMode} diff --git a/frontend/src/pages/DataCollection/Home/ExecutionLog.tsx b/frontend/src/pages/DataCollection/Home/ExecutionLog.tsx index 6e2a585..f840b63 100644 --- a/frontend/src/pages/DataCollection/Home/ExecutionLog.tsx +++ b/frontend/src/pages/DataCollection/Home/ExecutionLog.tsx @@ -37,6 +37,7 @@ export default function ExecutionLog() { searchParams, setSearchParams, handleFiltersChange, + handleKeywordChange, } = useFetchData(queryExecutionLogUsingPost); const columns: ColumnsType = [ @@ -113,12 +114,7 @@ export default function ExecutionLog() {
- setSearchParams({ - ...searchParams, - keyword, - }) - } + onSearchChange={handleKeywordChange} filters={filterOptions} onFiltersChange={handleFiltersChange} showViewToggle={false} diff --git a/frontend/src/pages/DataManagement/Home/DataManagement.tsx b/frontend/src/pages/DataManagement/Home/DataManagement.tsx index fa7b6d8..4070c0d 100644 --- a/frontend/src/pages/DataManagement/Home/DataManagement.tsx +++ b/frontend/src/pages/DataManagement/Home/DataManagement.tsx @@ -120,6 +120,7 @@ export default function DatasetManagementPage() { fetchData, setSearchParams, handleFiltersChange, + handleKeywordChange, } = useFetchData( queryDatasetsUsingGet, mapDataset, @@ -370,9 +371,7 @@ export default function DatasetManagementPage() {
- setSearchParams({ ...searchParams, keyword }) - } + onSearchChange={handleKeywordChange} searchPlaceholder="搜索数据集名称、描述或标签..." filters={filterOptions} onFiltersChange={handleFiltersChange} diff --git a/frontend/src/pages/KnowledgeBase/Detail/KnowledgeBaseDetail.tsx b/frontend/src/pages/KnowledgeBase/Detail/KnowledgeBaseDetail.tsx index df75284..962d36b 100644 --- a/frontend/src/pages/KnowledgeBase/Detail/KnowledgeBaseDetail.tsx +++ b/frontend/src/pages/KnowledgeBase/Detail/KnowledgeBaseDetail.tsx @@ -69,6 +69,7 @@ const KnowledgeBaseDetailPage: React.FC = () => { fetchData: fetchFiles, setSearchParams, handleFiltersChange, + handleKeywordChange, } = useFetchData( (params) => id ? queryKnowledgeBaseFilesUsingGet(id, params) : Promise.resolve({ data: [] }), mapFileData @@ -265,7 +266,7 @@ const KnowledgeBaseDetailPage: React.FC = () => {
setSearchParams({ ...searchParams, keyword })} + onSearchChange={handleKeywordChange} searchPlaceholder="搜索文件名..." filters={[]} onFiltersChange={handleFiltersChange} diff --git a/frontend/src/pages/KnowledgeBase/Home/KnowledgeBasePage.tsx b/frontend/src/pages/KnowledgeBase/Home/KnowledgeBasePage.tsx index 0d48062..eb1c92c 100644 --- a/frontend/src/pages/KnowledgeBase/Home/KnowledgeBasePage.tsx +++ b/frontend/src/pages/KnowledgeBase/Home/KnowledgeBasePage.tsx @@ -26,6 +26,7 @@ export default function KnowledgeBasePage() { fetchData, setSearchParams, handleFiltersChange, + handleKeywordChange, } = useFetchData( queryKnowledgeBasesUsingPost, (kb) => mapKnowledgeBase(kb, false) // 在首页不显示索引模型和文本理解模型字段 @@ -146,9 +147,7 @@ export default function KnowledgeBasePage() { - setSearchParams({ ...searchParams, keyword }) - } + onSearchChange={handleKeywordChange} searchPlaceholder="搜索知识库..." filters={[]} onFiltersChange={handleFiltersChange} diff --git a/frontend/src/pages/KnowledgeBase/components/CreateKnowledgeBase.tsx b/frontend/src/pages/KnowledgeBase/components/CreateKnowledgeBase.tsx index 2ef7078..c0a16f6 100644 --- a/frontend/src/pages/KnowledgeBase/components/CreateKnowledgeBase.tsx +++ b/frontend/src/pages/KnowledgeBase/components/CreateKnowledgeBase.tsx @@ -156,6 +156,19 @@ export default function CreateKnowledgeBase({