From 038e7f86cd8ce8b92b4e3039a133409b2d305a8a Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 28 Aug 2024 14:11:42 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20xscript=E7=9B=B8=E5=85=B3=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/enm/serializers.py | 7 ++++++- apps/enm/services.py | 10 +++++++++- apps/enm/tasks.py | 18 +++--------------- apps/enm/views.py | 3 ++- apps/enm/xscript.py | 9 +++++++++ 5 files changed, 29 insertions(+), 18 deletions(-) create mode 100644 apps/enm/xscript.py diff --git a/apps/enm/serializers.py b/apps/enm/serializers.py index 867a0fb8..c7fd3331 100644 --- a/apps/enm/serializers.py +++ b/apps/enm/serializers.py @@ -7,6 +7,8 @@ from rest_framework.exceptions import ParseError from django.core.cache import cache from django.db import transaction from django_celery_beat.models import PeriodicTask +from django_celery_results.models import TaskResult +from apps.system.serializers import PTaskResultSerializer import json from apps.utils.tools import CodeAnalyzer @@ -251,4 +253,7 @@ class XscriptDetailSerializer(XscriptSerializer): last_run_data = serializers.SerializerMethodField() def get_last_run_data(self, obj): - return {} \ No newline at end of file + tr = TaskResult.objects.filter(task_kwargs__contains=obj.id).order_by('-date_done').first() + if tr: + return PTaskResultSerializer(instance=tr).data + return None \ No newline at end of file diff --git a/apps/enm/services.py b/apps/enm/services.py index beef1ed8..1fddba09 100644 --- a/apps/enm/services.py +++ b/apps/enm/services.py @@ -15,10 +15,18 @@ from server.settings import get_sysconfig from apps.enm.models import EnStat from django.db.models import Sum from typing import Dict, Any -from decimal import Decimal myLogger = logging.getLogger("log") +def db_insert_mplogx_batch(rows): + for row in rows: + _, tag_val, tag_code, tag_update = row + # if '散装' in tag_code or '袋装' in tag_code: + # myLogger.info(f"db_ins_mplogx tag_val: {tag_val} tag_code: {tag_code}-------{str(type(tag_val))}") + # mpoint = Mpoint.objects.get(code=tag_code) + # tag_val = float(tag_val) + # myLogger.info(f"db_ins_mpoint_id: {mpoint.id}-------db_ins_float_val: {tag_val}") + insert_mplogx_item(tag_code, tag_val, timezone.make_aware(tag_update), {}) def translate_eval_formula(exp_str: str, year: int, month: int, day: int, hour: int): """ diff --git a/apps/enm/tasks.py b/apps/enm/tasks.py index 5cf6a811..f6ea1f5d 100644 --- a/apps/enm/tasks.py +++ b/apps/enm/tasks.py @@ -25,10 +25,8 @@ from apps.enm.services import insert_mplogx_from_king_rest_chunk, MpointCache from django.utils.timezone import localtime from apps.wpm.tasks import get_total_sec_now, cal_exp_duration_sec from apps.utils.sql import DbConnection -from apps.enm.services import insert_mplogx_item -from django.utils.timezone import make_aware -from apps.utils.thread import MyThread -from django.core.cache import cache +from apps.enm.services import db_insert_mplogx_batch +from apps.enm.xscript import main myLogger = logging.getLogger("log") @@ -42,19 +40,9 @@ def insert_mplogx_from_xscript(xscript_id): xscript = Xscript.objects.get(id=xscript_id) mcodes_list = Mpoint.objects.filter(enabled=True).values_list('code', flat=True) if mcodes_list: - exec(xscript.code) + main(xscript, mcodes_list) -def db_insert_mplogx_batch(rows): - for row in rows: - _, tag_val, tag_code, tag_update = row - # if '散装' in tag_code or '袋装' in tag_code: - # myLogger.info(f"db_ins_mplogx tag_val: {tag_val} tag_code: {tag_code}-------{str(type(tag_val))}") - # mpoint = Mpoint.objects.get(code=tag_code) - # tag_val = float(tag_val) - # myLogger.info(f"db_ins_mpoint_id: {mpoint.id}-------db_ins_float_val: {tag_val}") - insert_mplogx_item(tag_code, tag_val, make_aware(tag_update), {}) - @shared_task(base=CustomTask) def db_insert_mplogx(limit:bool=True): """ diff --git a/apps/enm/views.py b/apps/enm/views.py index c9d6ceb3..6552d645 100644 --- a/apps/enm/views.py +++ b/apps/enm/views.py @@ -4,7 +4,7 @@ from apps.utils.viewsets import CustomModelViewSet, CustomGenericViewSet from apps.utils.mixins import BulkCreateModelMixin, BulkDestroyModelMixin, CustomListModelMixin from apps.enm.serializers import (MpointSerializer, MpLogxSerializer, MpointStatSerializer, EnStatSerializer, EnStat2Serializer, ReCalSerializer, - MpointStatCorrectSerializer, EnStatAnaSerializer, XscriptSerializer) + MpointStatCorrectSerializer, EnStatAnaSerializer, XscriptSerializer, XscriptDetailSerializer) from apps.enm.filters import MpointStatFilter, EnStatFilter, EnStat2Filter from apps.enm.tasks import cal_mpointstat_manual from rest_framework.response import Response @@ -77,6 +77,7 @@ class XscriptViewSet(CustomModelViewSet): queryset = Xscript.objects.all() serializer_class = XscriptSerializer select_related_fields = ["myschedule", "periodictask"] + retrieve_serializer_class = XscriptDetailSerializer search_fields = ['name'] @action(methods=['put'], detail=True, perms_map={'put': 'xscript.update'}) diff --git a/apps/enm/xscript.py b/apps/enm/xscript.py new file mode 100644 index 00000000..613fbf9c --- /dev/null +++ b/apps/enm/xscript.py @@ -0,0 +1,9 @@ +from django.utils import timezone +from apps.utils.sql import DbConnection +from datetime import datetime, timedelta +from apps.enm.services import db_insert_mplogx_batch +import requests + +def main(xscript, mcodes_list): + exec(xscript.code) +