增加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.serializers import CustomModelSerializer
|
||||||
from apps.utils.constants import EXCLUDE_FIELDS, EXCLUDE_FIELDS_BASE
|
from apps.utils.constants import EXCLUDE_FIELDS, EXCLUDE_FIELDS_BASE
|
||||||
from apps.utils.tools import check_phone_e
|
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)
|
Role, User, UserPost)
|
||||||
from rest_framework.exceptions import ParseError, ValidationError
|
from rest_framework.exceptions import ParseError, ValidationError
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
|
@ -385,7 +385,6 @@ class PostRoleCreateSerializer(CustomModelSerializer):
|
||||||
|
|
||||||
class UserInfoSerializer(CustomModelSerializer):
|
class UserInfoSerializer(CustomModelSerializer):
|
||||||
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = User
|
model = User
|
||||||
fields = ['id', 'username', 'name', 'post', 'avatar', 'belong_dept', 'type']
|
fields = ['id', 'username', 'name', 'post', 'avatar', 'belong_dept', 'type']
|
||||||
|
@ -395,3 +394,41 @@ class ApkSerializer(serializers.Serializer):
|
||||||
version = serializers.CharField(label='版本号')
|
version = serializers.CharField(label='版本号')
|
||||||
file = 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 apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
|
||||||
from server.celery import app as celery_app
|
from server.celery import app as celery_app
|
||||||
from .models import (Dept, Dictionary, DictType, File, Permission, Post, PostRole, Role, User,
|
from .models import (Dept, Dictionary, DictType, File, Permission, Post, PostRole, Role, User,
|
||||||
UserPost)
|
UserPost, MySchedule)
|
||||||
from .serializers import (ApkSerializer, DeptCreateUpdateSerializer, DeptSerializer, DictCreateUpdateSerializer,
|
from .serializers import (ApkSerializer, DeptCreateUpdateSerializer, DeptSerializer, DictCreateUpdateSerializer,
|
||||||
DictSerializer, DictTypeCreateUpdateSerializer, DictTypeSerializer,
|
DictSerializer, DictTypeCreateUpdateSerializer, DictTypeSerializer,
|
||||||
FileSerializer, PasswordChangeSerializer, PermissionCreateUpdateSerializer,
|
FileSerializer, PasswordChangeSerializer, PermissionCreateUpdateSerializer,
|
||||||
|
@ -35,7 +35,7 @@ from .serializers import (ApkSerializer, DeptCreateUpdateSerializer, DeptSeriali
|
||||||
PTaskSerializer, PTaskCreateUpdateSerializer, PTaskResultSerializer,
|
PTaskSerializer, PTaskCreateUpdateSerializer, PTaskResultSerializer,
|
||||||
RoleCreateUpdateSerializer, RoleSerializer, TaskRunSerializer,
|
RoleCreateUpdateSerializer, RoleSerializer, TaskRunSerializer,
|
||||||
UserCreateSerializer, UserListSerializer, UserPostCreateSerializer,
|
UserCreateSerializer, UserListSerializer, UserPostCreateSerializer,
|
||||||
UserPostSerializer, UserUpdateSerializer)
|
UserPostSerializer, UserUpdateSerializer, MyScheduleCreateSerializer, MyScheduleSerializer)
|
||||||
from rest_framework.viewsets import GenericViewSet
|
from rest_framework.viewsets import GenericViewSet
|
||||||
|
|
||||||
|
|
||||||
|
@ -664,3 +664,29 @@ class ApkViewSet(MyLoggingMixin, ListModelMixin, CreateModelMixin, GenericViewSe
|
||||||
from shutil import copyfile
|
from shutil import copyfile
|
||||||
copyfile(settings.BASE_DIR + vdata['file'], settings.BASE_DIR + '/media/zc_ehs.apk')
|
copyfile(settings.BASE_DIR + vdata['file'], settings.BASE_DIR + '/media/zc_ehs.apk')
|
||||||
return Response()
|
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