From 1c5e7f3366670f100851740b3fa8e5227b5e2920 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E5=89=8D=E6=98=8E?= <909355014@qq.com> Date: Wed, 24 Aug 2022 10:37:58 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=B7=E5=8D=A1=E4=BA=8B=E4=BB=B6=E7=94=9F?= =?UTF-8?q?=E6=88=90=E8=80=83=E5=8B=A4=E5=8F=8A=E4=BF=AE=E6=94=B9=E8=AE=BF?= =?UTF-8?q?=E5=AE=A2=E5=92=8C=E7=9B=B8=E5=85=B3=E6=96=B9=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/hrm/services.py | 117 +++++++++++++++++++++++-------------------- apps/rpm/models.py | 1 + apps/vm/models.py | 1 + 3 files changed, 64 insertions(+), 55 deletions(-) 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