| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- from django.db import models
- from django.utils import timezone
- from django.core.cache import cache
- class LocationStatistics(models.Model):
- """货位统计模型"""
- warehouse_code = models.CharField(max_length=255, verbose_name="仓库代码")
- warehouse_name = models.CharField(max_length=255, verbose_name="仓库名称")
- layer = models.IntegerField(verbose_name="楼层")
-
- # 按货位类型统计
- t5_total = models.IntegerField(default=0, verbose_name="5货位总数")
- t5_used = models.IntegerField(default=0, verbose_name="5货位已用")
- t5_available = models.IntegerField(default=0, verbose_name="5货位可用")
-
- t4_total = models.IntegerField(default=0, verbose_name="4货位总数")
- t4_used = models.IntegerField(default=0, verbose_name="4货位已用")
- t4_available = models.IntegerField(default=0, verbose_name="4货位可用")
-
- s4_total = models.IntegerField(default=0, verbose_name="4单货位总数")
- s4_used = models.IntegerField(default=0, verbose_name="4单货位已用")
- s4_available = models.IntegerField(default=0, verbose_name="4单货位可用")
-
- t2_total = models.IntegerField(default=0, verbose_name="2货位总数")
- t2_used = models.IntegerField(default=0, verbose_name="2货位已用")
- t2_available = models.IntegerField(default=0, verbose_name="2货位可用")
-
- t1_total = models.IntegerField(default=0, verbose_name="散货位总数")
- t1_used = models.IntegerField(default=0, verbose_name="散货位已用")
- t1_available = models.IntegerField(default=0, verbose_name="散货位可用")
-
- # 汇总统计
- total_locations = models.IntegerField(default=0, verbose_name="总货位数")
- total_used = models.IntegerField(default=0, verbose_name="总已用数")
- total_available = models.IntegerField(default=0, verbose_name="总可用数")
- utilization_rate = models.DecimalField(max_digits=5, decimal_places=2, default=0, verbose_name="使用率(%)")
-
- # 统计时间
- statistic_time = models.DateTimeField(default=timezone.now, verbose_name="统计时间")
- is_latest = models.BooleanField(default=False, verbose_name="是否最新统计")
-
- class Meta:
- db_table = 'location_statistics'
- verbose_name = '货位统计'
- verbose_name_plural = "货位统计"
- ordering = ['-statistic_time', 'warehouse_code', 'layer']
- unique_together = ['warehouse_code', 'layer', 'statistic_time']
-
- def __str__(self):
- return f"{self.warehouse_name}-{self.layer}层-{self.statistic_time.strftime('%Y-%m-%d %H:%M')}"
- class LocationGroupStatistics(models.Model):
- """货位组统计模型"""
- warehouse_code = models.CharField(max_length=255, verbose_name="仓库代码")
- warehouse_name = models.CharField(max_length=255, verbose_name="仓库名称")
- layer = models.IntegerField(verbose_name="楼层")
- location_group = models.CharField(max_length=20, verbose_name="库位组")
-
- # 统计信息
- total_locations = models.IntegerField(default=0, verbose_name="组内总货位数")
- used_locations = models.IntegerField(default=0, verbose_name="组内已用货位数")
- available_locations = models.IntegerField(default=0, verbose_name="组内可用货位数")
- utilization_rate = models.DecimalField(max_digits=5, decimal_places=2, default=0, verbose_name="使用率(%)")
-
- # 按货位类型细分
- location_type_breakdown = models.JSONField(default=dict, verbose_name="货位类型细分")
-
- statistic_time = models.DateTimeField(default=timezone.now, verbose_name="统计时间")
-
- class Meta:
- db_table = 'location_group_statistics'
- verbose_name = '货位组统计'
- verbose_name_plural = "货位组统计"
- ordering = ['warehouse_code', 'layer', 'total_locations']
-
- def __str__(self):
- return f"{self.warehouse_name}-{self.layer}层-{self.location_group}"
|