Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
V
vue_django_test
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
周田
vue_django_test
Commits
8731d629
Commit
8731d629
authored
Aug 21, 2023
by
周田
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat:修改要使用的协议版本
parent
672dab88
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
155 additions
and
53 deletions
+155
-53
services.py
protocol_version_manage/services.py
+140
-0
urls.py
protocol_version_manage/urls.py
+1
-0
utils.py
protocol_version_manage/utils.py
+0
-52
views.py
protocol_version_manage/views.py
+14
-1
xdc.sqlite
xdc.sqlite
+0
-0
No files found.
protocol_version_manage/services.py
0 → 100644
View file @
8731d629
import
json
from
device_data_op.models
import
TableAllDevCmdDefine
,
TableDevCmdNamePoll
from
device_data_op.serializers
import
TableAllDevCmdDefineSerializer
,
TableDevCmdNamePollSerializer
from
django.db.models
import
QuerySet
from
rest_framework.response
import
Response
from
rest_framework
import
status
from
.models
import
(
AllDevCmdDefineAndVersion
,
AllProtocolDefinAndVersion
,
AllProtocolVersion
,
CurrentDevVersion
)
from
.serializers
import
(
AllDevCmdDefineAndVersionSerializer
,
AllProtocolDefinAndVersionSerializer
,
AllProtocolVersionSerializer
,
CurrentDevVersionSerializer
)
INIT_VERSION
=
"init"
def
init_protocol_version_manage
(
protocol_name
:
str
)
->
None
:
"""
将协议版本信息初始化,即先将 device 已经在用的表的数据添加到数据库表中
:param protocol_name: 协议名
"""
protocol_cmds
=
TableDevCmdNamePoll
.
objects
.
filter
(
protocol_name
=
protocol_name
)
.
all
()
protocol_cmds_serializer
=
TableDevCmdNamePollSerializer
(
protocol_cmds
,
many
=
True
)
all_protocol_objects
:
list
[
AllProtocolDefinAndVersion
]
=
[]
for
protocol
in
protocol_cmds_serializer
.
data
:
protocol
[
'version'
]
=
json
.
dumps
([
INIT_VERSION
])
del
protocol
[
'id'
]
all_protocol_objects
.
append
(
AllProtocolDefinAndVersion
(
**
protocol
))
AllProtocolDefinAndVersion
.
objects
.
bulk_create
(
all_protocol_objects
)
cmd_fields
:
list
[
QuerySet
]
=
[]
for
protocol
in
protocol_cmds
:
cmd_fields
.
extend
(
TableAllDevCmdDefine
.
objects
.
filter
(
cmd_name
=
protocol
.
cmd_name
)
.
all
())
cmd_fields_serializer
=
TableAllDevCmdDefineSerializer
(
cmd_fields
,
many
=
True
)
all_cmd_fields_objects
:
list
[
AllDevCmdDefineAndVersion
]
=
[]
for
cmd_field
in
cmd_fields_serializer
.
data
:
cmd_field
[
'version'
]
=
json
.
dumps
([
INIT_VERSION
])
del
cmd_field
[
'id'
]
all_cmd_fields_objects
.
append
(
AllDevCmdDefineAndVersion
(
**
cmd_field
))
AllDevCmdDefineAndVersion
.
objects
.
bulk_create
(
all_cmd_fields_objects
)
version_path
=
{
"version"
:
INIT_VERSION
}
AllProtocolVersion
.
objects
.
create
(
protocol_name
=
protocol_name
,
version_paths
=
json
.
dumps
([
version_path
]))
CurrentDevVersion
.
objects
.
create
(
protocol_name
=
protocol_name
,
version
=
INIT_VERSION
)
def
update_device_protocol_and_cmds
(
protocol_name
:
str
,
version
:
str
)
->
Response
:
"""
根据协议名和版本号更新协议版本信息
通过协议名和版本号将 AllProtocolDefinAndVersion 和 AllDevCmdDefineAndVersion 中符合
要求的数据更新到 TableDevCmdNamePoll 和 TableAllDevCmdDefine 中
:param protocol_name: 协议名
:param version: 版本号
:return: 当前版本,协议相关的数据
"""
# 更新版本号
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
)]
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
)])
current_version_protocol_serializer
=
AllProtocolDefinAndVersionSerializer
(
current_version_protocols
,
many
=
True
)
cmd_fields_serializer
=
AllDevCmdDefineAndVersionSerializer
(
cmd_fields
,
many
=
True
)
# 更新 device 所使用的协议表数据
for
protocol
in
current_version_protocol_serializer
.
data
:
obj
,
_
=
TableDevCmdNamePoll
.
objects
.
update_or_create
(
protocol_name
=
protocol
[
'protocol_name'
],
cmd_name
=
protocol
[
'cmd_name'
],
defaults
=
{
'protocol_name'
:
protocol
[
'protocol_name'
],
'cmd_name'
:
protocol
[
'cmd_name'
],
'cmd_type'
:
protocol
[
'cmd_type'
],
'encode'
:
protocol
[
'encode'
],
'timing_cmd_cycle_period'
:
protocol
[
'timing_cmd_cycle_period'
],
'cmd_explain'
:
protocol
[
'cmd_explain'
]
}
)
if
obj
is
None
:
return
Response
(
status
=
status
.
HTTP_500_INTERNAL_SERVER_ERROR
)
# 更新 device 所使用的命令表数据
for
cmd_field
in
cmd_fields_serializer
.
data
:
obj
,
_
=
TableAllDevCmdDefine
.
objects
.
update_or_create
(
cmd_name
=
cmd_field
[
'cmd_name'
],
fieldname
=
cmd_field
[
'fieldname'
],
defaults
=
{
'cmd_name'
:
cmd_field
[
'cmd_name'
],
'cmd_type'
:
cmd_field
[
'cmd_type'
],
'fieldindex'
:
cmd_field
[
'fieldindex'
],
'fieldname'
:
cmd_field
[
'fieldname'
],
'fieldsize'
:
cmd_field
[
'fieldsize'
],
'value'
:
cmd_field
[
'value'
],
'minvalue'
:
cmd_field
[
'minvalue'
],
'maxvalue'
:
cmd_field
[
'maxvalue'
],
'datatype'
:
cmd_field
[
'datatype'
],
'lua_script_in'
:
cmd_field
[
'lua_script_in'
],
'lua_script_out'
:
cmd_field
[
'lua_script_out'
]
}
)
if
obj
is
None
:
return
Response
(
status
=
status
.
HTTP_500_INTERNAL_SERVER_ERROR
)
# 返回数据
cmds
=
[]
for
protocol
in
current_version_protocol_serializer
.
data
:
protocol
[
'fields'
]
=
sorted
([
item
for
item
in
cmd_fields_serializer
.
data
if
item
[
'cmd_name'
]
==
protocol
[
'cmd_name'
]],
key
=
lambda
item
:
item
[
'fieldindex'
])
cmds
.
append
(
protocol
)
res_data
=
{
'current_version'
:
version
,
'protocol'
:
protocol_name
,
'cmds'
:
cmds
}
return
Response
(
data
=
res_data
,
status
=
status
.
HTTP_200_OK
)
protocol_version_manage/urls.py
View file @
8731d629
...
...
@@ -5,5 +5,6 @@ from . import views
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'^all_protocol_version/$'
,
views
.
AllProtocolVersionViewSet
.
as_view
({
'get'
:
'list'
})),
]
protocol_version_manage/utils.py
deleted
100644 → 0
View file @
672dab88
import
json
from
device_data_op.models
import
TableAllDevCmdDefine
,
TableDevCmdNamePoll
from
device_data_op.serializers
import
TableAllDevCmdDefineSerializer
,
TableDevCmdNamePollSerializer
from
django.db.models
import
QuerySet
from
.models
import
(
AllDevCmdDefineAndVersion
,
AllProtocolDefinAndVersion
,
AllProtocolVersion
,
CurrentDevVersion
)
INIT_VERSION
=
"init"
def
init_protocol_version_manage
(
protocol_name
)
->
None
:
"""
将协议版本信息初始化,即先将 device 已经在用的表的数据添加到数据库表中
:param protocol_name: 协议名
"""
protocol_cmds
=
TableDevCmdNamePoll
.
objects
.
filter
(
protocol_name
=
protocol_name
)
.
all
()
protocol_cmds_serializer
=
TableDevCmdNamePollSerializer
(
protocol_cmds
,
many
=
True
)
all_protocol_objects
:
list
[
AllProtocolDefinAndVersion
]
=
[]
for
protocol
in
protocol_cmds_serializer
.
data
:
protocol
[
'version'
]
=
json
.
dumps
([
INIT_VERSION
])
del
protocol
[
'id'
]
all_protocol_objects
.
append
(
AllProtocolDefinAndVersion
(
**
protocol
))
AllProtocolDefinAndVersion
.
objects
.
bulk_create
(
all_protocol_objects
)
cmd_fields
:
list
[
QuerySet
]
=
[]
for
protocol
in
protocol_cmds
:
cmd_fields
.
extend
(
TableAllDevCmdDefine
.
objects
.
filter
(
cmd_name
=
protocol
.
cmd_name
)
.
all
())
cmd_fields_serializer
=
TableAllDevCmdDefineSerializer
(
cmd_fields
,
many
=
True
)
all_cmd_fields_objects
:
list
[
AllDevCmdDefineAndVersion
]
=
[]
for
cmd_field
in
cmd_fields_serializer
.
data
:
cmd_field
[
'version'
]
=
json
.
dumps
([
INIT_VERSION
])
del
cmd_field
[
'id'
]
all_cmd_fields_objects
.
append
(
AllDevCmdDefineAndVersion
(
**
cmd_field
))
AllDevCmdDefineAndVersion
.
objects
.
bulk_create
(
all_cmd_fields_objects
)
version_path
=
{
"version"
:
INIT_VERSION
}
AllProtocolVersion
.
objects
.
create
(
protocol_name
=
protocol_name
,
version_paths
=
json
.
dumps
([
version_path
]))
CurrentDevVersion
.
objects
.
create
(
protocol_name
=
protocol_name
,
version
=
INIT_VERSION
)
protocol_version_manage/views.py
View file @
8731d629
...
...
@@ -9,11 +9,14 @@ from .models import (AllDevCmdDefineAndVersion, AllProtocolDefinAndVersion,
AllProtocolVersion
,
CurrentDevVersion
)
from
.serializers
import
(
AllDevCmdDefineAndVersionSerializer
,
AllProtocolDefinAndVersionSerializer
,
AllProtocolVersionSerializer
,
CurrentDevVersionSerializer
)
from
.
utils
import
init_protocol_version_manage
from
.
services
import
init_protocol_version_manage
,
update_device_protocol_and_cmds
@api_view
([
'POST'
])
def
init
(
request
):
"""
初始化协议版本信息(用的很少,大概)
"""
protocol_name
=
request
.
data
.
get
(
'protocol_name'
)
assert
protocol_name
is
not
None
,
Response
(
status
=
status
.
HTTP_400_BAD_REQUEST
)
...
...
@@ -36,6 +39,16 @@ def init(request):
return
Response
(
data
=
res_data
,
status
=
status
.
HTTP_200_OK
)
@api_view
([
'POST'
])
def
change_protocol_version
(
request
):
version
=
request
.
data
.
get
(
'version'
)
protocol_name
=
request
.
data
.
get
(
'protocol_name'
)
assert
protocol_name
is
not
None
and
version
is
not
None
,
Response
(
status
=
status
.
HTTP_400_BAD_REQUEST
)
return
update_device_protocol_and_cmds
(
protocol_name
,
version
)
class
AllProtocolVersionViewSet
(
GenericViewSet
,
ListModelMixin
):
queryset
=
AllProtocolVersion
.
objects
.
all
()
serializer_class
=
AllProtocolVersionSerializer
xdc.sqlite
View file @
8731d629
No preview for this file type
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment