1
This commit is contained in:
@@ -13,7 +13,7 @@ import java.util.List;
|
||||
|
||||
/**
|
||||
* 物流信息扫描定时任务
|
||||
* 每20分钟扫描一次分销标记为F或PDD的订单(最近30天),获取物流信息并推送
|
||||
* 每10分钟扫描一次分销标记为F或PDD的订单(最近30天),获取物流信息并推送;结束后处理企微分享链 adhoc 队列
|
||||
*/
|
||||
@Component
|
||||
public class LogisticsScanTask {
|
||||
@@ -26,8 +26,7 @@ public class LogisticsScanTask {
|
||||
private ILogisticsService logisticsService;
|
||||
|
||||
/**
|
||||
* 定时任务:每20分钟执行一次
|
||||
* Cron表达式格式:0 每N分钟 * * * ? 表示每N分钟执行一次
|
||||
* 定时任务:每10分钟执行一次(与 @Scheduled 中 cron 一致)
|
||||
* 只扫描最近30天的订单
|
||||
*/
|
||||
@Scheduled(cron = "0 */10 * * * ?")
|
||||
@@ -40,62 +39,67 @@ public class LogisticsScanTask {
|
||||
|
||||
if (orders == null || orders.isEmpty()) {
|
||||
logger.info("未找到需要处理的订单");
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
logger.info("找到 {} 个需要处理的订单", orders.size());
|
||||
|
||||
logger.info("找到 {} 个需要处理的订单", orders.size());
|
||||
int processedCount = 0;
|
||||
int skippedCount = 0;
|
||||
int successCount = 0;
|
||||
int failedCount = 0;
|
||||
|
||||
int processedCount = 0;
|
||||
int skippedCount = 0;
|
||||
int successCount = 0;
|
||||
int failedCount = 0;
|
||||
// 串行处理订单(避免并发调用接口)
|
||||
for (JDOrder order : orders) {
|
||||
try {
|
||||
// 检查Redis中是否已处理过(避免重复处理)
|
||||
if (logisticsService.isOrderProcessed(order.getId())) {
|
||||
//logger.debug("订单已处理过,跳过 - 订单ID: {}", order.getId());
|
||||
skippedCount++;
|
||||
continue;
|
||||
}
|
||||
|
||||
// 串行处理订单(避免并发调用接口)
|
||||
for (JDOrder order : orders) {
|
||||
try {
|
||||
// 检查Redis中是否已处理过(避免重复处理)
|
||||
if (logisticsService.isOrderProcessed(order.getId())) {
|
||||
//logger.debug("订单已处理过,跳过 - 订单ID: {}", order.getId());
|
||||
skippedCount++;
|
||||
continue;
|
||||
}
|
||||
logger.info("开始处理订单 - 订单ID: {}, 订单号: {}, 分销标识: {}",
|
||||
order.getId(), order.getOrderId(), order.getDistributionMark());
|
||||
|
||||
logger.info("开始处理订单 - 订单ID: {}, 订单号: {}, 分销标识: {}",
|
||||
order.getId(), order.getOrderId(), order.getDistributionMark());
|
||||
// 获取物流信息并推送(串行执行,不并发)
|
||||
boolean success = logisticsService.fetchLogisticsAndPush(order);
|
||||
|
||||
// 获取物流信息并推送(串行执行,不并发)
|
||||
boolean success = logisticsService.fetchLogisticsAndPush(order);
|
||||
if (success) {
|
||||
successCount++;
|
||||
logger.info("订单处理成功 - 订单ID: {}, 订单号: {}", order.getId(), order.getOrderId());
|
||||
} else {
|
||||
failedCount++;
|
||||
logger.warn("订单处理失败 - 订单ID: {}, 订单号: {}", order.getId(), order.getOrderId());
|
||||
}
|
||||
|
||||
if (success) {
|
||||
successCount++;
|
||||
logger.info("订单处理成功 - 订单ID: {}, 订单号: {}", order.getId(), order.getOrderId());
|
||||
} else {
|
||||
processedCount++;
|
||||
|
||||
// 添加短暂延迟,避免请求过于频繁
|
||||
Thread.sleep(500); // 每次请求间隔500毫秒
|
||||
|
||||
} catch (InterruptedException e) {
|
||||
logger.error("定时任务被中断", e);
|
||||
Thread.currentThread().interrupt();
|
||||
break;
|
||||
} catch (Exception e) {
|
||||
failedCount++;
|
||||
logger.warn("订单处理失败 - 订单ID: {}, 订单号: {}", order.getId(), order.getOrderId());
|
||||
logger.error("处理订单时发生异常 - 订单ID: {}, 错误: {}", order.getId(), e.getMessage(), e);
|
||||
// 继续处理下一个订单
|
||||
}
|
||||
|
||||
processedCount++;
|
||||
|
||||
// 添加短暂延迟,避免请求过于频繁
|
||||
Thread.sleep(500); // 每次请求间隔500毫秒
|
||||
|
||||
} catch (InterruptedException e) {
|
||||
logger.error("定时任务被中断", e);
|
||||
Thread.currentThread().interrupt();
|
||||
break;
|
||||
} catch (Exception e) {
|
||||
failedCount++;
|
||||
logger.error("处理订单时发生异常 - 订单ID: {}, 错误: {}", order.getId(), e.getMessage(), e);
|
||||
// 继续处理下一个订单
|
||||
}
|
||||
|
||||
logger.info("========== 物流信息扫描定时任务执行完成 ==========");
|
||||
logger.info("总订单数: {}, 已处理: {}, 跳过: {}, 成功: {}, 失败: {}",
|
||||
orders.size(), processedCount, skippedCount, successCount, failedCount);
|
||||
}
|
||||
|
||||
logger.info("========== 物流信息扫描定时任务执行完成 ==========");
|
||||
logger.info("总订单数: {}, 已处理: {}, 跳过: {}, 成功: {}, 失败: {}",
|
||||
orders.size(), processedCount, skippedCount, successCount, failedCount);
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error("执行物流信息扫描定时任务时发生异常", e);
|
||||
} finally {
|
||||
try {
|
||||
logger.info("---------- 处理企微分享链物流待队列(adhoc) ----------");
|
||||
logisticsService.drainPendingShareLinkQueue();
|
||||
} catch (Exception e) {
|
||||
logger.error("企微分享链 adhoc 队列处理异常", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user