172 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			172 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Python
		
	
	
	
| 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)
 |