from django.db import models from datetime import date class Contact(models.Model): name = models.CharField(max_length=100, verbose_name='姓名') phone = models.CharField(max_length=20, verbose_name='联系电话') email = models.EmailField(blank=True, null=True, verbose_name='邮箱') created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') def __str__(self): return self.name class Meta: verbose_name = '联系人' verbose_name_plural = '联系人' class Supplier(models.Model): company_name = models.CharField(max_length=200, verbose_name='公司名称') contact_person = models.CharField(max_length=100, verbose_name='联系人') phone = models.CharField(max_length=20, verbose_name='联系电话') email = models.EmailField(blank=True, null=True, verbose_name='邮箱') address = models.CharField(max_length=500, blank=True, null=True, verbose_name='地址') remark = models.TextField(blank=True, null=True, verbose_name='备注') created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') def __str__(self): return self.company_name class Meta: verbose_name = '维保供应商' verbose_name_plural = '维保供应商' class UPSHost(models.Model): brand = models.CharField(max_length=100, verbose_name='品牌') model = models.CharField(max_length=100, verbose_name='型号') ip_address = models.CharField(max_length=50, verbose_name='IP地址') quantity = models.IntegerField(default=1, verbose_name='数量') location = models.CharField(max_length=200, verbose_name='存放位置') last_maintenance_date = models.DateField(blank=True, null=True, verbose_name='上次维保时间') contact = models.ForeignKey(Contact, on_delete=models.SET_NULL, blank=True, null=True, verbose_name='联系人') created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') updated_at = models.DateTimeField(auto_now=True, verbose_name='更新时间') def __str__(self): if self.ip_address and not self.ip_address.startswith('-'): return f'{self.brand} {self.model} - {self.ip_address}' return f'{self.brand} {self.model}' class Meta: verbose_name = 'UPS主机' verbose_name_plural = 'UPS主机' class Battery(models.Model): brand = models.CharField(max_length=100, verbose_name='品牌') model = models.CharField(max_length=100, verbose_name='型号') weight = models.FloatField(verbose_name='重量(kg)') quantity = models.IntegerField(default=1, verbose_name='数量') location = models.CharField(max_length=200, verbose_name='存放位置') install_date = models.DateField(blank=True, null=True, verbose_name='安装日期') last_maintenance_date = models.DateField(blank=True, null=True, verbose_name='上次维保时间') ups_host = models.ForeignKey(UPSHost, on_delete=models.SET_NULL, blank=True, null=True, verbose_name='关联UPS主机') created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') updated_at = models.DateTimeField(auto_now=True, verbose_name='更新时间') @property def used_years(self): if not self.install_date: return None today = date.today() delta = today - self.install_date return round(delta.days / 365.25, 1) def __str__(self): return f'{self.brand} {self.model}' class Meta: verbose_name = '电池' verbose_name_plural = '电池' class MaintenanceRecord(models.Model): ups_host = models.ForeignKey(UPSHost, on_delete=models.CASCADE, verbose_name='UPS主机') battery = models.ForeignKey(Battery, on_delete=models.SET_NULL, blank=True, null=True, verbose_name='电池') supplier = models.ForeignKey(Supplier, on_delete=models.SET_NULL, blank=True, null=True, verbose_name='维保供应商') maintenance_date = models.DateField(verbose_name='维修日期') content = models.TextField(verbose_name='维修内容') technician = models.CharField(max_length=100, verbose_name='维修人员') created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') def __str__(self): return f'{self.ups_host} - {self.maintenance_date}' class Meta: verbose_name = '维修记录' verbose_name_plural = '维修记录'