增加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.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']
@ -394,4 +393,42 @@ class UserInfoSerializer(CustomModelSerializer):
class ApkSerializer(serializers.Serializer): 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__'

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 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
@ -663,4 +663,30 @@ class ApkViewSet(MyLoggingMixin, ListModelMixin, CreateModelMixin, GenericViewSe
config.write(f) config.write(f)
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()