signals.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. """
  2. ERP 模块信号处理
  3. 在任务创建/更新时清除缓存,实现实时推送
  4. """
  5. from django.db.models.signals import post_save, post_delete
  6. from django.dispatch import receiver
  7. from django.core.cache import cache
  8. from .models import InboundBill, OutboundBill
  9. import logging
  10. logger = logging.getLogger(__name__)
  11. # 缓存键名(与 sse_views.py 中的保持一致)
  12. CACHE_KEY_TASK_COUNTS = 'erp_task_counts'
  13. def invalidate_task_counts_cache():
  14. """清除任务数缓存"""
  15. cache.delete(CACHE_KEY_TASK_COUNTS)
  16. logger.debug("已清除 ERP 任务数缓存")
  17. @receiver(post_save, sender=InboundBill)
  18. def inbound_bill_saved(sender, instance, **kwargs):
  19. """入库单保存时清除缓存"""
  20. # 只要 bound_status 或 is_delete 字段变化,都可能影响任务数,清除缓存
  21. # 任务数统计条件:bound_status=0 且 is_delete=False
  22. # 所以任何保存操作都可能影响计数,直接清除缓存
  23. invalidate_task_counts_cache()
  24. logger.debug(f"入库单 {instance.number} 保存(bound_status={instance.bound_status}, is_delete={instance.is_delete}),已清除任务数缓存")
  25. @receiver(post_save, sender=OutboundBill)
  26. def outbound_bill_saved(sender, instance, **kwargs):
  27. """出库单保存时清除缓存"""
  28. # 只要 bound_status 或 is_delete 字段变化,都可能影响任务数,清除缓存
  29. # 任务数统计条件:bound_status=0 且 is_delete=False
  30. # 所以任何保存操作都可能影响计数,直接清除缓存
  31. invalidate_task_counts_cache()
  32. logger.debug(f"出库单 {instance.number} 保存(bound_status={instance.bound_status}, is_delete={instance.is_delete}),已清除任务数缓存")
  33. @receiver(post_delete, sender=InboundBill)
  34. def inbound_bill_deleted(sender, instance, **kwargs):
  35. """入库单删除时清除缓存"""
  36. invalidate_task_counts_cache()
  37. logger.debug(f"入库单 {instance.number} 删除,已清除任务数缓存")
  38. @receiver(post_delete, sender=OutboundBill)
  39. def outbound_bill_deleted(sender, instance, **kwargs):
  40. """出库单删除时清除缓存"""
  41. invalidate_task_counts_cache()
  42. logger.debug(f"出库单 {instance.number} 删除,已清除任务数缓存")