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=[
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('time__lte', openapi.IN_QUERY, description='结束时间', type=openapi.TYPE_STRING),
openapi.Parameter('timex__gte', 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_size', openapi.IN_QUERY, description='每页数量', type=openapi.TYPE_INTEGER),
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):
mpoint = request.query_params.get("mpoint", None)
time__gte_str = request.query_params.get("time__gte", None)
time__lte_str = request.query_params.get("time__lte", None)
timex__gte_str = request.query_params.get("timex__gte", None)
timex__lte_str = request.query_params.get("timex__gte", None)
page = int(request.query_params.get("page", 1))
page_size = int(request.query_params.get("page_size", 20))
fields = request.query_params.get("fields", None)
@ -201,17 +201,17 @@ class MpLogxAPIView(APIView):
raise ParseError("page, page_size must be positive")
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")
# 处理时间
time__gte = timezone.make_aware(datetime.strptime(time__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__gte = timezone.make_aware(datetime.strptime(timex__gte_str, "%Y-%m-%d %H:%M:%S"))
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
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"} # 根据表字段修改
@ -244,12 +244,12 @@ class MpLogxAPIView(APIView):
page_sql = f"""SELECT {select_clause} FROM enm_mplogx
WHERE mpoint_id=%s AND timex >= %s AND timex <= %s
{order_clause}"""
page_params = [mpoint, time__gte, time__lte]
page_params = [mpoint, timex__gte, timex__lte]
else:
page_sql = f"""SELECT * FROM enm_mplogx
WHERE mpoint_id=%s AND timex >= %s AND timex <= %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)