package com.tourguide.modules.finance.service;
|
|
import com.tourguide.modules.order.mapper.TourOrderMapper;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.scheduling.annotation.Scheduled;
|
import org.springframework.stereotype.Service;
|
|
import java.time.LocalDateTime;
|
import java.util.List;
|
|
/** 周期扫描已到结算时间但尚未入账的订单。 */
|
@Service
|
public class GuideBalanceSettlementScheduler {
|
private static final Logger log = LoggerFactory.getLogger(GuideBalanceSettlementScheduler.class);
|
private static final int BATCH_SIZE = 100;
|
|
private final TourOrderMapper orderMapper;
|
private final GuideBalanceSettlementService settlementService;
|
|
public GuideBalanceSettlementScheduler(TourOrderMapper orderMapper,
|
GuideBalanceSettlementService settlementService) {
|
this.orderMapper = orderMapper;
|
this.settlementService = settlementService;
|
}
|
|
@Scheduled(fixedDelayString = "${tourguide.finance.settlement-scan-delay-millis:60000}")
|
public void settleDueOrders() {
|
LocalDateTime now = LocalDateTime.now();
|
List<Long> orderIds = orderMapper.selectDueSettlementIds(now, BATCH_SIZE);
|
for (Long orderId : orderIds) {
|
try {
|
settlementService.settle(orderId, now);
|
} catch (RuntimeException exception) {
|
log.error("Guide balance settlement failed, orderId={}", orderId, exception);
|
}
|
}
|
}
|
}
|