Browse Source

新增: 云飞监控项目增加四情孢子仪,杀虫灯拍照封禁手动解封功能

root 3 years ago
parent
commit
3811e5538a

+ 1 - 1
monitor/monitor/pagination.py

@@ -5,7 +5,7 @@ from rest_framework.pagination import PageNumberPagination
 
 
 class CustomPagination(PageNumberPagination):
-    page_size = 2
+    page_size = 10
     max_page_size = 20
     page_size_query_param = 'size'
     page_query_param = 'page'

+ 11 - 2
monitor/monitor/settings.py

@@ -104,6 +104,15 @@ DATABASES = {
     'default': {
         'ENGINE': 'django.db.backends.sqlite3',
         'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
+    },
+    'siqing': {
+        'ENGINE': 'django.db.backends.mysql',
+        'NAME': 'yfwlw',
+        'USER': 'root',
+        'PASSWORD': 'sql_yfkj_6019@root',
+        'HOST': '120.27.222.26',
+        'PORT': 3306,
+        'OPTIONS': {'charset': 'utf8mb4'}
     }
 }
 
@@ -130,13 +139,13 @@ AUTH_PASSWORD_VALIDATORS = [
 
 LANGUAGE_CODE = 'en-us'
 
-TIME_ZONE = 'UTC'
+TIME_ZONE = 'Asia/Shanghai'
 
 USE_I18N = True
 
 USE_L10N = True
 
-USE_TZ = True
+USE_TZ = False
 
 # Static files (CSS, JavaScript, Images)
 # https://docs.djangoproject.com/en/2.2/howto/static-files/

+ 2 - 43
monitor/monitor/urls.py

@@ -13,49 +13,11 @@ Including another URLconf
     1. Import the include() function: from django.urls import include, path
     2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
 """
-from rest_framework import permissions
+
 from django.contrib import admin
 from django.urls import path, include, re_path
 from drf_spectacular.views import SpectacularAPIView, SpectacularRedocView, SpectacularSwaggerView
 
-from drf_yasg import openapi
-from drf_yasg.views import get_schema_view
-from drf_yasg.inspectors import CoreAPICompatInspector, FieldInspector, NotHandled, SwaggerAutoSchema
-
-schema_view = get_schema_view(
-    openapi.Info(
-        title="云飞监控API文档",
-        default_version="v1",
-        description="""
-<strong>HTTP状态码</strong>:
-    200 表示成功
-    400 表示请求失败
-    403 表示无权限访问
-    500 表示服务器异
-
-<strong>接口返回格式统一为</strong>:
-
-{
-&nbsp;&nbsp; "msg": "", &nbsp;&nbsp; 错误描述信息,正常响应下此为空字符串,只有错误异常情况下才有内容
-&nbsp;&nbsp; "code": 0, &nbsp;&nbsp; 响应状态码:0表示正确,400表示请求错误,403表示无权限访问,500表示服务器异常。
-&nbsp;&nbsp; "result": {
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "data": {}, &nbsp;&nbsp; 后端返回的数据, 格式为对象或者数组,没有数据返回为空对象
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "paging": {&nbsp;&nbsp;&nbsp;&nbsp;# 分页信息,如果没有分页,则为空对象
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'next': 1,	&nbsp;&nbsp;&nbsp;&nbsp;# 下一页页码
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'previous': 1, &nbsp;&nbsp;&nbsp;&nbsp;# 上一页页码
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'total': 10, &nbsp;&nbsp;&nbsp;&nbsp;# 总页数
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'page': 1, &nbsp;&nbsp;&nbsp;&nbsp;# 当前页
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'page_size': 5, &nbsp;&nbsp;&nbsp;&nbsp;# 每页条目数
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'total_page': 10 &nbsp;&nbsp;&nbsp;&nbsp;# 总页数
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
-&nbsp;&nbsp;&nbsp;&nbsp;}
-}
-"""
-    ),
-    public=True,
-    permission_classes=(permissions.AllowAny, )
-)
-
 
 api_urlpatterns = [
     path('', include('monitor_app.urls'))
@@ -67,8 +29,5 @@ urlpatterns = [
     path('api/', include(api_urlpatterns)),
     path('api/schema/', SpectacularAPIView.as_view(), name='schema'),
     path('api/schema/swagger-ui/', SpectacularSwaggerView.as_view(url_name='schema'), name='swagger-ui'),
-    path('api/schema/redoc/', SpectacularRedocView.as_view(url_name='schema'), name='redoc'),
-
-    re_path(r'doc/swagger/$', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
-    re_path(r'doc/redoc/$', schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc'),
+    path('api/schema/redoc/', SpectacularRedocView.as_view(url_name='schema'), name='redoc')
 ]

+ 16 - 0
monitor/monitor_app/models.py

@@ -1,3 +1,19 @@
 from django.db import models
 
 # Create your models here.
+
+
+class PhotoForbiddenInfo(models.Model):
+    device_name = models.CharField(verbose_name="设备名称", max_length=50)
+    device_id = models.CharField(verbose_name="设备编码", max_length=50)
+    device_path = models.CharField(verbose_name="设备路径", max_length=500)
+    photo_num = models.IntegerField(verbose_name="拍照数量", default=0)
+    operate_type = models.CharField(verbose_name="任务类型", max_length=50)
+    msg_info = models.TextField(verbose_name="描述信息")
+    create_time = models.DateTimeField(verbose_name="封禁时间")
+    operate_time = models.DateTimeField(verbose_name="解封时间")
+    is_allowrd = models.IntegerField(verbose_name="是否解封")
+
+    class Meta:
+        managed = False
+        db_table = 'photo_forbidden_tb'

+ 0 - 0
monitor/monitor_app/photo/__init__.py


+ 32 - 0
monitor/monitor_app/photo/serializers.py

@@ -0,0 +1,32 @@
+# coding:utf-8
+
+import datetime
+from rest_framework import serializers
+from ..models import PhotoForbiddenInfo
+
+
+class PhotoMonitorListSerializer(serializers.Serializer):
+    device_name = serializers.CharField(help_text="设备名称", max_length=50)
+    device_id = serializers.CharField(help_text="设备编码", max_length=50)
+    photo_num = serializers.IntegerField(help_text="拍照数量", default=0)
+    msg_info = serializers.CharField(help_text="描述信息")
+    create_time = serializers.DateTimeField(help_text="封禁时间", default="2021-01-01 11:21:32")
+
+    def to_representation(self, instance):
+        return {
+            'id': instance.id,
+            'device_name': instance.device_name,
+            'device_id': instance.device_id,
+            'photo_num': instance.photo_num,
+            'msg_info': instance.msg_info,
+            'create_time': instance.create_time.strftime('%Y-%m-%d %H:%M:%S')
+        }
+
+
+class PhotoMonitorPostSerializer(serializers.Serializer):
+    device_id = serializers.CharField(help_text="设备编码", max_length=50)
+
+    def validate_device_id(self, value):
+        queryset = PhotoForbiddenInfo.objects.using('siqing').filter(is_allowrd=1, device_id=value).order_by('-id')
+        if not queryset:
+            serializers.ValidationError('设备不存在')

+ 71 - 0
monitor/monitor_app/photo/views.py

@@ -0,0 +1,71 @@
+# coding:utf-8
+
+import datetime
+from rest_framework.response import Response
+from rest_framework.views import APIView
+from drf_spectacular.utils import extend_schema, OpenApiResponse, OpenApiParameter, OpenApiExample, OpenApiTypes
+from rest_framework.generics import GenericAPIView
+from ..models import PhotoForbiddenInfo
+from monitor.pagination import CustomPagination
+from .serializers import PhotoMonitorListSerializer, PhotoMonitorPostSerializer
+
+
+class PhotoMonitorView(GenericAPIView):
+    # queryset = PhotoForbiddenInfo.objects.using('siqing').filter(is_allowrd=1).order_by('-id')
+    queryset = PhotoForbiddenInfo.objects.using('siqing').exclude(is_allowrd=1)
+    serializer_class = PhotoMonitorListSerializer
+    pagination_class = CustomPagination
+
+    def get_serializer_class(self):
+        if self.request.method == 'POST':
+            return PhotoMonitorPostSerializer
+        return self.serializer_class
+
+    @extend_schema(
+        parameters=[
+            OpenApiParameter(
+                name='page',
+                type=OpenApiTypes.STR,
+                location=OpenApiParameter.QUERY,
+                description='页码,第几页',
+            ),
+            OpenApiParameter(
+                name='size',
+                type=OpenApiTypes.STR,
+                location=OpenApiParameter.QUERY,
+                description='每页条目数',
+            ),
+            OpenApiParameter(
+                name='device_id',
+                type=OpenApiTypes.STR,
+                location=OpenApiParameter.QUERY,
+                description='设备编号',
+            ),
+        ],
+        description="获取待解封列表接口",
+        request=None,
+        responses=PhotoMonitorListSerializer
+    )
+    def get(self, request):
+        '''获取待解封列表接口'''
+        queryset = self.get_queryset()
+        page_data = self.paginate_queryset(queryset)
+        ser_obj = self.get_serializer(page_data, many=True)
+        data = self.get_paginated_response(ser_obj.data)
+        return data
+
+    @extend_schema(
+        description="解封封禁接口",
+        request=PhotoMonitorPostSerializer,
+        responses=None
+    )
+    def post(self, request):
+        '''解封封禁'''
+        ser_obj = self.get_serializer(data=request.data)
+        ser_obj.is_valid(raise_exception=True)
+        device_id = request.data['device_id']
+        queryset = self.get_queryset()
+        queryset = queryset.filter(device_id=device_id)
+        if queryset:
+            queryset.update(is_allowrd=2, operate_time=datetime.datetime.now())
+        return Response(status=200)

+ 2 - 0
monitor/monitor_app/urls.py

@@ -4,6 +4,7 @@ from django.urls import path, re_path
 from .process.views import ProcessListView, ProcessDetailView, ProcessDeleteView
 from .system.views import SystemDetailView
 from .user.views import UserLoginView, UserLogoutView
+from .photo.views import PhotoMonitorView
 
 urlpatterns = [
     re_path('user/login/?$', UserLoginView.as_view()),
@@ -12,4 +13,5 @@ urlpatterns = [
     re_path('process/detail/?$', ProcessDetailView.as_view()),
     re_path('process/delete/?$', ProcessDeleteView.as_view()),
     re_path('system/detail/?$', SystemDetailView.as_view()),
+    re_path('photo/?$', PhotoMonitorView.as_view())
 ]