feat: 优化的mplogxview2
This commit is contained in:
parent
df1d097a0d
commit
2dc7243914
|
@ -183,8 +183,8 @@ class MpLogxAPIView(APIView):
|
||||||
|
|
||||||
@swagger_auto_schema(manual_parameters=[
|
@swagger_auto_schema(manual_parameters=[
|
||||||
openapi.Parameter('mpoint', openapi.IN_QUERY, description='测点ID', type=openapi.TYPE_STRING),
|
openapi.Parameter('mpoint', openapi.IN_QUERY, description='测点ID', type=openapi.TYPE_STRING),
|
||||||
openapi.Parameter('time__gte', openapi.IN_QUERY, description='开始时间', type=openapi.TYPE_STRING),
|
openapi.Parameter('timex__gte', openapi.IN_QUERY, description='开始时间', type=openapi.TYPE_STRING),
|
||||||
openapi.Parameter('time__lte', openapi.IN_QUERY, description='结束时间', type=openapi.TYPE_STRING),
|
openapi.Parameter('timex__lte', openapi.IN_QUERY, description='结束时间', type=openapi.TYPE_STRING),
|
||||||
openapi.Parameter('page', openapi.IN_QUERY, description='页码', type=openapi.TYPE_INTEGER),
|
openapi.Parameter('page', openapi.IN_QUERY, description='页码', type=openapi.TYPE_INTEGER),
|
||||||
openapi.Parameter('page_size', openapi.IN_QUERY, description='每页数量', type=openapi.TYPE_INTEGER),
|
openapi.Parameter('page_size', openapi.IN_QUERY, description='每页数量', type=openapi.TYPE_INTEGER),
|
||||||
openapi.Parameter('ordering', openapi.IN_QUERY, description='排序字段,如 -timex', type=openapi.TYPE_STRING),
|
openapi.Parameter('ordering', openapi.IN_QUERY, description='排序字段,如 -timex', type=openapi.TYPE_STRING),
|
||||||
|
@ -192,8 +192,8 @@ class MpLogxAPIView(APIView):
|
||||||
])
|
])
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
mpoint = request.query_params.get("mpoint", None)
|
mpoint = request.query_params.get("mpoint", None)
|
||||||
time__gte_str = request.query_params.get("time__gte", None)
|
timex__gte_str = request.query_params.get("timex__gte", None)
|
||||||
time__lte_str = request.query_params.get("time__lte", None)
|
timex__lte_str = request.query_params.get("timex__gte", None)
|
||||||
page = int(request.query_params.get("page", 1))
|
page = int(request.query_params.get("page", 1))
|
||||||
page_size = int(request.query_params.get("page_size", 20))
|
page_size = int(request.query_params.get("page_size", 20))
|
||||||
fields = request.query_params.get("fields", None)
|
fields = request.query_params.get("fields", None)
|
||||||
|
@ -201,17 +201,17 @@ class MpLogxAPIView(APIView):
|
||||||
raise ParseError("page, page_size must be positive")
|
raise ParseError("page, page_size must be positive")
|
||||||
ordering = request.query_params.get("ordering", "-timex") # 默认倒序
|
ordering = request.query_params.get("ordering", "-timex") # 默认倒序
|
||||||
|
|
||||||
if mpoint is None or time__gte_str is None:
|
if mpoint is None or timex__gte_str is None:
|
||||||
raise ParseError("mpoint, time__gte are required")
|
raise ParseError("mpoint, time__gte are required")
|
||||||
|
|
||||||
# 处理时间
|
# 处理时间
|
||||||
time__gte = timezone.make_aware(datetime.strptime(time__gte_str, "%Y-%m-%d %H:%M:%S"))
|
timex__gte = timezone.make_aware(datetime.strptime(timex__gte_str, "%Y-%m-%d %H:%M:%S"))
|
||||||
time__lte = timezone.make_aware(datetime.strptime(time__lte_str, "%Y-%m-%d %H:%M:%S")) if time__lte_str else timezone.now()
|
timex__lte = timezone.make_aware(datetime.strptime(timex__lte_str, "%Y-%m-%d %H:%M:%S")) if timex__lte_str else timezone.now()
|
||||||
|
|
||||||
# 统计总数
|
# 统计总数
|
||||||
count_sql = """SELECT COUNT(*) AS total_count FROM enm_mplogx
|
count_sql = """SELECT COUNT(*) AS total_count FROM enm_mplogx
|
||||||
WHERE mpoint_id=%s AND timex >= %s AND timex <= %s"""
|
WHERE mpoint_id=%s AND timex >= %s AND timex <= %s"""
|
||||||
count_data = query_one_dict(count_sql, [mpoint, time__gte, time__lte], with_time_format=True)
|
count_data = query_one_dict(count_sql, [mpoint, timex__gte, timex__lte], with_time_format=True)
|
||||||
|
|
||||||
# 排序白名单
|
# 排序白名单
|
||||||
allowed_fields = {"timex", "val_mrs", "val_int", "val_float"} # 根据表字段修改
|
allowed_fields = {"timex", "val_mrs", "val_int", "val_float"} # 根据表字段修改
|
||||||
|
@ -244,12 +244,12 @@ class MpLogxAPIView(APIView):
|
||||||
page_sql = f"""SELECT {select_clause} FROM enm_mplogx
|
page_sql = f"""SELECT {select_clause} FROM enm_mplogx
|
||||||
WHERE mpoint_id=%s AND timex >= %s AND timex <= %s
|
WHERE mpoint_id=%s AND timex >= %s AND timex <= %s
|
||||||
{order_clause}"""
|
{order_clause}"""
|
||||||
page_params = [mpoint, time__gte, time__lte]
|
page_params = [mpoint, timex__gte, timex__lte]
|
||||||
else:
|
else:
|
||||||
page_sql = f"""SELECT * FROM enm_mplogx
|
page_sql = f"""SELECT * FROM enm_mplogx
|
||||||
WHERE mpoint_id=%s AND timex >= %s AND timex <= %s
|
WHERE mpoint_id=%s AND timex >= %s AND timex <= %s
|
||||||
{order_clause} LIMIT %s OFFSET %s"""
|
{order_clause} LIMIT %s OFFSET %s"""
|
||||||
page_params = [mpoint, time__gte, time__lte, page_size, (page-1)*page_size]
|
page_params = [mpoint, timex__gte, timex__lte, page_size, (page-1)*page_size]
|
||||||
|
|
||||||
page_data = query_all_dict(page_sql, page_params, with_time_format=True)
|
page_data = query_all_dict(page_sql, page_params, with_time_format=True)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue