远程调用测试
parent
6f7e1b190d
commit
a982be1946
|
@ -0,0 +1,39 @@
|
||||||
|
package com.muyu.quest.model;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.experimental.SuperBuilder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Lenovo
|
||||||
|
* @ Tool:IntelliJ IDEA
|
||||||
|
* @ Author:CHX
|
||||||
|
* @ Date:2024-08-23-9:41
|
||||||
|
* @ Version:1.0
|
||||||
|
* @ Description:数据转换对象
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@SuperBuilder
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class DataModel {
|
||||||
|
/**
|
||||||
|
* 键
|
||||||
|
*/
|
||||||
|
private String key;
|
||||||
|
/**
|
||||||
|
* 标签
|
||||||
|
*/
|
||||||
|
private String label;
|
||||||
|
/**
|
||||||
|
* 类型
|
||||||
|
*/
|
||||||
|
private String type;
|
||||||
|
/**
|
||||||
|
* 值
|
||||||
|
*/
|
||||||
|
private Object value;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
package com.muyu.quest.model;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.experimental.SuperBuilder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Lenovo
|
||||||
|
* @ Tool:IntelliJ IDEA
|
||||||
|
* @ Author:CHX
|
||||||
|
* @ Date:2024-09-03-22:14
|
||||||
|
* @ Version:1.0
|
||||||
|
* @ Description:任务表查询时用到
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@SuperBuilder
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class DataValueModel {
|
||||||
|
/**
|
||||||
|
* 数据接入的ID
|
||||||
|
*/
|
||||||
|
private Long basicId;
|
||||||
|
/**
|
||||||
|
* 拼写的sql语句
|
||||||
|
*/
|
||||||
|
private String sql;
|
||||||
|
|
||||||
|
}
|
|
@ -1,11 +1,15 @@
|
||||||
package com.muyu.quest.remote;
|
package com.muyu.quest.remote;
|
||||||
|
|
||||||
import com.muyu.common.core.domain.Result;
|
import com.muyu.common.core.domain.Result;
|
||||||
|
import com.muyu.quest.model.DataModel;
|
||||||
|
import com.muyu.quest.model.DataValueModel;
|
||||||
import com.muyu.quest.remote.factory.RemoteDataSourceFactory;
|
import com.muyu.quest.remote.factory.RemoteDataSourceFactory;
|
||||||
import org.springframework.cloud.openfeign.FeignClient;
|
import org.springframework.cloud.openfeign.FeignClient;
|
||||||
import com.muyu.common.core.constant.ServiceNameConstants;
|
import com.muyu.common.core.constant.ServiceNameConstants;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestParam;
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @ Tool:IntelliJ IDEA
|
* @ Tool:IntelliJ IDEA
|
||||||
|
@ -17,10 +21,9 @@ import org.springframework.web.bind.annotation.RequestParam;
|
||||||
*/
|
*/
|
||||||
@FeignClient(contextId = "RemoteDataSourceService",
|
@FeignClient(contextId = "RemoteDataSourceService",
|
||||||
value = ServiceNameConstants.SOURCE_SERVICE,
|
value = ServiceNameConstants.SOURCE_SERVICE,
|
||||||
fallbackFactory = RemoteDataSourceFactory.class,
|
fallbackFactory = RemoteDataSourceFactory.class)
|
||||||
path = "/source")
|
|
||||||
public interface RemoteDataSourceService {
|
public interface RemoteDataSourceService {
|
||||||
|
|
||||||
@PostMapping("/value/findTableValue")
|
@PostMapping("/value/findTableValue")
|
||||||
public Result findTableValue(@RequestParam("basicId") Long basicId, @RequestParam("sql") String sql);
|
public Result<List<DataModel>> findTableValue(@RequestBody DataValueModel dataValueModel);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package com.muyu.quest.remote.factory;
|
package com.muyu.quest.remote.factory;
|
||||||
|
|
||||||
import com.muyu.common.core.domain.Result;
|
import com.muyu.common.core.domain.Result;
|
||||||
|
import com.muyu.quest.model.DataValueModel;
|
||||||
import com.muyu.quest.remote.RemoteDataSourceService;
|
import com.muyu.quest.remote.RemoteDataSourceService;
|
||||||
import org.springframework.cloud.openfeign.FallbackFactory;
|
import org.springframework.cloud.openfeign.FallbackFactory;
|
||||||
|
|
||||||
|
@ -17,7 +18,7 @@ public class RemoteDataSourceFactory implements FallbackFactory<RemoteDataSource
|
||||||
public RemoteDataSourceService create(Throwable cause) {
|
public RemoteDataSourceService create(Throwable cause) {
|
||||||
return new RemoteDataSourceService() {
|
return new RemoteDataSourceService() {
|
||||||
@Override
|
@Override
|
||||||
public Result findTableValue(Long basicId, String sql) {
|
public Result findTableValue(DataValueModel dataValueModel) {
|
||||||
return Result.error("数据接入模块连接失败,网络异常...");
|
return Result.error("数据接入模块连接失败,网络异常...");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
#com.muyu.source.remote.factory.RemoteDataSourceFactory
|
com.muyu.quest.remote.factory.RemoteDataSourceFactory
|
||||||
|
|
|
@ -90,7 +90,10 @@
|
||||||
<artifactId>muyu-quest-common</artifactId>
|
<artifactId>muyu-quest-common</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.muyu</groupId>
|
||||||
|
<artifactId>muyu-quest-remote</artifactId>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<build>
|
<build>
|
||||||
<finalName>muyu-quest</finalName>
|
<finalName>muyu-quest</finalName>
|
||||||
|
|
|
@ -5,11 +5,15 @@ import java.util.stream.Collectors;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
import com.muyu.common.core.domain.Result;
|
||||||
import com.muyu.common.core.utils.StringUtils;
|
import com.muyu.common.core.utils.StringUtils;
|
||||||
|
import com.muyu.quest.model.DataModel;
|
||||||
|
import com.muyu.quest.model.DataValueModel;
|
||||||
import com.muyu.quest.domain.Node;
|
import com.muyu.quest.domain.Node;
|
||||||
import com.muyu.quest.domain.NodeDisposition;
|
import com.muyu.quest.domain.NodeDisposition;
|
||||||
import com.muyu.quest.domain.NodeType;
|
import com.muyu.quest.domain.NodeType;
|
||||||
import com.muyu.quest.exception.TaskException;
|
import com.muyu.quest.exception.TaskException;
|
||||||
|
import com.muyu.quest.remote.RemoteDataSourceService;
|
||||||
import com.muyu.quest.req.NodeReq;
|
import com.muyu.quest.req.NodeReq;
|
||||||
import com.muyu.quest.req.TaskReq;
|
import com.muyu.quest.req.TaskReq;
|
||||||
import com.muyu.quest.resp.TaskResp;
|
import com.muyu.quest.resp.TaskResp;
|
||||||
|
@ -43,6 +47,8 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task>
|
||||||
private INodeDispositionService dispositionService;
|
private INodeDispositionService dispositionService;
|
||||||
@Resource
|
@Resource
|
||||||
private TaskMapper taskMapper;
|
private TaskMapper taskMapper;
|
||||||
|
@Resource
|
||||||
|
private RemoteDataSourceService remoteDataSourceService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询任务
|
* 查询任务
|
||||||
|
@ -181,14 +187,27 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task>
|
||||||
}else if (StringUtils.equals(thisNode.getNodeType(), "unite")){
|
}else if (StringUtils.equals(thisNode.getNodeType(), "unite")){
|
||||||
findSql = NodeUtils.nodeDispUnite(dispList);
|
findSql = NodeUtils.nodeDispUnite(dispList);
|
||||||
}else if (StringUtils.equals(thisNode.getNodeType(), "exportation")){
|
}else if (StringUtils.equals(thisNode.getNodeType(), "exportation")){
|
||||||
addSql = NodeUtils.nodeDispExportation(dispList);
|
if (StringUtils.isEmpty(findSql)){
|
||||||
|
throw new TaskException("数据输出节点必须紧跟在数据输入/操作节点之后");
|
||||||
|
}
|
||||||
|
// 执行查询语句
|
||||||
|
Result<List<DataModel>> tableValue = remoteDataSourceService.findTableValue(new DataValueModel(4L, findSql));
|
||||||
|
if (tableValue.getCode() != 200){
|
||||||
|
throw new TaskException(tableValue.getMsg());
|
||||||
|
}
|
||||||
|
System.out.println(tableValue);
|
||||||
|
List<DataModel> data = tableValue.getData();
|
||||||
|
System.out.println(data);
|
||||||
|
addSql = NodeUtils.nodeDispExportation(dispList, data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
log.info("任务执行结束,最终sql为: [{}]",addSql+" "+findSql);
|
log.info("任务执行结束,最终sql为: [{}]",addSql+" "+findSql);
|
||||||
return addSql+" "+findSql;
|
|
||||||
|
return findSql;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,7 @@ import com.muyu.quest.domain.Node;
|
||||||
import com.muyu.quest.domain.NodeDisposition;
|
import com.muyu.quest.domain.NodeDisposition;
|
||||||
import com.muyu.quest.domain.NodeType;
|
import com.muyu.quest.domain.NodeType;
|
||||||
import com.muyu.quest.exception.TaskException;
|
import com.muyu.quest.exception.TaskException;
|
||||||
|
import com.muyu.quest.model.DataModel;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
@ -231,10 +232,14 @@ public class NodeUtils {
|
||||||
* 输出节点 节点处理
|
* 输出节点 节点处理
|
||||||
*
|
*
|
||||||
* @param dispList 节点全部配置信息
|
* @param dispList 节点全部配置信息
|
||||||
|
* @param data 查询到的数据
|
||||||
* @return 新增sql
|
* @return 新增sql
|
||||||
*/
|
*/
|
||||||
public static String nodeDispExportation(List<NodeDisposition> dispList) {
|
public static String nodeDispExportation(List<NodeDisposition> dispList, List<DataModel> data) {
|
||||||
return nodeDispExportation(DispUtils.getDispMap(dispList));
|
if (data == null){
|
||||||
|
throw new TaskException("查询数据为空");
|
||||||
|
}
|
||||||
|
return nodeDispExportation(DispUtils.getDispMap(dispList), data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -242,26 +247,36 @@ public class NodeUtils {
|
||||||
* 输出节点 节点处理
|
* 输出节点 节点处理
|
||||||
*
|
*
|
||||||
* @param dispMap 节点整理后的Map配置信息
|
* @param dispMap 节点整理后的Map配置信息
|
||||||
|
* @param data 查询到的数据
|
||||||
* @return 新增sql
|
* @return 新增sql
|
||||||
*/
|
*/
|
||||||
private static String nodeDispExportation(Map<String, List<NodeDisposition>> dispMap) {
|
private static String nodeDispExportation(Map<String, List<NodeDisposition>> dispMap, List<DataModel> data) {
|
||||||
// 拼接新增表
|
// 拼接新增表
|
||||||
NodeDisposition db = dispMap.get("toDb").get(0);
|
NodeDisposition db = dispMap.get("toDb").get(0);
|
||||||
String dbTable = "`" + db.getDispDesc() + "`." + db.getDispValue();
|
String dbTable = "`" + db.getDispDesc() + "`." + db.getDispValue();
|
||||||
// 根据表结构拼接新增字段
|
// 根据表结构拼接新增字段
|
||||||
List<NodeDisposition> fieldList = dispMap.get("toFields");
|
List<NodeDisposition> fieldList = dispMap.get("toFields");
|
||||||
HashMap<String, String> map = new HashMap<>();
|
// 获取新增语句前半段
|
||||||
fieldList.forEach(field -> map.put(field.getDispDesc(),field.getDispValue().toString()));
|
String join = StringUtils.join(fieldList.stream().map(NodeDisposition::getDispValue).toArray(), ",");
|
||||||
List<String> findFieldList = Arrays.
|
StringBuilder insSql = new StringBuilder("INSERT INTO " + dbTable + "( " + join + " ) VALUES ");
|
||||||
stream(sqlMap.get("fields").split(",")).
|
// 获取查询字段
|
||||||
map(field -> field.split("\\.")[2]).
|
List<HashMap<String, String>> dataList1 = new ArrayList<>();
|
||||||
toList();
|
HashMap<String, String> dataMap = new HashMap<>();
|
||||||
String insSql = "INSERT INTO " +
|
for (int i = 0; i < data.size(); i++) {
|
||||||
dbTable +
|
if (i % fieldList.size() == 0 && i>0){
|
||||||
"(" +
|
dataList1.add(dataMap);
|
||||||
StringUtils.join(findFieldList.stream().map(map::get).toArray(), ",") +
|
dataMap = new HashMap<>();
|
||||||
")";
|
}
|
||||||
return insSql;
|
dataMap.put(data.get(i).getKey(), data.get(i).getValue().toString());
|
||||||
|
}
|
||||||
|
dataList1.forEach(map -> {
|
||||||
|
insSql.append("( ");
|
||||||
|
for (NodeDisposition disposition : fieldList) {
|
||||||
|
insSql.append("'").append(map.get(disposition.getDispDesc())).append("',");
|
||||||
|
}
|
||||||
|
insSql.append(" )");
|
||||||
|
});
|
||||||
|
return insSql.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue