Files
ups-infra/ups_management/ups_manager/models.py

104 lines
4.6 KiB
Python
Raw Normal View History

2026-04-28 17:11:19 +08:00
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='更新时间')
@property
def total_battery_count(self):
return sum(battery.quantity for battery in self.battery_set.all())
2026-04-28 17:11:19 +08:00
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 = '维修记录'