from django.db import models from apps.utils.models import CommonBModel, CommonADModel from apps.system.models import User, Dictionary from enum import Enum # Create your models here. class RuningState(Enum): RUNING = 10 STANDBY = 20 STOP = 30 FAILURE = 40 UNKNOWN = 50 etype_choices = ( (10, '生产设备'), (20, '计量设备'), (30, '治理设备'), (40, '监测设备'), (50, '监控设备') ) class Ecate(CommonADModel): name = models.CharField('名称', max_length=50, unique=True) code = models.CharField('编码', max_length=50, unique=True, null=True, blank=True) type = models.PositiveSmallIntegerField( '类型', choices=etype_choices, help_text=str(etype_choices)) is_for_safe = models.BooleanField('是否用于安全', default=False) is_for_enp = models.BooleanField('是否用于环保', default=False) is_car = models.BooleanField('是否为车辆', default=False) def __str__(self): return f'{self.name}|{self.code}' class Equipment(CommonBModel): """ 设备台账信息 其中belong_dept是责任部门 """ EQUIP_STATE_OK = 10 EQUIP_STATE_LIMIT = 20 EQUIP_STATE_FIX = 30 EQUIP_STATE_DISABLE = 40 EQUIP_STATE_SCRAP = 50 state_choices = ( (EQUIP_STATE_OK, '完好'), (EQUIP_STATE_LIMIT, '限用'), (EQUIP_STATE_FIX, '在修'), (EQUIP_STATE_DISABLE, '禁用'), (EQUIP_STATE_SCRAP, '报废') ) EQUIP_TYPE_PRO = 10 EQUIP_TYPE_MEA = 20 # mgmtype_choices = ( # (1, 'A'), # (2, 'B'), # (3, 'C') # ) # way_choices = ( # (1, '外检'), # (2, '自检'), # ) # usetype_choices = ( # (1, '专用'), # (2, '公用'), # ) is_online = models.PositiveSmallIntegerField('是否在线', default=0) running_state = models.PositiveSmallIntegerField('运行状态', default=50) ip = models.GenericIPAddressField('IP地址', null=True, blank=True) port = models.PositiveSmallIntegerField('端口号', null=True, blank=True) login_name = models.CharField('登录名', max_length=100, null=True, blank=True) login_pwd = models.CharField('登录密码', max_length=100, null=True, blank=True) mgroup = models.ForeignKey( 'mtm.mgroup', on_delete=models.SET_NULL, null=True, blank=True) type = models.PositiveSmallIntegerField( '类型', choices=etype_choices, default=10) cate = models.ForeignKey( Ecate, verbose_name='设备分类', on_delete=models.SET_NULL, null=True, blank=True, related_name='cate') tags = models.JSONField('设备标签', default=list, blank=True) name = models.CharField('设备名称', max_length=50) number_factory = models.CharField( '出厂编号', max_length=50, default='', blank=True) number = models.CharField('设备编号', max_length=50, unique=True) model = models.CharField('规格型号', max_length=60, default='', blank=True) factory = models.CharField('生产厂', max_length=50, default='', blank=True) production_date = models.DateField('生产日期', null=True, blank=True) buy_date = models.DateField('购置日期', null=True, blank=True) state = models.PositiveIntegerField( '设备状态', choices=state_choices, default=EQUIP_STATE_OK) parameter = models.TextField('技术参数', default='', blank=True) parameter_json = models.JSONField('技术参数', default=dict, blank=True) place = models.CharField('安装/存放位置', max_length=50, default='', blank=True) count = models.PositiveIntegerField('数量', default=1) keeper = models.ForeignKey( User, verbose_name='责任人', on_delete=models.CASCADE, null=True, blank=True) description = models.CharField( '描述', max_length=200, default='', blank=True) # 以下是计量检测设备单独字段 # mgmtype = models.IntegerField('管理类别', choices=mgmtype_choices, default=1) # usetype = models.IntegerField('使用类别', choices=usetype_choices, default=1) # way = models.IntegerField('校准或检定方式', choices=way_choices, default=1) # standard = models.CharField('溯源标准或依据', max_length=200, default='', blank=True) meter_type = models.CharField( '仪表类型', max_length=100, null=True, blank=True) management_level = models.CharField('管理等级', max_length=10, default='A') accuracy_level = models.CharField( '精度等级', max_length=10, default='', blank=True) measurement_range = models.CharField( '量程范围', max_length=100, default='', blank=True) use_date = models.DateField('启用日期', null=True, blank=True) cycle = models.PositiveSmallIntegerField( '校准或检定周期(月)', null=True, blank=True) check_date = models.DateField('最近校准检查日期', blank=True, null=True) next_check_date = models.DateField('预计下次校准检查日期', blank=True, null=True) power_kw = models.PositiveSmallIntegerField('功率', null=True, blank=True) coordinates = models.JSONField('坐标', default=dict, blank=True) class Meta: verbose_name = '设备信息' verbose_name_plural = verbose_name def __str__(self): return f'{self.number}|{self.name}|{self.model}' class EcheckRecord(CommonADModel): """ 校准检定记录 """ CHECK_CHOICES = ( (10, '正常'), (20, '异常') ) equipment = models.ForeignKey( Equipment, verbose_name='关联设备', on_delete=models.CASCADE) check_organization = models.CharField('校准/检定机构', max_length=10) check_date = models.DateField('校准/检定日期') note = models.TextField('备注', null=True, blank=True) result = models.PositiveSmallIntegerField( '结果', default=10, choices=CHECK_CHOICES, help_text=str(CHECK_CHOICES)) class EInspect(CommonADModel): """ 巡检记录 """ INSPECT_RESULTS = ( ('pass', '合格'), ('fail', '不合格'), # ('repair', '需要维修'), # ('urgent_repair', '紧急维修'), # ('partial_pass', '部分合格'), # ('observation', '观测中'), # ('repaired', '已修复'), ) equipment = models.ForeignKey( Equipment, verbose_name='关联设备', on_delete=models.CASCADE) inspect_user = models.ForeignKey( 'system.user', verbose_name='巡检人', on_delete=models.CASCADE) inspect_time = models.DateTimeField('巡检时间') result = models.CharField(max_length=20, choices=INSPECT_RESULTS, verbose_name='巡检结果', help_text=str(INSPECT_RESULTS)) note = models.TextField('备注', null=True, blank=True)