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 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); } } } }