|
|
@@ -68,8 +68,15 @@ public class OrderScheduler {
|
|
|
@Scheduled(cron = "0 */5 * * * ?")
|
|
|
public void reservationAutoReceivingOrder() {
|
|
|
RLock lock = redissonClient.getLock(SchedulerLock.ORDER_OF_RESERVATION_AUTO_RECEIVING_LOCK);
|
|
|
- lock.lock();
|
|
|
+ boolean locked = false;
|
|
|
try {
|
|
|
+ locked = lock.tryLock(0, 120, TimeUnit.SECONDS);
|
|
|
+ if (!locked) {
|
|
|
+ // 获取不到锁,说明有其他实例正在执行此任务
|
|
|
+ log.info("未获取到预约订单自动接单锁,跳过本次执行");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
log.info("预约订单自动接单任务开始运行");
|
|
|
List<Long> orderIds = orderService.getCurWaitReceivingOrderIds();
|
|
|
if (CollUtil.isEmpty(orderIds)) {
|
|
|
@@ -100,7 +107,9 @@ public class OrderScheduler {
|
|
|
} catch (Exception e) {
|
|
|
log.error("预约订单自动接单任务运行失败失败原因:{}", e.getMessage());
|
|
|
} finally {
|
|
|
- lock.unlock();
|
|
|
+ if (locked && lock.isHeldByCurrentThread()) {
|
|
|
+ lock.unlock();
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -153,13 +162,19 @@ public class OrderScheduler {
|
|
|
@Scheduled(cron = "45 */1 * * * ?")
|
|
|
public void autoFinishOrder() {
|
|
|
RLock lock = redissonClient.getLock(SchedulerLock.ORDER_OF_WAIT_DELIVERY_AUTO_FINISH_LOCK);
|
|
|
- lock.lock();
|
|
|
+ boolean locked = false;
|
|
|
try {
|
|
|
+ locked = lock.tryLock(0, 120, TimeUnit.SECONDS);
|
|
|
+ if (!locked) {
|
|
|
+ log.info("未获取到自动完成订单锁,跳过本次执行");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
log.info("自动完成订单任务开始运行");
|
|
|
CommonInfo one = commonInfoService.findOne(268);
|
|
|
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
|
-// 查询三大运营商的店铺
|
|
|
+ // 查询三大运营商的店铺
|
|
|
List<Long> shopList = new ArrayList<>();
|
|
|
QueryWrapper<ShopType> wrapperShopType = new QueryWrapper<>();
|
|
|
wrapperShopType.eq("shop_type_name", "三大运营商");
|
|
|
@@ -197,7 +212,9 @@ public class OrderScheduler {
|
|
|
} catch (Exception e) {
|
|
|
log.info("自动完成订单任务运行异常,异常", e);
|
|
|
} finally {
|
|
|
- lock.unlock();
|
|
|
+ if (locked && lock.isHeldByCurrentThread()) {
|
|
|
+ lock.unlock();
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -209,8 +226,15 @@ public class OrderScheduler {
|
|
|
@Scheduled(cron = "0 */3 * * * ?")
|
|
|
public void changeTimeOutOrder() {
|
|
|
RLock lock = redissonClient.getLock(SchedulerLock.TIME_OUT_LOCK);
|
|
|
- lock.lock();
|
|
|
+ boolean locked = false;
|
|
|
try {
|
|
|
+ locked = lock.tryLock(0, 300, TimeUnit.SECONDS);
|
|
|
+ if (!locked) {
|
|
|
+ // 获取不到锁,说明有其他实例正在执行此任务
|
|
|
+ log.info("未获取到超时订单处理锁,跳过本次执行");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
log.info("超时订单自动取消任务开始运行");
|
|
|
// 加5分钟在前端强制取消前执行 ??
|
|
|
long time = new Date().getTime() + 5*60*1000;
|
|
|
@@ -276,7 +300,9 @@ public class OrderScheduler {
|
|
|
log.error("超时订单自动取消任务运行失败失败原因:{}", e.getMessage());
|
|
|
e.printStackTrace();
|
|
|
} finally {
|
|
|
- lock.unlock();
|
|
|
+ if (locked && lock.isHeldByCurrentThread()) {
|
|
|
+ lock.unlock();
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -287,13 +313,12 @@ public class OrderScheduler {
|
|
|
@Async
|
|
|
@Scheduled(cron = "0 0 1 * * ?")
|
|
|
public void updateShopSales() {
|
|
|
- RLock lock = null;
|
|
|
+ RLock lock = redissonClient.getLock(SchedulerLock.UPDATE_SHOP_SALES_LOCK);
|
|
|
+ boolean locked = false;
|
|
|
try {
|
|
|
- // 尝试获取锁,最多等待0秒(即立即返回),锁的过期时间为2分钟
|
|
|
- lock = redissonClient.getLock(SchedulerLock.UPDATE_SHOP_SALES_LOCK);
|
|
|
- boolean isLocked = lock.tryLock(0, 2, TimeUnit.MINUTES);
|
|
|
- if (!isLocked) {
|
|
|
- log.info("更新店铺销量任务:当前有其他服务实例正在执行,本次跳过");
|
|
|
+ locked = lock.tryLock(0, 60, TimeUnit.SECONDS);
|
|
|
+ if (!locked) {
|
|
|
+ log.info("更新店铺销量任务:获取锁失败,本次跳过");
|
|
|
return;
|
|
|
}
|
|
|
log.info("更新店铺销量任务开始运行");
|
|
|
@@ -303,7 +328,7 @@ public class OrderScheduler {
|
|
|
} catch (Exception e) {
|
|
|
log.error("更新店铺销量任务运行失败,失败原因:{}", e.getMessage());
|
|
|
} finally {
|
|
|
- if (lock != null && lock.isHeldByCurrentThread()) {
|
|
|
+ if (locked && lock.isHeldByCurrentThread()) {
|
|
|
lock.unlock();
|
|
|
}
|
|
|
}
|