refector: hrm clockrecord 从大华侧请求带my_info数据

This commit is contained in:
caoqianming 2023-03-15 23:13:21 +08:00
parent ecbe077e55
commit 5dc43246e2
5 changed files with 73 additions and 32 deletions

View File

@ -10,7 +10,13 @@ class ClockRecordFilterSet(filters.FilterSet):
class Meta: class Meta:
model = ClockRecord model = ClockRecord
fields = ['employee', 'start_create', 'end_create', 'year', 'month', 'type', 'employee__type', 'employee__belong_dept'] fields = {
'employee': ['exact'],
'type': ['exact', 'in'],
'employee__type': ['exact', 'in'],
'employee__belong_dept': ['exact'],
}
# fields = ['employee', 'start_create', 'end_create', 'year', 'month', 'type', 'employee__type', 'employee__belong_dept']
def filter_year(self, queryset, name, value): def filter_year(self, queryset, name, value):
return queryset.filter(create_time__year=value) return queryset.filter(create_time__year=value)

View File

@ -98,7 +98,7 @@ class ClockRecord(BaseModel):
type = models.PositiveSmallIntegerField('打卡类型', choices=type_choice, default=ClOCK_ON) type = models.PositiveSmallIntegerField('打卡类型', choices=type_choice, default=ClOCK_ON)
employee = models.ForeignKey(Employee, verbose_name='对应人员', on_delete=models.CASCADE) employee = models.ForeignKey(Employee, verbose_name='对应人员', on_delete=models.CASCADE)
trigger = models.CharField('触发', max_length=20) trigger = models.CharField('触发', max_length=20)
detail = models.JSONField('相关记录', default=dict, null=False, blank=True) detail = models.JSONField('相关记录', default=dict, null=False, blank=True) # 里面主要有对应的ID值
exception_type = models.PositiveSmallIntegerField('异常类型', choices=E_TYPE_CHOISE, null=True, blank=True) exception_type = models.PositiveSmallIntegerField('异常类型', choices=E_TYPE_CHOISE, null=True, blank=True)

View File

@ -183,6 +183,11 @@ class ClockRecordListSerializer(serializers.ModelSerializer):
model = ClockRecord model = ClockRecord
fields = '__all__' fields = '__all__'
class ClockRecordSimpleSerializer(serializers.ModelSerializer):
class Meta:
model = ClockRecord
fields = ['id', 'type', 'exception_type', 'detail']
class NotWorkRemarkListSerializer(serializers.ModelSerializer): class NotWorkRemarkListSerializer(serializers.ModelSerializer):
class Meta: class Meta:

View File

@ -8,6 +8,7 @@ from apps.third.dahua import dhClient
from apps.third.tapis import dhapis from apps.third.tapis import dhapis
from apps.hrm.services import HrmService from apps.hrm.services import HrmService
from django.utils import timezone from django.utils import timezone
from apps.utils.tasks import CustomTask
import time import time
@ -18,7 +19,7 @@ def update_all_employee_not_atwork():
""" """
Employee.objects.all().update(is_atwork=False, last_check_time=None, not_work_remark=None) Employee.objects.all().update(is_atwork=False, last_check_time=None, not_work_remark=None)
@shared_task @shared_task(base=CustomTask)
def correct_swip_task(start_time="", end_time=""): def correct_swip_task(start_time="", end_time=""):
# from apps.monitor.models import DrfRequestLog # from apps.monitor.models import DrfRequestLog
# from apps.hrm.services import HrmService # from apps.hrm.services import HrmService

View File

@ -18,6 +18,7 @@ from apps.hrm.serializers import (CertificateCreateUpdateSerializer, Certificate
EmployeeCreateUpdateSerializer, EmployeeDetailSerializer, EmployeeImproveSerializer, EmployeeCreateUpdateSerializer, EmployeeDetailSerializer, EmployeeImproveSerializer,
EmployeeNotWorkRemarkSerializer, EmployeeNotWorkRemarkSerializer,
EmployeeSerializer, EmployeeSerializer,
ClockRecordSimpleSerializer,
NotWorkRemarkListSerializer, CorrectSerializer) NotWorkRemarkListSerializer, CorrectSerializer)
from apps.hrm.services import HrmService from apps.hrm.services import HrmService
@ -254,40 +255,68 @@ class ClockRecordViewSet(ListModelMixin, CustomGenericViewSet):
) )
return Response({'path': export_excel(field_data, data, '打卡记录')}) return Response({'path': export_excel(field_data, data, '打卡记录')})
@action(methods=['post'], detail=False, perms_map={'post': '*'},
serializer_class=CorrectSerializer)
def correct_swip(self, request, pk=None):
"""
重跑一段时间的打卡记录
重跑一段时间的打卡记录
"""
sr = CorrectSerializer(data=request.data)
sr.is_valid(raise_exception=True)
vdata = sr.validated_data
from apps.hrm.tasks import correct_swip_task
correct_swip_task.delay(vdata['start_time'], vdata['end_time'])
return Response()
@action(methods=['post'], detail=False, perms_map={'post': '*'}, @action(methods=['post'], detail=False, perms_map={'post': '*'},
serializer_class=CorrectSerializer) serializer_class=serializers.Serializer, logging_methods=[])
def correct_enter_or_exit(self, request, pk=None): def dahua(self, request):
""" """
变更一段时间日志刷脸类型 大华刷脸分页带my_info
变更一段时间日志刷脸类型 大华刷脸分页带my_info
""" """
from apps.monitor.models import DrfRequestLog request.data.update({
sr = CorrectSerializer(data=request.data) "openType":"61",
sr.is_valid(raise_exception=True) })
vdata = sr.validated_data _, res = dhClient.request(**dhapis['swipe_list'], json=request.data)
for i in DrfRequestLog.objects.filter(path='/api/third/dahua/c_swip/', data__contains='办公楼考勤面板' ids = []
, create_time__gte=vdata['start_time'] if res.get('pageData', None):
, create_time__lte=vdata['end_time']).filter(data__contains = "'enterOrExit': 1" ): for i in res['pageData']:
data = i.data ids.append(i['id'])
i.data = data.replace("'enterOrExit': 1", "'enterOrExit': 3") crs_info = ClockRecordSimpleSerializer(instance=ClockRecord.objects.filter(detail__id__in=ids), many=True).data
i.save() crs_dict = {}
return Response() for i in crs_info:
crs_dict[i['detail']['id']] = i
for i in res['pageData']:
i['my_info'] = {}
if i['id'] in crs_dict:
i['my_info'] = crs_dict[i['id']]
return Response(res)
# @action(methods=['post'], detail=False, perms_map={'post': '*'},
# serializer_class=CorrectSerializer)
# def correct_swip(self, request, pk=None):
# """
# 重跑一段时间的打卡记录
# 重跑一段时间的打卡记录
# """
# sr = CorrectSerializer(data=request.data)
# sr.is_valid(raise_exception=True)
# vdata = sr.validated_data
# from apps.hrm.tasks import correct_swip_task
# correct_swip_task.delay(vdata['start_time'], vdata['end_time'])
# return Response()
# @action(methods=['post'], detail=False, perms_map={'post': '*'},
# serializer_class=CorrectSerializer)
# def correct_enter_or_exit(self, request, pk=None):
# """
# 变更一段时间日志刷脸类型
# 变更一段时间日志刷脸类型
# """
# from apps.monitor.models import DrfRequestLog
# sr = CorrectSerializer(data=request.data)
# sr.is_valid(raise_exception=True)
# vdata = sr.validated_data
# for i in DrfRequestLog.objects.filter(path='/api/third/dahua/c_swip/', data__contains='办公楼考勤面板'
# , create_time__gte=vdata['start_time']
# , create_time__lte=vdata['end_time']).filter(data__contains = "'enterOrExit': 1" ):
# data = i.data
# i.data = data.replace("'enterOrExit': 1", "'enterOrExit': 3")
# i.save()
# return Response()
class NotWorkRemarkViewSet(ListModelMixin, CustomGenericViewSet): class NotWorkRemarkViewSet(ListModelMixin, CustomGenericViewSet):
""" """