|
@@ -0,0 +1,189 @@
|
|
|
+package com.kgraph.support.service.impl;
|
|
|
+
|
|
|
+import com.kgraph.common.config.KgraphConfig;
|
|
|
+import com.kgraph.common.core.domain.entity.SysDictData;
|
|
|
+import com.kgraph.common.utils.DateUtils;
|
|
|
+import com.kgraph.common.utils.StringUtils;
|
|
|
+import com.kgraph.common.utils.file.FileUploadUtils;
|
|
|
+import com.kgraph.support.domain.Subtask;
|
|
|
+import com.kgraph.support.domain.Task;
|
|
|
+import com.kgraph.support.dto.RequestDTO;
|
|
|
+import com.kgraph.support.dto.ResponseDTO;
|
|
|
+import com.kgraph.support.mapper.SubtaskMapper;
|
|
|
+import com.kgraph.support.service.ISubtaskService;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.web.reactive.function.client.WebClient;
|
|
|
+import reactor.core.publisher.Mono;
|
|
|
+
|
|
|
+import java.io.IOException;
|
|
|
+import java.time.Duration;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 子任务管理Service业务层处理
|
|
|
+ *
|
|
|
+ * @author Allen
|
|
|
+ * @date 2023-10-16
|
|
|
+ */
|
|
|
+@Service
|
|
|
+public class SubtaskServiceImpl implements ISubtaskService
|
|
|
+{
|
|
|
+ protected final Logger logger = LoggerFactory.getLogger(this.getClass());
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private SubtaskMapper subtaskMapper;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询子任务管理
|
|
|
+ *
|
|
|
+ * @param id 子任务管理主键
|
|
|
+ * @return 子任务管理
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public Subtask selectSubtaskById(Long id)
|
|
|
+ {
|
|
|
+ return subtaskMapper.selectSubtaskById(id);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询子任务管理列表
|
|
|
+ *
|
|
|
+ * @param subtask 子任务管理
|
|
|
+ * @return 子任务管理
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public List<Subtask> selectSubtaskList(Subtask subtask)
|
|
|
+ {
|
|
|
+ return subtaskMapper.selectSubtaskList(subtask);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 新增子任务管理
|
|
|
+ *
|
|
|
+ * @param subtask 子任务管理
|
|
|
+ * @return 结果
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public int insertSubtask(Subtask subtask)
|
|
|
+ {
|
|
|
+ subtask.setCreateTime(DateUtils.getNowDate());
|
|
|
+ return subtaskMapper.insertSubtask(subtask);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 修改子任务管理
|
|
|
+ *
|
|
|
+ * @param subtask 子任务管理
|
|
|
+ * @return 结果
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public int updateSubtask(Subtask subtask)
|
|
|
+ {
|
|
|
+ subtask.setUpdateTime(DateUtils.getNowDate());
|
|
|
+ return subtaskMapper.updateSubtask(subtask);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 批量删除子任务管理
|
|
|
+ *
|
|
|
+ * @param ids 需要删除的子任务管理主键
|
|
|
+ * @return 结果
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public int deleteSubtaskByIds(Long[] ids)
|
|
|
+ {
|
|
|
+ return subtaskMapper.deleteSubtaskByIds(ids);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 删除子任务管理信息
|
|
|
+ *
|
|
|
+ * @param id 子任务管理主键
|
|
|
+ * @return 结果
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public int deleteSubtaskById(Long id)
|
|
|
+ {
|
|
|
+ return subtaskMapper.deleteSubtaskById(id);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void createSubtask(Task task, String filePath, List<SysDictData> subtaskDictList) throws IOException {
|
|
|
+ Map<String, SysDictData> dickMap = subtaskDictList.stream()
|
|
|
+ .collect(Collectors.toMap(SysDictData::getDictValue, sysDictData -> sysDictData));
|
|
|
+ String url;
|
|
|
+ SysDictData dickData;
|
|
|
+ for(String subtask : task.getSubtaskArray()) {
|
|
|
+ dickData = dickMap.get(subtask);
|
|
|
+
|
|
|
+ if(dickData == null){
|
|
|
+ logger.warn("dickData is empty");
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ url = dickData.getRemark();
|
|
|
+ if (StringUtils.isEmpty(url)) {
|
|
|
+ logger.warn("url is empty");
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ // create subtask
|
|
|
+ Subtask sub = buildAndCreateSubtask(task,dickData.getDictLabel());
|
|
|
+ sub.setTaskId(task.getId());
|
|
|
+
|
|
|
+ // todo http code, will be open
|
|
|
+// RequestDTO requestDTO = new RequestDTO();
|
|
|
+// requestDTO.setFilePath(filePath);
|
|
|
+// WebClient webClient = WebClient.create(url);
|
|
|
+// Mono<ResponseDTO> response = webClient.post()
|
|
|
+// .bodyValue(requestDTO)
|
|
|
+// .retrieve()
|
|
|
+// .bodyToMono(ResponseDTO.class);
|
|
|
+//
|
|
|
+// ResponseDTO responseDTO = response.block(Duration.ofSeconds(10));
|
|
|
+
|
|
|
+ // todo test code, will be remove
|
|
|
+ ResponseDTO responseDTO = new ResponseDTO();
|
|
|
+ responseDTO.setCode(200);
|
|
|
+
|
|
|
+ if (responseDTO != null && responseDTO.getCode() == 200) {
|
|
|
+
|
|
|
+ // todo save subtasks
|
|
|
+ sub.setTaskStatus(Subtask.RUNNING);
|
|
|
+ updateSubtask(sub);
|
|
|
+ } else {
|
|
|
+ logger.warn("返回异常,{}", responseDTO);
|
|
|
+ // error todo save subtasks
|
|
|
+ sub.setTaskStatus(Subtask.FAIL);
|
|
|
+ sub.setRemark(responseDTO == null? "response is null" : responseDTO.getMessage());
|
|
|
+ updateSubtask(sub);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private Subtask buildAndCreateSubtask(Task task,String subtaskName) throws IOException {
|
|
|
+ Subtask subtask = new Subtask();
|
|
|
+ subtask.setTaskId(task.getId());
|
|
|
+ subtask.setSubtaskName(subtaskName);
|
|
|
+ subtask.setTaskStatus(Subtask.NEW);
|
|
|
+ String filePrefix = KgraphConfig.getResultPath();
|
|
|
+ subtask.setResultFileName(subtaskName);
|
|
|
+ subtask.setStartTime(DateUtils.getNowDate());
|
|
|
+ subtask.setCreateBy(task.getCreateBy());
|
|
|
+
|
|
|
+ // insert subtask
|
|
|
+ insertSubtask(subtask);
|
|
|
+
|
|
|
+ String resultPath = FileUploadUtils.buildPath(filePrefix+"/subtask/"+task.getId()+ "/" + subtask.getId(), subtaskName + ".txt");
|
|
|
+ subtask.setResultFilePath(resultPath);
|
|
|
+
|
|
|
+ // add insertSubtask
|
|
|
+ updateSubtask(subtask);
|
|
|
+ return subtask;
|
|
|
+ }
|
|
|
+}
|