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