order_payment_timeout.py 987 B

123456789101112131415161718192021222324252627
  1. """订单支付超时自动关闭任务。"""
  2. import logging
  3. from datetime import datetime, timedelta
  4. from sqlalchemy.orm import Session
  5. from app.crud.order import order_crud
  6. logger = logging.getLogger(__name__)
  7. def close_timeout_online_orders(db: Session) -> int:
  8. """关闭超时未支付的线上订单(超时分钟数来自系统设置 auto_cancel_minutes)。"""
  9. from app.api.system_config import get_auto_cancel_minutes_for_job
  10. timeout_minutes = get_auto_cancel_minutes_for_job(db)
  11. before_time = datetime.now() - timedelta(minutes=timeout_minutes)
  12. timeout_note = f"超过未支付自动取消时限({timeout_minutes} 分钟)"
  13. return order_crud.close_unpaid_online_orders(
  14. db, before_time=before_time, timeout_note=timeout_note
  15. )
  16. def run_close_timeout_online_orders(db: Session):
  17. """定时任务包装。"""
  18. count = close_timeout_online_orders(db)
  19. logger.info(f"线上支付超时订单自动关闭完成: {count} 条")