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()
serializer_class = NotifySettingsSerializer
filterset_fields = ['event_cate', 'obj_cate', 'post', 'user']
ordering = ['sort', 'create_time']
class EventViewSet(ListModelMixin, RetrieveModelMixin, CustomGenericViewSet):

View File

@ -89,31 +89,55 @@ class RpjListSerializer(CustomModelSerializer):
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):
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 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):
rparty_name = serializers.CharField(source='rparty.name', read_only=True)
class Meta:
model = Remployee

View File

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

View File

@ -2,7 +2,7 @@ from django.shortcuts import render
from apps.hrm.models import Certificate, Employee
from apps.hrm.serializers import CertificateCreateUpdateSerializer, CertificateSerializer, EmployeeSerializer
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.serializers import UserCreateSerializer
from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
@ -32,17 +32,20 @@ class RpartyViewSet(CustomModelViewSet):
"""
obj = self.get_object()
if obj.admin:
raise ParseError('已存在管理员账号')
serializer = UserCreateSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
ins = serializer.save(type='remployee')
ins = obj.admin
else:
serializer = UserCreateSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
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,
defaults={
'user': ins,
'dept': obj.dept
'dept': obj.dept,
'post': post
})
obj.admin = ins
obj.save()
return Response()
@ -50,6 +53,7 @@ class RfileViewSet(ListModelMixin, CustomGenericViewSet):
perms_map = {'get': '*'}
queryset = Rfile.objects.all()
list_serializer_class = RfileListSerializer
ordering = ['file_cate__sort', 'file_cate__create_time']
def get_queryset(self):
queryset = super().get_queryset()
@ -59,39 +63,34 @@ class RfileViewSet(ListModelMixin, CustomGenericViewSet):
return queryset
class RemployeeViewSet(ListModelMixin, RetrieveModelMixin, CreateModelMixin, CustomDestoryModelMixin,
CustomGenericViewSet):
class RemployeeViewSet(CustomModelViewSet):
queryset = Remployee.objects.all()
create_serializer_class = RemployeeCreateSerializer
update_serializer_class = RemployeeUpdateSerializer
serializer_class = RemployeeSerializer
def get_queryset(self):
queryset = super().get_queryset()
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
# @transaction.atomic
# def create(self, request, *args, **kwargs):
# """
# 添加人员
# """
# user = self.request.user
# serializer = self.get_serializer(data=request.data)
# serializer.is_valid(raise_exception=True)
# vdata = serializer.validated_data
# if user.type == 'remployee': # 如果是相关方账号
# ep = serializer.save()
# Remployee.objects.get_or_create(employee=ep, rparty=user.belong_dept.rparty,
# defaults={
# "employee": ep,
# "rparty": user.belong_dept.rparty
# })
# else:
# if 'rparty' not in vdata:
# raise ParseError('未指定相关方')
# serializer.save()
# return Response(serializer.data, status=201)
@transaction.atomic
def create(self, request, *args, **kwargs):
"""
添加人员
"""
user = self.request.user
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
vdata = serializer.validated_data
if user.type == 'remployee': # 如果是相关方账号
serializer.save(rparty=user.belong_dept.rparty)
else:
if 'rparty' not in vdata:
raise ParseError('未指定相关方')
serializer.save()
return Response(serializer.data, status=201)
class RcertificateViewSet(CustomModelViewSet):
@ -104,7 +103,7 @@ class RcertificateViewSet(CustomModelViewSet):
def get_queryset(self):
queryset = super().get_queryset()
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

View File

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

View File

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