远程调用测试

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

View File

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

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

View File

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

View File

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