From 3410f5d968eaefefb334957385b796ba4b05c14a Mon Sep 17 00:00:00 2001 From: caoqianming Date: Tue, 18 Apr 2023 18:10:50 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20MySchedule=E5=88=9B=E5=BB=BA=E6=97=B6?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E8=8E=B7=E5=8F=96=E6=B1=89=E8=AF=AD=E6=8F=8F?= =?UTF-8?q?=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/system/serializers.py | 2 +- apps/system/views.py | 23 +++++++++++++++++++++-- requirements.txt | 2 +- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/apps/system/serializers.py b/apps/system/serializers.py index 5ed71bac..fa248f60 100755 --- a/apps/system/serializers.py +++ b/apps/system/serializers.py @@ -420,7 +420,7 @@ class MyScheduleCreateSerializer(CustomModelSerializer): class Meta: model = MySchedule - fields = ['name', 'type', 'interval_', 'crontab_'] + fields = ['type', 'interval_', 'crontab_'] def validate(self, attrs): if attrs['type'] == 10 and attrs.get('interval_', None): diff --git a/apps/system/views.py b/apps/system/views.py index 38917020..ac80f5f5 100755 --- a/apps/system/views.py +++ b/apps/system/views.py @@ -38,7 +38,8 @@ from .serializers import (ApkSerializer, DeptCreateUpdateSerializer, DeptSeriali UserCreateSerializer, UserListSerializer, UserPostCreateSerializer, UserPostSerializer, UserUpdateSerializer, MyScheduleCreateSerializer, MyScheduleSerializer) from rest_framework.viewsets import GenericViewSet - +from cron_descriptor import get_description +import locale # logger.info('请求成功! response_code:{};response_headers:{}; # response_body:{}'.format(response_code, response_headers, response_body[:251])) @@ -684,7 +685,23 @@ class MyScheduleViewSet(ListModelMixin, CreateModelMixin, DestroyModelMixin, Cus create_serializer_class = MyScheduleCreateSerializer queryset = MySchedule.objects.all() select_related_fields = ['interval', 'crontab'] - + period_dict = { + "days": "天", + "hours": "小时", + "minutes": "分钟", + "seconds": "秒", + "microseconds": "毫秒" + } + def get_chinese_description(self, type:str = 'interval', data: dict = {}): + """转换为汉语描述 + """ + if type == 'interval': + return f"每隔{data['every']}{data['period']}" + elif type == 'crontab': + locale.setlocale(locale.LC_ALL, 'zh_CN.UTF-8') + return get_description(f"{data['minute']} {data['hour']} {data['day_of_month']} {data['month_of_year']} {data['day_of_week']}") + return '' + @transaction.atomic def perform_create(self, serializer): vdata = serializer.validated_data @@ -694,11 +711,13 @@ class MyScheduleViewSet(ListModelMixin, CreateModelMixin, DestroyModelMixin, Cus if vdata['type'] == 10: interval, _ = IntervalSchedule.objects.get_or_create(**interval_data, defaults=interval_data) obj = MySchedule(**vdata) + obj.name = self.get_chinese_description('interval', vdata) obj.interval = interval obj.save() elif vdata['type'] == 20: crontab_data['timezone'] = 'Asia/Shanghai' crontab, _ = CrontabSchedule.objects.get_or_create(**crontab_data, defaults=crontab_data) obj = MySchedule(**vdata) + obj.name = self.get_chinese_description('crontab', vdata) obj.crontab = crontab obj.save() diff --git a/requirements.txt b/requirements.txt index 5bf903f7..27ca1466 100755 --- a/requirements.txt +++ b/requirements.txt @@ -28,4 +28,4 @@ pycryptodome==3.15.0 aliyun-python-sdk-core==2.13.36 xlwt==1.3.0 openpyxl==3.1.0 - +cron-descriptor==1.2.35