factory/apps/hrm/tasks.py

88 lines
3.5 KiB
Python
Executable File

from __future__ import absolute_import, unicode_literals
from celery import shared_task
from apps.hrm.models import Employee, ClockRecord
from dateutil import tz
from datetime import datetime, timedelta
from apps.third.dahua import dhClient
from apps.third.tapis import dhapis
from apps.hrm.services import HrmService
from django.utils import timezone
from apps.utils.tasks import CustomTask
import time
@shared_task
def update_all_employee_not_atwork():
"""
将所有员工设为非在岗状态
"""
Employee.objects.all().update(is_atwork=False, last_check_time=None, not_work_remark=None)
@shared_task(base=CustomTask)
def correct_swip_task(start_time="", end_time=""):
# from apps.monitor.models import DrfRequestLog
# from apps.hrm.services import HrmService
# lgs = DrfRequestLog.objects.filter(path='/api/third/dahua/c_swip/', requested_at__gte=start_time, requested_at__lte=end_time)
# for i in lgs:
# HrmService.swipe(data=eval(i.data))
# 从大华历史记录校正打卡记录
now = datetime.now()
if start_time == "":
start_time = (now - timedelta(hours=25)).strftime("%Y-%m-%d %H:%M:%S")
if end_time == "":
end_time = now.strftime("%Y-%m-%d %H:%M:%S")
data0 = {
"pageNum":1,
"pageSize": "20",
"startSwingTime":start_time,
"endSwingTime":end_time,
"openType":"61"
}
_, count = dhClient.request(**dhapis['swipe_list_count'], json=data0)
data = {
"pageNum":1,
"pageSize": str(count),
"startSwingTime":start_time,
"endSwingTime":end_time,
"openType":"61"
}
_, res = dhClient.request(**dhapis['swipe_list'], json=data)
pageData = sorted(res['pageData'], key=lambda obj: obj['swingTime'])
for i in pageData:
if 'paperNumber' in i:
HrmService.swipe_next(i['channelCode'], i['paperNumber'], i['swingTime'], i['enterOrExit'], i)
# ClockRecord.objects.filter(type=30).delete()
@shared_task
def correct_card_time():
tzinfo = tz.gettz('Asia/Shanghai')
s_time_f = datetime.strptime("2022-11-15 14:20:20", "%Y-%m-%d %H:%M:%S").replace(tzinfo=tzinfo)
eps = Employee.objects.filter(update_time__lte = s_time_f)
print(eps)
for ep in eps:
dh_face_card = ep.third_info.get('dh_face_card', None)
dh_face_card_end = ep.third_info.get('dh_face_card_end', None)
if dh_face_card and dh_face_card_end is None:
departmentId = 1
if ep.belong_dept:
try:
departmentId = ep.belong_dept.third_info['dh_id']
except Exception:
pass
# 获取卡片时间
_, res = dhClient.request(**dhapis['card_detail'], params={'cardNumber': dh_face_card})
time.sleep(1)
start_time_str, end_time_str = res['startDate'], res['endDate']
end_time_new = datetime.strptime(end_time_str, "%Y-%m-%d %H:%M:%S") + timedelta(hours=8)
end_time_new_str = end_time_new.strftime("%Y-%m-%d %H:%M:%S")
json_data = {
"cardNumber": dh_face_card,
"startDate": start_time_str,
"endDate": end_time_new_str,
"departmentId": departmentId,
}
_, res = dhClient.request(**dhapis['card_update'], json=json_data)
HrmService.save(ep, {'dh_face_card_start': start_time_str, 'dh_face_card_end': end_time_new_str})
print('已更新-' + ep.name + '-' + dh_face_card + '-' + end_time_new_str)
time.sleep(1)