diff --git a/backend/device/__init__.py b/backend/device/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/backend/device/admin.py b/backend/device/admin.py deleted file mode 100644 index 8c38f3f..0000000 --- a/backend/device/admin.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.contrib import admin - -# Register your models here. diff --git a/backend/device/apps.py b/backend/device/apps.py deleted file mode 100644 index af56959..0000000 --- a/backend/device/apps.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.apps import AppConfig - - -class DeviceConfig(AppConfig): - default_auto_field = 'django.db.models.BigAutoField' - name = 'device' diff --git a/backend/device/migrations/__init__.py b/backend/device/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/backend/device/models.py b/backend/device/models.py deleted file mode 100644 index 434ed6c..0000000 --- a/backend/device/models.py +++ /dev/null @@ -1,73 +0,0 @@ -from django.db import models - -from dvadmin.utils.models import CoreModel, table_prefix - - -class Template(CoreModel): - CLASSIFY_CHOICE = ( - (0, "网关"), - (1, "终端设备"), - ) - classify = models.SmallIntegerField(choices=CLASSIFY_CHOICE, verbose_name="模板类别") - name = models.CharField(max_length=128, verbose_name="模板名称", unique=True) - - class Meta: - db_table = table_prefix + 'device_template' - verbose_name = "模板表" - verbose_name_plural = verbose_name - ordering = ("-id",) - - -class TemplateDetail(CoreModel): - template = models.ForeignKey(to="Template", null=False, on_delete=models.CASCADE, db_constraint=False, - verbose_name="所属模板") - key_title = models.CharField(max_length=64, verbose_name="键标题", unique=True) - key_name = models.CharField(max_length=64, verbose_name="键名") - key_type = models.CharField(max_length=32, verbose_name="键值类型") - parent_key = models.ForeignKey(to="TemplateDetail", null=True, on_delete=models.CASCADE, db_constraint=False, - verbose_name="父级键") - - class Meta: - db_table = table_prefix + 'device_template_detail' - verbose_name = "模板详情表" - verbose_name_plural = verbose_name - ordering = ("-id",) - unique_together = (('key_name', 'parent_key'),) - - -class Gateway(CoreModel): - name = models.CharField(max_length=128, verbose_name="设备名称", unique=True) - specification = models.CharField(max_length=32, verbose_name="设备型号") - mac_address = models.CharField(max_length=32, verbose_name="设备MAC地址") - version = models.CharField(max_length=64, verbose_name="设备固件版本号") - ip_address = models.CharField(max_length=32, verbose_name="设备IP地址") - physics_address = models.CharField(max_length=255, default="暂无位置信息", verbose_name="设备实际地址") - account = models.CharField(max_length=32, verbose_name="设备账号") - password = models.CharField(max_length=32, verbose_name="设备密码") - template = models.ForeignKey(to="Template", null=False, on_delete=models.CASCADE, db_constraint=False, - verbose_name="所用模板") - - class Meta: - db_table = table_prefix + 'device_gateways' - verbose_name = "网关表" - verbose_name_plural = verbose_name - ordering = ("-id",) - - -class Terminal(CoreModel): - name = models.CharField(max_length=128, verbose_name="设备名称", unique=True) - specification = models.CharField(max_length=32, verbose_name="设备型号") - identify = models.CharField(max_length=128, verbose_name="设备标识", unique=True) - physics_address = models.CharField(max_length=255, default="暂无位置信息", verbose_name="设备实际地址") - project = models.CharField(max_length=128, verbose_name="所属项目") - remark = models.CharField(max_length=255, null=True, verbose_name="设备备注") - gateway = models.ForeignKey(to=Gateway, null=True, on_delete=models.CASCADE, db_constraint=False, - verbose_name="关联网关") - template = models.ForeignKey(to="Template", null=False, on_delete=models.CASCADE, db_constraint=False, - verbose_name="所用模板") - - class Meta: - db_table = table_prefix + 'device_terminal' - verbose_name = "终端设备表" - verbose_name_plural = verbose_name - ordering = ("-id",) diff --git a/backend/device/routing.py b/backend/device/routing.py deleted file mode 100644 index b7a0300..0000000 --- a/backend/device/routing.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.urls import path -from device.websocket import DeviceStatusWebSocket - -websocket_urlpatterns = [ - path('ws/gateway_status//', DeviceStatusWebSocket.as_asgi()), -] diff --git a/backend/device/tests.py b/backend/device/tests.py deleted file mode 100644 index 7ce503c..0000000 --- a/backend/device/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/backend/device/urls.py b/backend/device/urls.py deleted file mode 100644 index db1e72b..0000000 --- a/backend/device/urls.py +++ /dev/null @@ -1,16 +0,0 @@ -from django.urls import path -from rest_framework import routers - -from device.views.gateway import GatewayViewSet -from device.views.template import TemplateViewSet, TemplateDetailViewSet -from device.views.terminal import TerminalViewSet - - -device_url = routers.SimpleRouter() -device_url.register(r'gateway', GatewayViewSet) -device_url.register(r'template', TemplateViewSet) -device_url.register(r'template_detail', TemplateDetailViewSet) -device_url.register(r'terminal', TerminalViewSet) - -urlpatterns = [] -urlpatterns += device_url.urls diff --git a/backend/device/views/gateway.py b/backend/device/views/gateway.py deleted file mode 100644 index 3396af2..0000000 --- a/backend/device/views/gateway.py +++ /dev/null @@ -1,18 +0,0 @@ -from dvadmin.utils.serializers import CustomModelSerializer -from dvadmin.utils.viewset import CustomModelViewSet -from device.models import Gateway - - -class GatewaySerializer(CustomModelSerializer): - """网关管理序列化器""" - - class Meta: - model = Gateway - fields = '__all__' - read_only_fields = ['id'] - - -class GatewayViewSet(CustomModelViewSet): - """网关管理视图集""" - queryset = Gateway.objects.all() - serializer_class = GatewaySerializer diff --git a/backend/device/views/template.py b/backend/device/views/template.py deleted file mode 100644 index 42d2093..0000000 --- a/backend/device/views/template.py +++ /dev/null @@ -1,33 +0,0 @@ -from dvadmin.utils.serializers import CustomModelSerializer -from dvadmin.utils.viewset import CustomModelViewSet -from device.models import Template, TemplateDetail - - -class TemplateSerializer(CustomModelSerializer): - """模板管理序列化器""" - - class Meta: - model = Template - fields = '__all__' - read_only_fields = ['id'] - - -class TemplateDetailSerializer(CustomModelSerializer): - """模板详情序列化器""" - - class Meta: - model = TemplateDetail - fields = '__all__' - read_only_fields = ['id'] - - -class TemplateViewSet(CustomModelViewSet): - """模板管理视图集""" - queryset = Template.objects.all() - serializer_class = TemplateSerializer - - -class TemplateDetailViewSet(CustomModelViewSet): - """模板详情视图集""" - queryset = TemplateDetail.objects.all() - serializer_class = TemplateDetailSerializer diff --git a/backend/device/views/terminal.py b/backend/device/views/terminal.py deleted file mode 100644 index 8d6fb33..0000000 --- a/backend/device/views/terminal.py +++ /dev/null @@ -1,18 +0,0 @@ -from dvadmin.utils.serializers import CustomModelSerializer -from dvadmin.utils.viewset import CustomModelViewSet -from device.models import Terminal - - -class TerminalSerializer(CustomModelSerializer): - """终端设备管理序列化器""" - - class Meta: - model = Terminal - fields = '__all__' - read_only_fields = ['id'] - - -class TerminalViewSet(CustomModelViewSet): - """终端设备管理视图集""" - queryset = Terminal.objects.all() - serializer_class = TerminalSerializer diff --git a/backend/device/websocket.py b/backend/device/websocket.py deleted file mode 100644 index 4570787..0000000 --- a/backend/device/websocket.py +++ /dev/null @@ -1,41 +0,0 @@ -import json -from hashlib import md5 -from datetime import datetime - -import jwt -from channels.generic.websocket import AsyncJsonWebsocketConsumer - -from application.websocketConfig import set_message - - -class DeviceStatusWebSocket(AsyncJsonWebsocketConsumer): - """设备状态ws""" - chat_group = 'device_status' - - async def connect(self): - try: - print('设备ws创建连接', self.scope) - self.token = self.scope['url_route']['kwargs']['token'] - decoded_result = jwt.decode(self.token, settings.SECRET_KEY, algorithms=['HS256']) - if decoded_result: - self.uid = decoded_result.get('user_id') - self.hash = md5(str(self.token).encode('utf-8')) - self.chat_name = f'{self.chat_group}:user_{self.uid}' - await self.channel_layer.group_add(self.chat_name, self.channel_name) - await self.accept() - else: - raise jwt.InvalidSignatureError() - except jwt.InvalidSignatureError: - await self.send_json(set_message('system', 'SYSTEM', {'message': 'Token无效'}), True) - await self.disconnect(None) - except jwt.ExpiredSignatureError: - await self.send_json(set_message('system', 'SYSTEM', {'message': 'Token过期'}), True) - await self.disconnect(None) - - async def disconnect(self, code): - print('设备ws连接关闭') - await self.channel_layer.group_discard(self.chat_name, self.channel_name) - try: - await self.close(code) - except: - pass