Commit dfc394d3 by 周田

feat:更新协议版本内容接口

parent 8e682db2
......@@ -172,4 +172,118 @@ def add_protocol_version_manage(protocol_name: str, version: str, cmds: list) ->
return Response(status=status.HTTP_200_OK)
def update_protocol_version_manage(protocol_name: str, version: str, cmds: list) -> Response:
"""
更新协议版本信息
:param protocol_name: 协议名
:param version: 版本号
:param cmds: 协议相关的命令
:return: 当前版本,协议相关的数据
"""
# 给协议添加新的版本号
all_protocol_version_manage = AllProtocolVersion.objects.filter(protocol_name=protocol_name).first()
version_paths = json.loads(all_protocol_version_manage.version_paths)
true_version = False
for version_path in version_paths:
if version_path['version'] == version:
true_version = True
break
if not true_version:
return Response(status=status.HTTP_400_BAD_REQUEST)
try:
for cmd in cmds:
# 获取指令字段
fields = cmd.pop('fields')
# 处理协议指令
_cmds = AllProtocolDefinAndVersion.objects.filter(protocol_name=protocol_name, cmd_name=cmd['cmd_name']).all()
new_cmd = AllProtocolDefinAndVersion(**cmd)
updated = False
for _cmd in _cmds:
# 遍历相同协议下相同名称不同版本的指令
vesrion_list = json.loads(_cmd.version)
if version in vesrion_list:
if _cmd == new_cmd:
updated = True
break
else:
# 该指令还有其他协议版本,新建指令信息
if len(vesrion_list) > 1:
# 删除原先指令版本信息
vesrion_list.remove(version)
_cmd.version = json.dumps(vesrion_list)
_cmd.save()
# 创建新的
new_cmd.version = json.dumps([version])
new_cmd.save()
else:
# 更新信息
_cmd.cmd_type = cmd['cmd_type']
_cmd.encode = cmd['encode']
_cmd.timing_cmd_cycle_period = cmd['timing_cmd_cycle_period']
_cmd.cmd_explain = cmd['cmd_explain']
_cmd.save()
updated = True
if not updated:
# 如果没有相关指令,则存储指令信息
new_cmd.version = json.dumps([version])
new_cmd.save()
# 处理指令字段
for field in fields:
_fields = AllDevCmdDefineAndVersion.objects.filter(cmd_name=cmd['cmd_name'], fieldname=field['fieldname']).all()
new_field = AllDevCmdDefineAndVersion(**field)
updated = False
for _field in _fields:
# 遍历相同协议下相同名称不同版本的指令字段
version_list = json.loads(_field.version)
if version in version_list:
if _field == new_field:
updated = True
break
else:
# 该指令字段还有其他协议版本,新建指令信息
if len(version_list) > 1:
# 删除原先指令版本信息
version_list.remove(version)
_field.version = json.dumps(version_list)
_field.save()
# 创建新的
new_field.version = json.dumps([version])
new_field.save()
else:
# 更新信息
_field.cmd_type = field['cmd_type']
_field.fieldindex = field['fieldindex']
_field.fieldsize = field['fieldsize']
_field.value = field['value']
_field.minvalue = field['minvalue']
_field.maxvalue = field['maxvalue']
_field.datatype = field['datatype']
_field.operation_in = field['operation_in']
_field.operation_in_num = field['operation_in_num']
_field.operation_out = field['operation_out']
_field.operation_out_num = field['operation_out_num']
_field.operabo_in = field['operabo_in']
_field.operabo_out = field['operabo_out']
_field.lua_script_in = field['lua_script_in']
_field.lua_script_out = field['lua_script_out']
_field.save()
updated = True
if not updated:
# 如果没有相关指令字段,则存储指令信息
new_field.version = json.dumps([version])
new_field.save()
except Exception as e:
print(e)
return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR)
return Response(status=status.HTTP_200_OK)
......@@ -7,5 +7,6 @@ urlpatterns = [
re_path(r'^protocol_version_manage/init/$', views.init),
re_path(r'^protocol_version_manage/change_protocol_version/$', views.change_protocol_version),
re_path(r'^protocol_version_manage/add_protocol_version/$', views.add_protocol_version),
re_path(r'^protocol_version_manage/update_protocol_version/$', views.update_protocol_version),
re_path(r'^all_protocol_version/$', views.AllProtocolVersionViewSet.as_view({'get': 'list'})),
]
......@@ -9,7 +9,8 @@ from .models import (AllDevCmdDefineAndVersion, AllProtocolDefinAndVersion,
AllProtocolVersion, CurrentDevVersion)
from .serializers import (AllDevCmdDefineAndVersionSerializer, AllProtocolDefinAndVersionSerializer,
AllProtocolVersionSerializer, CurrentDevVersionSerializer)
from .services import init_protocol_version_manage, update_device_protocol_and_cmds, add_protocol_version_manage
from .services import (init_protocol_version_manage, update_device_protocol_and_cmds,
add_protocol_version_manage, update_protocol_version_manage)
@api_view(['POST'])
......@@ -59,6 +60,17 @@ def add_protocol_version(request):
return add_protocol_version_manage(protocol_name, version, cmds)
@api_view(['POST'])
def update_protocol_version(request):
version = request.data.get('version')
protocol_name = request.data.get('protocol_name')
cmds = request.data.get('cmds')
assert (protocol_name is not None and
version is not None and
cmds is not None), Response(status=status.HTTP_400_BAD_REQUEST)
return update_protocol_version_manage(protocol_name, version, cmds)
class AllProtocolVersionViewSet(GenericViewSet, ListModelMixin):
queryset = AllProtocolVersion.objects.all()
serializer_class = AllProtocolVersionSerializer
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