diff --git a/backend/services/data-cleaning-service/src/main/java/com/datamate/cleaning/application/CleaningTaskService.java b/backend/services/data-cleaning-service/src/main/java/com/datamate/cleaning/application/CleaningTaskService.java index ca94b3656..f5442e1b6 100644 --- a/backend/services/data-cleaning-service/src/main/java/com/datamate/cleaning/application/CleaningTaskService.java +++ b/backend/services/data-cleaning-service/src/main/java/com/datamate/cleaning/application/CleaningTaskService.java @@ -109,12 +109,16 @@ public CleaningTaskDto createTask(CreateCleaningTaskRequest request) { ExecutorType executorType = cleanTaskValidator.checkAndGetExecutorType(request.getInstance()); - CreateDatasetRequest createDatasetRequest = new CreateDatasetRequest(); - createDatasetRequest.setName(request.getDestDatasetName()); - createDatasetRequest.setDatasetType(DatasetType.valueOf(request.getDestDatasetType())); - createDatasetRequest.setStatus("ACTIVE"); - Dataset destDataset = datasetService.createDataset(createDatasetRequest); - + Dataset destDataset; + if (StringUtils.isNotBlank(request.getDestDatasetId())) { + destDataset = datasetService.getDataset(request.getDestDatasetId()); + } else { + CreateDatasetRequest createDatasetRequest = new CreateDatasetRequest(); + createDatasetRequest.setName(request.getDestDatasetName()); + createDatasetRequest.setDatasetType(DatasetType.valueOf(request.getDestDatasetType())); + createDatasetRequest.setStatus("ACTIVE"); + destDataset = datasetService.createDataset(createDatasetRequest); + } Dataset srcDataset = datasetService.getDataset(request.getSrcDatasetId()); CleaningTaskDto task = new CleaningTaskDto(); diff --git a/backend/services/data-cleaning-service/src/main/java/com/datamate/cleaning/interfaces/dto/CreateCleaningTaskRequest.java b/backend/services/data-cleaning-service/src/main/java/com/datamate/cleaning/interfaces/dto/CreateCleaningTaskRequest.java index c82525d66..09aefdfe2 100644 --- a/backend/services/data-cleaning-service/src/main/java/com/datamate/cleaning/interfaces/dto/CreateCleaningTaskRequest.java +++ b/backend/services/data-cleaning-service/src/main/java/com/datamate/cleaning/interfaces/dto/CreateCleaningTaskRequest.java @@ -27,7 +27,10 @@ public class CreateCleaningTaskRequest { @McpToolParam(description = "清洗任务使用的源数据集名称") private String srcDatasetName; - @McpToolParam(description = "清洗任务创建的目标数据集名称") + @McpToolParam(description = "清洗任务写入的目标数据集ID", required = false) + private String destDatasetId; + + @McpToolParam(description = "清洗任务写入的目标数据集名称,若destDatasetId为空,则创建新数据集。") private String destDatasetName; @McpToolParam(description = "清洗任务创建的目标数据集类型,取值范围为TEXT/IMAGE/VIDEO/AUDIO/OTHER") diff --git a/frontend/src/pages/DataCleansing/Create/components/CreateTaskStepOne.tsx b/frontend/src/pages/DataCleansing/Create/components/CreateTaskStepOne.tsx index 7fa6595e0..f8a5c7b1a 100644 --- a/frontend/src/pages/DataCleansing/Create/components/CreateTaskStepOne.tsx +++ b/frontend/src/pages/DataCleansing/Create/components/CreateTaskStepOne.tsx @@ -6,7 +6,7 @@ import { DatasetSubType, DatasetType, } from "@/pages/DataManagement/dataset.model"; -import { Input, Select, Form } from "antd"; +import { Input, Select, Form, AutoComplete } from "antd"; import TextArea from "antd/es/input/TextArea"; import { useEffect, useState } from "react"; @@ -47,6 +47,13 @@ export default function CreateTaskStepOne({ ...allValues, srcDatasetName: dataset?.name || "", }); + } else if (key === "destDatasetName") { + dataset = datasets.find((d) => d.name === value); + setTaskConfig({ + ...taskConfig, + ...allValues, + destDatasetId: dataset?.id || "", + }); } else { setTaskConfig({ ...taskConfig, ...allValues }); } @@ -89,7 +96,26 @@ export default function CreateTaskStepOne({ /> - + { + return { + label: ( +
+
+ {dataset.icon} + {dataset.name} +
+
{dataset.size}
+
+ ), + value: dataset.name, + }; + })} + filterOption={(inputValue, option) => { + return option.value.toLowerCase().startsWith(inputValue.toLowerCase()); + }} + placeholder="输入或选择目标数据集名称" + />