增加myschedule

This commit is contained in:
caoqianming 2023-03-03 10:02:41 +08:00
parent 0a59af9c65
commit 0bb4595ee6
2 changed files with 69 additions and 6 deletions

View File

@ -9,7 +9,7 @@ from apps.utils.fields import MyFilePathField
from apps.utils.serializers import CustomModelSerializer
from apps.utils.constants import EXCLUDE_FIELDS, EXCLUDE_FIELDS_BASE
from apps.utils.tools import check_phone_e
from .models import (Dictionary, DictType, File, Dept, Permission, Post, PostRole,
from .models import (Dictionary, DictType, File, Dept, MySchedule, Permission, Post, PostRole,
Role, User, UserPost)
from rest_framework.exceptions import ParseError, ValidationError
from django.db import transaction
@ -385,7 +385,6 @@ class PostRoleCreateSerializer(CustomModelSerializer):
class UserInfoSerializer(CustomModelSerializer):
class Meta:
model = User
fields = ['id', 'username', 'name', 'post', 'avatar', 'belong_dept', 'type']
@ -395,3 +394,41 @@ class ApkSerializer(serializers.Serializer):
version = serializers.CharField(label='版本号')
file = serializers.CharField(label='文件地址')
class IntervalScheduleSerializer(serializers.ModelSerializer):
class Meta:
model = IntervalSchedule
fields = '__all__'
class CrontabScheduleSerializer(serializers.ModelSerializer):
class Meta:
model = CrontabSchedule
exclude = ['timezone']
class MyScheduleCreateSerializer(CustomModelSerializer):
interval_ = IntervalScheduleSerializer(allow_null=True, required=False)
crontab_ = CrontabScheduleSerializer(allow_null=True, required=False)
class Meta:
model = MySchedule
fields = ['name', 'type', 'interval_', 'crontab_']
def validate(self, attrs):
if attrs['type'] == 10 and attrs.get('interval_', None):
pass
elif attrs['type'] == 20 and attrs.get('crontab_', None):
pass
else:
raise ValidationError('信息有误')
return super().validate(attrs)
class MyScheduleSerializer(CustomModelSerializer):
interval_ = IntervalScheduleSerializer(source='interval', read_only=True)
crontab = CrontabScheduleSerializer(source='crontab', read_only=True)
class Meta:
model = MySchedule
fields = '__all__'

View File

@ -26,7 +26,7 @@ from apps.utils.permission import ALL_PERMS, get_user_perms_map
from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
from server.celery import app as celery_app
from .models import (Dept, Dictionary, DictType, File, Permission, Post, PostRole, Role, User,
UserPost)
UserPost, MySchedule)
from .serializers import (ApkSerializer, DeptCreateUpdateSerializer, DeptSerializer, DictCreateUpdateSerializer,
DictSerializer, DictTypeCreateUpdateSerializer, DictTypeSerializer,
FileSerializer, PasswordChangeSerializer, PermissionCreateUpdateSerializer,
@ -35,7 +35,7 @@ from .serializers import (ApkSerializer, DeptCreateUpdateSerializer, DeptSeriali
PTaskSerializer, PTaskCreateUpdateSerializer, PTaskResultSerializer,
RoleCreateUpdateSerializer, RoleSerializer, TaskRunSerializer,
UserCreateSerializer, UserListSerializer, UserPostCreateSerializer,
UserPostSerializer, UserUpdateSerializer)
UserPostSerializer, UserUpdateSerializer, MyScheduleCreateSerializer, MyScheduleSerializer)
from rest_framework.viewsets import GenericViewSet
@ -664,3 +664,29 @@ class ApkViewSet(MyLoggingMixin, ListModelMixin, CreateModelMixin, GenericViewSe
from shutil import copyfile
copyfile(settings.BASE_DIR + vdata['file'], settings.BASE_DIR + '/media/zc_ehs.apk')
return Response()
class MyScheduleViewSet(ListModelMixin, CreateModelMixin, DestroyModelMixin, CustomGenericViewSet):
perms_map = {'get': '*', 'post': 'myschedule.create', 'delete': 'myschedule.delete'}
serializer_class = MyScheduleSerializer
create_serializer_class = MyScheduleCreateSerializer
queryset = MySchedule.objects.all()
select_related_fields = ['interval', 'crontab']
@transaction.atomic
def perform_create(self, serializer):
vdata = serializer.validated_data
vdata['create_by'] = self.request.user #不可少
interval_data = vdata.pop('interval_', None)
crontab_data = vdata.pop('crontab_', None)
if vdata['type'] == 10:
interval, _ = IntervalSchedule.objects.get_or_create(**interval_data, defaults=interval_data)
obj = MySchedule(**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.crontab = crontab
obj.save()