Commit 908b6b54 by 周田

refactor:新写的关于协议接口

parent 15d4f575
...@@ -4,10 +4,22 @@ from .models import TableAllDevCmdDefine, TableDevCmdNamePoll, TableSoftLimitAng ...@@ -4,10 +4,22 @@ from .models import TableAllDevCmdDefine, TableDevCmdNamePoll, TableSoftLimitAng
class TableAllDevCmdDefineSerializer(ModelSerializer): class TableAllDevCmdDefineSerializer(ModelSerializer):
# 新增或修改字段时,需要用到 protocol_name 来获取当前协议的当前版本
protocol_name = serializers.CharField(max_length=50, required=True, write_only=True)
class Meta: class Meta:
model = TableAllDevCmdDefine 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 TableDevCmdNamePollSerializer(ModelSerializer):
class Meta: class Meta:
......
from rest_framework.routers import SimpleRouter from rest_framework.routers import SimpleRouter
from .views import (TableAllDevCmdDefineView, TableDevCmdNamePollView, from .views import (TableAllDevCmdDefineView, TableDevCmdNamePollView,
TableSoftLimitAngleView, TableXproAllDevinfoView) TableSoftLimitAngleView, TableXproAllDevinfoView,
TableAllDevCmdDefineView_1, TableDevCmdNamePollView_1)
from .views import test from .views import test
from django.urls import re_path from django.urls import re_path
...@@ -10,6 +11,9 @@ router.register(r'dev_cmd_name_poll', TableDevCmdNamePollView) ...@@ -10,6 +11,9 @@ router.register(r'dev_cmd_name_poll', TableDevCmdNamePollView)
router.register(r'soft_limit_angle', TableSoftLimitAngleView) router.register(r'soft_limit_angle', TableSoftLimitAngleView)
router.register(r'xpro_all_devinfo', TableXproAllDevinfoView) 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 = [ urlpatterns = [
re_path(r'^test/$', test), re_path(r'^test/$', test),
] ]
......
...@@ -7,6 +7,8 @@ from rest_framework.response import Response ...@@ -7,6 +7,8 @@ from rest_framework.response import Response
from rest_framework.viewsets import ModelViewSet from rest_framework.viewsets import ModelViewSet
from rest_framework.decorators import api_view from rest_framework.decorators import api_view
from rest_framework import status from rest_framework import status
from protocol_version_manage.models import (CurrentDevVersion, AllDevCmdDefineAndVersion,
AllProtocolDefinAndVersion, AllProtocolVersion)
from .models import (TableAllDevCmdDefine, TableDevCmdNamePoll, from .models import (TableAllDevCmdDefine, TableDevCmdNamePoll,
TableSoftLimitAngle, TableXproAllDevinfo) TableSoftLimitAngle, TableXproAllDevinfo)
from .serializers import (TableAllDevCmdDefineSerializer, TableDevCmdNamePollSerializer, from .serializers import (TableAllDevCmdDefineSerializer, TableDevCmdNamePollSerializer,
...@@ -14,6 +16,125 @@ from .serializers import (TableAllDevCmdDefineSerializer, TableDevCmdNamePollSer ...@@ -14,6 +16,125 @@ from .serializers import (TableAllDevCmdDefineSerializer, TableDevCmdNamePollSer
from .utils import tree_data 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): class TableAllDevCmdDefineView(ModelViewSet):
queryset = TableAllDevCmdDefine.objects.all() queryset = TableAllDevCmdDefine.objects.all()
serializer_class = TableAllDevCmdDefineSerializer 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