From 918df6b345e428a8372b51b6394862f0f405de45 Mon Sep 17 00:00:00 2001 From: zty Date: Thu, 5 Dec 2024 15:22:33 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9Etkx=20=E6=B5=8B?= =?UTF-8?q?=E7=82=B9=20=E8=81=9A=E5=90=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/enm/views.py | 28 ++++++++++++++++++---------- apps/wpm/services.py | 30 +++++++++++++++--------------- 2 files changed, 33 insertions(+), 25 deletions(-) diff --git a/apps/enm/views.py b/apps/enm/views.py index a3fb1232..7f48416a 100644 --- a/apps/enm/views.py +++ b/apps/enm/views.py @@ -16,8 +16,9 @@ from django.db import transaction from datetime import datetime from django.utils.timezone import localtime from apps.enm.services import get_analyse_data_mgroups_duration - - +from django.db.models import Sum +import logging +myLogger = logging.getLogger('log') class MpointViewSet(CustomModelViewSet): """ list:测点 @@ -207,15 +208,22 @@ class MpointStatViewSet(BulkCreateModelMixin, BulkDestroyModelMixin, CustomListM task = cal_mpointstats_duration.delay(data["start_time"], data["end_time"]) return Response({"task_id": task.task_id}) - # @action(methods=["get"], detail=False, perms_map={"get": "*"}) - # def group_ana(self, request, *args, **kwargs): - # """ - # 测点统计数据聚合查询 + @action(methods=["get"], detail=False, perms_map={"get": "*"}) + def group_values(self, request, *args, **kwargs): + """ + 测点统计数据聚合查询 + """ + qs = self.filter_queryset(self.get_queryset()) + group_by = request.query_params.get("group_by", None) + group_by_fields = ['mpoint'] + if group_by: + group_by_fields.append(group_by) + qs = qs.values() + qs = qs.order_by() + aggreagte_qs = qs.values(*group_by_fields).annotate(total_val = Sum('val')).values('mpoint__name', 'total_val', 'mpoint__nickname', 'mpoint__unit') + result = list(aggreagte_qs) + return Response(result) - # 测点统计数据聚合查询 - # """ - # qs = self.filter_queryset(self.get_queryset()) - # qs.annote class EnStatViewSet(CustomListModelMixin, CustomGenericViewSet): """ diff --git a/apps/wpm/services.py b/apps/wpm/services.py index 9ee4da3f..7dec615e 100644 --- a/apps/wpm/services.py +++ b/apps/wpm/services.py @@ -107,19 +107,21 @@ def make_sflogs(mgroup: Mgroup, start_date: datetime.date, end_date: datetime.da start_time -= datetime.timedelta(days=1) total_sec = (end_time - start_time).total_seconds() # 创建之前查询最后三条记录 - all_teams = SfLog.objects.filter(mgroup=mgroup, start_time__lt=start_time).order_by('-start_time').values_list('team', flat=True) - # 如果最后一条记录的team_id为空,则继续向前取三条 - from itertools import islice - # 获取前三个非空值并且列表反转 - last_teams = list(islice(all_teams, 3)) - # 甲乙丙丁的id 是根据车间划分需要处理 - last_teams_ids = transfer_id(last_teams) - new_team = get_team(team_ids=list(reversed(last_teams_ids))) - team_obj = Team.objects.filter(id=new_team).first() if new_team else None - leader_obj = getattr(team_obj, 'leader', None) - myLogger.info(f'mgrop_name: {mgroup.name},last_teams: {last_teams}, transfer_id: {last_teams_ids}, new_team: {new_team}---leader_obj---: {leader_obj}' ) - # 在创建SfLog记录之前检查SfLog记录中的team_id 如果没有则生成team_id - SfLog.objects.filter(mgroup=mgroup, shift=shift, start_time=start_time, team__isnull=True).update(team=team_obj, leader=leader_obj) + if SfLog.objects.filter(mgroup=mgroup, shift=shift, start_time=start_time, team__isnull=True): + all_teams = SfLog.objects.filter(mgroup=mgroup, start_time__lt=start_time).order_by('-start_time').values_list('team', flat=True) + # 如果最后一条记录的team_id为空,则继续向前取三条 + from itertools import islice + # 获取前三并且列表反转 + last_teams = list(islice(all_teams, 3)) + # 甲乙丙丁的id 是根据车间划分需要处理 + last_teams_ids = transfer_id(last_teams) + new_team = get_team(team_ids=list(reversed(last_teams_ids))) + team_obj = Team.objects.filter(id=new_team).first() if new_team else None + leader_obj = getattr(team_obj, 'leader', None) + myLogger.info(f'mgrop_name: {mgroup.name},last_teams: {last_teams[::-1]}, transfer_id: {last_teams_ids[::-1]}, team_name: {team_obj.name}---new_team: {new_team}---leader_obj---: {leader_obj}' ) + SfLog.objects.filter(mgroup=mgroup, shift=shift, start_time=start_time, team__isnull=True).update(team=team_obj, leader=leader_obj) + else: + pass # 创建SfLog记录 SfLog.objects.get_or_create(mgroup=mgroup, shift=shift, start_time=start_time, defaults={ "mgroup": mgroup, @@ -130,8 +132,6 @@ def make_sflogs(mgroup: Mgroup, start_date: datetime.date, end_date: datetime.da "total_sec_now": total_sec, "total_sec": total_sec, "create_by": create_by, - "team": team_obj if team_obj else None, - "leader": leader_obj, }) current_date = current_date + datetime.timedelta(days=1)