feat: 优化的mplogxview2

This commit is contained in:
caoqianming 2025-09-19 12:36:59 +08:00
parent df1d097a0d
commit 2dc7243914
1 changed files with 10 additions and 10 deletions

View File

@ -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)