From e9da4e7f99be02e7d0859111dd84ed54a43067d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=91=E5=B9=B4=E6=A2=A6=E4=B8=8E=E7=A0=96?= <2847127106@qq.com> Date: Thu, 5 Sep 2024 15:06:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BB=BB=E5=8A=A1=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E6=89=A7=E8=A1=8C=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../quest/remote/RemoteDataSourceService.java | 1 + .../muyu/quest/controller/TaskController.java | 10 ++- .../com/muyu/quest/manager/TaskManager.java | 21 +++++ .../com/muyu/quest/service/TaskService.java | 2 + .../quest/service/impl/TaskServiceImpl.java | 80 ++++++++++++++----- .../java/com/muyu/quest/utils/NodeUtils.java | 18 +++++ 6 files changed, 111 insertions(+), 21 deletions(-) create mode 100644 muyu-quest-server/src/main/java/com/muyu/quest/manager/TaskManager.java diff --git a/muyu-quest-remote/src/main/java/com/muyu/quest/remote/RemoteDataSourceService.java b/muyu-quest-remote/src/main/java/com/muyu/quest/remote/RemoteDataSourceService.java index c323871..a930a69 100644 --- a/muyu-quest-remote/src/main/java/com/muyu/quest/remote/RemoteDataSourceService.java +++ b/muyu-quest-remote/src/main/java/com/muyu/quest/remote/RemoteDataSourceService.java @@ -22,6 +22,7 @@ import java.util.List; */ @FeignClient(contextId = "RemoteDataSourceService", value = ServiceNameConstants.SOURCE_SERVICE, + url = "http://10.0.2.1:19652/", fallbackFactory = RemoteDataSourceFactory.class) public interface RemoteDataSourceService { diff --git a/muyu-quest-server/src/main/java/com/muyu/quest/controller/TaskController.java b/muyu-quest-server/src/main/java/com/muyu/quest/controller/TaskController.java index ea1f693..b06c313 100644 --- a/muyu-quest-server/src/main/java/com/muyu/quest/controller/TaskController.java +++ b/muyu-quest-server/src/main/java/com/muyu/quest/controller/TaskController.java @@ -110,11 +110,19 @@ public class TaskController extends BaseController return success(); } + /** + * 测试任务 + */ + @PostMapping("/testExecute/{taskCode}") + public Result testExecute(@PathVariable("taskCode") String taskCode) { + return success(taskService.testExecute(taskCode)); + } + /** * 执行任务 */ @PostMapping("/execute/{taskCode}") - public Result execute(@PathVariable("taskCode") String taskCode) { + public Result execute(@PathVariable("taskCode") String taskCode) { return success(taskService.execute(taskCode)); } diff --git a/muyu-quest-server/src/main/java/com/muyu/quest/manager/TaskManager.java b/muyu-quest-server/src/main/java/com/muyu/quest/manager/TaskManager.java new file mode 100644 index 0000000..78fbf7e --- /dev/null +++ b/muyu-quest-server/src/main/java/com/muyu/quest/manager/TaskManager.java @@ -0,0 +1,21 @@ +package com.muyu.quest.manager; + +/** + * @Author: 胡杨 + * @Name: TaskManager + * @Description: 任务管理器 + * @CreatedDate: 2024/9/4 下午7:44 + * @FilePath: com.muyu.quest.manager + */ + + +/** + * @Author: 胡杨 + * @Name: TaskManager + * @Description: 任务管理器 + * @CreatedDate: 2024/9/4 下午7:44 + * @FilePath: com.muyu.quest.manager + */ + +public class TaskManager { +} diff --git a/muyu-quest-server/src/main/java/com/muyu/quest/service/TaskService.java b/muyu-quest-server/src/main/java/com/muyu/quest/service/TaskService.java index 9f8ea7e..3044989 100644 --- a/muyu-quest-server/src/main/java/com/muyu/quest/service/TaskService.java +++ b/muyu-quest-server/src/main/java/com/muyu/quest/service/TaskService.java @@ -45,4 +45,6 @@ public interface TaskService extends IService { void removeBatch(List list); String execute(String taskCode); + + String testExecute(String taskCode); } diff --git a/muyu-quest-server/src/main/java/com/muyu/quest/service/impl/TaskServiceImpl.java b/muyu-quest-server/src/main/java/com/muyu/quest/service/impl/TaskServiceImpl.java index 158e621..6617f78 100644 --- a/muyu-quest-server/src/main/java/com/muyu/quest/service/impl/TaskServiceImpl.java +++ b/muyu-quest-server/src/main/java/com/muyu/quest/service/impl/TaskServiceImpl.java @@ -152,36 +152,27 @@ public class TaskServiceImpl extends ServiceImpl List nodeListAll = nodeService.selectNodeList(new NodeReq().buildTaskCode(taskCode)); // 节点初始化 HashMap> nodeMap = NodeUtils.nodeInit(nodeListAll); - // 查询所有节点类型与其连接节点规范 - List nodeTypeList = selectNodeTypeList(); /* 节点连接规范校验 */ - NodeUtils.nodeCheck(nodeListAll,nodeTypeList); + NodeUtils.nodeCheck(nodeListAll,selectNodeTypeList()); // 开始节点处理 Node thisNode = nodeMap.get("start").get(0); // 开始节点处理 while (true){ - List nextNode = NodeUtils.getNextNode(thisNode, nodeListAll); - Set nextNodeTypes = nextNode.stream().map(Node::getNodeType).collect(Collectors.toSet()); - if (nextNode.isEmpty()){ - throw new TaskException("任务执行失败,节点 "+thisNode+" 无后续节点"); - }else if (nextNodeTypes.size()>1){ - throw new TaskException("同级节点 "+nextNode+" 类型不同"); - }else if (nextNode.stream().map(Node::getNodeNextCode).collect(Collectors.toSet()).size()>1){ - throw new TaskException("同级节点 "+nextNode+" 下级节点不同"); - } - thisNode = nextNode.get(0); + thisNode = NodeUtils.nodeCheck(thisNode, nodeListAll); if (StringUtils.equals(thisNode.getNodeType(), "end")){ break; } // 查询当前节点所有配置信息 List dispList = dispositionService .selectNodeDispositionList(new NodeDisposition().buildNodeCode(thisNode.getNodeCode())); + if (dispList.isEmpty()){ + throw new TaskException("节点 "+thisNode+" 配置为空"); + } // 根据情况拼接查询sql与新增sql if(StringUtils.equals(thisNode.getNodeType(), "table")) { // 如果表节点下一级为数据输出节点,即表示为单表查询,将 当前表结构处理为查询语句 - Node newNode = NodeUtils.getNextNode(thisNode, nodeListAll).get(0); - if (StringUtils.equals(newNode.getNodeType(), "exportation")){ + if (StringUtils.equals(NodeUtils.nodeCheck(thisNode, nodeListAll).getNodeType(), "exportation")){ findSql = NodeUtils.tableNode(dispList); } }else if (StringUtils.equals(thisNode.getNodeType(), "unite")){ @@ -196,23 +187,72 @@ public class TaskServiceImpl extends ServiceImpl if (tableValue.getCode() != 200){ throw new TaskException(tableValue.getMsg()); } - System.out.println(tableValue); List data = tableValue.getData(); - System.out.println(data); addSql = NodeUtils.nodeDispExportation(dispList, data); } } log.info("任务执行完成,新增sql为: [{}]", addSql); - Result i = remoteDataSourceService.addTableValue(new DataValueModel(4L, addSql)); - if (i.getCode() != 200){ - throw new TaskException(i.getMsg()); + Result resp = remoteDataSourceService.addTableValue(new DataValueModel(4L, addSql)); + if (resp.getCode() != 200){ + throw new TaskException(resp.getMsg()); } return "执行成功"; } + @Override + public String testExecute(String taskCode) { + log.info("任务编码 {} 开始测试执行......",taskCode); + // 查询SQL语句 + String findSql = ""; + // 新增SQL语句 + String addSql = ""; + // 查询任务所有节点 + List nodeListAll = nodeService.selectNodeList(new NodeReq().buildTaskCode(taskCode)); + // 节点初始化 + HashMap> nodeMap = NodeUtils.nodeInit(nodeListAll); + /* 节点连接规范校验 */ + NodeUtils.nodeCheck(nodeListAll,selectNodeTypeList()); + // 开始节点处理 + Node thisNode = nodeMap.get("start").get(0); + // 开始节点处理 + while (true){ + thisNode = NodeUtils.nodeCheck(thisNode, nodeListAll); + if (StringUtils.equals(thisNode.getNodeType(), "end")){ + break; + } + // 查询当前节点所有配置信息 + List dispList = dispositionService + .selectNodeDispositionList(new NodeDisposition().buildNodeCode(thisNode.getNodeCode())); + if (dispList.isEmpty()){ + throw new TaskException("节点 "+thisNode+" 配置为空"); + } + // 根据情况拼接查询sql与新增sql + if(StringUtils.equals(thisNode.getNodeType(), "table")) { + // 如果表节点下一级为数据输出节点,即表示为单表查询,将 当前表结构处理为查询语句 + if (StringUtils.equals(NodeUtils.nodeCheck(thisNode, nodeListAll).getNodeType(), "exportation")){ + findSql = NodeUtils.tableNode(dispList); + } + }else if (StringUtils.equals(thisNode.getNodeType(), "unite")){ + findSql = NodeUtils.nodeDispUnite(dispList); + }else if (StringUtils.equals(thisNode.getNodeType(), "exportation")){ + if (StringUtils.isEmpty(findSql)){ + throw new TaskException("数据输出节点必须紧跟在数据输入/操作节点之后"); + } + // 执行查询语句 + log.info("任务执行查询阶段结束,查询sql为: [{}]", findSql); + Result> tableValue = remoteDataSourceService.findTableValue(new DataValueModel(4L, findSql)); + if (tableValue.getCode() != 200){ + throw new TaskException(tableValue.getMsg()); + } + List data = tableValue.getData(); + addSql = NodeUtils.nodeDispExportation(dispList, data); + } + } + return "执行成功,无异常"; + } } diff --git a/muyu-quest-server/src/main/java/com/muyu/quest/utils/NodeUtils.java b/muyu-quest-server/src/main/java/com/muyu/quest/utils/NodeUtils.java index b70c485..3426665 100644 --- a/muyu-quest-server/src/main/java/com/muyu/quest/utils/NodeUtils.java +++ b/muyu-quest-server/src/main/java/com/muyu/quest/utils/NodeUtils.java @@ -132,6 +132,24 @@ public class NodeUtils { }); } + + /** + * 查询节点的下一级节点 + */ + public static Node nodeCheck(Node node, List nodes) { + List nextNode = NodeUtils.getNextNode(node, nodes); + Set nextNodeTypes = nextNode.stream().map(Node::getNodeType).collect(Collectors.toSet()); + if (nextNode.isEmpty()){ + throw new TaskException("任务执行失败,节点 "+node+" 无后续节点"); + }else if (nextNodeTypes.size()>1){ + throw new TaskException("同级节点 "+nextNode+" 类型不同"); + }else if (nextNode.stream().map(Node::getNodeNextCode).collect(Collectors.toSet()).size()>1){ + throw new TaskException("同级节点 "+nextNode+" 下级节点不同"); + } + return nextNode.get(0); + } + + /** * 联合查询节点处理 * @param dispList 节点全部配置信息