|
|
|
@ -353,4 +353,102 @@ public class IfsCallErrorLogServiceImpl extends ServiceImpl<IfsCallErrorLogMappe |
|
|
|
|
|
|
|
return domainUserID; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* @Description 批量重试IFS接口调用(按created_at从早到晚顺序执行,每次间隔0.1秒)- rqrq |
|
|
|
* @param ids 错误日志ID列表 |
|
|
|
* @param processedBy 操作人 |
|
|
|
* @return java.util.Map 包含successCount和failCount |
|
|
|
* @author rqrq |
|
|
|
* @date 2026/01/21 |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public java.util.Map<String, Integer> batchRetryIfsCall(java.util.List<Long> ids, String processedBy) { |
|
|
|
System.out.println("========== 批量重试IFS接口调用开始 =========="); |
|
|
|
System.out.println("待重试数量: " + ids.size() + ", 操作人: " + processedBy); |
|
|
|
|
|
|
|
int successCount = 0; |
|
|
|
int failCount = 0; |
|
|
|
|
|
|
|
// 1. 查询所有待重试的记录 - rqrq |
|
|
|
java.util.List<IfsCallErrorLog> errorLogs = this.listByIds(ids); |
|
|
|
if (errorLogs == null || errorLogs.isEmpty()) { |
|
|
|
System.out.println("未找到待重试的记录"); |
|
|
|
java.util.Map<String, Integer> result = new java.util.HashMap<>(); |
|
|
|
result.put("successCount", 0); |
|
|
|
result.put("failCount", 0); |
|
|
|
return result; |
|
|
|
} |
|
|
|
|
|
|
|
// 2. 按created_at从早到晚排序 - rqrq |
|
|
|
errorLogs.sort((a, b) -> { |
|
|
|
if (a.getCreatedAt() == null && b.getCreatedAt() == null) return 0; |
|
|
|
if (a.getCreatedAt() == null) return 1; |
|
|
|
if (b.getCreatedAt() == null) return -1; |
|
|
|
return a.getCreatedAt().compareTo(b.getCreatedAt()); |
|
|
|
}); |
|
|
|
|
|
|
|
System.out.println("排序后记录数: " + errorLogs.size()); |
|
|
|
|
|
|
|
// 3. 逐个执行重试 - rqrq |
|
|
|
for (int i = 0; i < errorLogs.size(); i++) { |
|
|
|
IfsCallErrorLog errorLog = errorLogs.get(i); |
|
|
|
System.out.println("正在重试第 " + (i + 1) + "/" + errorLogs.size() + " 条,ID: " + errorLog.getId()); |
|
|
|
|
|
|
|
// 检查状态,只重试PENDING状态的记录 - rqrq |
|
|
|
if (!"PENDING".equals(errorLog.getProcessStatus())) { |
|
|
|
System.out.println("跳过非PENDING状态的记录,当前状态: " + errorLog.getProcessStatus()); |
|
|
|
continue; |
|
|
|
} |
|
|
|
|
|
|
|
// 执行重试 - rqrq |
|
|
|
boolean success = retryCallIfsInterface(errorLog, processedBy); |
|
|
|
|
|
|
|
// 更新记录状态 - rqrq |
|
|
|
if (success) { |
|
|
|
errorLog.setProcessStatus("PROCESSED"); |
|
|
|
errorLog.setProcessedAt(new java.util.Date()); |
|
|
|
errorLog.setProcessedBy(processedBy); |
|
|
|
errorLog.setRemark("批量重试成功"); |
|
|
|
errorLog.setUpdatedAt(new java.util.Date()); |
|
|
|
this.updateById(errorLog); |
|
|
|
successCount++; |
|
|
|
System.out.println("第 " + (i + 1) + " 条重试成功"); |
|
|
|
} else { |
|
|
|
Integer currentRetry = errorLog.getRetryCount() != null ? errorLog.getRetryCount() : 0; |
|
|
|
errorLog.setRetryCount(currentRetry + 1); |
|
|
|
errorLog.setUpdatedAt(new java.util.Date()); |
|
|
|
|
|
|
|
if (errorLog.getRetryCount() >= errorLog.getMaxRetry()) { |
|
|
|
errorLog.setProcessStatus("IGNORED"); |
|
|
|
errorLog.setProcessedAt(new java.util.Date()); |
|
|
|
errorLog.setProcessedBy("SYSTEM"); |
|
|
|
errorLog.setRemark("批量重试超过最大重试次数(" + errorLog.getMaxRetry() + "),自动忽略"); |
|
|
|
} |
|
|
|
|
|
|
|
this.updateById(errorLog); |
|
|
|
failCount++; |
|
|
|
System.out.println("第 " + (i + 1) + " 条重试失败"); |
|
|
|
} |
|
|
|
|
|
|
|
// 间隔0.1秒,避免并发问题 - rqrq |
|
|
|
if (i < errorLogs.size() - 1) { |
|
|
|
try { |
|
|
|
Thread.sleep(100); |
|
|
|
} catch (InterruptedException e) { |
|
|
|
Thread.currentThread().interrupt(); |
|
|
|
System.out.println("批量重试被中断"); |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
System.out.println("批量重试完成,成功: " + successCount + ", 失败: " + failCount); |
|
|
|
System.out.println("========== 批量重试IFS接口调用结束 =========="); |
|
|
|
|
|
|
|
java.util.Map<String, Integer> result = new java.util.HashMap<>(); |
|
|
|
result.put("successCount", successCount); |
|
|
|
result.put("failCount", failCount); |
|
|
|
return result; |
|
|
|
} |
|
|
|
} |