Browse Source

2026-01-30

报价【切换版本】查询材料成本时加了重试功能,防止ifs连接超时造成成本为0
master
fengyuan_yang 4 weeks ago
parent
commit
cdea0001cc
  1. 21
      src/main/java/com/spring/modules/quote/service/impl/QuoteDetailBomTreeServiceImpl.java

21
src/main/java/com/spring/modules/quote/service/impl/QuoteDetailBomTreeServiceImpl.java

@ -234,10 +234,10 @@ public class QuoteDetailBomTreeServiceImpl extends ServiceImpl<QuoteDetailBomTre
* @param ifsServer IFS服务器连接 * @param ifsServer IFS服务器连接
*/ */
private void getFinalPartCost(QuoteDetailBom component, Server ifsServer) { private void getFinalPartCost(QuoteDetailBom component, Server ifsServer) {
// 最大重试次数
final int MAX_RETRY_COUNT = 3;
// 重试间隔毫秒
final long RETRY_INTERVAL_MS = 1000;
// 最大重试次数设置为2次平衡成功率和响应时间
final int MAX_RETRY_COUNT = 2;
// 重试间隔毫秒设置为500ms减少等待时间
final long RETRY_INTERVAL_MS = 500;
String partNo = component.getComponentPart(); String partNo = component.getComponentPart();
String site = component.getSite(); String site = component.getSite();
@ -277,13 +277,22 @@ public class QuoteDetailBomTreeServiceImpl extends ServiceImpl<QuoteDetailBomTre
log.warn("[COST_QUERY] 第 {} 次查询失败 - PartNo: {}, Site: {}, ResultCode: {}, ErrorMsg: {}", log.warn("[COST_QUERY] 第 {} 次查询失败 - PartNo: {}, Site: {}, ResultCode: {}, ErrorMsg: {}",
retryCount, partNo, site, map.get("resultCode"), lastErrorMsg); retryCount, partNo, site, map.get("resultCode"), lastErrorMsg);
// 判断是否需要重试某些明确的业务错误不需要重试
if (lastErrorMsg != null) {
// 账号密码错误不重试直接抛异常 // 账号密码错误不重试直接抛异常
if (lastErrorMsg != null && lastErrorMsg.contains("You have entered an invalid username and/or password")) {
if (lastErrorMsg.contains("You have entered an invalid username and/or password")) {
log.error("[COST_QUERY] IFS账号密码错误,停止重试 - PartNo: {}", partNo); log.error("[COST_QUERY] IFS账号密码错误,停止重试 - PartNo: {}", partNo);
throw new RuntimeException(lastErrorMsg); throw new RuntimeException(lastErrorMsg);
} }
// 业务数据不存在类的错误不重试重试也不会成功
if (lastErrorMsg.contains("不存在") || lastErrorMsg.contains("not exist")
|| lastErrorMsg.contains("No data found") || lastErrorMsg.contains("not found")) {
log.info("[COST_QUERY] 物料成本数据不存在,无需重试 - PartNo: {}, ErrorMsg: {}", partNo, lastErrorMsg);
break;
}
}
// 如果不是最后一次重试等待后继续
// 如果不是最后一次重试等待后继续仅对网络/临时性错误重试
if (retryCount < MAX_RETRY_COUNT) { if (retryCount < MAX_RETRY_COUNT) {
log.info("[COST_QUERY] 等待 {}ms 后进行第 {} 次重试 - PartNo: {}", log.info("[COST_QUERY] 等待 {}ms 后进行第 {} 次重试 - PartNo: {}",
RETRY_INTERVAL_MS, retryCount + 1, partNo); RETRY_INTERVAL_MS, retryCount + 1, partNo);

Loading…
Cancel
Save