feat: 增加ecate表

This commit is contained in:
caoqianming 2024-02-26 10:31:12 +08:00
parent e7f8086f23
commit d2a503c482
7 changed files with 109 additions and 19 deletions

View File

@ -1,3 +1,9 @@
from django.contrib import admin
from apps.em.models import Ecate
# Register your models here.
@admin.register(Ecate)
class EcateAdmin(admin.ModelAdmin):
list_display = ('id', 'name', 'code', 'type',
'is_for_safe', 'is_for_enp', 'is_car')

View File

@ -19,6 +19,10 @@ class EquipFilterSet(filters.FilterSet):
"mgroup": ["exact"],
"mgroup__name": ["exact"],
"name": ["exact", "contains"],
"cate__code": ['exact', 'in', 'contains'],
"cate__is_for_safe": ['exact'],
"cate__is_for_enp": ['exact'],
"cate__is_car": ['exact']
}
def filter_tag(self, queryset, name, value):

View File

@ -0,0 +1,42 @@
# Generated by Django 3.2.12 on 2024-02-26 02:18
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('em', '0012_auto_20240221_1755'),
]
operations = [
migrations.CreateModel(
name='Ecate',
fields=[
('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')),
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
('name', models.CharField(max_length=50, unique=True, verbose_name='名称')),
('code', models.CharField(blank=True, max_length=50, null=True, unique=True, verbose_name='编码')),
('type', models.PositiveSmallIntegerField(choices=[(10, '生产设备'), (20, '计量设备'), (30, '治理设备'), (40, '监控设备')], help_text="((10, '生产设备'), (20, '计量设备'), (30, '治理设备'), (40, '监控设备'))", verbose_name='类型')),
('is_for_safe', models.BooleanField(default=False, verbose_name='是否用于安全')),
('is_for_enp', models.BooleanField(default=False, verbose_name='是否用于环保')),
('is_car', models.BooleanField(default=False, verbose_name='是否为车辆')),
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='ecate_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='ecate_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')),
],
options={
'abstract': False,
},
),
migrations.AddField(
model_name='equipment',
name='cate',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='cate', to='em.ecate', verbose_name='设备分类'),
),
]

View File

@ -1,6 +1,6 @@
from django.db import models
from apps.utils.models import CommonBModel, CommonADModel, CommonBDModel
from apps.system.models import User
from apps.utils.models import CommonBModel, CommonADModel
from apps.system.models import User, Dictionary
from enum import Enum
# Create your models here.
@ -14,6 +14,25 @@ class RuningState(Enum):
UNKNOWN = 50
etype_choices = (
(10, '生产设备'),
(20, '计量设备'),
(30, '治理设备'),
(40, '监控设备'),
)
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)
class Equipment(CommonBModel):
"""
设备台账信息
@ -33,12 +52,6 @@ class Equipment(CommonBModel):
)
EQUIP_TYPE_PRO = 10
EQUIP_TYPE_MEA = 20
type_choices = (
(10, '生产设备'),
(20, '计量设备'),
(30, '治理设备'),
(40, '监控设备'),
)
# mgmtype_choices = (
# (1, 'A'),
# (2, 'B'),
@ -53,8 +66,6 @@ class Equipment(CommonBModel):
# (1, '专用'),
# (2, '公用'),
# )
tags_list_10 = ['生产设备', '输送设备']
tags_list_20 = ['雾炮', '干雾', '除尘器', '环卫车', '洗车台']
is_online = models.PositiveSmallIntegerField('是否在线', default=0)
running_state = models.PositiveSmallIntegerField('运行状态', default=50)
ip = models.GenericIPAddressField('IP地址', null=True, blank=True)
@ -64,7 +75,9 @@ class Equipment(CommonBModel):
mgroup = models.ForeignKey(
'mtm.mgroup', on_delete=models.SET_NULL, null=True, blank=True)
type = models.PositiveSmallIntegerField(
'类型', choices=type_choices, default=10)
'类型', 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, null=True)
name = models.CharField('设备名称', max_length=50)
number_factory = models.CharField(

View File

@ -1,11 +1,18 @@
from apps.utils.serializers import CustomModelSerializer
from apps.em.models import Equipment, EcheckRecord, EInspect
from apps.em.models import Equipment, EcheckRecord, EInspect, Ecate
from apps.system.models import Dept
from apps.utils.constants import EXCLUDE_FIELDS, EXCLUDE_FIELDS_BASE
from rest_framework import serializers
from rest_framework.exceptions import ValidationError
class EcateSerializer(CustomModelSerializer):
class Meta:
model = Ecate
fields = '__all__'
read_only_fields = EXCLUDE_FIELDS_BASE
class EquipmentSerializer(CustomModelSerializer):
belong_dept = serializers.PrimaryKeyRelatedField(
label='责任部门', queryset=Dept.objects.all())
@ -19,6 +26,9 @@ class EquipmentSerializer(CustomModelSerializer):
mgroup = attrs.get('mgroup', None)
if mgroup:
attrs['belong_dept'] = mgroup.belong_dept
cate = attrs.get('cate', None)
if cate:
attrs['type'] = cate.type
return super().validate(attrs)
def get_full_name(self, obj):
@ -32,7 +42,8 @@ class EquipmentSerializer(CustomModelSerializer):
class EcheckRecordSerializer(CustomModelSerializer):
equipment_name = serializers.StringRelatedField(source='equipment', read_only=True)
equipment_name = serializers.StringRelatedField(
source='equipment', read_only=True)
class Meta:
model = EcheckRecord
@ -47,7 +58,8 @@ class EcheckRecordSerializer(CustomModelSerializer):
class EInspectSerializer(CustomModelSerializer):
equipment_name = serializers.StringRelatedField(source='equipment', read_only=True)
equipment_name = serializers.StringRelatedField(
source='equipment', read_only=True)
inspect_user_name = serializers.CharField(
source='inspect_user.name', read_only=True)

View File

@ -1,6 +1,6 @@
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from apps.em.views import EquipmentViewSet, EcheckRecordViewSet, EInspectViewSet
from apps.em.views import EquipmentViewSet, EcheckRecordViewSet, EInspectViewSet, EcateViewSet
API_BASE_URL = 'api/em/'
HTML_BASE_URL = 'em/'
@ -9,6 +9,7 @@ router = DefaultRouter()
router.register('equipment', EquipmentViewSet, basename='equipment')
router.register('echeckrecord', EcheckRecordViewSet, basename='echeckrecord')
router.register('einspect', EInspectViewSet, basename='einspect')
router.register('ecate', EcateViewSet, basename='ecate')
urlpatterns = [
path(API_BASE_URL, include(router.urls)),
]

View File

@ -1,7 +1,7 @@
from django.shortcuts import render
from apps.em.models import Equipment, EcheckRecord, EInspect
from apps.em.models import Equipment, EcheckRecord, EInspect, Ecate
from apps.utils.viewsets import CustomModelViewSet, CustomGenericViewSet
from apps.em.serializers import EquipmentSerializer, EcheckRecordSerializer, EInspectSerializer
from apps.em.serializers import EquipmentSerializer, EcheckRecordSerializer, EInspectSerializer, EcateSerializer
from apps.em.filters import EquipFilterSet
from rest_framework.exceptions import ParseError
from rest_framework.mixins import ListModelMixin, CreateModelMixin, DestroyModelMixin
@ -16,6 +16,19 @@ from django.conf import settings
# Create your views here.
class EcateViewSet(CustomModelViewSet):
queryset = Ecate.objects.all()
serializer_class = EcateSerializer
ordering = ['id', 'type', 'code', 'create_time']
filterset_fields = {
"type": ['exact', 'in'],
"code": ['exact', 'in', 'contains'],
"is_for_safe": ['exact'],
"is_for_enp": ['exact'],
"is_car": ['exact']
}
class EquipmentViewSet(CustomModelViewSet):
queryset = Equipment.objects.all()
serializer_class = EquipmentSerializer
@ -39,7 +52,6 @@ class EquipmentViewSet(CustomModelViewSet):
return Response()
class EcheckRecordViewSet(ListModelMixin, CreateModelMixin, DestroyModelMixin, CustomGenericViewSet):
"""
list:校准/检定记录