Commit de0d52c8 by 周田

feat:增加协议版本和修改版本

parent 2d17d729
......@@ -2,7 +2,7 @@ from rest_framework.routers import SimpleRouter
from .views import (TableAllDevCmdDefineView, TableDevCmdNamePollView,
TableSoftLimitAngleView, TableXproAllDevinfoView,
TableAllDevCmdDefineView_1, TableDevCmdNamePollView_1)
from .views import test, remove_protocol
from .views import test, remove_protocol, protocol_add_version
from django.urls import re_path
router = SimpleRouter()
......@@ -16,6 +16,7 @@ router.register(r'dev_cmd_name_poll_1', TableDevCmdNamePollView_1)
urlpatterns = [
re_path(r'^test/$', test),
re_path(r'^protocol/protocol_add_version/$', protocol_add_version),
re_path(r'^protocol/(?P<protocol_name>.+)/$', remove_protocol),
]
......
......@@ -270,7 +270,7 @@ def test(request):
return Response(status=status.HTTP_201_CREATED)
@api_view(['delete'])
@api_view(['DELETE'])
def remove_protocol(request, protocol_name):
"""
删除协议
......@@ -290,8 +290,130 @@ def remove_protocol(request, protocol_name):
cmds = AllProtocolDefinAndVersion.objects.filter(protocol_name=protocol_name).all()
for cmd in cmds:
cmd_name = cmd.cmd_name
TableAllDevCmdDefine.objects.filter(cmd_name=cmd_name).delete()
AllDevCmdDefineAndVersion.objects.filter(cmd_name=cmd_name).delete()
cmd.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
@swagger_auto_schema(method='post', request_body=openapi.Schema(
type=openapi.TYPE_OBJECT,
properties={
'protocol_name': openapi.Schema(type=openapi.TYPE_STRING),
'version_name': openapi.Schema(type=openapi.TYPE_STRING),
'is_extend': openapi.Schema(type=openapi.TYPE_BOOLEAN),
'extend_version_name': openapi.Schema(type=openapi.TYPE_STRING),
}
))
@api_view(['POST'])
def protocol_add_version(request):
"""
协议添加版本
"""
protocol_name = request.data.get('protocol_name')
version_name = request.data.get('version_name')
is_extend = request.data.get('is_extend')
extend_version_name = request.data.get('extend_version_name')
if version_name is None or protocol_name is None:
return Response(status=status.HTTP_400_BAD_REQUEST)
if is_extend:
# 如果是继承版本,则需要判断继承的版本是否存在
if extend_version_name is None:
return Response(status=status.HTTP_400_BAD_REQUEST)
# current_version = CurrentDevVersion.objects.filter(protocol_name=protocol_name).first().version
# if current_version != extend_version_name:
# # 继承的版本和当前的版本不一样,需要将当前版本的指令和字段删除
# cmds = TableDevCmdNamePoll.objects.filter(protocol_name=protocol_name).all()
# for cmd in cmds:
# TableAllDevCmdDefine.objects.filter(cmd_name=cmd.cmd_name).delete()
# cmd.delete()
# # 获取继承版本的字段
# cmds = AllProtocolDefinAndVersion.objects.filter(protocol_name=protocol_name,
# version=extend_version_name).all()
# for cmd in cmds:
# TableDevCmdNamePoll(protocol_name=_cmd.protocol_name,
# cmd_name=_cmd.cmd_name,
# cmd_type=_cmd.cmd_type,
# encode=_cmd.encode,
# timing_cmd_cycle_period=_cmd.timing_cmd_cycle_period,
# cmd_explain=_cmd.cmd_explain).save()
# fields = AllDevCmdDefineAndVersion.objects.filter(cmd_name=cmd.cmd_name,
# version=extend_version_name).all()
# # 新增字段
# for field in fields:
# TableAllDevCmdDefine(cmd_name=_field.cmd_name,
# cmd_type=_field.cmd_type,
# fieldindex=_field.fieldindex,
# fieldname=_field.fieldname,
# fieldsize=_field.fieldsize,
# value=_field.value,
# minvalue=_field.minvalue,
# maxvalue=_field.maxvalue,
# datatype=_field.datatype,
# operation_in=_field.operation_in,
# operation_in_num=_field.operation_in_num,
# operation_out=_field.operation_out,
# operation_out_num=_field.operation_out_num,
# operabo_in=_field.operabo_in,
# operabo_out=_field.operabo_out,
# lua_script_in=_field.lua_script_in,
# lua_script_out=_field.lua_script_out).save()
# 获取继承版本的字段
cmds = AllProtocolDefinAndVersion.objects.filter(protocol_name=protocol_name,
version=extend_version_name).all()
for cmd in cmds:
# 给当前版本的指令和字段创建记录
_cmd = AllProtocolDefinAndVersion(protocol_name=protocol_name,
cmd_name=cmd.cmd_name,
cmd_type=cmd.cmd_type,
encode=cmd.encode,
timing_cmd_cycle_period=cmd.timing_cmd_cycle_period,
cmd_explain=cmd.cmd_explain,
version=version_name)
_cmd.save()
fields = AllDevCmdDefineAndVersion.objects.filter(cmd_name=cmd.cmd_name,
version=extend_version_name).all()
# 新增字段
for field in fields:
_field = AllDevCmdDefineAndVersion(cmd_name=field.cmd_name,
cmd_type=field.cmd_type,
fieldindex=field.fieldindex,
fieldname=field.fieldname,
fieldsize=field.fieldsize,
value=field.value,
minvalue=field.minvalue,
maxvalue=field.maxvalue,
datatype=field.datatype,
operation_in=field.operation_in,
operation_in_num=field.operation_in_num,
operation_out=field.operation_out,
operation_out_num=field.operation_out_num,
operabo_in=field.operabo_in,
operabo_out=field.operabo_out,
lua_script_in=field.lua_script_in,
lua_script_out=field.lua_script_out,
version=version_name)
_field.save()
else:
# 如果不用继承版本,先直接删除两张表上所有的记录
cmds = TableDevCmdNamePoll.objects.filter(protocol_name=protocol_name).all()
for cmd in cmds:
cmd_name = cmd.cmd_name
TableAllDevCmdDefine.objects.filter(cmd_name=cmd_name).delete()
cmd.delete()
# 添加版本
protoocl_version = AllProtocolVersion.objects.filter(protocol_name=protocol_name).first()
version = json.loads(protoocl_version.version_paths)
version.append({"version": version_name})
protoocl_version.version_paths = json.dumps(version)
protoocl_version.save()
return Response(status=status.HTTP_200_OK)
......@@ -28,8 +28,9 @@
<el-button>上传原始文件</el-button>
</el-upload>
<el-button v-else @click="downloadFile"> 下载原始文件 </el-button>
<el-button @click="newVersionDialog = true">新增版本</el-button>
<el-button @click="addCmdDialog = true">新增指令</el-button>
<el-button @click="deleteProtocol">删除该版本协议</el-button>
<!-- <el-button @click="deleteProtocol">删除该版本协议</el-button> -->
</div>
</div>
......@@ -41,7 +42,7 @@
<template #title>
<div>{{ cmd.cmd_name + ' ' + cmd.cmd_explain + ' ' + cmd.cmd_type }}</div>
<div>
<el-button type="primary" text @click="removeCmd(cmd.id)">删除</el-button>
<el-button type="danger" text @click="removeCmd(cmd.id)">删除</el-button>
</div>
</template>
<protocol-table
......@@ -87,6 +88,33 @@
</span>
</template>
</el-dialog>
<el-dialog v-model="newVersionDialog" :width="500" title="新增协议版本">
<el-form :model="newVersionForm">
<el-form-item prop="versionName" label="版本名称" :label-width="formLabelWidth">
<el-input v-model="newVersionForm.versionName" autocomplete="off" />
</el-form-item>
<el-form-item prop="isExtend" label="是否继承版本" :label-width="formLabelWidth">
<el-switch v-model="newVersionForm.isExtend" />
</el-form-item>
<el-form-item v-show="newVersionForm.isExtend" prop="extendVersionName" label="继承版本名称" :label-width="formLabelWidth">
<el-select v-model="newVersionForm.extendVersionName">
<el-option
v-for="option in options"
:label="option.label"
:value="option.value"
>
</el-option>
</el-select>
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="newVersionDialog = false">取消</el-button>
<el-button type="primary" @click="addNewVersion"> 确定 </el-button>
</span>
</template>
</el-dialog>
</div>
</template>
......@@ -98,6 +126,7 @@ import ProtocolTable from "./ProtocolTable.vue";
import type { DeviceProtocolResponse, ProtocolCmdResponse } from './types';
import { useProtocolVersionStore } from '@/stores/allProtocolVersion';
import axios from 'axios';
import request from '@/plugins/axios/requests';
const addCmdDialog = ref<boolean>(false)
const currentVersion = ref('')
......@@ -190,6 +219,8 @@ const changeProtocolVersion = () => {
protocol_name: props.name,
})
.then((res) => {
console.log(res);
const { cmds } = res.data
cmdInfos.value = cmds
// 转成和上面 ProtocolCmdResponse 一样的类型
......@@ -197,7 +228,7 @@ const changeProtocolVersion = () => {
const { fields, ...info} = cmd
fieldInfos.value[info.cmd_name] = fields
}
// 修改按钮文件
for (let protocolVersion of store.protocolVersions){
if (protocolVersion.protocol_name === props.name) {
......@@ -337,6 +368,40 @@ const removeCmd = (id: number) => {
})
}
// ===================================================
// 新增协议版本
const newVersionDialog = ref<boolean>(false)
const newVersionForm = reactive({
versionName: '',
isExtend: false,
extendVersionName: '',
})
const addNewVersion = () => {
// 继承版本问题
const body = {
protocol_name: props.name,
version_name: newVersionForm.versionName,
is_extend: newVersionForm.isExtend,
extend_version_name: newVersionForm.extendVersionName,
}
console.log(body);
request.post('/api/protocol/protocol_add_version/', body)
.then((res) => {
newVersionDialog.value = false
console.log(res);
ElMessage({
type: 'success',
message: '操作成功',
})
options.value.push({value: newVersionForm.versionName, label: newVersionForm.versionName})
currentVersion.value = newVersionForm.versionName
changeProtocolVersion()
})
}
</script>
<style>
......
......@@ -5,7 +5,7 @@
<template #title>
<div> {{ item }} </div>
<div>
<el-button type="primary" text @click="removeProtocol(item)">删除</el-button>
<el-button type="danger" text @click="removeProtocol(item)">删除</el-button>
</div>
</template>
<div style="margin: auto; width: 90%">
......
......@@ -66,19 +66,17 @@ def update_device_protocol_and_cmds(protocol_name: str, version: str) -> Respons
CurrentDevVersion.objects.filter(protocol_name=protocol_name).update(version=version)
# 更新协议版本信息
all_protocol = AllProtocolDefinAndVersion.objects.filter(protocol_name=protocol_name).all()
current_version_protocols = [protocol for protocol in all_protocol
if version in json.loads(protocol.version)]
current_version_protocols = AllProtocolDefinAndVersion.objects.filter(protocol_name=protocol_name,
version=version).all()
cmd_fields = []
for current_version_protocol in current_version_protocols:
cmd_name = current_version_protocol.cmd_name
cmd_fields.extend([item for item in AllDevCmdDefineAndVersion.objects.filter(cmd_name=cmd_name).all()
if version in json.loads(item.version)])
cmd_fields.extend(AllDevCmdDefineAndVersion.objects.filter(cmd_name=cmd_name, version=version).all())
current_version_protocol_serializer = AllProtocolDefinAndVersionSerializer(current_version_protocols, many=True)
cmd_fields_serializer = AllDevCmdDefineAndVersionSerializer(cmd_fields, many=True)
# 更新 device 所使用的命令表数据
# 要先删除这,因为它使用的是 TableDevCmdNamePoll 的旧数据,更新 device 所使用的字段表数据
try:
TableAllDevCmdDefine.objects.filter(cmd_name__in=[cmd.cmd_name
for cmd in TableDevCmdNamePoll.objects.filter(protocol_name=protocol_name).all()]).delete()
......@@ -88,7 +86,8 @@ def update_device_protocol_and_cmds(protocol_name: str, version: str) -> Respons
except Exception as e:
print(e)
return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR)
# 更新 device 所使用的协议表数据
# 更新 device 所使用的指令表数据
try:
TableDevCmdNamePoll.objects.filter(protocol_name=protocol_name).delete()
TableDevCmdNamePoll.objects.bulk_create([TableDevCmdNamePoll(
......@@ -97,11 +96,15 @@ def update_device_protocol_and_cmds(protocol_name: str, version: str) -> Respons
except Exception as e:
print(e)
return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR)
# 返回数据
# 返回数据,需要返回生成之后的数据,特别是 id,因此需要重新请求一次
cmds = []
for protocol in current_version_protocol_serializer.data:
protocol['fields'] = sorted([item for item in cmd_fields_serializer.data
new_cmds = TableDevCmdNamePoll.objects.filter(protocol_name=protocol_name).all()
new_cmds_serializer = TableDevCmdNamePollSerializer(new_cmds, many=True)
new_cmd_fields = TableAllDevCmdDefine.objects.filter(cmd_name__in=[cmd.cmd_name for cmd in new_cmds]).all()
new_cmd_fields_serializer = TableAllDevCmdDefineSerializer(new_cmd_fields, many=True)
for protocol in new_cmds_serializer.data:
protocol['fields'] = sorted([item for item in new_cmd_fields_serializer.data
if item['cmd_name'] == protocol['cmd_name']],
key=lambda item: item['fieldindex'])
cmds.append(protocol)
......
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