models.py 3.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. from django.db import models
  2. from django.utils import timezone
  3. from django.core.cache import cache
  4. class LocationStatistics(models.Model):
  5. """货位统计模型"""
  6. warehouse_code = models.CharField(max_length=255, verbose_name="仓库代码")
  7. warehouse_name = models.CharField(max_length=255, verbose_name="仓库名称")
  8. layer = models.IntegerField(verbose_name="楼层")
  9. # 按货位类型统计
  10. t5_total = models.IntegerField(default=0, verbose_name="5货位总数")
  11. t5_used = models.IntegerField(default=0, verbose_name="5货位已用")
  12. t5_available = models.IntegerField(default=0, verbose_name="5货位可用")
  13. t4_total = models.IntegerField(default=0, verbose_name="4货位总数")
  14. t4_used = models.IntegerField(default=0, verbose_name="4货位已用")
  15. t4_available = models.IntegerField(default=0, verbose_name="4货位可用")
  16. s4_total = models.IntegerField(default=0, verbose_name="4单货位总数")
  17. s4_used = models.IntegerField(default=0, verbose_name="4单货位已用")
  18. s4_available = models.IntegerField(default=0, verbose_name="4单货位可用")
  19. t2_total = models.IntegerField(default=0, verbose_name="2货位总数")
  20. t2_used = models.IntegerField(default=0, verbose_name="2货位已用")
  21. t2_available = models.IntegerField(default=0, verbose_name="2货位可用")
  22. t1_total = models.IntegerField(default=0, verbose_name="散货位总数")
  23. t1_used = models.IntegerField(default=0, verbose_name="散货位已用")
  24. t1_available = models.IntegerField(default=0, verbose_name="散货位可用")
  25. # 汇总统计
  26. total_locations = models.IntegerField(default=0, verbose_name="总货位数")
  27. total_used = models.IntegerField(default=0, verbose_name="总已用数")
  28. total_available = models.IntegerField(default=0, verbose_name="总可用数")
  29. utilization_rate = models.DecimalField(max_digits=5, decimal_places=2, default=0, verbose_name="使用率(%)")
  30. # 统计时间
  31. statistic_time = models.DateTimeField(default=timezone.now, verbose_name="统计时间")
  32. is_latest = models.BooleanField(default=False, verbose_name="是否最新统计")
  33. class Meta:
  34. db_table = 'location_statistics'
  35. verbose_name = '货位统计'
  36. verbose_name_plural = "货位统计"
  37. ordering = ['-statistic_time', 'warehouse_code', 'layer']
  38. unique_together = ['warehouse_code', 'layer', 'statistic_time']
  39. def __str__(self):
  40. return f"{self.warehouse_name}-{self.layer}层-{self.statistic_time.strftime('%Y-%m-%d %H:%M')}"
  41. class LocationGroupStatistics(models.Model):
  42. """货位组统计模型"""
  43. warehouse_code = models.CharField(max_length=255, verbose_name="仓库代码")
  44. warehouse_name = models.CharField(max_length=255, verbose_name="仓库名称")
  45. layer = models.IntegerField(verbose_name="楼层")
  46. location_group = models.CharField(max_length=20, verbose_name="库位组")
  47. # 统计信息
  48. total_locations = models.IntegerField(default=0, verbose_name="组内总货位数")
  49. used_locations = models.IntegerField(default=0, verbose_name="组内已用货位数")
  50. available_locations = models.IntegerField(default=0, verbose_name="组内可用货位数")
  51. utilization_rate = models.DecimalField(max_digits=5, decimal_places=2, default=0, verbose_name="使用率(%)")
  52. # 按货位类型细分
  53. location_type_breakdown = models.JSONField(default=dict, verbose_name="货位类型细分")
  54. statistic_time = models.DateTimeField(default=timezone.now, verbose_name="统计时间")
  55. class Meta:
  56. db_table = 'location_group_statistics'
  57. verbose_name = '货位组统计'
  58. verbose_name_plural = "货位组统计"
  59. ordering = ['warehouse_code', 'layer', 'total_locations']
  60. def __str__(self):
  61. return f"{self.warehouse_name}-{self.layer}层-{self.location_group}"