rpm serializer 优化

This commit is contained in:
曹前明 2022-08-03 12:23:49 +08:00
parent 012e3e35a4
commit d39f91ccbb
6 changed files with 78 additions and 53 deletions

View File

@ -60,6 +60,7 @@ class NotifySettingViewSet(CustomModelViewSet):
queryset = NotifySetting.objects.all() queryset = NotifySetting.objects.all()
serializer_class = NotifySettingsSerializer serializer_class = NotifySettingsSerializer
filterset_fields = ['event_cate', 'obj_cate', 'post', 'user'] filterset_fields = ['event_cate', 'obj_cate', 'post', 'user']
ordering = ['sort', 'create_time']
class EventViewSet(ListModelMixin, RetrieveModelMixin, CustomGenericViewSet): class EventViewSet(ListModelMixin, RetrieveModelMixin, CustomGenericViewSet):

View File

@ -89,31 +89,55 @@ class RpjListSerializer(CustomModelSerializer):
fields = '__all__' fields = '__all__'
# class RemployeeCreateSerializer(CustomModelSerializer):
# phone = serializers.CharField(label="手机号", validators=[phone_check])
# rparty = serializers.PrimaryKeyRelatedField(queryset=Rparty.objects.all(), label='相关方ID', required=False)
# class Meta:
# model = Remployee
# fields = ['name', 'phone', 'photo', 'id_number', 'rparty']
# # model = Employee
# # exclude = EXCLUDE_FIELDS + ['is_atwork', 'last_check_time',
# # 'not_work_remark', 'third_info', 'type']
# # extra_kwargs = {
# # 'phone': {'required': True},
# # 'number': {'required': True},
# # 'photo': {'required': True},
# # 'id_number': {'required': True},
# # }
# def create(self, validated_data):
# with transaction.atomic():
# # 校验上传的证件照
# dhClient.request(**dhapis['person_img_upload'], file_path_rela=validated_data['photo'])
# return super().create(validated_data)
class RemployeeCreateSerializer(CustomModelSerializer): class RemployeeCreateSerializer(CustomModelSerializer):
phone = serializers.CharField(label="手机号", validators=[phone_check])
rparty = serializers.PrimaryKeyRelatedField(queryset=Rparty.objects.all(), label='相关方ID', required=False) rparty = serializers.PrimaryKeyRelatedField(queryset=Rparty.objects.all(), label='相关方ID', required=False)
class Meta: class Meta:
model = Remployee model = Remployee
fields = ['name', 'phone', 'photo', 'id_number', 'rparty'] fields = ['name', 'phone', 'photo', 'id_number', 'rparty']
# model = Employee
# exclude = EXCLUDE_FIELDS + ['is_atwork', 'last_check_time',
# 'not_work_remark', 'third_info', 'type']
# extra_kwargs = {
# 'phone': {'required': True},
# 'number': {'required': True},
# 'photo': {'required': True},
# 'id_number': {'required': True},
# }
def create(self, validated_data): def create(self, validated_data):
with transaction.atomic(): with transaction.atomic():
# 校验上传的证件照
dhClient.request(**dhapis['person_img_upload'], file_path_rela=validated_data['photo']) dhClient.request(**dhapis['person_img_upload'], file_path_rela=validated_data['photo'])
return super().create(validated_data) return super().create(validated_data)
class RemployeeUpdateSerializer(CustomModelSerializer):
class Meta:
model = Remployee
fields = ['phone', 'photo']
def update(self, instance, validated_data):
with transaction.atomic():
dhClient.request(**dhapis['person_img_upload'], file_path_rela=validated_data['photo'])
return super().update(instance, validated_data)
class RemployeeSerializer(CustomModelSerializer): class RemployeeSerializer(CustomModelSerializer):
rparty_name = serializers.CharField(source='rparty.name', read_only=True)
class Meta: class Meta:
model = Remployee model = Remployee

View File

@ -2,7 +2,7 @@ from threading import Thread
from apps.hrm.errors import PHONE_EXIST from apps.hrm.errors import PHONE_EXIST
from apps.hrm.models import Certificate, Employee from apps.hrm.models import Certificate, Employee
from apps.hrm.services import HrmService from apps.hrm.services import HrmService
from apps.system.models import User, UserPost from apps.system.models import Post, User, UserPost
from apps.utils.tools import ranstr from apps.utils.tools import ranstr
from apps.wf.models import Ticket, Transition from apps.wf.models import Ticket, Transition
from apps.rpm.models import Rcertificate, Rfile, Rpj, Rpjcertificate, Rpjfile, Rpjmember from apps.rpm.models import Rcertificate, Rfile, Rpj, Rpjcertificate, Rpjfile, Rpjmember
@ -47,7 +47,7 @@ def rpj_audit_end(ticket):
pass pass
else: else:
user_e = User() user_e = User()
user_e.username = 'RE_' + ranstr(10) user_e.username = 'RE_' + ranstr(6)
user_e.name = rep.name user_e.name = rep.name
user_e.phone = rep.phone user_e.phone = rep.phone
user_e.type = 'remployee' user_e.type = 'remployee'
@ -56,12 +56,13 @@ def rpj_audit_end(ticket):
user_e.save() user_e.save()
ep.user = user_e ep.user = user_e
ep.save() ep.save()
post = Post.objects.get(code='rparty')
# 账号划给部门 # 账号划给部门
UserPost.objects.get_or_create(user=ep.user, dept=rpj_dept, UserPost.objects.get_or_create(user=ep.user, dept=rpj_dept,
defaults={ defaults={
'user': ep.user, 'user': ep.user,
'dept': rpj_dept 'dept': rpj_dept,
'post': post
}) })
# 回写 # 回写
rep.employee = ep rep.employee = ep

View File

@ -2,7 +2,7 @@ from django.shortcuts import render
from apps.hrm.models import Certificate, Employee from apps.hrm.models import Certificate, Employee
from apps.hrm.serializers import CertificateCreateUpdateSerializer, CertificateSerializer, EmployeeSerializer from apps.hrm.serializers import CertificateCreateUpdateSerializer, CertificateSerializer, EmployeeSerializer
from apps.rpm.models import Rcertificate, Remployee, Rparty, Rfile, Rpjfile, Rpjmember, Rpj from apps.rpm.models import Rcertificate, Remployee, Rparty, Rfile, Rpjfile, Rpjmember, Rpj
from apps.rpm.serializers import RcertificateCreateUpdateSerializer, RcertificateSerializer, RemployeeCreateSerializer, RemployeeSerializer, RpartyAssignSerializer, RpartyCreateUpdateSerializer, RfileListSerializer, RpartySerializer, RpjListSerializer, RpjfileSerializer, RpjfileUpdateSerializer, RpjmemberCreateSerializer, RpjmemberCreatesSerializer, RpjCreateUpdateSerializer, RpjmemberSerializer, RpjmemberUpdateSerializer from apps.rpm.serializers import RcertificateCreateUpdateSerializer, RcertificateSerializer, RemployeeCreateSerializer, RemployeeSerializer, RemployeeUpdateSerializer, RpartyAssignSerializer, RpartyCreateUpdateSerializer, RfileListSerializer, RpartySerializer, RpjListSerializer, RpjfileSerializer, RpjfileUpdateSerializer, RpjmemberCreateSerializer, RpjmemberCreatesSerializer, RpjCreateUpdateSerializer, RpjmemberSerializer, RpjmemberUpdateSerializer
from apps.system.models import Dictionary, Post, User, UserPost from apps.system.models import Dictionary, Post, User, UserPost
from apps.system.serializers import UserCreateSerializer from apps.system.serializers import UserCreateSerializer
from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
@ -32,17 +32,20 @@ class RpartyViewSet(CustomModelViewSet):
""" """
obj = self.get_object() obj = self.get_object()
if obj.admin: if obj.admin:
raise ParseError('已存在管理员账号') ins = obj.admin
else:
serializer = UserCreateSerializer(data=request.data) serializer = UserCreateSerializer(data=request.data)
serializer.is_valid(raise_exception=True) serializer.is_valid(raise_exception=True)
ins = serializer.save(type='remployee') ins = serializer.save(type='remployee', password=make_password('0000'))
obj.admin = ins
obj.save()
post = Post.objects.get(code='rparty')
UserPost.objects.get_or_create(user=ins, dept=obj.dept, UserPost.objects.get_or_create(user=ins, dept=obj.dept,
defaults={ defaults={
'user': ins, 'user': ins,
'dept': obj.dept 'dept': obj.dept,
'post': post
}) })
obj.admin = ins
obj.save()
return Response() return Response()
@ -50,6 +53,7 @@ class RfileViewSet(ListModelMixin, CustomGenericViewSet):
perms_map = {'get': '*'} perms_map = {'get': '*'}
queryset = Rfile.objects.all() queryset = Rfile.objects.all()
list_serializer_class = RfileListSerializer list_serializer_class = RfileListSerializer
ordering = ['file_cate__sort', 'file_cate__create_time']
def get_queryset(self): def get_queryset(self):
queryset = super().get_queryset() queryset = super().get_queryset()
@ -59,39 +63,34 @@ class RfileViewSet(ListModelMixin, CustomGenericViewSet):
return queryset return queryset
class RemployeeViewSet(ListModelMixin, RetrieveModelMixin, CreateModelMixin, CustomDestoryModelMixin, class RemployeeViewSet(CustomModelViewSet):
CustomGenericViewSet):
queryset = Remployee.objects.all() queryset = Remployee.objects.all()
create_serializer_class = RemployeeCreateSerializer create_serializer_class = RemployeeCreateSerializer
update_serializer_class = RemployeeUpdateSerializer
serializer_class = RemployeeSerializer serializer_class = RemployeeSerializer
def get_queryset(self): def get_queryset(self):
queryset = super().get_queryset() queryset = super().get_queryset()
if self.request.user.type == 'remployee': if self.request.user.type == 'remployee':
queryset = queryset.filter(rparty=self.request.user.belong_dept) queryset = queryset.filter(rparty__dept=self.request.user.belong_dept)
return queryset return queryset
# @transaction.atomic @transaction.atomic
# def create(self, request, *args, **kwargs): def create(self, request, *args, **kwargs):
# """ """
# 添加人员 添加人员
# """ """
# user = self.request.user user = self.request.user
# serializer = self.get_serializer(data=request.data) serializer = self.get_serializer(data=request.data)
# serializer.is_valid(raise_exception=True) serializer.is_valid(raise_exception=True)
# vdata = serializer.validated_data vdata = serializer.validated_data
# if user.type == 'remployee': # 如果是相关方账号 if user.type == 'remployee': # 如果是相关方账号
# ep = serializer.save() serializer.save(rparty=user.belong_dept.rparty)
# Remployee.objects.get_or_create(employee=ep, rparty=user.belong_dept.rparty, else:
# defaults={ if 'rparty' not in vdata:
# "employee": ep, raise ParseError('未指定相关方')
# "rparty": user.belong_dept.rparty serializer.save()
# }) return Response(serializer.data, status=201)
# else:
# if 'rparty' not in vdata:
# raise ParseError('未指定相关方')
# serializer.save()
# return Response(serializer.data, status=201)
class RcertificateViewSet(CustomModelViewSet): class RcertificateViewSet(CustomModelViewSet):
@ -104,7 +103,7 @@ class RcertificateViewSet(CustomModelViewSet):
def get_queryset(self): def get_queryset(self):
queryset = super().get_queryset() queryset = super().get_queryset()
if self.request.user.type == 'remployee': if self.request.user.type == 'remployee':
queryset = queryset.filter(remployee__rparty=self.request.user.belong_dept) queryset = queryset.filter(remployee__rparty__dept=self.request.user.belong_dept)
return queryset return queryset

View File

@ -89,6 +89,7 @@ class VisitorRegisterSerializer(serializers.Serializer):
class VisitDetailSerializer(CustomModelSerializer): class VisitDetailSerializer(CustomModelSerializer):
receptionist_ = UserSimpleSerializer(source='receptionist', read_only=True) receptionist_ = UserSimpleSerializer(source='receptionist', read_only=True)
receptionist_name = serializers.CharField(source='receptionist.name', read_only=True)
visitors_ = serializers.SerializerMethodField() visitors_ = serializers.SerializerMethodField()
ticket_ = TicketSerializer(source='ticket', read_only=True) ticket_ = TicketSerializer(source='ticket', read_only=True)

View File

@ -53,8 +53,7 @@ class VisitViewSet(CustomModelViewSet):
return super().destroy(request, *args, **kwargs) return super().destroy(request, *args, **kwargs)
class VisitorViewSet(ListModelMixin, RetrieveModelMixin, CreateModelMixin, CustomDestoryModelMixin, UpdateModelMixin, class VisitorViewSet(CustomModelViewSet):
CustomGenericViewSet):
queryset = Visitor.objects.all() queryset = Visitor.objects.all()
create_serializer_class = VisitorCreateSerializer create_serializer_class = VisitorCreateSerializer
update_serializer_class = VisitorCreateSerializer update_serializer_class = VisitorCreateSerializer
@ -62,9 +61,9 @@ class VisitorViewSet(ListModelMixin, RetrieveModelMixin, CreateModelMixin, Custo
def get_queryset(self): def get_queryset(self):
user = self.request.user user = self.request.user
queryset = super().get_queryset() queryset = super().get_queryset().filter(create_by=user)
if user.type == 'visitor': # if user.type == 'visitor':
queryset = queryset.filter(create_by=user) # queryset = queryset.filter(create_by=user)
return queryset return queryset
@action(methods=['post'], detail=False, @action(methods=['post'], detail=False,