Commit 908b6b54 by 周田

refactor:新写的关于协议接口

parent 15d4f575
......@@ -4,10 +4,22 @@ from .models import TableAllDevCmdDefine, TableDevCmdNamePoll, TableSoftLimitAng
class TableAllDevCmdDefineSerializer(ModelSerializer):
# 新增或修改字段时,需要用到 protocol_name 来获取当前协议的当前版本
protocol_name = serializers.CharField(max_length=50, required=True, write_only=True)
class Meta:
model = TableAllDevCmdDefine
fields = '__all__'
fields = ['id', 'cmd_name', 'cmd_type', 'fieldindex', 'fieldname', 'fieldsize', 'value', 'minvalue', 'maxvalue',
'datatype', 'operation_in', 'operation_in_num', 'operation_out', 'operation_out_num', 'operabo_in',
'operabo_out', 'lua_script_in', 'lua_script_out', 'protocol_name']
def create(self, validated_data):
protocol_name = validated_data.pop('protocol_name')
instance = super().create(validated_data)
# 执行额外的逻辑或将protocol_name字段与实例关联
instance.protocol_name = protocol_name
instance.save()
return instance
class TableDevCmdNamePollSerializer(ModelSerializer):
class Meta:
......
from rest_framework.routers import SimpleRouter
from .views import (TableAllDevCmdDefineView, TableDevCmdNamePollView,
TableSoftLimitAngleView, TableXproAllDevinfoView)
TableSoftLimitAngleView, TableXproAllDevinfoView,
TableAllDevCmdDefineView_1, TableDevCmdNamePollView_1)
from .views import test
from django.urls import re_path
......@@ -10,6 +11,9 @@ router.register(r'dev_cmd_name_poll', TableDevCmdNamePollView)
router.register(r'soft_limit_angle', TableSoftLimitAngleView)
router.register(r'xpro_all_devinfo', TableXproAllDevinfoView)
router.register(r'all_dev_cmd_define_1', TableAllDevCmdDefineView_1)
router.register(r'dev_cmd_name_poll_1', TableDevCmdNamePollView_1)
urlpatterns = [
re_path(r'^test/$', test),
]
......
......@@ -7,6 +7,8 @@ from rest_framework.response import Response
from rest_framework.viewsets import ModelViewSet
from rest_framework.decorators import api_view
from rest_framework import status
from protocol_version_manage.models import (CurrentDevVersion, AllDevCmdDefineAndVersion,
AllProtocolDefinAndVersion, AllProtocolVersion)
from .models import (TableAllDevCmdDefine, TableDevCmdNamePoll,
TableSoftLimitAngle, TableXproAllDevinfo)
from .serializers import (TableAllDevCmdDefineSerializer, TableDevCmdNamePollSerializer,
......@@ -14,6 +16,125 @@ from .serializers import (TableAllDevCmdDefineSerializer, TableDevCmdNamePollSer
from .utils import tree_data
class TableAllDevCmdDefineView_1(ModelViewSet):
queryset = TableAllDevCmdDefine.objects.all()
serializer_class = TableAllDevCmdDefineSerializer
def perform_create(self, serializer):
"""
新增指令字段,给 TableAllDevCmdDefine 表创建记录时,同时给 AllDevCmdDefineAndVersion 表创建
"""
# 给表创建值
super().perform_create(serializer)
current_obj = CurrentDevVersion.objects.filter(protocol_name=serializer.validated_data['protocol_name']).first()
assert current_obj is not None, "当前协议不存在"
current_version = current_obj.version
serializer.validated_data['version'] = current_version
serializer.validated_data.pop('protocol_name')
AllDevCmdDefineAndVersion.objects.create(**serializer.validated_data)
def perform_destroy(self, instance):
"""
删除指令字段,给 TableAllDevCmdDefine 表删除记录时,同时给 AllDevCmdDefineAndVersion 表删除
这里由于不能直接获取到 protocol_name,所以需要先通过 TableDevCmdNamePoll 获取到 protocol_name,然后再删除
"""
cmd_name = instance.cmd_name
cmd_obj = TableDevCmdNamePoll.objects.filter(cmd_name=cmd_name).first()
assert cmd_obj is not None, "当前指令不存在"
current_protocol_name = cmd_obj.protocol_name
current_obj = CurrentDevVersion.objects.filter(protocol_name=current_protocol_name).first()
assert current_obj is not None, "当前协议不存在"
current_version = current_obj.version
AllDevCmdDefineAndVersion.objects.filter(cmd_name=instance.cmd_name,
fieldname=instance.fieldname,
version=current_version).delete()
# 更新 fieldindex
super().perform_destroy(instance)
fields = self.get_queryset().filter(cmd_name=cmd_name).all()
for i in range(len(fields)):
fields[i].fieldindex = i + 1
fields[i].save()
fields_ = AllDevCmdDefineAndVersion.objects.filter(cmd_name=cmd_name, version=current_version).all()
for i in range(len(fields_)):
fields_[i].fieldindex = i + 1
fields_[i].save()
def perform_update(self, serializer):
"""
更新指令字段,给 TableAllDevCmdDefine 表更新记录时,同时给 AllDevCmdDefineAndVersion 表更新
"""
super().perform_update(serializer)
current_obj = CurrentDevVersion.objects.filter(protocol_name=serializer.validated_data['protocol_name']).first()
assert current_obj is not None, "当前协议不存在"
current_version = current_obj.version
serializer.validated_data['version'] = current_version
serializer.validated_data.pop('protocol_name')
AllDevCmdDefineAndVersion.objects.filter(cmd_name=serializer.validated_data['cmd_name'],
fieldname=serializer.validated_data['fieldname'],
version=current_version).update(**serializer.validated_data)
class TableDevCmdNamePollView_1(ModelViewSet):
queryset = TableDevCmdNamePoll.objects.all()
serializer_class = TableDevCmdNamePollSerializer
def perform_create(self, serializer):
"""
新增指令,给 TableDevCmdNamePollView 表创建记录时,同时给 AllProtocolDefineAndVersion 表创建
如果当前协议不存在,则在 CurentDevVersion 表创建记录,同时在 AllProtocolVersion 表创建记录
"""
super().perform_create(serializer)
current_obj = CurrentDevVersion.objects.filter(protocol_name=serializer.validated_data['protocol_name']).first()
if current_obj is None:
current_obj = CurrentDevVersion.objects.create(protocol_name=serializer.validated_data['protocol_name'],
version="init")
current_version = "init"
AllProtocolVersion.objects.create(protocol_name=serializer.validated_data['protocol_name'],
version_paths=json.dumps([{"version": "init"}]))
else:
current_version = current_obj.version
serializer.validated_data['version'] = current_version
AllProtocolDefinAndVersion.objects.create(**serializer.validated_data)
def perform_destroy(self, instance):
"""
删除指令,给 TableDevCmdNamePollView 表删除记录时,同时给 AllProtocolDefineAndVersion 表删除
"""
protocol_name = instance.protocol_name
cmd_name = instance.cmd_name
current_obj = CurrentDevVersion.objects.filter(protocol_name=protocol_name).first()
assert current_obj is not None, "当前协议不存在"
AllProtocolDefinAndVersion.objects.filter(protocol_name=protocol_name,
cmd_name=cmd_name,
version=current_obj.version).delete()
super().perform_destroy(instance)
def perform_update(self, serializer):
"""
更新指令,给 TableDevCmdNamePollView 表更新记录时,同时给 AllProtocolDefineAndVersion 表更新
"""
current_obj = CurrentDevVersion.objects.filter(protocol_name=serializer.validated_data['protocol_name']).first()
assert current_obj is not None, "当前协议不存在"
serializer.validated_data['version'] = current_obj.version
AllProtocolDefinAndVersion.objects.filter(protocol_name=serializer.validated_data['protocol_name'],
cmd_name=serializer.validated_data['cmd_name'],
version=current_obj.version).update(**serializer.validated_data)
super().perform_update(serializer)
class TableAllDevCmdDefineView(ModelViewSet):
queryset = TableAllDevCmdDefine.objects.all()
serializer_class = TableAllDevCmdDefineSerializer
......
No preview for this file type
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment