完成执行任务接口,执行任务后生成对应的新增查询sql

master
面包骑士 2024-09-03 15:26:33 +08:00
parent 62ab73a6fb
commit 7c92817489
3 changed files with 160 additions and 127 deletions

View File

@ -156,7 +156,7 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task>
// 开始节点处理
while (true){
List<Node> nextNode = NodeUtils.getNextNode(thisNode, nodeListAll);
Set<String> nextNodeTypes = nextNode.stream().map(Node::getNodeCode).collect(Collectors.toSet());
Set<String> nextNodeTypes = nextNode.stream().map(Node::getNodeType).collect(Collectors.toSet());
if (nextNode.isEmpty()){
throw new TaskException("任务执行失败,节点 "+thisNode+" 无后续节点");
}else if (nextNodeTypes.size()>1){
@ -173,20 +173,22 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task>
.selectNodeDispositionList(new NodeDisposition().buildNodeCode(thisNode.getNodeCode()));
// 根据情况拼接查询sql与新增sql
if(StringUtils.equals(thisNode.getNodeType(), "table")) {
// 如果表节点下一级为数据输出节点,即表示为单表查询,将 当前表结构处理
// 如果表节点下一级为数据输出节点,即表示为单表查询,将 当前表结构处理为查询语句
Node newNode = NodeUtils.getNextNode(thisNode, nodeListAll).get(0);
if (StringUtils.equals(newNode.getNodeType(), "exportation")){
findSql = DispUtils.tableNode(dispList);
findSql = NodeUtils.tableNode(dispList);
}
}else if (StringUtils.equals(thisNode.getNodeType(), "unite")){
findSql = DispUtils.nodeDispUnite(dispList);
findSql = NodeUtils.nodeDispUnite(dispList);
}else if (StringUtils.equals(thisNode.getNodeType(), "exportation")){
// addSql = exportationNode(thisNode);
addSql = NodeUtils.nodeDispExportation(dispList);
}
}
log.info("任务执行完毕,查询sql为: {},新增sql为: {}",findSql, addSql);
return "";
log.info("任务执行结束,最终sql为: [{}]",addSql+" "+findSql);
return addSql+" "+findSql;
}
}

View File

@ -28,6 +28,7 @@ public class DispUtils {
/**
*
*
* @param nodeType
* @param nodeTypeList
* @return key
@ -44,6 +45,7 @@ public class DispUtils {
/**
*
*
* @param nodeType
* @param nodeTypeList
* @param dispList
@ -75,6 +77,7 @@ public class DispUtils {
/**
*
*
* @param dispList
* @return map
*/
@ -91,83 +94,4 @@ public class DispUtils {
return map;
}
/**
*
* @param dispList
* @return sql
*/
public static String nodeDispUnite(List<NodeDisposition> dispList) {
return nodeDispUnite(getDispMap(dispList));
}
/**
*
* @param dispMap Map
* @return sql
*/
public static String nodeDispUnite(Map<String,List<NodeDisposition>> dispMap) {
List<NodeDisposition> dbList = dispMap.get("db");
List<NodeDisposition> tableList = dispMap.get("table");
List<NodeDisposition> fieldList = dispMap.get("fields");
NodeDisposition join = dispMap.get("join").get(0);
NodeDisposition joinDataForm = dispMap.get("joinDataForm").get(0);
NodeDisposition joinDataTo = dispMap.get("joinDataTo").get(0);
// 查询表
Object[] array = tableList.stream().map(NodeDisposition::getDispDesc).toArray();
String table = array[0].toString() +
" " +
join.getDispValue() +
" " +
array[1].toString() +
" ON " +
joinDataForm.getDispDesc() +
"." +
joinDataForm.getDispValue() +
" = " +
joinDataTo.getDispDesc() +
"." +
joinDataTo.getDispValue();
// 查询列
String field = StringUtils.join(fieldList
.stream()
.map(fields -> fields.getDispDesc()+"."+fields.getDispValue())
.toArray(),
",");
Set<Object> dbNameSet = dbList.stream().map(NodeDisposition::getDispValue).collect(Collectors.toSet());
for (Object o : dbNameSet) {
table = StringUtils.replace(table, o.toString()+".", "`" + o.toString() + "`.");
field = StringUtils.replace(field, o.toString()+".", "`" + o.toString() + "`.");
}
return "SELECT " + field + " FROM " + table;
}
/**
*
* @param dispList
* @return sql
*/
public static String tableNode(List<NodeDisposition> dispList) {
return tableNode(getDispMap(dispList));
}
/**
*
* @param dispMap Map
* @return sql
*/
private static String tableNode(Map<String, List<NodeDisposition>> dispMap) {
NodeDisposition db = dispMap.get("db").get(0);
NodeDisposition table = dispMap.get("table").get(0);
List<NodeDisposition> fieldList = dispMap.get("fields");
String dbTable = "`"+db.getDispValue()+"`."+table.getDispValue();
String fields = StringUtils.join(fieldList.stream().
map(field -> dbTable + "." + field.getDispValue()).
toArray(),
",");
return "SELECT " + fields + " FROM " + dbTable;
}
}

View File

@ -15,10 +15,7 @@ import com.muyu.quest.domain.NodeDisposition;
import com.muyu.quest.domain.NodeType;
import com.muyu.quest.exception.TaskException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -30,6 +27,7 @@ import java.util.stream.Collectors;
*/
public class NodeUtils {
private static HashMap<String, String> sqlMap = new HashMap<>();
/**
*
*
@ -90,30 +88,6 @@ public class NodeUtils {
.toList();
}
/**
* -
* @param dispList
* @return map - +sql
*/
public static Map<String, String> nodeDispOutput(List<NodeDisposition> dispList){
// 3. 获取节点配置信息
Map<String, List<NodeDisposition>> dispMap = DispUtils.getDispMap(dispList);
NodeDisposition toDbList = dispMap.get("toDb").get(0);
List<NodeDisposition> toFieldList = dispMap.get("toFields");
// 数据库与表
String dbName = toDbList.getDispValue().toString()+"."+toDbList.getDispDesc();
// 拼接sql
String sql = "INSERT INTO "+dbName+"("+
toFieldList.stream().map(NodeDisposition::getDispDesc).collect(Collectors.joining(","))+
") VALUES("+
toFieldList.stream().map(NodeDisposition::getDispValue).map(Object::toString).collect(Collectors.joining(","))+
")";
HashMap<String, String> hashMap = new HashMap<>();
hashMap.put("dbName",dbName);
hashMap.put("sql",sql);
return hashMap;
}
/**
*
@ -157,4 +131,137 @@ public class NodeUtils {
});
}
/**
*
* @param dispList
* @return sql
*/
public static String nodeDispUnite(List<NodeDisposition> dispList) {
return nodeDispUnite(DispUtils.getDispMap(dispList));
}
/**
*
* @param dispMap Map
* @return sql
*/
public static String nodeDispUnite(Map<String,List<NodeDisposition>> dispMap) {
List<NodeDisposition> dbList = dispMap.get("db");
List<NodeDisposition> tableList = dispMap.get("table");
List<NodeDisposition> fieldList = dispMap.get("fields");
NodeDisposition join = dispMap.get("join").get(0);
NodeDisposition joinDataForm = dispMap.get("joinDataForm").get(0);
NodeDisposition joinDataTo = dispMap.get("joinDataTo").get(0);
// 查询表
Object[] array = tableList.stream().map(NodeDisposition::getDispDesc).toArray();
String table = array[0].toString() +
" " +
join.getDispValue() +
" " +
array[1].toString() +
" ON " +
joinDataForm.getDispDesc() +
"." +
joinDataForm.getDispValue() +
" = " +
joinDataTo.getDispDesc() +
"." +
joinDataTo.getDispValue();
// 查询列
String field = StringUtils.join(fieldList
.stream()
.map(fields -> fields.getDispDesc()+"."+fields.getDispValue())
.toArray(),
",");
Set<Object> dbNameSet = dbList.stream().map(NodeDisposition::getDispValue).collect(Collectors.toSet());
for (Object o : dbNameSet) {
table = StringUtils.replace(table, o.toString()+".", "`" + o.toString() + "`.");
field = StringUtils.replace(field, o.toString()+".", "`" + o.toString() + "`.");
}
sqlMap = new HashMap<>();
sqlMap.put("dbTable",table);
sqlMap.put("fields",field);
return findSqlSplice(table, field);
}
/**
*
* @param dispList
* @return sql
*/
public static String tableNode(List<NodeDisposition> dispList) {
return tableNode(DispUtils.getDispMap(dispList));
}
/**
*
* @param dispMap Map
* @return sql
*/
private static String tableNode(Map<String, List<NodeDisposition>> dispMap) {
NodeDisposition db = dispMap.get("db").get(0);
NodeDisposition table = dispMap.get("table").get(0);
List<NodeDisposition> fieldList = dispMap.get("fields");
String dbTable = "`"+db.getDispValue()+"`."+table.getDispValue();
String fields = StringUtils.join(fieldList.stream().
map(field -> dbTable + "." + field.getDispValue()).
toArray(),
",");
sqlMap = new HashMap<>();
sqlMap.put("dbTable",dbTable);
sqlMap.put("fields",fields);
return findSqlSplice(dbTable, fields);
}
/**
* sql
* @param table
* @param fields
* @return sql
*/
private static String findSqlSplice(String table, String fields) {
return "SELECT " + fields + " FROM " + table;
}
/**
*
*
* @param dispList
* @return sql
*/
public static String nodeDispExportation(List<NodeDisposition> dispList) {
return nodeDispExportation(DispUtils.getDispMap(dispList));
}
/**
*
*
* @param dispMap Map
* @return sql
*/
private static String nodeDispExportation(Map<String, List<NodeDisposition>> dispMap) {
// 拼接新增表
NodeDisposition db = dispMap.get("toDb").get(0);
String dbTable = "`" + db.getDispDesc() + "`." + db.getDispValue();
// 根据表结构拼接新增字段
List<NodeDisposition> fieldList = dispMap.get("toFields");
HashMap<String, String> map = new HashMap<>();
fieldList.forEach(field -> map.put(field.getDispDesc(),field.getDispValue().toString()));
List<String> findFieldList = Arrays.
stream(sqlMap.get("fields").split(",")).
map(field -> field.split("\\.")[2]).
toList();
String insSql = "INSERT INTO " +
dbTable +
"(" +
StringUtils.join(findFieldList.stream().map(map::get).toArray(), ",") +
")";
return insSql;
}
}