离线刷卡记录订阅与推送处理
This commit is contained in:
parent
15111a7a9a
commit
5ebd884f18
|
@ -10,6 +10,7 @@ from apps.utils.tools import rannum, ranstr
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from dateutil import tz
|
from dateutil import tz
|
||||||
|
from threading import Thread
|
||||||
myLogger = logging.getLogger('log')
|
myLogger = logging.getLogger('log')
|
||||||
|
|
||||||
|
|
||||||
|
@ -205,14 +206,32 @@ class HrmService:
|
||||||
@classmethod
|
@classmethod
|
||||||
def swipe(cls, data: dict):
|
def swipe(cls, data: dict):
|
||||||
"""
|
"""
|
||||||
刷卡事件/用于记录考勤
|
实时刷卡事件/用于记录考勤
|
||||||
|
有身份证号的
|
||||||
"""
|
"""
|
||||||
|
id_number = data['info']['extend'].get('paperNumber', None)
|
||||||
|
if id_number:
|
||||||
|
nodeCode = data['info']['nodeCode']
|
||||||
|
swip_time = data['info']['extend']['swingTime']
|
||||||
|
e_type = data['info']['extend']['enterOrExit']
|
||||||
|
cls.swipe_next(nodeCode, swip_time, e_type, data['info']['extend'])
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def swipe_offline(cls, data:dict):
|
||||||
|
"""离线刷卡推送记录处理
|
||||||
|
"""
|
||||||
|
for i in data['infoArray']:
|
||||||
|
id_number = i.get('paperNumber', None)
|
||||||
|
if id_number:
|
||||||
|
nodeCode = i['acsChannelCode']
|
||||||
|
swip_time = i['swingTime']
|
||||||
|
e_type = i['enterOrExit']
|
||||||
|
Thread(target=cls.swipe_next, args=(nodeCode, swip_time, e_type, i), daemon=True).start()
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def swipe_next(cls, nodeCode: str, id_number: str, swip_time: str, e_type:int, detail:dict):
|
||||||
from apps.vm.models import Visit
|
from apps.vm.models import Visit
|
||||||
from apps.rpm.models import Rpj
|
from apps.rpm.models import Rpj
|
||||||
nodeCode = data['info']['nodeCode']
|
|
||||||
id_number = data['info']['extend'].get('paperNumber', None)
|
|
||||||
swip_time = data['info']['extend']['swingTime']
|
|
||||||
if id_number:
|
|
||||||
device = TDevice.objects.filter(code=nodeCode).first()
|
device = TDevice.objects.filter(code=nodeCode).first()
|
||||||
if device:
|
if device:
|
||||||
tzinfo = tz.gettz('Asia/Shanghai')
|
tzinfo = tz.gettz('Asia/Shanghai')
|
||||||
|
@ -224,7 +243,7 @@ class HrmService:
|
||||||
if device.is_clock:
|
if device.is_clock:
|
||||||
# 如果设置为关联考勤
|
# 如果设置为关联考勤
|
||||||
# myLogger.info(data['info']['extend'])
|
# myLogger.info(data['info']['extend'])
|
||||||
if data['info']['extend']['enterOrExit'] == 1:
|
if e_type == 1:
|
||||||
# 如果是进门
|
# 如果是进门
|
||||||
ep = Employee.objects.filter(id_number=id_number, type__in=["employee", "remployee"]).first()
|
ep = Employee.objects.filter(id_number=id_number, type__in=["employee", "remployee"]).first()
|
||||||
# 如果是内部/相关方员工创建上班打卡记录(更新)
|
# 如果是内部/相关方员工创建上班打卡记录(更新)
|
||||||
|
@ -235,20 +254,20 @@ class HrmService:
|
||||||
if s_time_f < cr_10.create_time:
|
if s_time_f < cr_10.create_time:
|
||||||
cr_10.create_time = s_time_f
|
cr_10.create_time = s_time_f
|
||||||
cr_10.trigger = 'door'
|
cr_10.trigger = 'door'
|
||||||
cr_10.detail = data['info']['extend']
|
cr_10.detail = detail
|
||||||
cr_10.save()
|
cr_10.save()
|
||||||
else:
|
else:
|
||||||
cr_10 = ClockRecord()
|
cr_10 = ClockRecord()
|
||||||
cr_10.type = 10
|
cr_10.type = 10
|
||||||
cr_10.employee = ep
|
cr_10.employee = ep
|
||||||
cr_10.trigger = 'door'
|
cr_10.trigger = 'door'
|
||||||
cr_10.detail = data['info']['extend']
|
cr_10.detail = detail
|
||||||
cr_10.create_time = s_time_f
|
cr_10.create_time = s_time_f
|
||||||
cr_10.save()
|
cr_10.save()
|
||||||
ep.is_atwork = True
|
ep.is_atwork = True
|
||||||
ep.last_check_time = s_time_f
|
ep.last_check_time = s_time_f
|
||||||
ep.save()
|
ep.save()
|
||||||
elif data['info']['extend']['enterOrExit'] == 2:
|
elif e_type == 2:
|
||||||
# 如果是出门
|
# 如果是出门
|
||||||
ep = Employee.objects.filter(id_number=id_number, type__in=[
|
ep = Employee.objects.filter(id_number=id_number, type__in=[
|
||||||
"employee", "remployee"]).first()
|
"employee", "remployee"]).first()
|
||||||
|
@ -260,14 +279,14 @@ class HrmService:
|
||||||
if s_time_f > cr_20.create_time:
|
if s_time_f > cr_20.create_time:
|
||||||
cr_20.create_time = s_time_f
|
cr_20.create_time = s_time_f
|
||||||
cr_20.trigger = 'door'
|
cr_20.trigger = 'door'
|
||||||
cr_20.detail = data['info']['extend']
|
cr_20.detail = detail
|
||||||
cr_20.save()
|
cr_20.save()
|
||||||
else:
|
else:
|
||||||
cr_20 = ClockRecord()
|
cr_20 = ClockRecord()
|
||||||
cr_20.type = 20
|
cr_20.type = 20
|
||||||
cr_20.employee = ep
|
cr_20.employee = ep
|
||||||
cr_20.trigger = 'door'
|
cr_20.trigger = 'door'
|
||||||
cr_20.detail = data['info']['extend']
|
cr_20.detail = detail
|
||||||
cr_20.create_time = s_time_f
|
cr_20.create_time = s_time_f
|
||||||
cr_20.save()
|
cr_20.save()
|
||||||
ep.is_atwork = False
|
ep.is_atwork = False
|
||||||
|
@ -284,7 +303,7 @@ class HrmService:
|
||||||
elif time_d > timedelta(hours=14):
|
elif time_d > timedelta(hours=14):
|
||||||
cr_20.exception_type = ClockRecord.E_TYPE_MORE
|
cr_20.exception_type = ClockRecord.E_TYPE_MORE
|
||||||
cr_20.save()
|
cr_20.save()
|
||||||
elif data['info']['extend']['enterOrExit'] == 3:
|
elif e_type == 3:
|
||||||
# 如果不确定根据时间来
|
# 如果不确定根据时间来
|
||||||
card_type = None
|
card_type = None
|
||||||
time_10_x = datetime(year=s_time_f.year, month=s_time_f.month,
|
time_10_x = datetime(year=s_time_f.year, month=s_time_f.month,
|
||||||
|
@ -310,14 +329,14 @@ class HrmService:
|
||||||
if s_time_f < cr_10.create_time:
|
if s_time_f < cr_10.create_time:
|
||||||
cr_10.create_time = s_time_f
|
cr_10.create_time = s_time_f
|
||||||
cr_10.trigger = 'panel'
|
cr_10.trigger = 'panel'
|
||||||
cr_10.detail = data['info']['extend']
|
cr_10.detail = detail
|
||||||
cr_10.save()
|
cr_10.save()
|
||||||
else:
|
else:
|
||||||
cr_10 = ClockRecord()
|
cr_10 = ClockRecord()
|
||||||
cr_10.type = 10
|
cr_10.type = 10
|
||||||
cr_10.employee = ep
|
cr_10.employee = ep
|
||||||
cr_10.trigger = 'panel'
|
cr_10.trigger = 'panel'
|
||||||
cr_10.detail = data['info']['extend']
|
cr_10.detail = detail
|
||||||
cr_10.create_time = s_time_f
|
cr_10.create_time = s_time_f
|
||||||
cr_10.save()
|
cr_10.save()
|
||||||
ep.is_atwork = True
|
ep.is_atwork = True
|
||||||
|
@ -330,14 +349,14 @@ class HrmService:
|
||||||
if s_time_f > cr_20.create_time:
|
if s_time_f > cr_20.create_time:
|
||||||
cr_20.create_time = s_time_f
|
cr_20.create_time = s_time_f
|
||||||
cr_20.trigger = 'panel'
|
cr_20.trigger = 'panel'
|
||||||
cr_20.detail = data['info']['extend']
|
cr_20.detail = detail
|
||||||
cr_20.save()
|
cr_20.save()
|
||||||
else:
|
else:
|
||||||
cr_20 = ClockRecord()
|
cr_20 = ClockRecord()
|
||||||
cr_20.type = 20
|
cr_20.type = 20
|
||||||
cr_20.employee = ep
|
cr_20.employee = ep
|
||||||
cr_20.trigger = 'panel'
|
cr_20.trigger = 'panel'
|
||||||
cr_20.detail = data['info']['extend']
|
cr_20.detail = detail
|
||||||
cr_20.create_time = s_time_f
|
cr_20.create_time = s_time_f
|
||||||
cr_20.save()
|
cr_20.save()
|
||||||
ep.is_atwork = False
|
ep.is_atwork = False
|
||||||
|
|
|
@ -343,6 +343,22 @@ class DhCommonViewSet(CreateModelMixin, CustomGenericViewSet):
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"monitor": settings.BASE_URL + '/api/third/dahua/c_swip/',
|
||||||
|
"monitorType": "url",
|
||||||
|
"events": [
|
||||||
|
{
|
||||||
|
"category": "business",
|
||||||
|
"subscribeAll": 1,
|
||||||
|
"domainSubscribe": 2,
|
||||||
|
"authorities": [
|
||||||
|
{
|
||||||
|
"types": ["cardRecord.offline"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"subsystem": {
|
"subsystem": {
|
||||||
|
@ -380,6 +396,8 @@ class DhCommonViewSet(CreateModelMixin, CustomGenericViewSet):
|
||||||
subsystem = data.get('subsystem', None)
|
subsystem = data.get('subsystem', None)
|
||||||
if method == 'alarm.msg' and subsystem == 'evo-accesscontrol':
|
if method == 'alarm.msg' and subsystem == 'evo-accesscontrol':
|
||||||
HrmService.swipe(data=data)
|
HrmService.swipe(data=data)
|
||||||
|
elif method == 'cardRecord.offline' and subsystem == 'evo-accesscontrol':
|
||||||
|
HrmService.swipe_offline(data=data)
|
||||||
return Response()
|
return Response()
|
||||||
|
|
||||||
@action(methods=['post'], detail=False,
|
@action(methods=['post'], detail=False,
|
||||||
|
|
Loading…
Reference in New Issue