diff --git a/src/main/java/com/gaotao/modules/api/controller/IfsCallErrorLogController.java b/src/main/java/com/gaotao/modules/api/controller/IfsCallErrorLogController.java index d309a5d..7d162f1 100644 --- a/src/main/java/com/gaotao/modules/api/controller/IfsCallErrorLogController.java +++ b/src/main/java/com/gaotao/modules/api/controller/IfsCallErrorLogController.java @@ -130,4 +130,27 @@ public class IfsCallErrorLogController extends AbstractController { ifsCallErrorLogService.closeRetry(data.getId(), processedBy); return R.ok(); } + + /** + * @Description 批量重试IFS接口调用 - rqrq + * @Title batchRetry + * @param data 包含ids列表 + * @return R + * @author rqrq + * @date 2026/01/21 + */ + @PostMapping("/batchRetry") + public R batchRetry(@RequestBody IfsCallErrorLogData data) { + try { + String processedBy = getUser().getUsername(); + java.util.Map result = ifsCallErrorLogService.batchRetryIfsCall(data.getIds(), processedBy); + return R.ok() + .put("successCount", result.get("successCount")) + .put("failCount", result.get("failCount")) + .put("msg", "批量重试完成"); + } catch (Exception e) { + logger.error("批量重试IFS接口调用失败", e); + return R.error("批量重试失败:" + e.getMessage()); + } + } } diff --git a/src/main/java/com/gaotao/modules/api/entity/IfsCallErrorLogData.java b/src/main/java/com/gaotao/modules/api/entity/IfsCallErrorLogData.java index c29f931..d7f3700 100644 --- a/src/main/java/com/gaotao/modules/api/entity/IfsCallErrorLogData.java +++ b/src/main/java/com/gaotao/modules/api/entity/IfsCallErrorLogData.java @@ -46,4 +46,10 @@ public class IfsCallErrorLogData extends IfsCallErrorLog { @TableField(exist = false) private Integer pageSize; + + /** + * 批量重试的ID列表 - rqrq + */ + @TableField(exist = false) + private java.util.List ids; } diff --git a/src/main/java/com/gaotao/modules/api/service/IfsCallErrorLogService.java b/src/main/java/com/gaotao/modules/api/service/IfsCallErrorLogService.java index 97d5f2b..826fffb 100644 --- a/src/main/java/com/gaotao/modules/api/service/IfsCallErrorLogService.java +++ b/src/main/java/com/gaotao/modules/api/service/IfsCallErrorLogService.java @@ -78,4 +78,14 @@ public interface IfsCallErrorLogService extends IService { boolean retryIfsCall(Long id, String processedBy); void closeRetry(Long id, String processedBy); + + /** + * @Description 批量重试IFS接口调用(按created_at从早到晚顺序执行,每次间隔0.1秒)- rqrq + * @param ids 错误日志ID列表 + * @param processedBy 操作人 + * @return java.util.Map 包含successCount和failCount + * @author rqrq + * @date 2026/01/21 + */ + java.util.Map batchRetryIfsCall(java.util.List ids, String processedBy); } diff --git a/src/main/java/com/gaotao/modules/api/service/impl/IfsCallErrorLogServiceImpl.java b/src/main/java/com/gaotao/modules/api/service/impl/IfsCallErrorLogServiceImpl.java index f99f8d0..8aa1f21 100644 --- a/src/main/java/com/gaotao/modules/api/service/impl/IfsCallErrorLogServiceImpl.java +++ b/src/main/java/com/gaotao/modules/api/service/impl/IfsCallErrorLogServiceImpl.java @@ -353,4 +353,102 @@ public class IfsCallErrorLogServiceImpl extends ServiceImpl batchRetryIfsCall(java.util.List ids, String processedBy) { + System.out.println("========== 批量重试IFS接口调用开始 =========="); + System.out.println("待重试数量: " + ids.size() + ", 操作人: " + processedBy); + + int successCount = 0; + int failCount = 0; + + // 1. 查询所有待重试的记录 - rqrq + java.util.List errorLogs = this.listByIds(ids); + if (errorLogs == null || errorLogs.isEmpty()) { + System.out.println("未找到待重试的记录"); + java.util.Map 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 result = new java.util.HashMap<>(); + result.put("successCount", successCount); + result.put("failCount", failCount); + return result; + } }