| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- """
- ERP 模块信号处理
- 在任务创建/更新时清除缓存,实现实时推送
- """
- from django.db.models.signals import post_save, post_delete
- from django.dispatch import receiver
- from django.core.cache import cache
- from .models import InboundBill, OutboundBill
- import logging
- logger = logging.getLogger(__name__)
- # 缓存键名(与 sse_views.py 中的保持一致)
- CACHE_KEY_TASK_COUNTS = 'erp_task_counts'
- def invalidate_task_counts_cache():
- """清除任务数缓存"""
- cache.delete(CACHE_KEY_TASK_COUNTS)
- logger.debug("已清除 ERP 任务数缓存")
- @receiver(post_save, sender=InboundBill)
- def inbound_bill_saved(sender, instance, **kwargs):
- """入库单保存时清除缓存"""
- # 只要 bound_status 或 is_delete 字段变化,都可能影响任务数,清除缓存
- # 任务数统计条件:bound_status=0 且 is_delete=False
- # 所以任何保存操作都可能影响计数,直接清除缓存
- invalidate_task_counts_cache()
- logger.debug(f"入库单 {instance.number} 保存(bound_status={instance.bound_status}, is_delete={instance.is_delete}),已清除任务数缓存")
- @receiver(post_save, sender=OutboundBill)
- def outbound_bill_saved(sender, instance, **kwargs):
- """出库单保存时清除缓存"""
- # 只要 bound_status 或 is_delete 字段变化,都可能影响任务数,清除缓存
- # 任务数统计条件:bound_status=0 且 is_delete=False
- # 所以任何保存操作都可能影响计数,直接清除缓存
- invalidate_task_counts_cache()
- logger.debug(f"出库单 {instance.number} 保存(bound_status={instance.bound_status}, is_delete={instance.is_delete}),已清除任务数缓存")
- @receiver(post_delete, sender=InboundBill)
- def inbound_bill_deleted(sender, instance, **kwargs):
- """入库单删除时清除缓存"""
- invalidate_task_counts_cache()
- logger.debug(f"入库单 {instance.number} 删除,已清除任务数缓存")
- @receiver(post_delete, sender=OutboundBill)
- def outbound_bill_deleted(sender, instance, **kwargs):
- """出库单删除时清除缓存"""
- invalidate_task_counts_cache()
- logger.debug(f"出库单 {instance.number} 删除,已清除任务数缓存")
|