feature: 北向接口:支持通过模板创建清洗任务 (#111)

feature: 北向接口:支持通过模板创建清洗任务
This commit is contained in:
hhhhsc701
2025-11-26 17:30:54 +08:00
committed by GitHub
parent 0ca5f29885
commit 91390cace0
15 changed files with 312 additions and 253 deletions

View File

@@ -248,4 +248,8 @@ public class CleaningTaskService {
public void stopTask(String taskId) {
taskScheduler.stopTask(taskId);
}
public List<OperatorInstanceDto> getInstanceByTemplateId(String templateId) {
return operatorInstanceRepo.findInstanceByInstanceId(templateId);
}
}

View File

@@ -3,6 +3,7 @@ package com.datamate.cleaning.application;
import com.datamate.cleaning.domain.repository.CleaningTemplateRepository;
import com.datamate.cleaning.domain.repository.OperatorInstanceRepository;
import com.datamate.cleaning.infrastructure.validator.CleanTaskValidator;
import com.datamate.cleaning.interfaces.dto.*;
import com.datamate.cleaning.domain.model.entity.TemplateWithInstance;
import com.datamate.operator.domain.repository.OperatorViewRepository;
@@ -28,6 +29,8 @@ public class CleaningTemplateService {
private final OperatorViewRepository operatorViewRepo;
private final CleanTaskValidator cleanTaskValidator;
public List<CleaningTemplateDto> getTemplates(String keywords) {
List<OperatorDto> allOperators =
operatorViewRepo.findOperatorsByCriteria(null, null, null, null, null);
@@ -59,6 +62,7 @@ public class CleaningTemplateService {
@Transactional
public CleaningTemplateDto createTemplate(CreateCleaningTemplateRequest request) {
cleanTaskValidator.checkInputAndOutput(request.getInstance());
CleaningTemplateDto template = new CleaningTemplateDto();
String templateId = UUID.randomUUID().toString();
template.setId(templateId);

View File

@@ -13,4 +13,6 @@ public interface OperatorInstanceRepository extends IRepository<OperatorInstance
void deleteByInstanceId(String instanceId);
List<OperatorDto> findOperatorByInstanceId(String instanceId);
List<OperatorInstanceDto> findInstanceByInstanceId(String instanceId);
}

View File

@@ -8,6 +8,7 @@ import com.datamate.common.infrastructure.exception.SystemErrorCode;
import com.datamate.operator.domain.model.OperatorView;
import com.datamate.operator.interfaces.dto.OperatorDto;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
@@ -23,20 +24,39 @@ import java.util.Map;
public interface OperatorInstanceConverter {
OperatorInstanceConverter INSTANCE = Mappers.getMapper(OperatorInstanceConverter.class);
ObjectMapper OBJECT_MAPPER = new ObjectMapper();
@Mapping(target = "settingsOverride", source = "overrides", qualifiedByName = "mapToString")
@Mapping(target = "operatorId", source = "id")
OperatorInstance fromDtoToEntity(OperatorInstanceDto instance);
@Mapping(target = "overrides", source = "settingsOverride", qualifiedByName = "stringToMap")
@Mapping(target = "id", source = "operatorId")
OperatorInstanceDto fromEntityToDto(OperatorInstance instance);
List<OperatorInstanceDto> fromEntityToDtoList(List<OperatorInstance> instance);
@Named("mapToString")
static String mapToString(Map<String, Object> objects) {
ObjectMapper objectMapper = new ObjectMapper();
try {
return objectMapper.writeValueAsString(objects);
return OBJECT_MAPPER.writeValueAsString(objects);
} catch (JsonProcessingException e) {
throw BusinessException.of(SystemErrorCode.UNKNOWN_ERROR);
}
}
@Named("stringToMap")
static Map<String, Object> stringToMap(String json) {
if (json == null) {
return Collections.emptyMap();
}
try {
return OBJECT_MAPPER.readValue(json, new TypeReference<>() {});
} catch (JsonProcessingException e) {
throw BusinessException.of(SystemErrorCode.UNKNOWN_ERROR);
}
}
@Mapping(target = "categories", source = "categories", qualifiedByName = "stringToList")
OperatorDto fromEntityToDto(OperatorView operator);

View File

@@ -42,4 +42,12 @@ public class OperatorInstanceRepositoryImpl extends CrudRepository<OperatorInsta
public List<OperatorDto> findOperatorByInstanceId(String instanceId) {
return OperatorInstanceConverter.INSTANCE.fromEntityToDto(mapper.findOperatorByInstanceId(instanceId));
}
@Override
public List<OperatorInstanceDto> findInstanceByInstanceId(String instanceId) {
LambdaQueryWrapper<OperatorInstance> lambdaWrapper = new LambdaQueryWrapper<>();
lambdaWrapper.eq(OperatorInstance::getInstanceId, instanceId)
.orderByAsc(OperatorInstance::getOpIndex);
return OperatorInstanceConverter.INSTANCE.fromEntityToDtoList(mapper.selectList(lambdaWrapper));
}
}

View File

@@ -27,6 +27,8 @@ public class CreateCleaningTaskRequest {
private String destDatasetType;
private String templateId;
private List<OperatorInstanceDto> instance = new ArrayList<>();
}

View File

@@ -1,12 +1,10 @@
package com.datamate.cleaning.interfaces.rest;
import com.datamate.cleaning.application.CleaningTaskService;
import com.datamate.cleaning.interfaces.dto.CleaningResultDto;
import com.datamate.cleaning.interfaces.dto.CleaningTaskDto;
import com.datamate.cleaning.interfaces.dto.CleaningTaskLog;
import com.datamate.cleaning.interfaces.dto.CreateCleaningTaskRequest;
import com.datamate.cleaning.interfaces.dto.*;
import com.datamate.common.interfaces.PagedResponse;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@@ -31,6 +29,9 @@ public class CleaningTaskController {
@PostMapping
public CleaningTaskDto cleaningTasksPost(@RequestBody CreateCleaningTaskRequest request) {
if (request.getInstance().isEmpty() && StringUtils.isNotBlank(request.getTemplateId())) {
request.setInstance(cleaningTaskService.getInstanceByTemplateId(request.getTemplateId()));
}
return cleaningTaskService.createTask(request);
}
@@ -57,6 +58,13 @@ public class CleaningTaskController {
return taskId;
}
@DeleteMapping
public void cleaningTasksDelete(@RequestParam List<String> taskIds) {
for (String taskId : taskIds) {
cleaningTaskService.deleteTask(taskId);
}
}
@GetMapping("/{taskId}/result")
public List<CleaningResultDto> cleaningTasksTaskIdGetResult(@PathVariable("taskId") String taskId) {
return cleaningTaskService.getTaskResults(taskId);