diff --git a/ai-analytic-center-api/pom.xml b/ai-analytic-center-api/pom.xml
index 6ac34ab..26e1e34 100644
--- a/ai-analytic-center-api/pom.xml
+++ b/ai-analytic-center-api/pom.xml
@@ -19,7 +19,10 @@
org.springframework.cloud
spring-cloud-starter-openfeign
-
+
+ org.springframework.retry
+ spring-retry
+
com.alibaba.cloud
diff --git a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/feign/DiFyFeign.java b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/feign/DiFyFeign.java
index 93a01cb..0237c6d 100644
--- a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/feign/DiFyFeign.java
+++ b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/feign/DiFyFeign.java
@@ -3,6 +3,8 @@ package com.volvo.ai.analytic.center.feign;
import com.alibaba.fastjson.JSONObject;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
+import org.springframework.retry.annotation.Backoff;
+import org.springframework.retry.annotation.Retryable;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@@ -16,6 +18,12 @@ public interface DiFyFeign {
, produces = MediaType.APPLICATION_JSON_VALUE)
JSONObject runWorkflows(@RequestHeader(value = "Authorization") String authorization, @RequestBody Map map);
+ @Retryable(include = Exception.class,maxAttempts = 2, backoff = @Backoff(delay = 1000))
+ @PostMapping(value = "v1/workflows/run"
+ , consumes = MediaType.APPLICATION_JSON_VALUE
+ , produces = MediaType.APPLICATION_JSON_VALUE)
+ JSONObject runWorkflowsRetry(@RequestHeader(value = "Authorization") String authorization, @RequestBody Map map);
+
@PostMapping(value = "/v1/files/upload" , consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/AiAnalyticCenterServiceApplication.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/AiAnalyticCenterServiceApplication.java
index 450aec1..7eddcf7 100644
--- a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/AiAnalyticCenterServiceApplication.java
+++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/AiAnalyticCenterServiceApplication.java
@@ -6,6 +6,7 @@ import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.annotation.Bean;
+import org.springframework.retry.annotation.EnableRetry;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.web.client.RestTemplate;
@@ -16,6 +17,7 @@ import com.volvo.common.feign.annotation.EnableVolvoFeignClients;
@EnableScheduling
@MapperScan({"com.volvo.ai.analytic.center.mapper"})
@EnableDiscoveryClient
+@EnableRetry
public class AiAnalyticCenterServiceApplication {
public static void main(String[] args) {
diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/DiFyService.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/DiFyService.java
index 3bfba4a..d1d3130 100644
--- a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/DiFyService.java
+++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/DiFyService.java
@@ -10,6 +10,8 @@ public interface DiFyService {
public Object getDiFyObject(DiFyReq diFyReq);
+ public Object getDiFyObjectRetry(DiFyReq diFyReq);
+
public JSONObject executeDifyFlow(DiFyReq diFyReq, String businessType, String businessData, String aiAnalysisRequestId);
public JSONObject executeDifyFlow(DiFyReq diFyReq);
diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/ClaimVerificationServiceImpl.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/ClaimVerificationServiceImpl.java
index 98a8333..a0c64d6 100644
--- a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/ClaimVerificationServiceImpl.java
+++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/ClaimVerificationServiceImpl.java
@@ -79,6 +79,9 @@ public class ClaimVerificationServiceImpl implements ClaimVerificationService {
@Autowired
private AiAnalysisErrorsMapper aiAnalysisErrorsMapper;
+ @Autowired
+ private DiFyRetryImpl diFyRetry;
+
@Override
public void consumerMessageByMQ(String message) {
// 生成ai分析请求id
@@ -162,8 +165,8 @@ public class ClaimVerificationServiceImpl implements ClaimVerificationService {
diFyReq.setUser(BusinessTypeEnum.CLAIM_VERIFICATION.getCode());
diFyReq.setFlowId(verificationToken);
diFyReq.setInputs(parsedAudit);
- //调用dify 工作流
- diFyObject = (JSONObject) diFyService.getDiFyObject(diFyReq);
+ //调用dify 工作流 失败重试一次
+ diFyObject = diFyRetry.getDiFyRetry(diFyReq);
//处理结果并推送MQ
if (diFyObject == null) {
log.error("售后索赔检核审计报告dify返回结果为空");
@@ -196,7 +199,7 @@ public class ClaimVerificationServiceImpl implements ClaimVerificationService {
data.put("businessType", claimVerificationFileAnalysisDTO.getBusinessType());
data.put("aiAnalysisRequestId", aiAnalysisRequestId);
data.put("fileType", claimVerificationFileAnalysisDTO.getFileType());
- log.info("索赔检核发送异常空MQMQ: {}", data.toString());
+ log.info("索赔检核发送异常空MQ: {}", data.toString());
rocketMQTemplate.syncSend(topic, data);
}
diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/DiFyRetryImpl.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/DiFyRetryImpl.java
new file mode 100644
index 0000000..3f5ccd0
--- /dev/null
+++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/DiFyRetryImpl.java
@@ -0,0 +1,27 @@
+package com.volvo.ai.analytic.center.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.volvo.ai.analytic.center.dto.req.DiFyReq;
+import com.volvo.ai.analytic.center.service.DiFyService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.retry.annotation.Backoff;
+import org.springframework.retry.annotation.Retryable;
+import org.springframework.stereotype.Service;
+
+/**
+ * dify调用retry
+ */
+@Slf4j
+@Service
+public class DiFyRetryImpl {
+
+ @Autowired
+ private DiFyService diFyService;
+ @Retryable(include = Exception.class,maxAttempts = 2, backoff = @Backoff(delay = 1000))
+ public JSONObject getDiFyRetry(DiFyReq diFyReq) {
+ log.info("AI索赔检核调用DIFY(retry)");
+ return (JSONObject) diFyService.getDiFyObjectRetry(diFyReq);
+ }
+
+}
diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/DiFyServiceImpl.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/DiFyServiceImpl.java
index 716c3ce..be3b78f 100644
--- a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/DiFyServiceImpl.java
+++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/DiFyServiceImpl.java
@@ -13,6 +13,8 @@ import com.volvo.ai.analytic.center.utils.AiAnalysisUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.retry.annotation.Backoff;
+import org.springframework.retry.annotation.Retryable;
import org.springframework.stereotype.Service;
import java.util.HashMap;
@@ -49,6 +51,24 @@ public class DiFyServiceImpl implements DiFyService{
return "";
}
+ @Override
+ @Retryable(include = Exception.class,maxAttempts = 2, backoff = @Backoff(delay = 1000))
+ public Object getDiFyObjectRetry(DiFyReq diFyReq) {
+ Map map = new HashMap<>();
+ map.put("inputs",diFyReq.getInputs());
+ map.put("response_mode","blocking");
+ map.put("user",diFyReq.getUser());
+ log.info("请求DiFy入参-Retry:{}",JSON.toJSONString(map));
+ JSONObject difyResult = diFyFeign.runWorkflowsRetry("Bearer "+diFyReq.getFlowId(),map);
+ log.info("请求DiFy响应结果:{}",difyResult.toJSONString());
+ JSONObject data = difyResult.getJSONObject("data");
+ if (data != null && "succeeded".equals(data.get("status"))){
+ JSONObject outputs = data.getJSONObject("outputs");
+ return outputs;
+ }
+ return "";
+ }
+
@Override
public JSONObject executeDifyFlow(DiFyReq diFyReq, String businessType, String businessData, String oldAiAnalysisRequestId) {
String aiAnalysisRequestId = StringUtils.isEmpty(oldAiAnalysisRequestId)? AiAnalysisUtils.getAiAnalysisRequestId(businessType):oldAiAnalysisRequestId;