|
@@ -5,15 +5,16 @@ import com.bfkj.unidia.DataBaseUtils.DbExecutor;
|
|
import com.bfkj.unidia.DataUtils.DataFormatConverter;
|
|
import com.bfkj.unidia.DataUtils.DataFormatConverter;
|
|
import com.bfkj.unidia.DataUtils.ScriptExecutor;
|
|
import com.bfkj.unidia.DataUtils.ScriptExecutor;
|
|
import com.bfkj.unidia.Result;
|
|
import com.bfkj.unidia.Result;
|
|
-import com.fasterxml.jackson.databind.JsonSerializable;
|
|
|
|
-import com.fasterxml.jackson.databind.util.JSONPObject;
|
|
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
+import org.springframework.util.CollectionUtils;
|
|
|
|
+import org.springframework.util.StringUtils;
|
|
|
|
|
|
import java.util.*;
|
|
import java.util.*;
|
|
import java.util.concurrent.*;
|
|
import java.util.concurrent.*;
|
|
|
|
+import java.util.stream.Collector;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -81,9 +82,9 @@ public class DataServices {
|
|
return Result.fail("算法执行失败: " + executionResult.getError());
|
|
return Result.fail("算法执行失败: " + executionResult.getError());
|
|
}
|
|
}
|
|
// 5. 构建返回结果
|
|
// 5. 构建返回结果
|
|
- Map<String, Object> result = buildResult(context, serviceInfo);
|
|
|
|
|
|
+ Map<String, Object> result = buildResult(context, serviceInfo,algorithms);
|
|
if(serviceInfo.logEnable()){//异步正常数据库日志
|
|
if(serviceInfo.logEnable()){//异步正常数据库日志
|
|
- logger.info("服务执行完成: {},总耗时:{}",result, System.currentTimeMillis() - startTime);
|
|
|
|
|
|
+// logger.info("服务执行完成: {},总耗时:{}",result, System.currentTimeMillis() - startTime);
|
|
}
|
|
}
|
|
return Result.success(result);
|
|
return Result.success(result);
|
|
}
|
|
}
|
|
@@ -268,14 +269,18 @@ public class DataServices {
|
|
private Object resolveFromResults(String path, Map<String, Object> allResults) {
|
|
private Object resolveFromResults(String path, Map<String, Object> allResults) {
|
|
// 分割路径以获取算法代码和键路径
|
|
// 分割路径以获取算法代码和键路径
|
|
String[] parts = path.split("\\.");
|
|
String[] parts = path.split("\\.");
|
|
|
|
+ if (path.equals("0000")){
|
|
|
|
+ Object object = allResults.get(path);
|
|
|
|
+ if (Objects.nonNull(object)){ // 直接返回可用的json给前端用
|
|
|
|
+ return DataFormatConverter.mapToJson((Map<?, ?>) object);
|
|
|
|
+ }
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
// 如果路径格式不正确(即没有算法代码或没有键路径),则返回null
|
|
// 如果路径格式不正确(即没有算法代码或没有键路径),则返回null
|
|
if (parts.length < 2) return null;
|
|
if (parts.length < 2) return null;
|
|
|
|
|
|
// 获取算法代码
|
|
// 获取算法代码
|
|
String algorithmCode = parts[0];
|
|
String algorithmCode = parts[0];
|
|
- if (algorithmCode.equals("5")){
|
|
|
|
- logger.info("---------------------------");
|
|
|
|
- }
|
|
|
|
// 构造键路径,从路径中排除算法代码部分
|
|
// 构造键路径,从路径中排除算法代码部分
|
|
String keyPath = String.join(".", Arrays.asList(parts).subList(1, parts.length));
|
|
String keyPath = String.join(".", Arrays.asList(parts).subList(1, parts.length));
|
|
|
|
|
|
@@ -377,11 +382,6 @@ public class DataServices {
|
|
try {
|
|
try {
|
|
// 检查是否提供了Java类和方法名,以决定使用Java反射还是JS脚本执行
|
|
// 检查是否提供了Java类和方法名,以决定使用Java反射还是JS脚本执行
|
|
if (config.className() != null && config.methodName() != null) {
|
|
if (config.className() != null && config.methodName() != null) {
|
|
-
|
|
|
|
- if (config.algorithmCode.equals("4")||config.algorithmCode.equals("5")){
|
|
|
|
- System.out.println("********************");
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
// 准备参数值数组,用于Java反射调用
|
|
// 准备参数值数组,用于Java反射调用
|
|
Object[] paramValues = new Object[inputParams.size()];
|
|
Object[] paramValues = new Object[inputParams.size()];
|
|
int i = 0;
|
|
int i = 0;
|
|
@@ -414,7 +414,7 @@ public class DataServices {
|
|
return Result.success(Collections.singletonMap("returnData", jsResult.getData()));
|
|
return Result.success(Collections.singletonMap("returnData", jsResult.getData()));
|
|
}
|
|
}
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
- logger.error("算法执行异常:1,{}2,{}3,{}", config.algorithmCode,config.methodName,config.inputDataTemplate);
|
|
|
|
|
|
+ logger.error("算法执行异常:\n编码,{}\n配置,{}\n输入参数,{}", config.algorithmCode,config.methodName,config.inputDataTemplate);
|
|
return Result.fail("算法执行异常: " + e.getMessage());
|
|
return Result.fail("算法执行异常: " + e.getMessage());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -527,11 +527,12 @@ public class DataServices {
|
|
* 根据ServiceInfo中的resultType配置,决定返回结果的格式和内容
|
|
* 根据ServiceInfo中的resultType配置,决定返回结果的格式和内容
|
|
* 不同的resultType对应不同的返回结果结构,旨在满足不同场景下对返回数据的需求
|
|
* 不同的resultType对应不同的返回结果结构,旨在满足不同场景下对返回数据的需求
|
|
*
|
|
*
|
|
- * @param context ProcessContext对象,包含流程执行的上下文信息和结果
|
|
|
|
|
|
+ * @param context ProcessContext对象,包含流程执行的上下文信息和结果
|
|
* @param serviceInfo ServiceInfo对象,包含服务的相关信息,包括返回结果的类型
|
|
* @param serviceInfo ServiceInfo对象,包含服务的相关信息,包括返回结果的类型
|
|
|
|
+ * @param algorithms
|
|
* @return Map<String, Object> 返回一个Map对象,包含根据resultType构建的结果
|
|
* @return Map<String, Object> 返回一个Map对象,包含根据resultType构建的结果
|
|
*/
|
|
*/
|
|
- private Map<String, Object> buildResult(ProcessContext context, ServiceInfo serviceInfo) {
|
|
|
|
|
|
+ private Map<String, Object> buildResult(ProcessContext context, ServiceInfo serviceInfo, List<AlgorithmConfig> algorithms) {
|
|
// 初始化结果Map
|
|
// 初始化结果Map
|
|
Map<String, Object> result = new HashMap<>();
|
|
Map<String, Object> result = new HashMap<>();
|
|
|
|
|
|
@@ -545,6 +546,27 @@ public class DataServices {
|
|
} else if (serviceInfo.resultType() == 1) { // 只返回数据
|
|
} else if (serviceInfo.resultType() == 1) { // 只返回数据
|
|
// 当结果类型为1时,仅返回所有结果数据,不包含状态码和消息
|
|
// 当结果类型为1时,仅返回所有结果数据,不包含状态码和消息
|
|
result.put("returnData", context.getAllResults());
|
|
result.put("returnData", context.getAllResults());
|
|
|
|
+ }else if (serviceInfo.resultType() == 2){ // 仅返回最后一个算法的数据
|
|
|
|
+ if (!CollectionUtils.isEmpty(algorithms)&&algorithms.size()>0){
|
|
|
|
+ List<String> filteredKeys = context.getAllResults().keySet().stream()
|
|
|
|
+ .filter(key -> !key.isEmpty()) // 示例过滤条件
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
+ List<AlgorithmConfig> collect = algorithms.stream().filter(obj -> filteredKeys.contains(obj.algorithmCode)).collect(Collectors.toList());
|
|
|
|
+ Object aDefault = context.getAllResults().getOrDefault(collect.get(collect.size() - 1).algorithmCode(), null);
|
|
|
|
+ if (Objects.nonNull(aDefault)){
|
|
|
|
+ Map<String, Object> aDefaultMap = (Map<String, Object>) aDefault;
|
|
|
|
+ Object data = aDefaultMap.get("returnData");
|
|
|
|
+ if (Objects.nonNull(data)&&data instanceof String&&((String) data).length()>0){
|
|
|
|
+ return parseJson((String) data);
|
|
|
|
+ }else if (Objects.nonNull(data)&&data instanceof Map){
|
|
|
|
+ return (Map<String, Object>) data;
|
|
|
|
+ } else if (Objects.nonNull(data)&&data instanceof Integer){
|
|
|
|
+ return Map.of("data",data);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return Map.of("data","");
|
|
|
|
+ }
|
|
|
|
+// return context.getAllResults().getOrDefault(,null);
|
|
} else { // 完整数据
|
|
} else { // 完整数据
|
|
// 当结果类型为其他值时,返回完整的上下文信息
|
|
// 当结果类型为其他值时,返回完整的上下文信息
|
|
result.put("context", context);
|
|
result.put("context", context);
|
|
@@ -719,4 +741,35 @@ public class DataServices {
|
|
return serviceCode;
|
|
return serviceCode;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ public Result<String> getServiceInfoByPath(String path) {
|
|
|
|
+ try {
|
|
|
|
+ // 构建查询条件,查询启用的服务信息
|
|
|
|
+ Map<String, Object> conditions = Map.of("service_url", path, "is_enabled", 1,"run_state",1);
|
|
|
|
+
|
|
|
|
+ // 执行数据库查询操作
|
|
|
|
+ Result<List<Map<String, Object>>> result = dbExecutor.search(
|
|
|
|
+ systemEnvCache.getDbInfo(),
|
|
|
|
+ "service_info",
|
|
|
|
+ Map.of("dataContent", Map.of("conditions", conditions),"event","SELECT"));
|
|
|
|
+
|
|
|
|
+ // 检查查询结果是否成功且不为空
|
|
|
|
+ if (!result.isSuccess() || result.getData().isEmpty()) {
|
|
|
|
+ // 如果查询失败或结果为空,记录日志并返回失败结果
|
|
|
|
+ logger.error("未找到服务[{}]配置", path);
|
|
|
|
+ return Result.fail("未找到服务配置");
|
|
|
|
+ }
|
|
|
|
+ List<Map<String, Object>> list = result.getData();
|
|
|
|
+ Map<String, Object> map = list.get(0);
|
|
|
|
+ if (Objects.nonNull( map)&& StringUtils.hasText(map.get("service_code").toString())){
|
|
|
|
+ return Result.success(map.get("service_code").toString());
|
|
|
|
+ }
|
|
|
|
+ return Result.fail("未找到服务配置");
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ // 日志记录获取服务信息时的异常
|
|
|
|
+ logger.error("获取服务信息异常", e);
|
|
|
|
+ // 返回异常结果
|
|
|
|
+ return Result.fail("获取服务信息异常: " + e.getMessage());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|