diff --git a/core/core-backend/src/main/java/io/dataease/datasource/provider/ApiUtils.java b/core/core-backend/src/main/java/io/dataease/datasource/provider/ApiUtils.java index 03430dc13f..0a24304e26 100644 --- a/core/core-backend/src/main/java/io/dataease/datasource/provider/ApiUtils.java +++ b/core/core-backend/src/main/java/io/dataease/datasource/provider/ApiUtils.java @@ -140,7 +140,6 @@ public class ApiUtils { return fetchResult(response, apiDefinition); } - public static String execHttpRequest(ApiDefinition apiDefinition, int socketTimeout, List paramsList) { String response = ""; HttpClientConfig httpClientConfig = new HttpClientConfig(); @@ -297,8 +296,58 @@ public class ApiUtils { DEException.throwException(e); } for (JsonNode jsonNode : rootNode) { - if (jsonNode.has("name")) { - body.put(jsonNode.get("name").asText(), jsonNode.get("value").asText()); + if (jsonNode.has("name") && jsonNode.has("value")) { + if (jsonNode.get("value") != null && StringUtils.isNotEmpty(jsonNode.get("value").asText())) { + if (jsonNode.get("nameType") != null && jsonNode.get("nameType").toString().equalsIgnoreCase("params")) { + String param = jsonNode.get("value").toString(); + for (ApiDefinition definition : paramsList) { + for (int i = 0; i < definition.getFields().size(); i++) { + TableField field = definition.getFields().get(i); + if (field.getOriginName().equalsIgnoreCase(param)) { + String resultStr = execHttpRequest(definition, definition.getApiQueryTimeout() == null || apiDefinition.getApiQueryTimeout() <= 0 ? 10 : apiDefinition.getApiQueryTimeout(), null); + List dataList = fetchResult(resultStr, definition); + if (dataList.size() > 0) { + body.put(jsonNode.get("name").toString(), dataList.get(0)[i]); + } + } + } + } + } else if (jsonNode.get("nameType") != null && jsonNode.get("nameType").toString().equalsIgnoreCase("custom")) { + List bodYparams = new ArrayList<>(); + String regex = "\\$\\{(.*?)\\}"; + Pattern pattern = Pattern.compile(regex); + Matcher matcher = pattern.matcher(jsonNode.get("value").toString()); + while (matcher.find()) { + bodYparams.add(matcher.group(1)); + } + String result = jsonNode.get("value").toString(); + for (String param : bodYparams) { + for (ApiDefinition definition : paramsList) { + for (int i = 0; i < definition.getFields().size(); i++) { + TableField field = definition.getFields().get(i); + if (field.getOriginName().equalsIgnoreCase(param)) { + String resultStr = execHttpRequest(definition, definition.getApiQueryTimeout() == null || apiDefinition.getApiQueryTimeout() <= 0 ? 10 : apiDefinition.getApiQueryTimeout(), null); + List dataList = fetchResult(resultStr, definition); + if (dataList.size() > 0) { + result = result.replace("${" + param + "}", dataList.get(0)[i]); + } + } + } + } + } + body.put(jsonNode.get("name").toString(), result); + } else if (jsonNode.get("nameType") != null && jsonNode.get("nameType").toString().equalsIgnoreCase("timeFun")) { + String timeFormat = jsonNode.get("value").toString(); + Calendar calendar = Calendar.getInstance(); + Date date = calendar.getTime(); + if (StringUtils.isNotEmpty(timeFormat) && timeFormat.split(" ")[0].equalsIgnoreCase("currentDay")) { + SimpleDateFormat simpleDateFormat = new SimpleDateFormat(timeFormat.split(" ")[1]); + body.put(jsonNode.get("name").toString(), simpleDateFormat.format(date)); + } + } else { + body.put(jsonNode.get("name").asText(), jsonNode.get("value").asText()); + } + } } } response = HttpClientUtil.post(apiDefinition.getUrl(), body, httpClientConfig); diff --git a/core/core-frontend/src/views/visualized/data/datasource/form/ApiBody.vue b/core/core-frontend/src/views/visualized/data/datasource/form/ApiBody.vue index 9de5ae8ff9..0690c27125 100644 --- a/core/core-frontend/src/views/visualized/data/datasource/form/ApiBody.vue +++ b/core/core-frontend/src/views/visualized/data/datasource/form/ApiBody.vue @@ -38,6 +38,10 @@ const props = defineProps({ headers: { type: Array as PropType, default: () => [] + }, + valueList: { + type: Array as PropType, + default: () => [] } }) const { t } = useI18n() @@ -216,6 +220,7 @@ const emits = defineEmits(['headersChange']) :is-show-enable="isShowEnable" type="body" @change-parameters="changeParameters" + :value-list="valueList" />
diff --git a/core/core-frontend/src/views/visualized/data/datasource/form/ApiHttpRequestForm.vue b/core/core-frontend/src/views/visualized/data/datasource/form/ApiHttpRequestForm.vue index 0cd17a4f9f..d2661b0eb5 100644 --- a/core/core-frontend/src/views/visualized/data/datasource/form/ApiHttpRequestForm.vue +++ b/core/core-frontend/src/views/visualized/data/datasource/form/ApiHttpRequestForm.vue @@ -173,6 +173,7 @@ const emits = defineEmits(['changeId']) :headers="apiRequest.headers" :body="apiRequest.body" :is-show-enable="isShowEnable" + :value-list="valueList" /> diff --git a/core/core-frontend/src/views/visualized/data/datasource/form/ApiVariable.vue b/core/core-frontend/src/views/visualized/data/datasource/form/ApiVariable.vue index 11380421f4..a4c252b5dd 100644 --- a/core/core-frontend/src/views/visualized/data/datasource/form/ApiVariable.vue +++ b/core/core-frontend/src/views/visualized/data/datasource/form/ApiVariable.vue @@ -77,6 +77,7 @@ const change = () => { new KeyValue({ type: 'text', enable: true, + nameType: 'fixed', uuid: guid(), contentType: 'text/plain' })