feat: 增加ecate表
This commit is contained in:
parent
e7f8086f23
commit
d2a503c482
|
@ -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')
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -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='设备分类'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -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(
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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)),
|
||||||
]
|
]
|
||||||
|
|
|
@ -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:校准/检定记录
|
||||||
|
|
Loading…
Reference in New Issue