From f9fc6f9d96e6a0ecb70e39831596c14f4d6e96d2 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Tue, 16 Apr 2024 15:02:27 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20equipment=E5=AD=97=E6=AE=B5=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/em/migrations/0016_auto_20240416_1454.py | 22 +++ apps/em/models.py | 154 +++++++----------- 2 files changed, 84 insertions(+), 92 deletions(-) create mode 100644 apps/em/migrations/0016_auto_20240416_1454.py diff --git a/apps/em/migrations/0016_auto_20240416_1454.py b/apps/em/migrations/0016_auto_20240416_1454.py new file mode 100644 index 00000000..97b08b6e --- /dev/null +++ b/apps/em/migrations/0016_auto_20240416_1454.py @@ -0,0 +1,22 @@ +# Generated by Django 3.2.12 on 2024-04-16 06:54 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('em', '0015_auto_20240305_0852'), + ] + + operations = [ + migrations.RemoveField( + model_name='equipment', + name='is_online', + ), + migrations.AddField( + model_name='equipment', + name='is_core_for_mgroup', + field=models.BooleanField(default=False, verbose_name='是否工段核心设备'), + ), + ] diff --git a/apps/em/models.py b/apps/em/models.py index 9697e846..30741368 100644 --- a/apps/em/models.py +++ b/apps/em/models.py @@ -11,30 +11,22 @@ class RuningState(Enum): STANDBY = 20 STOP = 30 FAILURE = 40 - UNKNOWN = 50 + OFFLINE = 50 -etype_choices = ( - (10, '生产设备'), - (20, '计量设备'), - (30, '治理设备'), - (40, '监测设备'), - (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) + 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}' + return f"{self.name}|{self.code}" class Equipment(CommonBModel): @@ -42,18 +34,13 @@ 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, '报废') - ) + 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 = ( @@ -70,102 +57,85 @@ class Equipment(CommonBModel): # (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) + 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) + is_core_for_mgroup = models.BooleanField("是否工段核心设备", default=False) + 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) + 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) + coordinates = models.JSONField("坐标", default=dict, blank=True) class Meta: - verbose_name = '设备信息' + verbose_name = "设备信息" verbose_name_plural = verbose_name def __str__(self): - return f'{self.number}|{self.name}|{self.model}' + 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)) + + 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', '不合格'), + ("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) + 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)