刷卡事件生成考勤及修改访客和相关方项目

This commit is contained in:
曹前明 2022-08-24 10:37:58 +08:00
parent 93a4fa7a8e
commit 1c5e7f3366
3 changed files with 64 additions and 55 deletions

View File

@ -122,7 +122,6 @@ class HrmService:
"endDate": endDate, "endDate": endDate,
"departmentId": departmentId, "departmentId": departmentId,
} }
time.sleep(1)
_, res = dhClient.request(**dhapis['card_update'], json=json_data) _, res = dhClient.request(**dhapis['card_update'], json=json_data)
return cardNumber return cardNumber
else: else:
@ -147,8 +146,8 @@ class HrmService:
"startDate": startDate, "startDate": startDate,
"endDate": endDate "endDate": endDate
} }
time.sleep(1)
_, res = dhClient.request(**dhapis['card_add'], json=json_data) _, res = dhClient.request(**dhapis['card_add'], json=json_data)
time.sleep(1)
cls.save(ep, data={'dh_face_card': cardNumber}) cls.save(ep, data={'dh_face_card': cardNumber})
return cardNumber return cardNumber
@ -195,59 +194,67 @@ class HrmService:
""" """
刷卡事件/用于记录考勤 刷卡事件/用于记录考勤
""" """
deviceCode = data['infoArray']['deviceCode'] from apps.vm.models import Visit
device = TDevice.objects.filter(code=deviceCode).first() from apps.rpm.models import Rpj
if device and device.is_clock: nodeCode = data['info']['nodeCode']
# 如果设置为关联考勤 device = TDevice.objects.filter(code=nodeCode).first()
if data['info']['extend']['enterOrExit'] == "1": if device:
# 如果是进门 id_number = data['info']['extend'].get('paperNumber', None)
id_number = data['info']['extend']['paperNumber'] if id_number: # 如果有身份证号
if id_number: # 先进行相关方/访客项目更新
ep = Employee.objects.filter(id_number=id_number, type="employee").first() Visit.objects.filter(type=Visit.V_ENTER, visitors__employee__id_number=id_number).update(
# 如果是内部员工创建上班打卡记录(更新) type=Visit.V_WORKING)
if ep and ep.is_atwork is False: Rpj.objects.filter(type=Rpj.RPJ_ENTER, remployees__employee__id_number=id_number).update(
now = timezone.now() type=Rpj.RPJ_WORKING)
cr_10 = ClockRecord.objects.filter( if device.is_clock:
type=10, employee=ep, create_time__year=now.year, create_time__month=now.month, create_time__day=now.day).first() # 如果设置为关联考勤
if cr_10: if data['info']['extend']['enterOrExit'] == "1":
if now < cr_10.create_by: # 如果是进门
cr_10.create_by = now ep = Employee.objects.filter(id_number=id_number, type__in=["employee", "remployee"]).first()
# 如果是内部/相关方员工创建上班打卡记录(更新)
if ep and ep.is_atwork is False:
now = timezone.now()
cr_10 = ClockRecord.objects.filter(
type=10, employee=ep, create_time__year=now.year, create_time__month=now.month, create_time__day=now.day).first()
if cr_10:
if now < cr_10.create_by:
cr_10.create_by = now
cr_10.trigger = 'door'
cr_10.detail = data['info']['extend']
cr_10.save()
else:
cr_10 = ClockRecord()
cr_10.type = 10
cr_10.employee = ep
cr_10.trigger = 'door' cr_10.trigger = 'door'
cr_10.detail = data['info']['extend'] cr_10.detail = data['info']['extend']
cr_10.save() cr_10.save()
else: ep.is_atwork = True
cr_10 = ClockRecord() ep.last_check_time = now
cr_10.type = 10 ep.save()
cr_10.employee = ep elif data['info']['extend']['enterOrExit'] == "2":
cr_10.trigger = 'door' # 如果是出门
cr_10.detail = data['info']['extend'] id_number = data['info']['extend']['paperNumber']
cr_10.save() if id_number:
ep.is_atwork = True ep = Employee.objects.filter(id_number=id_number, type="employee").first()
ep.last_check_time = now # 如果是内部/相关方员工创建下班打卡记录(更新)
ep.save() if ep and ep.is_atwork:
elif data['info']['extend']['enterOrExit'] == "2": now = timezone.now()
# 如果是出门 cr_20 = ClockRecord.objects.filter(
id_number = data['info']['extend']['paperNumber'] type=20, employee=ep, create_time__year=now.year, create_time__month=now.month, create_time__day=now.day).first()
if id_number: if cr_20:
ep = Employee.objects.filter(id_number=id_number, type="employee").first() if now > cr_20.create_by:
# 如果是内部员工创建下班打卡记录(更新) cr_20.create_by = now
if ep and ep.is_atwork: cr_20.trigger = 'door'
now = timezone.now() cr_20.detail = data['info']['extend']
cr_20 = ClockRecord.objects.filter( cr_20.save()
type=20, employee=ep, create_time__year=now.year, create_time__month=now.month, create_time__day=now.day).first() else:
if cr_20: cr_20 = ClockRecord()
if now > cr_20.create_by: cr_20.type = 20
cr_20.create_by = now cr_20.employee = ep
cr_20.trigger = 'door' cr_20.trigger = 'door'
cr_20.detail = data['info']['extend'] cr_20.detail = data['info']['extend']
cr_20.save() cr_20.save()
else: ep.is_atwork = False
cr_20 = ClockRecord() ep.last_check_time = now
cr_20.type = 20 ep.save()
cr_20.employee = ep
cr_20.trigger = 'door'
cr_20.detail = data['info']['extend']
cr_20.save()
ep.is_atwork = False
ep.last_check_time = now
ep.save()

View File

@ -63,6 +63,7 @@ class Rpj(CommonBDModel):
leave_time = models.DateTimeField('离厂时间') leave_time = models.DateTimeField('离厂时间')
state = models.PositiveSmallIntegerField('状态', default=10) state = models.PositiveSmallIntegerField('状态', default=10)
rparty = models.ForeignKey(Rparty, verbose_name='关联相关方', on_delete=models.CASCADE) rparty = models.ForeignKey(Rparty, verbose_name='关联相关方', on_delete=models.CASCADE)
remployees = models.ManyToManyField('rpm.remployee', through='rpm.rpjmember')
# belong_dept是业务部门可以带过来 # belong_dept是业务部门可以带过来
ticket = models.ForeignKey(Ticket, verbose_name='关联工单', ticket = models.ForeignKey(Ticket, verbose_name='关联工单',
on_delete=models.SET_NULL, null=True, blank=True) on_delete=models.SET_NULL, null=True, blank=True)

View File

@ -1,3 +1,4 @@
from django.db import models from django.db import models
from apps.hrm.models import Employee from apps.hrm.models import Employee
from apps.utils.models import CommonAModel, CommonBModel, BaseModel from apps.utils.models import CommonAModel, CommonBModel, BaseModel