增加myschedule
This commit is contained in:
parent
0a59af9c65
commit
0bb4595ee6
|
@ -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__'
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue