diff --git a/muyu-quest-common/src/main/java/com/muyu/quest/model/DataModel.java b/muyu-quest-common/src/main/java/com/muyu/quest/model/DataModel.java new file mode 100644 index 0000000..3f47f10 --- /dev/null +++ b/muyu-quest-common/src/main/java/com/muyu/quest/model/DataModel.java @@ -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; + + +} diff --git a/muyu-quest-common/src/main/java/com/muyu/quest/model/DataValueModel.java b/muyu-quest-common/src/main/java/com/muyu/quest/model/DataValueModel.java new file mode 100644 index 0000000..b8d1f7f --- /dev/null +++ b/muyu-quest-common/src/main/java/com/muyu/quest/model/DataValueModel.java @@ -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; + +} diff --git a/muyu-quest-remote/src/main/java/com/muyu/quest/remote/RemoteDataSourceService.java b/muyu-quest-remote/src/main/java/com/muyu/quest/remote/RemoteDataSourceService.java index 5087931..61d17bf 100644 --- a/muyu-quest-remote/src/main/java/com/muyu/quest/remote/RemoteDataSourceService.java +++ b/muyu-quest-remote/src/main/java/com/muyu/quest/remote/RemoteDataSourceService.java @@ -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> findTableValue(@RequestBody DataValueModel dataValueModel); } diff --git a/muyu-quest-remote/src/main/java/com/muyu/quest/remote/factory/RemoteDataSourceFactory.java b/muyu-quest-remote/src/main/java/com/muyu/quest/remote/factory/RemoteDataSourceFactory.java index 8c6c4f2..d1a3460 100644 --- a/muyu-quest-remote/src/main/java/com/muyu/quest/remote/factory/RemoteDataSourceFactory.java +++ b/muyu-quest-remote/src/main/java/com/muyu/quest/remote/factory/RemoteDataSourceFactory.java @@ -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 FallbackFactorymuyu-quest-common - + + com.muyu + muyu-quest-remote + muyu-quest diff --git a/muyu-quest-server/src/main/java/com/muyu/quest/service/impl/TaskServiceImpl.java b/muyu-quest-server/src/main/java/com/muyu/quest/service/impl/TaskServiceImpl.java index 8545e05..e2538c7 100644 --- a/muyu-quest-server/src/main/java/com/muyu/quest/service/impl/TaskServiceImpl.java +++ b/muyu-quest-server/src/main/java/com/muyu/quest/service/impl/TaskServiceImpl.java @@ -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 private INodeDispositionService dispositionService; @Resource private TaskMapper taskMapper; + @Resource + private RemoteDataSourceService remoteDataSourceService; /** * 查询任务 @@ -181,14 +187,27 @@ public class TaskServiceImpl extends ServiceImpl }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> tableValue = remoteDataSourceService.findTableValue(new DataValueModel(4L, findSql)); + if (tableValue.getCode() != 200){ + throw new TaskException(tableValue.getMsg()); + } + System.out.println(tableValue); + List data = tableValue.getData(); + System.out.println(data); + addSql = NodeUtils.nodeDispExportation(dispList, data); } } log.info("任务执行结束,最终sql为: [{}]",addSql+" "+findSql); - return addSql+" "+findSql; + + return findSql; } + } diff --git a/muyu-quest-server/src/main/java/com/muyu/quest/utils/NodeUtils.java b/muyu-quest-server/src/main/java/com/muyu/quest/utils/NodeUtils.java index f39a25f..7d87f44 100644 --- a/muyu-quest-server/src/main/java/com/muyu/quest/utils/NodeUtils.java +++ b/muyu-quest-server/src/main/java/com/muyu/quest/utils/NodeUtils.java @@ -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 dispList) { - return nodeDispExportation(DispUtils.getDispMap(dispList)); + public static String nodeDispExportation(List dispList, List 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> dispMap) { + private static String nodeDispExportation(Map> dispMap, List data) { // 拼接新增表 NodeDisposition db = dispMap.get("toDb").get(0); String dbTable = "`" + db.getDispDesc() + "`." + db.getDispValue(); // 根据表结构拼接新增字段 List fieldList = dispMap.get("toFields"); - HashMap map = new HashMap<>(); - fieldList.forEach(field -> map.put(field.getDispDesc(),field.getDispValue().toString())); - List 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> dataList1 = new ArrayList<>(); + HashMap 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(); } }