Skip to content

Commit 59d9e9c

Browse files
committed
feature: 北向接口:支持通过模板创建清洗任务
1 parent 34caf1a commit 59d9e9c

File tree

12 files changed

+67
-8
lines changed

12 files changed

+67
-8
lines changed

backend/services/data-cleaning-service/src/main/java/com/datamate/cleaning/application/CleaningTaskService.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,4 +248,8 @@ private void writeListMapToJsonlFile(List<Map<String, Object>> mapList, String f
248248
public void stopTask(String taskId) {
249249
taskScheduler.stopTask(taskId);
250250
}
251+
252+
public List<OperatorInstanceDto> getInstanceByTemplateId(String templateId) {
253+
return operatorInstanceRepo.findInstanceByInstanceId(templateId);
254+
}
251255
}

backend/services/data-cleaning-service/src/main/java/com/datamate/cleaning/application/CleaningTemplateService.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
import com.datamate.cleaning.domain.repository.CleaningTemplateRepository;
55
import com.datamate.cleaning.domain.repository.OperatorInstanceRepository;
6+
import com.datamate.cleaning.infrastructure.validator.CleanTaskValidator;
67
import com.datamate.cleaning.interfaces.dto.*;
78
import com.datamate.cleaning.domain.model.entity.TemplateWithInstance;
89
import com.datamate.operator.domain.repository.OperatorViewRepository;
@@ -28,6 +29,8 @@ public class CleaningTemplateService {
2829

2930
private final OperatorViewRepository operatorViewRepo;
3031

32+
private final CleanTaskValidator cleanTaskValidator;
33+
3134
public List<CleaningTemplateDto> getTemplates(String keywords) {
3235
List<OperatorDto> allOperators =
3336
operatorViewRepo.findOperatorsByCriteria(null, null, null, null, null);
@@ -59,6 +62,7 @@ public List<CleaningTemplateDto> getTemplates(String keywords) {
5962

6063
@Transactional
6164
public CleaningTemplateDto createTemplate(CreateCleaningTemplateRequest request) {
65+
cleanTaskValidator.checkInputAndOutput(request.getInstance());
6266
CleaningTemplateDto template = new CleaningTemplateDto();
6367
String templateId = UUID.randomUUID().toString();
6468
template.setId(templateId);

backend/services/data-cleaning-service/src/main/java/com/datamate/cleaning/domain/repository/OperatorInstanceRepository.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,6 @@ public interface OperatorInstanceRepository extends IRepository<OperatorInstance
1313
void deleteByInstanceId(String instanceId);
1414

1515
List<OperatorDto> findOperatorByInstanceId(String instanceId);
16+
17+
List<OperatorInstanceDto> findInstanceByInstanceId(String instanceId);
1618
}

backend/services/data-cleaning-service/src/main/java/com/datamate/cleaning/infrastructure/converter/OperatorInstanceConverter.java

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import com.datamate.operator.domain.model.OperatorView;
99
import com.datamate.operator.interfaces.dto.OperatorDto;
1010
import com.fasterxml.jackson.core.JsonProcessingException;
11+
import com.fasterxml.jackson.core.type.TypeReference;
1112
import com.fasterxml.jackson.databind.ObjectMapper;
1213
import org.mapstruct.Mapper;
1314
import org.mapstruct.Mapping;
@@ -23,20 +24,39 @@
2324
public interface OperatorInstanceConverter {
2425
OperatorInstanceConverter INSTANCE = Mappers.getMapper(OperatorInstanceConverter.class);
2526

27+
ObjectMapper OBJECT_MAPPER = new ObjectMapper();
28+
2629
@Mapping(target = "settingsOverride", source = "overrides", qualifiedByName = "mapToString")
2730
@Mapping(target = "operatorId", source = "id")
2831
OperatorInstance fromDtoToEntity(OperatorInstanceDto instance);
2932

33+
@Mapping(target = "overrides", source = "settingsOverride", qualifiedByName = "stringToMap")
34+
@Mapping(target = "id", source = "operatorId")
35+
OperatorInstanceDto fromEntityToDto(OperatorInstance instance);
36+
37+
List<OperatorInstanceDto> fromEntityToDtoList(List<OperatorInstance> instance);
38+
3039
@Named("mapToString")
3140
static String mapToString(Map<String, Object> objects) {
32-
ObjectMapper objectMapper = new ObjectMapper();
3341
try {
34-
return objectMapper.writeValueAsString(objects);
42+
return OBJECT_MAPPER.writeValueAsString(objects);
3543
} catch (JsonProcessingException e) {
3644
throw BusinessException.of(SystemErrorCode.UNKNOWN_ERROR);
3745
}
3846
}
3947

48+
@Named("stringToMap")
49+
static Map<String, Object> stringToMap(String json) {
50+
if (json == null) {
51+
return Collections.emptyMap();
52+
}
53+
try {
54+
return OBJECT_MAPPER.readValue(json, new TypeReference<>() {});
55+
} catch (JsonProcessingException e) {
56+
throw BusinessException.of(SystemErrorCode.UNKNOWN_ERROR);
57+
}
58+
}
59+
4060
@Mapping(target = "categories", source = "categories", qualifiedByName = "stringToList")
4161
OperatorDto fromEntityToDto(OperatorView operator);
4262

backend/services/data-cleaning-service/src/main/java/com/datamate/cleaning/infrastructure/persistence/Impl/OperatorInstanceRepositoryImpl.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,12 @@ public void deleteByInstanceId(String instanceId) {
4242
public List<OperatorDto> findOperatorByInstanceId(String instanceId) {
4343
return OperatorInstanceConverter.INSTANCE.fromEntityToDto(mapper.findOperatorByInstanceId(instanceId));
4444
}
45+
46+
@Override
47+
public List<OperatorInstanceDto> findInstanceByInstanceId(String instanceId) {
48+
LambdaQueryWrapper<OperatorInstance> lambdaWrapper = new LambdaQueryWrapper<>();
49+
lambdaWrapper.eq(OperatorInstance::getInstanceId, instanceId)
50+
.orderByAsc(OperatorInstance::getOpIndex);
51+
return OperatorInstanceConverter.INSTANCE.fromEntityToDtoList(mapper.selectList(lambdaWrapper));
52+
}
4553
}

backend/services/data-cleaning-service/src/main/java/com/datamate/cleaning/interfaces/dto/CreateCleaningTaskRequest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ public class CreateCleaningTaskRequest {
2727

2828
private String destDatasetType;
2929

30+
private String templateId;
31+
3032
private List<OperatorInstanceDto> instance = new ArrayList<>();
3133
}
3234

backend/services/data-cleaning-service/src/main/java/com/datamate/cleaning/interfaces/rest/CleaningTaskController.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
package com.datamate.cleaning.interfaces.rest;
22

33
import com.datamate.cleaning.application.CleaningTaskService;
4-
import com.datamate.cleaning.interfaces.dto.CleaningResultDto;
5-
import com.datamate.cleaning.interfaces.dto.CleaningTaskDto;
6-
import com.datamate.cleaning.interfaces.dto.CleaningTaskLog;
7-
import com.datamate.cleaning.interfaces.dto.CreateCleaningTaskRequest;
4+
import com.datamate.cleaning.interfaces.dto.*;
85
import com.datamate.common.interfaces.PagedResponse;
96
import lombok.RequiredArgsConstructor;
7+
import org.apache.commons.lang3.StringUtils;
108
import org.springframework.web.bind.annotation.*;
119

1210
import java.util.List;
@@ -31,6 +29,9 @@ public PagedResponse<CleaningTaskDto> cleaningTasksGet(
3129

3230
@PostMapping
3331
public CleaningTaskDto cleaningTasksPost(@RequestBody CreateCleaningTaskRequest request) {
32+
if (request.getInstance().isEmpty() && StringUtils.isNotBlank(request.getTemplateId())) {
33+
request.setInstance(cleaningTaskService.getInstanceByTemplateId(request.getTemplateId()));
34+
}
3435
return cleaningTaskService.createTask(request);
3536
}
3637

@@ -57,6 +58,13 @@ public String cleaningTasksTaskIdDelete(@PathVariable("taskId") String taskId) {
5758
return taskId;
5859
}
5960

61+
@DeleteMapping
62+
public void cleaningTasksDelete(@RequestParam List<String> taskIds) {
63+
for (String taskId : taskIds) {
64+
cleaningTaskService.deleteTask(taskId);
65+
}
66+
}
67+
6068
@GetMapping("/{taskId}/result")
6169
public List<CleaningResultDto> cleaningTasksTaskIdGetResult(@PathVariable("taskId") String taskId) {
6270
return cleaningTaskService.getTaskResults(taskId);

frontend/src/pages/DataCleansing/Create/CreateTask.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ export default function CleansingTaskCreate() {
3838
...item.defaultParams,
3939
...item.overrides,
4040
},
41+
inputs: item.inputs,
42+
outputs: item.outputs,
4143
})),
4244
};
4345
navigate("/data/cleansing?view=task");

frontend/src/pages/DataCleansing/Create/CreateTemplate.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ export default function CleansingTemplateCreate() {
4444
...item.defaultParams,
4545
...item.overrides,
4646
},
47+
inputs: item.inputs,
48+
outputs: item.outputs,
4749
})),
4850
};
4951

frontend/src/pages/DataCleansing/Detail/components/FileTable.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ export default function FileTable({result, fetchTaskResult}) {
107107
onFilter: (value: string, record: any) =>
108108
record.srcName.toLowerCase().includes(value.toLowerCase()),
109109
render: (text: string) => (
110-
<span className="font-mono text-sm">{text?.replace(/\.[^/.]+$/, "")}</span>
110+
<span>{text?.replace(/\.[^/.]+$/, "")}</span>
111111
),
112112
},
113113
{

0 commit comments

Comments
 (0)