diff --git a/apps/opm/services.py b/apps/opm/services.py index 352584e8..aa3ccbfb 100644 --- a/apps/opm/services.py +++ b/apps/opm/services.py @@ -81,7 +81,7 @@ def opl_audit_end(ticket: Ticket): # 授予相关工作人员区域进入权限 # worker_ep_ids = list(OplWorker.objects.filter(opl=opl).values_list('worker__id', flat=True)) # 发送通知 - phone = opl.create_by.phone + phone = opl.create_by.phone if opl.create_by else None if phone: send_sms(phone=phone, template_code=1005, template_param={'name': ticket.workflow.name}) diff --git a/apps/rpm/serializers.py b/apps/rpm/serializers.py index d97dd79e..a670e097 100644 --- a/apps/rpm/serializers.py +++ b/apps/rpm/serializers.py @@ -65,11 +65,15 @@ class RpartySimpleSerializer(CustomModelSerializer): fields = ['id', 'name'] -class RpartyAssignSerializer(serializers.Serializer): +class RpartyAssignSerializer(serializers.ModelSerializer): name = serializers.CharField(label="姓名") phone = serializers.CharField(label="手机号") username = serializers.CharField(label="账号") + class Meta: + model = Rparty + fields = ['admin', 'name', 'phone', 'username'] + class RfileListSerializer(CustomModelSerializer): rparty_ = RpartySimpleSerializer(source='rparty', read_only=True) diff --git a/apps/rpm/services.py b/apps/rpm/services.py index a3495d9d..d81b1b9a 100644 --- a/apps/rpm/services.py +++ b/apps/rpm/services.py @@ -7,6 +7,7 @@ from apps.utils.tools import ranstr from apps.wf.models import Ticket, Transition from apps.rpm.models import Remployee, Rfile, Rparty, Rpj, Rpjcertificate, Rpjfile, Rpjmember from django.contrib.auth.hashers import make_password +from rest_framework.exceptions import ParseError def sync_to_rep(ep: Employee): @@ -28,8 +29,10 @@ def sync_to_rep(ep: Employee): def bind_rpj(ticket: Ticket, transition: Transition, new_ticket_data: dict): rpj = Rpj.objects.get(id=new_ticket_data['rpj']) + if not Rpjmember.objects.filter(rpj=rpj).exists(): + raise ParseError('请至少选择一位入厂人员') ticket_data = ticket.ticket_data - ticket_data.update({'belong_dept': rpj.belong_dept.id}) + ticket_data.update({'belong_dept': rpj.belong_dept.id if rpj.belong_dept else '0'}) ticket.ticket_data = ticket_data rpj.ticket = ticket rpj.state = Rpj.RPJ_AUDIT @@ -130,6 +133,6 @@ def rpj_audit_end(ticket): rpj.state = Rpj.RPJ_ENTER rpj.save() # 发送通知? - phone = rpj.create_by.phone + phone = rpj.create_by.phone if rpj.create_by else None if phone: send_sms(phone=phone, template_code=1004, template_param={'name': '相关方项目'}) diff --git a/apps/rpm/views.py b/apps/rpm/views.py index e96d7664..77faa712 100644 --- a/apps/rpm/views.py +++ b/apps/rpm/views.py @@ -47,22 +47,23 @@ class RpartyViewSet(CustomModelViewSet): serializer = RpartyAssignSerializer(data=request.data) serializer.is_valid(raise_exception=True) vdata = serializer.validated_data - if obj.admin: - ins = obj.admin + if vdata['admin']: + ins = vdata['admin'] + elif User.objects.get_queryset(all=True).filter(Q(phone=vdata['phone']) | Q(username=vdata['username'])).exists(): + raise ParseError('该账号已存在,请直接选择') else: - if User.objects.get_queryset(all=True).filter(Q(phone=vdata['phone']) | Q(username=vdata['username'])).exists(): - raise ParseError('该账号已存在,请选择绑定') 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() + obj.admin = ins + obj.save() # 岗位设置为相关方岗位 UserPost.objects.get_or_create(user=ins, dept=obj.dept, defaults={ 'user': ins, 'dept': obj.dept, - 'post': post + 'post': post, + 'sort': 99 }) up = UserPost.objects.filter(user=ins).order_by('sort', 'create_time').first() if up: diff --git a/apps/utils/sms.py b/apps/utils/sms.py index 368c8bf6..a8be29e1 100644 --- a/apps/utils/sms.py +++ b/apps/utils/sms.py @@ -8,7 +8,7 @@ import logging myLogger = logging.getLogger('log') -def send_sms(phone: str, template_code: str, template_param: dict): +def send_sms(phone: str, template_code: int, template_param: dict): client = AcsClient(settings.XNIU_SMS_KEY, settings.XNIU_SMS_SECRET, 'default') request = CommonRequest() # 固定json diff --git a/apps/vm/services.py b/apps/vm/services.py index 1375068a..8a65654c 100644 --- a/apps/vm/services.py +++ b/apps/vm/services.py @@ -3,6 +3,7 @@ from apps.hrm.models import Employee from apps.hrm.services import HrmService from apps.utils.sms import send_sms from apps.vm.models import Visit, Visitor, Vpeople +from rest_framework.exceptions import ParseError def sync_to_visitor(ep: Employee): @@ -15,6 +16,8 @@ def sync_to_visitor(ep: Employee): def bind_visit(ticket, transition, new_ticket_data: dict): visit = Visit.objects.get(id=new_ticket_data['visit']) + if visit.level == 10 and (not Vpeople.objects.filter(visit=visit).exists()): + raise ParseError('请至少选择一位访客') visit.ticket = ticket visit.state = Visit.V_AUDIT visit.save() @@ -66,7 +69,7 @@ def visit_audit_end(ticket): visit.state = Visit.V_ENTER visit.save() # 发送通知? - phone = visit.create_by.phone + phone = visit.create_by.phone if visit.create_by else None if phone: send_sms(phone=phone, template_code=1004, template_param={'name': '访客项目'}) @@ -100,6 +103,6 @@ def visit_driver_end(ticket): visit.state = Visit.V_ENTER visit.save() # 发送通知? - phone = visit.create_by.phone + phone = visit.create_by.phone if visit.create_by else None if phone: send_sms(phone=phone, template_code=1004, template_param={'name': '拉送货入厂'})