办公楼面板机打卡
This commit is contained in:
parent
2ffb5c9e3d
commit
c676106e61
|
@ -201,9 +201,8 @@ class TestViewSet(CustomGenericViewSet):
|
|||
测试刷脸打卡事件
|
||||
"""
|
||||
from apps.hrm.services import HrmService
|
||||
# data = {'id': 45688, 'category': 'alarm', 'method': 'alarm.msg', 'info': {'orgName': '河北省', 'nodeCode': '1000097$7$0$0', 'deviceCode': '1000097', 'alarmCode': '4cf3624877134431bb5c2d225ee984bf', 'nodeType': '2', 'alarmDate': 1667443695, 'alarmGrade': 2, 'isSave': False, 'unitType': 7, 'extend': {'orgName': '河北省', 'acsChannelCode': '1000097$7$0$0', 'enterOrExit': 3, 'openTypeStr': '正常关门', 'openFailedCode': 0, 'cardType': 0, 'swingTime': '2022-11-03 10:48:15', 'deviceCode': '1000097', 'deviceName': '厂区门出', 'openType': '56', 'orgCode': '001', 'openResult': 1, 'errorDetail': '', 'from': 'evo-accesscontrol', 'id': 1037679585401114624, 'acsChannelName': '厂区门出_门禁通道_1', 'cardStatus': '0', 'rfidType': 0}, 'alarmType': 56, 'channelSeq': 0, 'orgCode': '001', 'channelName': '厂区门出_门禁通道_1', 'alarmStat': 1, 'isEvent': True}, 'subsystem': 'evo-accesscontrol', 'userIds': None, 'sid': None, 'domainId': None, 'infoArray': None, 'protocol': None}
|
||||
data = {'id': 44371, 'category': 'alarm', 'method': 'alarm.msg', 'info': {'orgName': '河北省', 'nodeCode': '1000134$7$0$0', 'deviceCode': '1000134', 'alarmCode': 'f4a2912b6f4849a183c37cca878e2c98', 'alarmPicture': '6ad010cf-ce45-11ec-9715-e4246c7d1635/20221102/1/dsf_441b02c1-5a84-11ed-b23a-e4246c7d1635_30716404_30732676.jpg', 'nodeType': '2', 'alarmDate': 1667430199, 'alarmGrade': 2, 'isSave': False, 'unitType': 7, 'extend': {'deptName': '生产运行部', 'deptIdList': [26], 'acsChannelCode': '1000134$7$0$0', 'maskState': 0, 'enterOrExit': 1, 'openTypeStr': '人脸刷门', 'swingTime': '2022-11-03 07:03:19', 'deviceName': '公司门入口', 'personCode': '13383626061', 'openType': '61', 'isOverTemp': False, 'orgCode': '001', 'paperNumber': '130602198409200659', 'errorDetail': '', 'from': 'evo-accesscontrol', 'id': 1037622985747468288, 'beginTime': 1667430199000, 'acsChannelName': '公司门入口_门禁通道_1', 'cardStatus': '0', 'faceImageUrl': [
|
||||
'http://10.99.5.24:8927/6ad010cf-ce45-11ec-9715-e4246c7d1635/20221102/1/dsf_441b02c1-5a84-11ed-b23a-e4246c7d1635_30716404_30732676.jpg'], 'orgName': '河北省', 'openFailedCode': 0, 'sex': 1, 'deptId': '26', 'cardType': 0, 'curTemp': 35.0, 'deviceCode': '1000134', 'personName': '吕晓宾', 'personImg': '6ae577ee-ce45-11ec-bb54-e4246c7d1635/20220907/1/880a1f27-2e68-11ed-b073-e4246c7d1635.jpg', 'openResult': 1, 'personId': 263, 'recordImage1': '6ad010cf-ce45-11ec-9715-e4246c7d1635/20221102/1/dsf_441b02c1-5a84-11ed-b23a-e4246c7d1635_30716404_30732676.jpg', 'category': '0', 'cardNumber': '6973273125', 'rfidType': 0, 'age': 0}, 'alarmType': 61, 'channelSeq': 0, 'orgCode': '001', 'channelName': '公司门入口_门禁通道_1', 'alarmStat': 1, 'isEvent': True}, 'subsystem': 'evo-accesscontrol', 'userIds': None, 'sid': None, 'domainId': None, 'infoArray': None, 'protocol': None}
|
||||
# data = {'id': 25198, 'category': 'alarm', 'method': 'alarm.msg', 'info': {'orgName': '河北省', 'nodeCode': '1000096$7$0$0', 'deviceCode': '1000096', 'alarmCode': 'd38c98b842334581a8219b3125ca72d5', 'alarmPicture': '6ad010cf-ce45-11ec-9715-e4246c7d1635/20221123/1/dsf_43aee9e6-6ae2-11ed-9872-e4246c7d1635_42018473_42037732.jpg', 'nodeType': '2', 'alarmDate': 1669187805, 'alarmGrade': 2, 'isSave': False, 'unitType': 7, 'extend': {'deptName': '设备管理部', 'deptIdList': [25], 'acsChannelCode': '1000096$7$0$0', 'maskState': 0, 'enterOrExit': 1, 'openTypeStr': '人脸刷门', 'swingTime': '2022-11-23 15:16:45', 'deviceName': '厂区门入', 'personCode': '8jtfoa', 'openType': '61', 'isOverTemp': False, 'orgCode': '001', 'paperNumber': '61012419850304335X', 'errorDetail': '', 'from': 'evo-accesscontrol', 'id': 1044994923113353216, 'beginTime': 1669187805000, 'acsChannelName': '厂区门入_门禁通道_1', 'cardStatus': '0', 'faceImageUrl': ['http://10.99.5.24:8927/6ad010cf-ce45-11ec-9715-e4246c7d1635/20221123/1/dsf_43aee9e6-6ae2-11ed-9872-e4246c7d1635_42018473_42037732.jpg'], 'orgName': '河北省', 'openFailedCode': 0, 'sex': 1, 'deptId': '25', 'cardType': 0, 'curTemp': 35.5, 'deviceCode': '1000096', 'personName': '谭刚位', 'personImg': '6ae577ee-ce45-11ec-bb54-e4246c7d1635/20221110/1/3313679c-6092-11ed-b963-e4246c7d1635.jpg', 'openResult': 1, 'personId': 673, 'recordImage1': '6ad010cf-ce45-11ec-9715-e4246c7d1635/20221123/1/dsf_43aee9e6-6ae2-11ed-9872-e4246c7d1635_42018473_42037732.jpg', 'category': '0', 'cardNumber': '0525871590', 'rfidType': 0, 'age': 0}, 'alarmType': 61, 'channelSeq': 0, 'orgCode': '001', 'channelName': '厂区门入_门禁通道_1', 'alarmStat': 1, 'isEvent': True}, 'subsystem': 'evo-accesscontrol', 'userIds': None, 'sid': None, 'domainId': None, 'infoArray': None, 'protocol': None}
|
||||
data = {'id': 24533, 'category': 'alarm', 'method': 'alarm.msg', 'info': {'orgName': '河北省', 'nodeCode': '1002222$7$0$0', 'deviceCode': '1002222', 'alarmCode': 'a0141063f44f40469a81adeec710831b', 'nodeType': '2', 'alarmDate': 1669177165, 'alarmGrade': 2, 'isSave': False, 'unitType': 7, 'extend': {'orgName': '河北省', 'acsChannelCode': '1002222$7$0$0', 'enterOrExit': 3, 'openTypeStr': '正常关门', 'openFailedCode': 0, 'cardType': 0, 'swingTime': '2022-11-23 12:19:25', 'deviceCode': '1002222', 'deviceName': '办公楼考勤面板', 'openType': '56', 'orgCode': '001', 'openResult': 1, 'errorDetail': '', 'from': 'evo-accesscontrol', 'id': 1044950302815555584, 'acsChannelName': '办公楼考勤面板_门禁通道_1', 'cardStatus': '0', 'rfidType': 0}, 'alarmType': 56, 'channelSeq': 0, 'orgCode': '001', 'channelName': '办公楼考勤面板_门禁通道_1', 'alarmStat': 1, 'isEvent': True}, 'subsystem': 'evo-accesscontrol', 'userIds': None, 'sid': None, 'domainId': None, 'infoArray': None, 'protocol': None}
|
||||
HrmService.swipe(data=data)
|
||||
return Response()
|
||||
|
||||
|
|
|
@ -153,7 +153,8 @@ class HrmService:
|
|||
}
|
||||
_, res = dhClient.request(**dhapis['card_add'], json=json_data)
|
||||
time.sleep(6) # 等待确保生成卡片
|
||||
cls.save(ep, data={'dh_face_card': cardNumber, 'dh_face_card_start': startDate, 'dh_face_card_end': endDate})
|
||||
cls.save(ep, data={'dh_face_card': cardNumber,
|
||||
'dh_face_card_start': startDate, 'dh_face_card_end': endDate})
|
||||
return cardNumber
|
||||
|
||||
@classmethod
|
||||
|
@ -216,8 +217,10 @@ class HrmService:
|
|||
if device:
|
||||
tzinfo = tz.gettz('Asia/Shanghai')
|
||||
s_time_f = datetime.strptime(swip_time, "%Y-%m-%d %H:%M:%S").replace(tzinfo=tzinfo)
|
||||
first_time = datetime(year=s_time_f.year, month=s_time_f.month, day=s_time_f.day, hour=0, minute=0, second=0, tzinfo=tzinfo)
|
||||
end_time = datetime(year=s_time_f.year, month=s_time_f.month, day=s_time_f.day, hour=23, minute=59, second=59, tzinfo=tzinfo)
|
||||
first_time = datetime(year=s_time_f.year, month=s_time_f.month, day=s_time_f.day,
|
||||
hour=0, minute=0, second=0, tzinfo=tzinfo)
|
||||
end_time = datetime(year=s_time_f.year, month=s_time_f.month, day=s_time_f.day,
|
||||
hour=23, minute=59, second=59, tzinfo=tzinfo)
|
||||
if device.is_clock:
|
||||
# 如果设置为关联考勤
|
||||
# myLogger.info(data['info']['extend'])
|
||||
|
@ -247,24 +250,82 @@ class HrmService:
|
|||
ep.save()
|
||||
elif data['info']['extend']['enterOrExit'] == 2:
|
||||
# 如果是出门
|
||||
id_number = data['info']['extend']['paperNumber']
|
||||
if id_number:
|
||||
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()
|
||||
# 如果是内部/相关方员工创建下班打卡记录(更新)
|
||||
if ep:
|
||||
cr_20 = ClockRecord.objects.filter(
|
||||
type=20, employee=ep, create_time__gte=first_time, create_time__lte=end_time).first()
|
||||
if cr_20:
|
||||
if s_time_f > cr_20.create_time:
|
||||
cr_20.create_time = s_time_f
|
||||
cr_20.trigger = 'door'
|
||||
cr_20.detail = data['info']['extend']
|
||||
cr_20.save()
|
||||
else:
|
||||
cr_20 = ClockRecord()
|
||||
cr_20.type = 20
|
||||
cr_20.employee = ep
|
||||
cr_20.trigger = 'door'
|
||||
cr_20.detail = data['info']['extend']
|
||||
cr_20.create_time = s_time_f
|
||||
cr_20.save()
|
||||
ep.is_atwork = False
|
||||
ep.last_check_time = s_time_f
|
||||
ep.save()
|
||||
elif data['info']['extend']['enterOrExit'] == 3:
|
||||
# 如果不确定根据时间来
|
||||
card_type = None
|
||||
time_10_x = datetime(year=s_time_f.year, month=s_time_f.month,
|
||||
day=s_time_f.day, hour=4, minute=0, second=0, tzinfo=tzinfo)
|
||||
time_10_x = datetime(year=s_time_f.year, month=s_time_f.month,
|
||||
day=s_time_f.day, hour=11, minute=0, second=0, tzinfo=tzinfo)
|
||||
time_20_x = datetime(year=s_time_f.year, month=s_time_f.month,
|
||||
day=s_time_f.day, hour=16, minute=0, second=0, tzinfo=tzinfo)
|
||||
time_20_y = datetime(year=s_time_f.year, month=s_time_f.month,
|
||||
day=s_time_f.day, hour=23, minute=0, second=0, tzinfo=tzinfo)
|
||||
if time_10_x < s_time_f < time_20_x:
|
||||
card_type = 10
|
||||
elif time_20_x < s_time_f < time_20_y:
|
||||
card_type = 20
|
||||
if card_type:
|
||||
ep = Employee.objects.filter(id_number=id_number, type__in=[
|
||||
"employee", "remployee"]).first()
|
||||
# 如果是内部/相关方员工创建下班打卡记录(更新)
|
||||
if ep:
|
||||
if ep and card_type == 10:
|
||||
cr_10 = ClockRecord.objects.filter(
|
||||
type=10, employee=ep, create_time__gte=first_time, create_time__lte=end_time).first()
|
||||
if cr_10:
|
||||
if s_time_f < cr_10.create_time:
|
||||
cr_10.create_time = s_time_f
|
||||
cr_10.trigger = 'panel'
|
||||
cr_10.detail = data['info']['extend']
|
||||
cr_10.save()
|
||||
else:
|
||||
cr_10 = ClockRecord()
|
||||
cr_10.type = 10
|
||||
cr_10.employee = ep
|
||||
cr_10.trigger = 'panel'
|
||||
cr_10.detail = data['info']['extend']
|
||||
cr_10.create_time = s_time_f
|
||||
cr_10.save()
|
||||
ep.is_atwork = True
|
||||
ep.last_check_time = s_time_f
|
||||
ep.save()
|
||||
elif ep and card_type == 20:
|
||||
cr_20 = ClockRecord.objects.filter(
|
||||
type=20, employee=ep, create_time__gte=first_time, create_time__lte=end_time).first()
|
||||
if cr_20:
|
||||
if s_time_f > cr_20.create_time:
|
||||
cr_20.create_time = s_time_f
|
||||
cr_20.trigger = 'door'
|
||||
cr_20.trigger = 'panel'
|
||||
cr_20.detail = data['info']['extend']
|
||||
cr_20.save()
|
||||
else:
|
||||
cr_20 = ClockRecord()
|
||||
cr_20.type = 20
|
||||
cr_20.employee = ep
|
||||
cr_20.trigger = 'door'
|
||||
cr_20.trigger = 'panel'
|
||||
cr_20.detail = data['info']['extend']
|
||||
cr_20.create_time = s_time_f
|
||||
cr_20.save()
|
||||
|
|
|
@ -29,7 +29,7 @@ class DhClient:
|
|||
"""
|
||||
|
||||
def __init__(self, client_id=settings.DAHUA_CLIENTID,
|
||||
client_secret=settings.DAHUA_SECRET) -> None:
|
||||
client_secret=settings.DAHUA_SECRET):
|
||||
if settings.DAHUA_ENABLED:
|
||||
self.client_id = client_id
|
||||
self.client_secret = client_secret
|
||||
|
|
Loading…
Reference in New Issue