ep表同步到rep表
This commit is contained in:
parent
f54b54568c
commit
13c9b98d29
|
@ -14,3 +14,7 @@ class GenerateVoiceSerializer(serializers.Serializer):
|
||||||
class TestTaskSerializer(serializers.Serializer):
|
class TestTaskSerializer(serializers.Serializer):
|
||||||
args = serializers.ListField(child=serializers.CharField(), label='列表参数', required=False, allow_null=True)
|
args = serializers.ListField(child=serializers.CharField(), label='列表参数', required=False, allow_null=True)
|
||||||
kwargs = serializers.JSONField(label="字典参数", required=False, allow_null=True)
|
kwargs = serializers.JSONField(label="字典参数", required=False, allow_null=True)
|
||||||
|
|
||||||
|
|
||||||
|
class CleanDataSerializer(serializers.Serializer):
|
||||||
|
datas = serializers.ListField(child=serializers.CharField(), label='数据分类列表', required=False, allow_null=True)
|
||||||
|
|
|
@ -4,7 +4,7 @@ from rest_framework.permissions import IsAdminUser
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.serializers import Serializer
|
from rest_framework.serializers import Serializer
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
from apps.develop.serializers import GenerateVoiceSerializer, SendSmsSerializer, TestTaskSerializer
|
from apps.develop.serializers import CleanDataSerializer, GenerateVoiceSerializer, SendSmsSerializer, TestTaskSerializer
|
||||||
from apps.develop.tasks import backup_database, backup_media, reload_web_git, reload_server_git, reload_server_only
|
from apps.develop.tasks import backup_database, backup_media, reload_web_git, reload_server_git, reload_server_only
|
||||||
from rest_framework.exceptions import APIException
|
from rest_framework.exceptions import APIException
|
||||||
from apps.system.tasks import show
|
from apps.system.tasks import show
|
||||||
|
@ -175,3 +175,33 @@ class TestViewSet(CustomGenericViewSet):
|
||||||
# rt = requests.post(url=url, json=data).text
|
# rt = requests.post(url=url, json=data).text
|
||||||
res = wxClient.send_tem_msg(data=data)
|
res = wxClient.send_tem_msg(data=data)
|
||||||
return Response(res)
|
return Response(res)
|
||||||
|
|
||||||
|
@action(methods=['post'], detail=False, serializer_class=CleanDataSerializer)
|
||||||
|
def clean_data(self, request, pk=None):
|
||||||
|
"""清空数据
|
||||||
|
|
||||||
|
清空数据
|
||||||
|
"""
|
||||||
|
datas = request.data['datas']
|
||||||
|
from apps.wf.models import Ticket
|
||||||
|
from apps.hrm.models import Employee
|
||||||
|
from apps.system.models import User, Dept
|
||||||
|
if 'visit' in datas:
|
||||||
|
# 访客
|
||||||
|
from apps.vm.models import Visit, Visitor
|
||||||
|
Visit.objects.get_queryset(all=True).delete(soft=False)
|
||||||
|
Visitor.objects.get_queryset(all=True).delete(soft=False)
|
||||||
|
|
||||||
|
Ticket.objects.get_queryset(all=True).filter(workflow__key='visit').delete(soft=False)
|
||||||
|
|
||||||
|
Employee.objects.get_queryset(all=True).filter(type='visitor').delete(soft=False)
|
||||||
|
|
||||||
|
User.objects.get_queryset(all=True).filter(type='visitor').delete(soft=False)
|
||||||
|
if 'rpm' in datas:
|
||||||
|
from apps.rpm.models import Rparty
|
||||||
|
Rparty.objects.get_queryset(all=True).delete(soft=False)
|
||||||
|
Ticket.objects.get_queryset(all=True).filter(workflow__key='rpj').delete(soft=False)
|
||||||
|
Employee.objects.get_queryset(all=True).filter(type='remployee').delete(soft=False)
|
||||||
|
User.objects.get_queryset(all=True).filter(type='remployee').delete(soft=False)
|
||||||
|
Dept.objects.get_queryset(all=True).filter(type='rparty').delete(soft=False)
|
||||||
|
return Response()
|
||||||
|
|
|
@ -67,6 +67,9 @@ class EmployeeCreateUpdateSerializer(CustomModelSerializer):
|
||||||
old_photo = instance.photo
|
old_photo = instance.photo
|
||||||
old_job_state = instance.job_state
|
old_job_state = instance.job_state
|
||||||
instance = super().update(instance, validated_data)
|
instance = super().update(instance, validated_data)
|
||||||
|
if instance.type == 'remployee':
|
||||||
|
from apps.rpm.services import sync_to_rep
|
||||||
|
sync_to_rep(instance)
|
||||||
if instance.job_state == 20 and instance.user: # 如果离职了关闭账户
|
if instance.job_state == 20 and instance.user: # 如果离职了关闭账户
|
||||||
instance.user.is_active = False
|
instance.user.is_active = False
|
||||||
instance.user.save()
|
instance.user.save()
|
||||||
|
@ -94,7 +97,7 @@ class EmployeeImproveSerializer(CustomModelSerializer):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Employee
|
model = Employee
|
||||||
fields = ['photo', 'id_number', 'email', 'gender', 'signature', 'photo_f', 'signature_f']
|
fields = ['photo', 'id_number', 'email', 'gender', 'signature', 'photo_f', 'signature_f', 'phone']
|
||||||
|
|
||||||
|
|
||||||
class ChannelAuthoritySerializer(serializers.Serializer):
|
class ChannelAuthoritySerializer(serializers.Serializer):
|
||||||
|
|
|
@ -78,7 +78,9 @@ class EmployeeViewSet(CustomModelViewSet):
|
||||||
ep = user.employee
|
ep = user.employee
|
||||||
serializer = EmployeeImproveSerializer(instance=ep, data=request.data)
|
serializer = EmployeeImproveSerializer(instance=ep, data=request.data)
|
||||||
serializer.is_valid(raise_exception=True)
|
serializer.is_valid(raise_exception=True)
|
||||||
serializer.save()
|
if ep.type == 'remployee':
|
||||||
|
from apps.rpm.services import sync_to_rep
|
||||||
|
sync_to_rep(ep)
|
||||||
return Response()
|
return Response()
|
||||||
|
|
||||||
@action(methods=['post'], detail=True, perms_map={'post': 'employee.notworkremark'},
|
@action(methods=['post'], detail=True, perms_map={'post': 'employee.notworkremark'},
|
||||||
|
|
|
@ -4,3 +4,6 @@ from django.apps import AppConfig
|
||||||
class RpmConfig(AppConfig):
|
class RpmConfig(AppConfig):
|
||||||
default_auto_field = 'django.db.models.BigAutoField'
|
default_auto_field = 'django.db.models.BigAutoField'
|
||||||
name = 'apps.rpm'
|
name = 'apps.rpm'
|
||||||
|
|
||||||
|
def ready(self):
|
||||||
|
import apps.rpm.signals
|
|
@ -0,0 +1,23 @@
|
||||||
|
# Generated by Django 3.2.12 on 2022-08-23 08:28
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('rpm', '0002_initial'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='remployee',
|
||||||
|
name='id_number',
|
||||||
|
field=models.CharField(blank=True, max_length=100, null=True, verbose_name='身份证号'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='remployee',
|
||||||
|
name='photo',
|
||||||
|
field=models.CharField(blank=True, max_length=1000, null=True, verbose_name='证件照'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -86,8 +86,8 @@ class Remployee(CommonAModel):
|
||||||
on_delete=models.SET_NULL, null=True, blank=True)
|
on_delete=models.SET_NULL, null=True, blank=True)
|
||||||
name = models.CharField('姓名', max_length=20)
|
name = models.CharField('姓名', max_length=20)
|
||||||
phone = models.CharField('手机号', max_length=11)
|
phone = models.CharField('手机号', max_length=11)
|
||||||
photo = models.CharField('证件照', max_length=1000)
|
photo = models.CharField('证件照', max_length=1000, null=True, blank=True)
|
||||||
id_number = models.CharField('身份证号', max_length=100)
|
id_number = models.CharField('身份证号', max_length=100, null=True, blank=True)
|
||||||
rparty = models.ForeignKey(Rparty, verbose_name='所属相关方', on_delete=models.CASCADE)
|
rparty = models.ForeignKey(Rparty, verbose_name='所属相关方', on_delete=models.CASCADE)
|
||||||
rpj = models.ForeignKey(Rpj, verbose_name='最近所属相关方项目', on_delete=models.SET_NULL,
|
rpj = models.ForeignKey(Rpj, verbose_name='最近所属相关方项目', on_delete=models.SET_NULL,
|
||||||
null=True, blank=True)
|
null=True, blank=True)
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
from apps.hrm.models import Employee
|
from apps.hrm.models import Employee
|
||||||
from apps.rpm.models import Rcertificate, Remployee, Rfile, Rparty, Rpjcertificate, Rpjfile, Rpjmember, Rpj
|
from apps.rpm.models import Rcertificate, Remployee, Rfile, Rparty, Rpjcertificate, Rpjfile, Rpjmember, Rpj
|
||||||
from apps.system.models import Dept
|
from apps.system.models import Dept
|
||||||
|
from apps.system.services import sync_dahua_dept
|
||||||
from apps.utils.constants import EXCLUDE_FIELDS
|
from apps.utils.constants import EXCLUDE_FIELDS
|
||||||
from apps.utils.fields import MyFilePathField
|
from apps.utils.fields import MyFilePathField
|
||||||
from apps.utils.serializers import CustomModelSerializer
|
from apps.utils.serializers import CustomModelSerializer
|
||||||
|
@ -25,18 +26,22 @@ class RpartyCreateUpdateSerializer(CustomModelSerializer):
|
||||||
|
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
instance = super().create(validated_data)
|
instance = super().create(validated_data)
|
||||||
dept = Dept.objects.create(name=instance.name,
|
with transaction.atomic():
|
||||||
parent=instance.belong_dept, type='rparty')
|
dept = Dept.objects.create(name=instance.name,
|
||||||
|
parent=instance.belong_dept, type='rparty')
|
||||||
|
sync_dahua_dept(dept)
|
||||||
instance.dept = dept
|
instance.dept = dept
|
||||||
instance.save()
|
instance.save()
|
||||||
return instance
|
return instance
|
||||||
|
|
||||||
def update(self, instance, validated_data):
|
def update(self, instance, validated_data):
|
||||||
instance = super().update(instance, validated_data)
|
instance = super().update(instance, validated_data)
|
||||||
dept = instance.dept
|
with transaction.atomic():
|
||||||
dept.name = instance.name
|
dept = instance.dept
|
||||||
dept.parent = instance.belong_dept
|
dept.name = instance.name
|
||||||
dept.save()
|
dept.parent = instance.belong_dept # 重新规划归属部门
|
||||||
|
dept.save()
|
||||||
|
sync_dahua_dept(dept)
|
||||||
return instance
|
return instance
|
||||||
|
|
||||||
|
|
||||||
|
@ -186,7 +191,12 @@ class RpjmemberCreateSerializer(CustomModelSerializer):
|
||||||
if rpj.state != Rpj.RPJ_CREATE:
|
if rpj.state != Rpj.RPJ_CREATE:
|
||||||
raise ParseError('成员非创建状态不可新增')
|
raise ParseError('成员非创建状态不可新增')
|
||||||
rcertificates = validated_data.pop('rcertificates')
|
rcertificates = validated_data.pop('rcertificates')
|
||||||
if Rpjmember.objects.filter(remployee=validated_data['remployee'], rpj=validated_data['rpj']).exists():
|
remployee = validated_data['remployee']
|
||||||
|
if remployee.phone and remployee.photo and remployee.id_number:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
raise ParseError('该成员信息不全请补充')
|
||||||
|
if Rpjmember.objects.filter(remployee=remployee, rpj=validated_data['rpj']).exists():
|
||||||
raise ParseError('该成员已选择')
|
raise ParseError('该成员已选择')
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
ins = super().create(validated_data)
|
ins = super().create(validated_data)
|
||||||
|
@ -244,7 +254,8 @@ class RpjcertificateSerializer(CustomModelSerializer):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Rpjcertificate
|
model = Rpjcertificate
|
||||||
fields = ['rcertificate', 'name', 'type', 'number', 'issue_date', 'expiration_date', 'review_date', 'file', 'file_f']
|
fields = ['rcertificate', 'name', 'type', 'number', 'issue_date',
|
||||||
|
'expiration_date', 'review_date', 'file', 'file_f']
|
||||||
|
|
||||||
|
|
||||||
class RpjmemberSerializer(CustomModelSerializer):
|
class RpjmemberSerializer(CustomModelSerializer):
|
||||||
|
|
|
@ -4,10 +4,27 @@ from apps.hrm.services import HrmService
|
||||||
from apps.system.models import Post, 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 Rfile, Rpj, Rpjcertificate, Rpjfile, Rpjmember
|
from apps.rpm.models import Remployee, Rfile, Rparty, Rpj, Rpjcertificate, Rpjfile, Rpjmember
|
||||||
from django.contrib.auth.hashers import make_password
|
from django.contrib.auth.hashers import make_password
|
||||||
|
|
||||||
|
|
||||||
|
def sync_to_rep(ep: Employee):
|
||||||
|
# 个人信息完善时同步到rep表
|
||||||
|
Remployee.objects.filter(employee=ep).update(name=ep.name, phone=ep.phone, id_number=ep.id_number, photo=ep.photo)
|
||||||
|
if ep.user:
|
||||||
|
rps = Rparty.objects.filter(admin=ep.user)
|
||||||
|
# 如果是管理员账户
|
||||||
|
for i in rps:
|
||||||
|
Remployee.objects.get_or_create(employee=ep, defaults={
|
||||||
|
'employee': ep,
|
||||||
|
'name': ep.name,
|
||||||
|
'phone': ep.phone,
|
||||||
|
'id_number': ep.id_number,
|
||||||
|
'photo': ep.photo,
|
||||||
|
'rparty': i
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
def bind_rpj(ticket: Ticket, transition: Transition, new_ticket_data: dict):
|
def bind_rpj(ticket: Ticket, transition: Transition, new_ticket_data: dict):
|
||||||
rpj = Rpj.objects.get(id=new_ticket_data['rpj'])
|
rpj = Rpj.objects.get(id=new_ticket_data['rpj'])
|
||||||
# ticket_data = ticket.ticket_data
|
# ticket_data = ticket.ticket_data
|
||||||
|
@ -29,6 +46,7 @@ def rpj_audit_end(ticket):
|
||||||
# 更新入厂项目人员库
|
# 更新入厂项目人员库
|
||||||
for i in Rpjmember.objects.filter(rpj=rpj):
|
for i in Rpjmember.objects.filter(rpj=rpj):
|
||||||
rep = i.remployee
|
rep = i.remployee
|
||||||
|
# 尝试找到人员
|
||||||
ep = Employee.objects.filter(id_number=rep.id_number).first()
|
ep = Employee.objects.filter(id_number=rep.id_number).first()
|
||||||
if ep:
|
if ep:
|
||||||
pass
|
pass
|
||||||
|
@ -53,6 +71,7 @@ def rpj_audit_end(ticket):
|
||||||
user_e.type = 'remployee'
|
user_e.type = 'remployee'
|
||||||
user_e.password = make_password('0000')
|
user_e.password = make_password('0000')
|
||||||
user_e.belong_dept = rpj_dept
|
user_e.belong_dept = rpj_dept
|
||||||
|
user_e.post = post
|
||||||
user_e.save()
|
user_e.save()
|
||||||
ep.user = user_e
|
ep.user = user_e
|
||||||
ep.save()
|
ep.save()
|
||||||
|
@ -76,6 +95,7 @@ def rpj_audit_end(ticket):
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
ct = Certificate()
|
ct = Certificate()
|
||||||
|
ct.employee = i.rpj_member.remployee.employee
|
||||||
ct.name = i.name
|
ct.name = i.name
|
||||||
ct.number = i.number
|
ct.number = i.number
|
||||||
ct.type = i.type
|
ct.type = i.type
|
||||||
|
@ -83,7 +103,6 @@ def rpj_audit_end(ticket):
|
||||||
ct.expiration_date = i.expiration_date
|
ct.expiration_date = i.expiration_date
|
||||||
ct.review_date = i.review_date
|
ct.review_date = i.review_date
|
||||||
ct.file = i.file
|
ct.file = i.file
|
||||||
ct.employee = i.rpj_member.remployee.employee
|
|
||||||
ct.save()
|
ct.save()
|
||||||
# 更新相关方资料库后续可从资料库里选择
|
# 更新相关方资料库后续可从资料库里选择
|
||||||
for i in Rpjfile.objects.filter(rpj=rpj):
|
for i in Rpjfile.objects.filter(rpj=rpj):
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
from django.db.models.signals import post_save
|
||||||
|
from django.dispatch import receiver
|
||||||
|
from apps.hrm.models import Employee
|
||||||
|
from apps.rpm.models import Remployee, Rparty
|
||||||
|
|
||||||
|
|
||||||
|
# @receiver(post_save, sender=Employee)
|
||||||
|
# def update_remployee(sender, instance, created, **kwargs):
|
||||||
|
# if instance.user and instance.type == 'remployee':
|
||||||
|
# if created
|
||||||
|
# reps = Remployee.objects.filter(employee=instance)
|
||||||
|
# reps.update(name=instance.name, phone=instance.phone, id_number=instance.id_number, photo=instance.photo)
|
|
@ -6,6 +6,7 @@ from apps.rpm.serializers import (RcertificateCreateUpdateSerializer,
|
||||||
RfileListSerializer, RpartySerializer, RpjListSerializer, RpjfileSerializer,
|
RfileListSerializer, RpartySerializer, RpjListSerializer, RpjfileSerializer,
|
||||||
RpjfileUpdateSerializer, RpjmemberCreateSerializer,
|
RpjfileUpdateSerializer, RpjmemberCreateSerializer,
|
||||||
RpjCreateUpdateSerializer, RpjmemberSerializer, RpjmemberUpdateSerializer)
|
RpjCreateUpdateSerializer, RpjmemberSerializer, RpjmemberUpdateSerializer)
|
||||||
|
from apps.rpm.services import sync_to_rep
|
||||||
from apps.system.models import Dictionary, Post, UserPost
|
from apps.system.models import Dictionary, Post, 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
|
||||||
|
@ -48,6 +49,7 @@ class RpartyViewSet(CustomModelViewSet):
|
||||||
ins = serializer.save(type='remployee', password=make_password('0000'))
|
ins = serializer.save(type='remployee', password=make_password('0000'))
|
||||||
obj.admin = ins
|
obj.admin = ins
|
||||||
obj.save()
|
obj.save()
|
||||||
|
# 岗位设置为相关方岗位
|
||||||
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,
|
||||||
|
@ -60,6 +62,8 @@ class RpartyViewSet(CustomModelViewSet):
|
||||||
ins.post = up.post
|
ins.post = up.post
|
||||||
ins.update_by = self.request.user
|
ins.update_by = self.request.user
|
||||||
ins.save()
|
ins.save()
|
||||||
|
# 同步设置rep
|
||||||
|
sync_to_rep(ins.employee)
|
||||||
return Response()
|
return Response()
|
||||||
|
|
||||||
|
|
||||||
|
@ -96,6 +100,11 @@ class RemployeeViewSet(CustomModelViewSet):
|
||||||
添加人员
|
添加人员
|
||||||
"""
|
"""
|
||||||
user = self.request.user
|
user = self.request.user
|
||||||
|
# ep = user.employee
|
||||||
|
# if ep.id_number and ep.photo:
|
||||||
|
# pass
|
||||||
|
# else:
|
||||||
|
# raise ParseError('请先完善个人信息')
|
||||||
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
|
||||||
|
|
|
@ -78,7 +78,7 @@ class Role(CommonADModel):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
|
||||||
class Post(CommonAModel):
|
class Post(CommonADModel):
|
||||||
"""
|
"""
|
||||||
职位/岗位
|
职位/岗位
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -4,16 +4,18 @@ from rest_framework import serializers
|
||||||
from django_celery_results.models import TaskResult
|
from django_celery_results.models import TaskResult
|
||||||
from apps.hrm.errors import PHONE_EXIST
|
from apps.hrm.errors import PHONE_EXIST
|
||||||
from apps.system.errors import USERNAME_EXIST
|
from apps.system.errors import USERNAME_EXIST
|
||||||
|
from apps.system.services import sync_dahua_dept
|
||||||
from apps.utils.fields import MyFilePathField
|
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 .models import (Dictionary, DictType, File, Dept, Permission, Post, PostRole,
|
from .models import (Dictionary, DictType, File, Dept, Permission, Post, PostRole,
|
||||||
Role, User, UserPost)
|
Role, User, UserPost)
|
||||||
from rest_framework.exceptions import ParseError
|
from rest_framework.exceptions import ParseError, ValidationError
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from apps.third.tapis import dhapis
|
from apps.third.tapis import dhapis
|
||||||
from rest_framework.validators import UniqueValidator
|
from rest_framework.validators import UniqueValidator
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from django.db.models import Q
|
||||||
# from django_q.models import Task as QTask, Schedule as QSchedule
|
# from django_q.models import Task as QTask, Schedule as QSchedule
|
||||||
|
|
||||||
|
|
||||||
|
@ -166,6 +168,16 @@ class PostCreateUpdateSerializer(CustomModelSerializer):
|
||||||
model = Post
|
model = Post
|
||||||
exclude = EXCLUDE_FIELDS
|
exclude = EXCLUDE_FIELDS
|
||||||
|
|
||||||
|
def create(self, validated_data):
|
||||||
|
if Post.objects.filter(name=validated_data['name']).exists():
|
||||||
|
raise ValidationError('该岗位已存在')
|
||||||
|
return super().create(validated_data)
|
||||||
|
|
||||||
|
def update(self, instance, validated_data):
|
||||||
|
if Post.objects.filter(name=validated_data['name']).exclude(id=instance.id).exists():
|
||||||
|
raise ValidationError('该岗位已存在')
|
||||||
|
return super().update(instance, validated_data)
|
||||||
|
|
||||||
|
|
||||||
class PostSimpleSerializer(CustomModelSerializer):
|
class PostSimpleSerializer(CustomModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
|
@ -250,42 +262,15 @@ class DeptCreateUpdateSerializer(CustomModelSerializer):
|
||||||
|
|
||||||
@transaction.atomic
|
@transaction.atomic
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
from apps.third.clients import dhClient
|
ins = super().create(validated_data)
|
||||||
if settings.DAHUA_ENABLED:
|
sync_dahua_dept(ins)
|
||||||
data = {
|
return ins
|
||||||
"parentId": 1,
|
|
||||||
"name": validated_data['name'],
|
|
||||||
"service": "ehs"
|
|
||||||
}
|
|
||||||
_, res = dhClient.request(**dhapis['dept_create'], json=data)
|
|
||||||
third_info = {'dh_id': str(res['id'])}
|
|
||||||
validated_data['third_info'] = third_info
|
|
||||||
return super().create(validated_data)
|
|
||||||
|
|
||||||
@transaction.atomic
|
@transaction.atomic
|
||||||
def update(self, instance, validated_data):
|
def update(self, instance, validated_data):
|
||||||
from apps.third.clients import dhClient
|
ins = super().update(instance, validated_data)
|
||||||
third_info = instance.third_info
|
sync_dahua_dept(ins)
|
||||||
if settings.DAHUA_ENABLED and not third_info.get('dh_id', False):
|
return ins
|
||||||
# 如果dh_id 不存在
|
|
||||||
data = {
|
|
||||||
"parentId": 1,
|
|
||||||
"name": validated_data['name'],
|
|
||||||
"service": "ehs"
|
|
||||||
}
|
|
||||||
_, res = dhClient.request(**dhapis['dept_create'], json=data)
|
|
||||||
third_info['dh_id'] = res['id']
|
|
||||||
instance.third_info = third_info
|
|
||||||
instance.save()
|
|
||||||
elif instance.name != validated_data.get('name', ''):
|
|
||||||
if settings.DAHUA_ENABLED and instance.third_info.get('dh_id', False):
|
|
||||||
data = {
|
|
||||||
"id": instance.third_info['dh_id'],
|
|
||||||
"parentId": 1,
|
|
||||||
"name": validated_data['name']
|
|
||||||
}
|
|
||||||
dhClient.request(**dhapis['dept_update'], json=data)
|
|
||||||
return super().update(instance, validated_data)
|
|
||||||
|
|
||||||
|
|
||||||
class UserSimpleSerializer(CustomModelSerializer):
|
class UserSimpleSerializer(CustomModelSerializer):
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
from apps.system.models import Dept
|
||||||
|
from django.conf import settings
|
||||||
|
from apps.third.tapis import dhapis
|
||||||
|
|
||||||
|
|
||||||
|
def sync_dahua_dept(dept: Dept):
|
||||||
|
# 同步大华部门信息
|
||||||
|
from apps.third.clients import dhClient
|
||||||
|
third_info = dept.third_info
|
||||||
|
if settings.DAHUA_ENABLED and not third_info.get('dh_id', False):
|
||||||
|
# 如果dh_id 不存在
|
||||||
|
data = {
|
||||||
|
"parentId": 1,
|
||||||
|
"name": dept.name,
|
||||||
|
"service": "ehs"
|
||||||
|
}
|
||||||
|
_, res = dhClient.request(**dhapis['dept_create'], json=data)
|
||||||
|
third_info['dh_id'] = res['id']
|
||||||
|
dept.third_info = third_info
|
||||||
|
dept.save()
|
||||||
|
elif settings.DAHUA_ENABLED and dept.third_info.get('dh_id', False):
|
||||||
|
data = {
|
||||||
|
"id": dept.third_info['dh_id'],
|
||||||
|
"parentId": 1,
|
||||||
|
"name": dept.name
|
||||||
|
}
|
||||||
|
dhClient.request(**dhapis['dept_update'], json=data)
|
|
@ -244,7 +244,8 @@ class DhCommonViewSet(CreateModelMixin, CustomGenericViewSet):
|
||||||
|
|
||||||
大华事件处理
|
大华事件处理
|
||||||
"""
|
"""
|
||||||
data = json.loads(request.body)
|
# data = json.loads(request.body)
|
||||||
|
data = request.data
|
||||||
method = data['method']
|
method = data['method']
|
||||||
category = data['category']
|
category = data['category']
|
||||||
subsystem = data.get('subsystem', None)
|
subsystem = data.get('subsystem', None)
|
||||||
|
|
Loading…
Reference in New Issue