feat: em增加采集数据方法

This commit is contained in:
caoqianming 2025-02-27 11:34:19 +08:00
parent 1dbb07ddcb
commit 1925e3e5d6
4 changed files with 46 additions and 2 deletions

19
apps/em/cd.py Normal file
View File

@ -0,0 +1,19 @@
import socket
from rest_framework.exceptions import ParseError
def get_tyy_data(*args):
sc = socket.socket()
try:
sc.connect((args[0], int(args[1])))
except Exception:
raise ParseError("无法连接到采集器")
sc.send(b"R")
resp = sc.recv(1024)
if len(resp) < 8:
raise ParseError("设备未启动")
json_data = resp[5:-4]
json_str = json_data.decode('utf-8')
return "str", json_str
if __name__ == '__main__':
print(get_tyy_data())

View File

@ -72,3 +72,7 @@ class EInspectSerializer(CustomModelSerializer):
model = EInspect model = EInspect
fields = "__all__" fields = "__all__"
read_only_fields = EXCLUDE_FIELDS read_only_fields = EXCLUDE_FIELDS
class CdSerializer(serializers.Serializer):
method = serializers.CharField(label="方法名")

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, EcateViewSet from apps.em.views import EquipmentViewSet, EcheckRecordViewSet, EInspectViewSet, EcateViewSet, CdView
API_BASE_URL = 'api/em/' API_BASE_URL = 'api/em/'
HTML_BASE_URL = 'em/' HTML_BASE_URL = 'em/'
@ -12,4 +12,5 @@ router.register('einspect', EInspectViewSet, basename='einspect')
router.register('ecate', EcateViewSet, basename='ecate') router.register('ecate', EcateViewSet, basename='ecate')
urlpatterns = [ urlpatterns = [
path(API_BASE_URL, include(router.urls)), path(API_BASE_URL, include(router.urls)),
path(API_BASE_URL + 'cd/', CdView.as_view()),
] ]

View File

@ -4,7 +4,7 @@ from drf_yasg import openapi
from django.utils import timezone from django.utils import timezone
from apps.em.models import Equipment, EcheckRecord, EInspect, Ecate 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, EcateSerializer from apps.em.serializers import EquipmentSerializer, EcheckRecordSerializer, EInspectSerializer, EcateSerializer, CdSerializer
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
@ -17,6 +17,9 @@ from rest_framework.response import Response
from django.conf import settings from django.conf import settings
from django.db.models import Count, Case, When, IntegerField from django.db.models import Count, Case, When, IntegerField
from apps.enp.services import get_last_envdata from apps.enp.services import get_last_envdata
from rest_framework.views import APIView
from apps.utils.mixins import MyLoggingMixin
import importlib
# Create your views here. # Create your views here.
@ -167,3 +170,20 @@ class EInspectViewSet(CustomModelViewSet):
serializer_class = EInspectSerializer serializer_class = EInspectSerializer
select_related_fields = ["equipment", "inspect_user"] select_related_fields = ["equipment", "inspect_user"]
filterset_fields = ["equipment"] filterset_fields = ["equipment"]
class CdView(MyLoggingMixin, APIView):
@swagger_auto_schema(request_body=CdSerializer)
def post(self, request, format=None):
"""执行采集数据方法
执行采集数据方法
"""
method = request.data.get("method")
m = method.split("(")[0]
args = method.split("(")[1].split(")")[0].split(",")
module, func = m.rsplit(".", 1)
m = importlib.import_module(module)
f = getattr(m, func)
return Response(f(*args))