delivery_warning_resolve.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. """配送预警:任务完成/取消时自动结案(写历史后更新主表)"""
  2. from datetime import datetime
  3. from sqlalchemy.orm import Session
  4. from app.models.models import BizDeliveryWarning, BizDeliveryWarningHis
  5. def auto_resolve_open_warnings_for_task(db: Session, task_id: str) -> int:
  6. """将某配送任务下未结案预警全部自动处理(配送完成等场景)。"""
  7. warnings = (
  8. db.query(BizDeliveryWarning)
  9. .filter(
  10. BizDeliveryWarning.task_id == task_id,
  11. BizDeliveryWarning.is_del == 0,
  12. BizDeliveryWarning.is_resolved == 0,
  13. )
  14. .all()
  15. )
  16. if not warnings:
  17. return 0
  18. now = datetime.now()
  19. for warning in warnings:
  20. his = BizDeliveryWarningHis(
  21. id=warning.id,
  22. task_id=warning.task_id,
  23. order_id=warning.order_id,
  24. warning_type=warning.warning_type,
  25. urgency_level=warning.urgency_level,
  26. remaining_minutes=warning.remaining_minutes,
  27. message=warning.message,
  28. is_sent=warning.is_sent,
  29. sent_time=warning.sent_time,
  30. is_resolved=warning.is_resolved,
  31. resolved_time=warning.resolved_time,
  32. resolved_by=warning.resolved_by,
  33. resolved_note=warning.resolved_note,
  34. create_at=warning.create_at,
  35. create_by=warning.create_by,
  36. create_name=warning.create_name,
  37. update_at=warning.update_at,
  38. update_by=warning.update_by,
  39. his_create_at=now,
  40. )
  41. db.add(his)
  42. warning.is_resolved = 1
  43. warning.resolved_time = now
  44. warning.resolved_by = "system"
  45. warning.resolved_note = "auto:配送已完成"
  46. warning.update_at = now
  47. warning.update_by = "system"
  48. db.commit()
  49. return len(warnings)