from django.db import models from apps.utils.models import CommonBModel, CommonADModel, CommonBDModel from apps.system.models import User # Create your models here. 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 type_choices = ( (10, '生产设备'), (20, '计量设备'), (30, '治理设备'), ) # mgmtype_choices = ( # (1, 'A'), # (2, 'B'), # (3, 'C') # ) # way_choices = ( # (1, '外检'), # (2, '自检'), # ) # usetype_choices = ( # (1, '专用'), # (2, '公用'), # ) cate_list_10 = ['生产设备', '输送设备'] cate_list_20 = ['雾炮', '干雾', '除尘器', '环卫车', '洗车台'] mgroup = models.ForeignKey( 'mtm.mgroup', on_delete=models.SET_NULL, null=True, blank=True) type = models.PositiveSmallIntegerField( '类型', choices=type_choices, default=10) cate = models.CharField('设备分类', max_length=20, default='', 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, null=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)