1
This commit is contained in:
@@ -31,76 +31,72 @@ public class LogisticsScanTask {
|
|||||||
*/
|
*/
|
||||||
@Scheduled(cron = "0 */10 * * * ?")
|
@Scheduled(cron = "0 */10 * * * ?")
|
||||||
public void scanAndFetchLogistics() {
|
public void scanAndFetchLogistics() {
|
||||||
logger.info("========== 开始执行物流信息扫描定时任务(最近30天订单) ==========");
|
long t0 = System.currentTimeMillis();
|
||||||
|
int orderCandidates = 0;
|
||||||
|
int orderProcessed = 0;
|
||||||
|
int orderSkipped = 0;
|
||||||
|
int orderSuccess = 0;
|
||||||
|
int orderFailed = 0;
|
||||||
|
int adhocQueuePopped = 0;
|
||||||
|
|
||||||
|
logger.info("========== 物流扫描定时任务开始(订单 F/PDD + 企微分享链队列) ==========");
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// 查询分销标记为F或PDD且有物流链接的订单(最近30天)
|
|
||||||
List<JDOrder> orders = jdOrderService.selectJDOrderListByDistributionMarkFOrPDD();
|
List<JDOrder> orders = jdOrderService.selectJDOrderListByDistributionMarkFOrPDD();
|
||||||
|
|
||||||
if (orders == null || orders.isEmpty()) {
|
if (orders == null || orders.isEmpty()) {
|
||||||
logger.info("未找到需要处理的订单");
|
logger.info("订单扫描:候选 0 条(最近30天 F/PDD 有物流链)");
|
||||||
} else {
|
} else {
|
||||||
logger.info("找到 {} 个需要处理的订单", orders.size());
|
orderCandidates = orders.size();
|
||||||
|
logger.info("订单扫描:候选 {} 条(最近30天 F/PDD 有物流链)", orderCandidates);
|
||||||
|
|
||||||
int processedCount = 0;
|
|
||||||
int skippedCount = 0;
|
|
||||||
int successCount = 0;
|
|
||||||
int failedCount = 0;
|
|
||||||
|
|
||||||
// 串行处理订单(避免并发调用接口)
|
|
||||||
for (JDOrder order : orders) {
|
for (JDOrder order : orders) {
|
||||||
try {
|
try {
|
||||||
// 检查Redis中是否已处理过(避免重复处理)
|
|
||||||
if (logisticsService.isOrderProcessed(order.getId())) {
|
if (logisticsService.isOrderProcessed(order.getId())) {
|
||||||
//logger.debug("订单已处理过,跳过 - 订单ID: {}", order.getId());
|
orderSkipped++;
|
||||||
skippedCount++;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.info("开始处理订单 - 订单ID: {}, 订单号: {}, 分销标识: {}",
|
logger.info("订单扫描:处理中 id={} orderId={} mark={}",
|
||||||
order.getId(), order.getOrderId(), order.getDistributionMark());
|
order.getId(), order.getOrderId(), order.getDistributionMark());
|
||||||
|
|
||||||
// 获取物流信息并推送(串行执行,不并发)
|
|
||||||
boolean success = logisticsService.fetchLogisticsAndPush(order);
|
boolean success = logisticsService.fetchLogisticsAndPush(order);
|
||||||
|
orderProcessed++;
|
||||||
if (success) {
|
if (success) {
|
||||||
successCount++;
|
orderSuccess++;
|
||||||
logger.info("订单处理成功 - 订单ID: {}, 订单号: {}", order.getId(), order.getOrderId());
|
logger.info("订单扫描:成功 id={} orderId={}", order.getId(), order.getOrderId());
|
||||||
} else {
|
} else {
|
||||||
failedCount++;
|
orderFailed++;
|
||||||
logger.warn("订单处理失败 - 订单ID: {}, 订单号: {}", order.getId(), order.getOrderId());
|
logger.warn("订单扫描:未成功 id={} orderId={}", order.getId(), order.getOrderId());
|
||||||
}
|
}
|
||||||
|
|
||||||
processedCount++;
|
Thread.sleep(500);
|
||||||
|
|
||||||
// 添加短暂延迟,避免请求过于频繁
|
|
||||||
Thread.sleep(500); // 每次请求间隔500毫秒
|
|
||||||
|
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
logger.error("定时任务被中断", e);
|
logger.error("定时任务被中断", e);
|
||||||
Thread.currentThread().interrupt();
|
Thread.currentThread().interrupt();
|
||||||
break;
|
break;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
failedCount++;
|
orderFailed++;
|
||||||
logger.error("处理订单时发生异常 - 订单ID: {}, 错误: {}", order.getId(), e.getMessage(), e);
|
logger.error("订单扫描:异常 id={} err={}", order.getId(), e.getMessage(), e);
|
||||||
// 继续处理下一个订单
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.info("========== 物流信息扫描定时任务执行完成 ==========");
|
|
||||||
logger.info("总订单数: {}, 已处理: {}, 跳过: {}, 成功: {}, 失败: {}",
|
|
||||||
orders.size(), processedCount, skippedCount, successCount, failedCount);
|
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.error("执行物流信息扫描定时任务时发生异常", e);
|
logger.error("订单扫描阶段异常", e);
|
||||||
} finally {
|
} finally {
|
||||||
try {
|
try {
|
||||||
logger.info("---------- 处理企微分享链物流待队列(adhoc) ----------");
|
logger.info("---------- 企微分享链 adhoc 队列:开始 drain ----------");
|
||||||
logisticsService.drainPendingShareLinkQueue();
|
adhocQueuePopped = logisticsService.drainPendingShareLinkQueue();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.error("企微分享链 adhoc 队列处理异常", e);
|
logger.error("企微分享链 adhoc 队列 drain 异常", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
long elapsed = System.currentTimeMillis() - t0;
|
||||||
|
logger.info("========== 物流扫描任务统计(本轮) ==========");
|
||||||
|
logger.info("订单:候选 {} 条 | 跳过(Redis已处理) {} | 本次已拉取处理 {} | 成功 {} | 失败或未推送 {}",
|
||||||
|
orderCandidates, orderSkipped, orderProcessed, orderSuccess, orderFailed);
|
||||||
|
logger.info("企微分享链队列:Redis 弹出并处理 {} 条(未出单等情况会重入队,与逐条日志一致)", adhocQueuePopped);
|
||||||
|
logger.info("总耗时 {} ms", elapsed);
|
||||||
|
logger.info("==========================================");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user