远程调用测试

master
面包骑士 2024-09-04 12:02:02 +08:00
parent 6f7e1b190d
commit a982be1946
8 changed files with 134 additions and 24 deletions

View File

@ -0,0 +1,39 @@
package com.muyu.quest.model;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* @author Lenovo
* @ ToolIntelliJ IDEA
* @ AuthorCHX
* @ Date2024-08-23-9:41
* @ Version1.0
* @ Description
*/
@Data
@SuperBuilder
@AllArgsConstructor
@NoArgsConstructor
public class DataModel {
/**
*
*/
private String key;
/**
*
*/
private String label;
/**
*
*/
private String type;
/**
*
*/
private Object value;
}

View File

@ -0,0 +1,30 @@
package com.muyu.quest.model;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* @author Lenovo
* @ ToolIntelliJ IDEA
* @ AuthorCHX
* @ Date2024-09-03-22:14
* @ Version1.0
* @ Description
*/
@Data
@SuperBuilder
@AllArgsConstructor
@NoArgsConstructor
public class DataValueModel {
/**
* ID
*/
private Long basicId;
/**
* sql
*/
private String sql;
}

View File

@ -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;
/**
* @ ToolIntelliJ 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);
}

View File

@ -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("数据接入模块连接失败,网络异常...");
}
};

View File

@ -1 +1 @@
#com.muyu.source.remote.factory.RemoteDataSourceFactory
com.muyu.quest.remote.factory.RemoteDataSourceFactory

View File

@ -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>

View File

@ -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;
}
}

View File

@ -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();
}
}