远程调用测试
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;
|
||||
|
||||
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 org.springframework.cloud.openfeign.FeignClient;
|
||||
import com.muyu.common.core.constant.ServiceNameConstants;
|
||||
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
|
||||
|
@ -17,10 +21,9 @@ import org.springframework.web.bind.annotation.RequestParam;
|
|||
*/
|
||||
@FeignClient(contextId = "RemoteDataSourceService",
|
||||
value = ServiceNameConstants.SOURCE_SERVICE,
|
||||
fallbackFactory = RemoteDataSourceFactory.class,
|
||||
path = "/source")
|
||||
fallbackFactory = RemoteDataSourceFactory.class)
|
||||
public interface RemoteDataSourceService {
|
||||
|
||||
@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;
|
||||
|
||||
import com.muyu.common.core.domain.Result;
|
||||
import com.muyu.quest.model.DataValueModel;
|
||||
import com.muyu.quest.remote.RemoteDataSourceService;
|
||||
import org.springframework.cloud.openfeign.FallbackFactory;
|
||||
|
||||
|
@ -17,7 +18,7 @@ public class RemoteDataSourceFactory implements FallbackFactory<RemoteDataSource
|
|||
public RemoteDataSourceService create(Throwable cause) {
|
||||
return new RemoteDataSourceService() {
|
||||
@Override
|
||||
public Result findTableValue(Long basicId, String sql) {
|
||||
public Result findTableValue(DataValueModel dataValueModel) {
|
||||
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>
|
||||
</dependency>
|
||||
|
||||
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>muyu-quest-remote</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<build>
|
||||
<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.extension.service.impl.ServiceImpl;
|
||||
import com.muyu.common.core.domain.Result;
|
||||
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.NodeDisposition;
|
||||
import com.muyu.quest.domain.NodeType;
|
||||
import com.muyu.quest.exception.TaskException;
|
||||
import com.muyu.quest.remote.RemoteDataSourceService;
|
||||
import com.muyu.quest.req.NodeReq;
|
||||
import com.muyu.quest.req.TaskReq;
|
||||
import com.muyu.quest.resp.TaskResp;
|
||||
|
@ -43,6 +47,8 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task>
|
|||
private INodeDispositionService dispositionService;
|
||||
@Resource
|
||||
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")){
|
||||
findSql = NodeUtils.nodeDispUnite(dispList);
|
||||
}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);
|
||||
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.NodeType;
|
||||
import com.muyu.quest.exception.TaskException;
|
||||
import com.muyu.quest.model.DataModel;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
@ -231,10 +232,14 @@ public class NodeUtils {
|
|||
* 输出节点 节点处理
|
||||
*
|
||||
* @param dispList 节点全部配置信息
|
||||
* @param data 查询到的数据
|
||||
* @return 新增sql
|
||||
*/
|
||||
public static String nodeDispExportation(List<NodeDisposition> dispList) {
|
||||
return nodeDispExportation(DispUtils.getDispMap(dispList));
|
||||
public static String nodeDispExportation(List<NodeDisposition> dispList, List<DataModel> data) {
|
||||
if (data == null){
|
||||
throw new TaskException("查询数据为空");
|
||||
}
|
||||
return nodeDispExportation(DispUtils.getDispMap(dispList), data);
|
||||
}
|
||||
|
||||
|
||||
|
@ -242,26 +247,36 @@ public class NodeUtils {
|
|||
* 输出节点 节点处理
|
||||
*
|
||||
* @param dispMap 节点整理后的Map配置信息
|
||||
* @param data 查询到的数据
|
||||
* @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);
|
||||
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;
|
||||
// 获取新增语句前半段
|
||||
String join = StringUtils.join(fieldList.stream().map(NodeDisposition::getDispValue).toArray(), ",");
|
||||
StringBuilder insSql = new StringBuilder("INSERT INTO " + dbTable + "( " + join + " ) VALUES ");
|
||||
// 获取查询字段
|
||||
List<HashMap<String, String>> dataList1 = new ArrayList<>();
|
||||
HashMap<String, String> dataMap = new HashMap<>();
|
||||
for (int i = 0; i < data.size(); i++) {
|
||||
if (i % fieldList.size() == 0 && i>0){
|
||||
dataList1.add(dataMap);
|
||||
dataMap = new HashMap<>();
|
||||
}
|
||||
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