Skip to content

Commit b34cdd0

Browse files
committed
sql工单列表接口保持v1的数据结构
1 parent bbb07ce commit b34cdd0

File tree

8 files changed

+57
-21
lines changed

8 files changed

+57
-21
lines changed

sql/templates/rollback.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@
4242
cardView: false, //是否显示详细视图
4343
toolbar: "#toolbar", //指明自定义的toolbar
4444
detailView: true, //是否显示父子表
45+
totalField: "count",
46+
dataField: "results",
4547
//格式化详情
4648
detailFormatter: function (index, row) {
4749
var html = [];

sql/templates/sqlworkflow.html

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,8 @@ <h4 class="modal-title text-danger">工单日志</h4>
160160
detailView: false, //是否显示父子表
161161
locale: 'zh-CN', //本地化
162162
toolbar: "#toolbar", //指明自定义的toolbar
163+
totalField: "count",
164+
dataField: "results",
163165
queryParamsType: '',
164166
//请求服务数据时所传参数
165167
queryParams:
@@ -175,7 +177,7 @@ <h4 class="modal-title text-danger">工单日志</h4>
175177
}
176178
return {
177179
page: params.pageNumber,
178-
page_size: params.pageSize,
180+
size: params.pageSize,
179181
status: $("#navStatus").val(),
180182
instance_id: $("#instance_id").val(),
181183
group_id: $("#group_id").val(),

sql/utils/sql_review.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,13 @@ def can_execute(user, workflow_id):
6363
:param workflow_id:
6464
:return:
6565
"""
66+
if not any(
67+
[
68+
user.has_perm("sql.sql_execute"),
69+
user.has_perm("sql.sql_execute_for_resource_group"),
70+
]
71+
):
72+
return False
6673
result = False
6774
# 保证工单当前是可执行状态
6875
with transaction.atomic():

sql_api/api_views/sql_workflow.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
from sql.models import SqlWorkflow
2121
from sql.utils.resource_group import user_groups
2222
from sql_api.filters import SqlWorkflowFilter
23-
from sql_api.pagination import BootStrapTablePagination
23+
from sql_api.pagination import CustomizedPaginationV2
2424
from sql_api.permissions.sql_workflow import SqlWorkFlowViewPermission
2525
from sql_api.serializers.sql_workflow import (
2626
ExecuteCheckSerializer,
@@ -93,7 +93,7 @@ def post(self, request):
9393
class SqlWorkflowView(viewsets.ModelViewSet):
9494
permission_classes = [IsAuthenticated, SqlWorkFlowViewPermission]
9595
serializer_class = SqlWorkflowSerializer
96-
pagination_class = BootStrapTablePagination
96+
pagination_class = CustomizedPaginationV2
9797
filter_backends = [
9898
filters.SearchFilter,
9999
django_filters.rest_framework.DjangoFilterBackend,
@@ -114,7 +114,7 @@ def get_queryset(self):
114114
pass
115115
# 非管理员,拥有审核权限、资源组粒度执行权限的,可以查看组内所有工单
116116
elif user.has_perm("sql.sql_review") or user.has_perm(
117-
"sql.sql_execute_for_resource_group"
117+
"sql.sql_execute_for_resource_group"
118118
):
119119
filter_dict["group_id__in"] = [
120120
group.group_id for group in user_groups(user)
@@ -151,3 +151,9 @@ def rollback_sql(self, request, *args, **kwargs):
151151
def alter_run_date(self, request, *args, **kwargs):
152152
kwargs["partial"] = True
153153
return self.update(request, *args, **kwargs)
154+
155+
@action(methods=["post"], detail=True)
156+
def execute(self, request, *args, **kwargs):
157+
obj = self.get_object()
158+
data = self.get_serializer().execute(obj)
159+
return Response(data)

sql_api/filters.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from django_filters import rest_framework as filters, DateTimeFromToRangeFilter
1+
from django_filters import rest_framework as filters, DateFromToRangeFilter
22
from sql.models import Users, Instance, SqlWorkflowContent, WorkflowAudit, SqlWorkflow
33

44

@@ -47,7 +47,7 @@ class Meta:
4747

4848

4949
class SqlWorkflowFilter(filters.FilterSet):
50-
create_time = DateTimeFromToRangeFilter()
50+
create_time = DateFromToRangeFilter()
5151

5252
class Meta:
5353
model = SqlWorkflow

sql_api/pagination.py

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,9 @@ def get_paginated_response(self, data):
3131
)
3232

3333

34-
class BootStrapTablePagination(PageNumberPagination):
35-
"""
36-
自定义分页器,返回bootstrap-table需要的格式
37-
"""
34+
class CustomizedPaginationV2(PageNumberPagination):
35+
"""V2的分页器"""
3836

3937
page_size = 14
40-
41-
def get_paginated_response(self, data):
42-
return Response(
43-
OrderedDict([("total", self.page.paginator.count), ("rows", data)])
44-
)
38+
page_size_query_param = "size"
39+
max_page_size = None

sql_api/permissions/sql_workflow.py

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,19 @@
99

1010
from rest_framework import permissions
1111

12-
from sql.utils.sql_review import can_view, can_rollback
12+
from sql.utils.sql_review import can_view, can_rollback, can_execute, on_correct_time_period
1313
from sql.utils.workflow_audit import Audit
1414

1515

1616
class SqlWorkFlowViewPermission(permissions.BasePermission):
1717
"""SQL工单权限校验"""
1818

19-
message = "你无权操作当前工单"
19+
message = "你没有获取工单列表的权限"
20+
obj_message = "工单状态不正确或者你没有该工单的权限"
2021

2122
def has_permission(self, request, view):
22-
self.message = "你没有获取工单列表的权限"
23+
"""列表权限"""
24+
self.message = self.message
2325
return any(
2426
[
2527
request.user.has_perm("sql.menu_sqlworkflow"),
@@ -28,16 +30,28 @@ def has_permission(self, request, view):
2830
)
2931

3032
def has_retrieve_permission(self, request, view, obj):
31-
self.message = "你无权操作当前工单"
33+
"""详情权限"""
34+
self.message = self.obj_message
3235
return can_view(request.user, obj.id)
3336

3437
def has_rollback_sql_permission(self, request, view, obj):
35-
self.message = "工单状态不正确或者你没有该工单的权限"
38+
"""回滚语句权限"""
39+
self.message = self.obj_message
3640
return can_rollback(request.user, obj.id)
3741

3842
def has_alter_run_date_permission(self, request, view, obj):
39-
self.message = "工单状态不正确或者你没有该工单的权限"
43+
"""修改执行时间范围权限"""
44+
self.message = self.obj_message
4045
return Audit.can_review(request.user, obj.id, 2)
4146

47+
def has_execute_permission(self, request, view, obj):
48+
"""执行语句权限"""
49+
self.message = self.obj_message
50+
if not can_execute(request.user, obj.id):
51+
return False
52+
if not on_correct_time_period(obj.id):
53+
self.message = "不在可执行时间范围内,如果需要修改执行时间请重新提交工单!"
54+
return False
55+
4256
def has_object_permission(self, request, view, obj):
4357
return getattr(self, f"has_{view.action}_permission")(request, view, obj)

sql_api/serializers/sql_workflow.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,16 @@ def rollback_sql(obj):
133133
logger.error(traceback.format_exc())
134134
raise serializers.ValidationError({"errors": msg})
135135

136+
@staticmethod
137+
def execute(obj):
138+
"""执行工单"""
139+
try:
140+
query_engine = get_engine(instance=obj.instance)
141+
return query_engine.execute_workflow(workflow=obj)
142+
except Exception as msg:
143+
logger.error(traceback.format_exc())
144+
raise serializers.ValidationError({"errors": msg})
145+
136146
class Meta:
137147
model = SqlWorkflow
138148
fields = "__all__"

0 commit comments

Comments
 (0)