diff --git a/apps/hrm/services.py b/apps/hrm/services.py index 88aa565b..f509a599 100755 --- a/apps/hrm/services.py +++ b/apps/hrm/services.py @@ -122,7 +122,6 @@ class HrmService: "endDate": endDate, "departmentId": departmentId, } - time.sleep(1) _, res = dhClient.request(**dhapis['card_update'], json=json_data) return cardNumber else: @@ -147,8 +146,8 @@ class HrmService: "startDate": startDate, "endDate": endDate } - time.sleep(1) _, res = dhClient.request(**dhapis['card_add'], json=json_data) + time.sleep(1) cls.save(ep, data={'dh_face_card': cardNumber}) return cardNumber @@ -195,59 +194,67 @@ class HrmService: """ 刷卡事件/用于记录考勤 """ - deviceCode = data['infoArray']['deviceCode'] - device = TDevice.objects.filter(code=deviceCode).first() - if device and device.is_clock: - # 如果设置为关联考勤 - if data['info']['extend']['enterOrExit'] == "1": - # 如果是进门 - id_number = data['info']['extend']['paperNumber'] - if id_number: - ep = Employee.objects.filter(id_number=id_number, type="employee").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 + from apps.vm.models import Visit + from apps.rpm.models import Rpj + nodeCode = data['info']['nodeCode'] + device = TDevice.objects.filter(code=nodeCode).first() + if device: + id_number = data['info']['extend'].get('paperNumber', None) + if id_number: # 如果有身份证号 + # 先进行相关方/访客项目更新 + Visit.objects.filter(type=Visit.V_ENTER, visitors__employee__id_number=id_number).update( + type=Visit.V_WORKING) + Rpj.objects.filter(type=Rpj.RPJ_ENTER, remployees__employee__id_number=id_number).update( + type=Rpj.RPJ_WORKING) + if device.is_clock: + # 如果设置为关联考勤 + if data['info']['extend']['enterOrExit'] == "1": + # 如果是进门 + 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.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.detail = data['info']['extend'] - cr_10.save() - ep.is_atwork = True - ep.last_check_time = now - 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="employee").first() - # 如果是内部员工创建下班打卡记录(更新) - if ep and ep.is_atwork: - now = timezone.now() - cr_20 = ClockRecord.objects.filter( - type=20, employee=ep, create_time__year=now.year, create_time__month=now.month, create_time__day=now.day).first() - if cr_20: - if now > cr_20.create_by: - cr_20.create_by = now - 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.save() - ep.is_atwork = False - ep.last_check_time = now - ep.save() + ep.is_atwork = True + ep.last_check_time = now + 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="employee").first() + # 如果是内部/相关方员工创建下班打卡记录(更新) + if ep and ep.is_atwork: + now = timezone.now() + cr_20 = ClockRecord.objects.filter( + type=20, employee=ep, create_time__year=now.year, create_time__month=now.month, create_time__day=now.day).first() + if cr_20: + if now > cr_20.create_by: + cr_20.create_by = now + 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.save() + ep.is_atwork = False + ep.last_check_time = now + ep.save() diff --git a/apps/rpm/models.py b/apps/rpm/models.py index 48ceda8c..9a496c06 100644 --- a/apps/rpm/models.py +++ b/apps/rpm/models.py @@ -63,6 +63,7 @@ class Rpj(CommonBDModel): leave_time = models.DateTimeField('离厂时间') state = models.PositiveSmallIntegerField('状态', default=10) rparty = models.ForeignKey(Rparty, verbose_name='关联相关方', on_delete=models.CASCADE) + remployees = models.ManyToManyField('rpm.remployee', through='rpm.rpjmember') # belong_dept是业务部门可以带过来 ticket = models.ForeignKey(Ticket, verbose_name='关联工单', on_delete=models.SET_NULL, null=True, blank=True) diff --git a/apps/vm/models.py b/apps/vm/models.py index ef6b2fa8..45b0481a 100644 --- a/apps/vm/models.py +++ b/apps/vm/models.py @@ -1,3 +1,4 @@ + from django.db import models from apps.hrm.models import Employee from apps.utils.models import CommonAModel, CommonBModel, BaseModel