hrm sync_dahua 优化

This commit is contained in:
曹前明 2022-07-14 09:54:08 +08:00
parent a905a1cf4e
commit b20d9816dd
3 changed files with 38 additions and 50 deletions

View File

@ -65,31 +65,15 @@ class EmployeeCreateUpdateSerializer(EmployeeBaseSerializer):
@transaction.atomic @transaction.atomic
def create(self, validated_data): def create(self, validated_data):
instance = super().create(validated_data) instance = super().create(validated_data)
if instance.user: # 同步更新账户里的手机号
user = instance.user
user.phone = instance.phone
user.save()
if settings.DAHUA_ENABLED and dhClient: if settings.DAHUA_ENABLED and dhClient:
dahua_data = HrmService.sync_dahua_employee(ep=instance) HrmService.sync_dahua_employee(ep=instance)
third_info = instance.third_info
third_info.update(dahua_data)
instance.third_info = third_info
instance.save()
return instance return instance
def update(self, instance, validated_data): def update(self, instance, validated_data):
old_photo = instance.photo old_photo = instance.photo
instance = super().update(instance, validated_data) instance = super().update(instance, validated_data)
if instance.user: # 同步更新账户里的手机号
user = instance.user
user.phone = instance.phone
user.save()
if settings.DAHUA_ENABLED and dhClient: if settings.DAHUA_ENABLED and dhClient:
dahua_data = HrmService.sync_dahua_employee(ep=instance, old_photo=old_photo) HrmService.sync_dahua_employee(ep=instance, old_photo=old_photo)
third_info = instance.third_info
third_info.update(dahua_data)
instance.third_info = third_info
instance.save()
return instance return instance

View File

@ -101,8 +101,8 @@ class HrmService:
dh_face_card = cls.open_face_card( dh_face_card = cls.open_face_card(
ep=ep, dh_id=dh_id, departmentId=departmentId, start_time=start_time, end_time=end_time) ep=ep, dh_id=dh_id, departmentId=departmentId, start_time=start_time, end_time=end_time)
# 授予门禁权限 # 授予门禁权限
cls.door_auth(ep=ep, dh_face_card=dh_face_card) dh_dchannels = cls.door_auth(ep=ep, dh_face_card=dh_face_card)
return {'dh_id': dh_id, 'dh_photo': dh_photo, 'dh_face_card': dh_face_card} return {'dh_id': dh_id, 'dh_photo': dh_photo, 'dh_face_card': dh_face_card, 'dh_dchannels': dh_dchannels}
@classmethod @classmethod
def open_face_card(cls, ep, dh_id, departmentId, start_time, end_time): def open_face_card(cls, ep, dh_id, departmentId, start_time, end_time):
@ -155,10 +155,10 @@ class HrmService:
""" """
from apps.third.models import TDevice from apps.third.models import TDevice
# 查找可授予的门禁 # 查找可授予的门禁
door_codes = list(TDevice.objects.filter(type=TDevice.DEVICE_DCHANNEL, dh_dchannels = list(TDevice.objects.filter(type=TDevice.DEVICE_DCHANNEL,
access_list__contains=ep.type).values_list('code', flat=True)) access_list__contains=ep.type).values_list('code', flat=True))
details = [] details = []
for i in door_codes: for i in dh_dchannels:
details.append({ details.append({
"privilegeType": 1, "privilegeType": 1,
"resouceCode": i "resouceCode": i
@ -170,8 +170,8 @@ class HrmService:
"cardPrivilegeDetails": details "cardPrivilegeDetails": details
} }
dhClient.request(**dhapis['card_door_authority'], json=json_data) dhClient.request(**dhapis['card_door_authority'], json=json_data)
cls.save(ep, data={'dh_dchannels': door_codes}) cls.save(ep, data={'dh_dchannels': dh_dchannels})
return door_codes return dh_dchannels
@classmethod @classmethod
def save(cls, ep: Employee, data: dict): def save(cls, ep: Employee, data: dict):
@ -181,6 +181,9 @@ class HrmService:
ti.update(data) ti.update(data)
ep.third_info = ti ep.third_info = ti
ep.save() ep.save()
if ep.user and ep.user.phone != ep.phone:
ep.user.phone = ep.phone
ep.save()
return ep return ep
@classmethod @classmethod

View File

@ -2,6 +2,7 @@ from threading import Thread
from apps.hrm.models import Employee from apps.hrm.models import Employee
from apps.hrm.services import HrmService from apps.hrm.services import HrmService
from apps.vm.models import Visit, Vpeople from apps.vm.models import Visit, Vpeople
from apps.wf.models import Ticket
def bind_visit(ticket, transition, new_ticket_data: dict): def bind_visit(ticket, transition, new_ticket_data: dict):
@ -19,31 +20,31 @@ def get_receptionist(state, ticket, new_ticket_data, handler):
def visit_audit_end(ticket): def visit_audit_end(ticket):
visit = Visit.objects.get(ticket=ticket) if ticket.act_state == Ticket.TICKET_ACT_STATE_FINISH:
if visit.state == Visit.V_AUDIT: visit = Visit.objects.get(ticket=ticket)
visit.state = Visit.V_ENTER visit.state = Visit.V_ENTER
visit.save() visit.save()
# 更新企业访客人员库 # 更新企业访客人员库
for i in Vpeople.objects.filter(visit=visit): for i in Vpeople.objects.filter(visit=visit):
visitor = i.visitor visitor = i.visitor
if visitor.id_number and visitor.photo: if visitor.id_number and visitor.photo:
ep = Employee.objects.filter(id_number=visitor.id_number).first() ep = Employee.objects.filter(id_number=visitor.id_number).first()
else: else:
ep = Employee.objects.filter(name=visitor.name, id_number=None).first() ep = Employee.objects.filter(name=visitor.name, id_number=None).first()
if ep: if ep:
pass pass
else: else:
ep = Employee() ep = Employee()
ep.id_number = visitor.id_number ep.id_number = visitor.id_number
ep.name = visitor.name ep.name = visitor.name
ep.phone = visitor.phone ep.phone = visitor.phone
ep.photo = visitor.photo ep.photo = visitor.photo
ep.type = 'visitor' ep.type = 'visitor'
ep.belong_dept = visit.receptionist ep.belong_dept = visit.receptionist.belong_dept
ep.save() ep.save()
visitor.employee = ep visitor.employee = ep
visitor.visit = visit # 更新当前所属访客项目 visitor.visit = visit # 更新当前所属访客项目
visitor.save() visitor.save()
# 同步至大华人员库并下发人脸 # 同步至大华人员库并下发人脸
Thread(target=HrmService.sync_dahua_employee, args=(ep, '', visit.visit_time, visit.leave_time)).start() Thread(target=HrmService.sync_dahua_employee, args=(ep, '', visit.visit_time, visit.leave_time)).start()
# 发送通知? # 发送通知?