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

View File

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

View File

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

View File

@ -1,7 +1,7 @@
from django.shortcuts import render 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.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 apps.em.filters import EquipFilterSet
from rest_framework.exceptions import ParseError from rest_framework.exceptions import ParseError
from rest_framework.mixins import ListModelMixin, CreateModelMixin, DestroyModelMixin from rest_framework.mixins import ListModelMixin, CreateModelMixin, DestroyModelMixin
@ -16,6 +16,19 @@ from django.conf import settings
# Create your views here. # 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): class EquipmentViewSet(CustomModelViewSet):
queryset = Equipment.objects.all() queryset = Equipment.objects.all()
serializer_class = EquipmentSerializer serializer_class = EquipmentSerializer
@ -39,7 +52,6 @@ class EquipmentViewSet(CustomModelViewSet):
return Response() return Response()
class EcheckRecordViewSet(ListModelMixin, CreateModelMixin, DestroyModelMixin, CustomGenericViewSet): class EcheckRecordViewSet(ListModelMixin, CreateModelMixin, DestroyModelMixin, CustomGenericViewSet):
""" """
list:校准/检定记录 list:校准/检定记录