|
|
@@ -0,0 +1,199 @@
|
|
|
+package cn.com.yusys.yusp.service.impl;
|
|
|
+
|
|
|
+import cn.com.yusys.yusp.config.FastApiConfig;
|
|
|
+import cn.com.yusys.yusp.domain.dto.fastapidto.AiTaggingFeedbackRequestDto;
|
|
|
+import cn.com.yusys.yusp.domain.dto.fastapidto.AiTaggingQueryRequestDto;
|
|
|
+import cn.com.yusys.yusp.domain.dto.fastapidto.AiTaggingRequestDto;
|
|
|
+import cn.com.yusys.yusp.domain.vo.fastapivo.AiTaggingQueryResponseVo;
|
|
|
+import cn.com.yusys.yusp.domain.vo.fastapivo.AiTaggingResponseVo;
|
|
|
+import cn.com.yusys.yusp.service.FastApiService;
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.http.client.config.RequestConfig;
|
|
|
+import org.apache.http.client.methods.CloseableHttpResponse;
|
|
|
+import org.apache.http.client.methods.HttpGet;
|
|
|
+import org.apache.http.client.methods.HttpPost;
|
|
|
+import org.apache.http.entity.StringEntity;
|
|
|
+import org.apache.http.impl.client.CloseableHttpClient;
|
|
|
+import org.apache.http.impl.client.HttpClients;
|
|
|
+import org.apache.http.util.EntityUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.util.StringUtils;
|
|
|
+
|
|
|
+import java.io.IOException;
|
|
|
+import java.io.UnsupportedEncodingException;
|
|
|
+import java.net.URLEncoder;
|
|
|
+import java.nio.charset.StandardCharsets;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+@Slf4j
|
|
|
+@Service
|
|
|
+public class FastApiServiceImpl implements FastApiService {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private FastApiConfig fastApiConfig;
|
|
|
+
|
|
|
+ private static final String TAGGING_PATH = "/aitag/v1/tagging";
|
|
|
+ private static final String QUERY_PATH = "/aitag/v1/query";
|
|
|
+ private static final String FEEDBACK_PATH = "/aitag/v1/feedback";
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public AiTaggingResponseVo tagging(AiTaggingRequestDto request) {
|
|
|
+ String url = fastApiConfig.getUrl() + TAGGING_PATH;
|
|
|
+ log.info("调用AI打标接口: {}", url);
|
|
|
+
|
|
|
+ try (CloseableHttpClient httpClient = createHttpClient()) {
|
|
|
+ HttpPost httpPost = new HttpPost(url);
|
|
|
+ httpPost.setHeader("Content-Type", "application/json");
|
|
|
+
|
|
|
+ // 构造请求体
|
|
|
+ String requestBody = JSON.toJSONString(request);
|
|
|
+ httpPost.setEntity(new StringEntity(requestBody, "UTF-8"));
|
|
|
+
|
|
|
+ try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
|
|
|
+ String responseBody = EntityUtils.toString(response.getEntity(), "UTF-8");
|
|
|
+ log.info("AI打标接口响应: {}", responseBody);
|
|
|
+
|
|
|
+ return JSON.parseObject(responseBody, AiTaggingResponseVo.class);
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("调用AI打标接口失败", e);
|
|
|
+ AiTaggingResponseVo errorResponse = new AiTaggingResponseVo();
|
|
|
+ errorResponse.setCode("500");
|
|
|
+ errorResponse.setMessage("调用AI打标接口失败: " + e.getMessage());
|
|
|
+ return errorResponse;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public AiTaggingQueryResponseVo query(AiTaggingQueryRequestDto request) {
|
|
|
+ StringBuilder urlBuilder = new StringBuilder(fastApiConfig.getUrl()).append(QUERY_PATH);
|
|
|
+
|
|
|
+ // 只添加非空参数
|
|
|
+ boolean hasParams = false;
|
|
|
+
|
|
|
+ if (request.getAppId() != null && !request.getAppId().isEmpty()) {
|
|
|
+ urlBuilder.append(hasParams ? "&" : "?").append("appId=").append(encodeParam(request.getAppId()));
|
|
|
+ hasParams = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (request.getTimestamp() != null && !request.getTimestamp().isEmpty()) {
|
|
|
+ urlBuilder.append(hasParams ? "&" : "?").append("timestamp=").append(encodeParam(request.getTimestamp()));
|
|
|
+ hasParams = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (request.getSign() != null && !request.getSign().isEmpty()) {
|
|
|
+ urlBuilder.append(hasParams ? "&" : "?").append("sign=").append(encodeParam(request.getSign()));
|
|
|
+ hasParams = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ // businessAttr是必填参数,直接添加
|
|
|
+ urlBuilder.append(hasParams ? "&" : "?").append("businessAttr=").append(encodeParam(request.getBusinessAttr()));
|
|
|
+
|
|
|
+ String url = urlBuilder.toString();
|
|
|
+ log.info("调用AI打标查询接口: {}", url);
|
|
|
+ try (CloseableHttpClient httpClient = createHttpClient()) {
|
|
|
+ HttpGet httpGet = new HttpGet(url);
|
|
|
+
|
|
|
+ try (CloseableHttpResponse response = httpClient.execute(httpGet)) {
|
|
|
+ String responseBody = EntityUtils.toString(response.getEntity(), "UTF-8");
|
|
|
+ log.info("AI打标查询接口响应: {}", responseBody);
|
|
|
+
|
|
|
+ return JSON.parseObject(responseBody, AiTaggingQueryResponseVo.class);
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("调用AI打标查询接口失败", e);
|
|
|
+ AiTaggingQueryResponseVo errorResponse = new AiTaggingQueryResponseVo();
|
|
|
+ errorResponse.setCode("500");
|
|
|
+ errorResponse.setMessage("调用AI打标查询接口失败: " + e.getMessage());
|
|
|
+ return errorResponse;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public AiTaggingResponseVo feedback(AiTaggingFeedbackRequestDto request) {
|
|
|
+ StringBuilder urlBuilder = new StringBuilder(fastApiConfig.getUrl()).append(FEEDBACK_PATH);
|
|
|
+
|
|
|
+ // 构造GET请求参数
|
|
|
+ boolean hasParams = false;
|
|
|
+
|
|
|
+ if (request.getUserId() != null && !request.getUserId().isEmpty()) {
|
|
|
+ urlBuilder.append(hasParams ? "&" : "?").append("user_id=").append(encodeParam(request.getUserId()));
|
|
|
+ hasParams = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (request.getUserNm() != null && !request.getUserNm().isEmpty()) {
|
|
|
+ urlBuilder.append(hasParams ? "&" : "?").append("user_nm=").append(encodeParam(request.getUserNm()));
|
|
|
+ hasParams = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ // feedback是必填参数
|
|
|
+ urlBuilder.append(hasParams ? "&" : "?").append("feedback=").append(encodeParam(request.getFeedback()));
|
|
|
+ hasParams = true;
|
|
|
+
|
|
|
+ if (request.getContractNo() != null && !request.getContractNo().isEmpty()) {
|
|
|
+ urlBuilder.append(hasParams ? "&" : "?").append("contract_no=").append(encodeParam(request.getContractNo()));
|
|
|
+ hasParams = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (request.getUserOrg() != null && !request.getUserOrg().isEmpty()) {
|
|
|
+ urlBuilder.append(hasParams ? "&" : "?").append("user_org=").append(encodeParam(request.getUserOrg()));
|
|
|
+ hasParams = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (request.getUserEndpoint() != null && !request.getUserEndpoint().isEmpty()) {
|
|
|
+ urlBuilder.append(hasParams ? "&" : "?").append("user_endpoint=").append(encodeParam(request.getUserEndpoint()));
|
|
|
+ hasParams = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ // business_attr是必填参数
|
|
|
+ urlBuilder.append(hasParams ? "&" : "?").append("business_attr=").append(encodeParam(request.getBusinessAttr()));
|
|
|
+
|
|
|
+ String url = urlBuilder.toString();
|
|
|
+ log.info("调用AI打标反馈接口: {}", url);
|
|
|
+
|
|
|
+ try (CloseableHttpClient httpClient = createHttpClient()) {
|
|
|
+ HttpGet httpGet = new HttpGet(url);
|
|
|
+
|
|
|
+ try (CloseableHttpResponse response = httpClient.execute(httpGet)) {
|
|
|
+ String responseBody = EntityUtils.toString(response.getEntity(), "UTF-8");
|
|
|
+ log.info("AI打标反馈接口响应: {}", responseBody);
|
|
|
+
|
|
|
+ return JSON.parseObject(responseBody, AiTaggingResponseVo.class);
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("调用AI打标反馈接口失败", e);
|
|
|
+ AiTaggingResponseVo errorResponse = new AiTaggingResponseVo();
|
|
|
+ errorResponse.setCode("500");
|
|
|
+ errorResponse.setMessage("调用AI打标反馈接口失败: " + e.getMessage());
|
|
|
+ return errorResponse;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // 辅助方法用于URL编码
|
|
|
+ private String encodeParam(String param) {
|
|
|
+ try {
|
|
|
+ return URLEncoder.encode(param, "UTF-8");
|
|
|
+ } catch (UnsupportedEncodingException e) {
|
|
|
+ log.warn("URL编码失败,使用原始值: {}", param);
|
|
|
+ return param;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 创建HTTP客户端
|
|
|
+ */
|
|
|
+ private CloseableHttpClient createHttpClient() {
|
|
|
+ RequestConfig requestConfig = RequestConfig.custom()
|
|
|
+ .setConnectTimeout(fastApiConfig.getConnectTimeout())
|
|
|
+ .setSocketTimeout(fastApiConfig.getReadTimeout())
|
|
|
+ .build();
|
|
|
+
|
|
|
+ return HttpClients.custom()
|
|
|
+ .setDefaultRequestConfig(requestConfig)
|
|
|
+ .build();
|
|
|
+ }
|
|
|
+}
|