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
def create(self, 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:
dahua_data = HrmService.sync_dahua_employee(ep=instance)
third_info = instance.third_info
third_info.update(dahua_data)
instance.third_info = third_info
instance.save()
HrmService.sync_dahua_employee(ep=instance)
return instance
def update(self, instance, validated_data):
old_photo = instance.photo
instance = super().update(instance, validated_data)
if instance.user: # 同步更新账户里的手机号
user = instance.user
user.phone = instance.phone
user.save()
if settings.DAHUA_ENABLED and dhClient:
dahua_data = 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()
HrmService.sync_dahua_employee(ep=instance, old_photo=old_photo)
return instance

View File

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

View File

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