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:
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):
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)
employee = models.ForeignKey(Employee, verbose_name='对应人员', on_delete=models.CASCADE)
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)

View File

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

View File

@ -8,6 +8,7 @@ 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
@ -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)
@shared_task
@shared_task(base=CustomTask)
def correct_swip_task(start_time="", end_time=""):
# from apps.monitor.models import DrfRequestLog
# from apps.hrm.services import HrmService

View File

@ -18,6 +18,7 @@ from apps.hrm.serializers import (CertificateCreateUpdateSerializer, Certificate
EmployeeCreateUpdateSerializer, EmployeeDetailSerializer, EmployeeImproveSerializer,
EmployeeNotWorkRemarkSerializer,
EmployeeSerializer,
ClockRecordSimpleSerializer,
NotWorkRemarkListSerializer, CorrectSerializer)
from apps.hrm.services import HrmService
@ -254,40 +255,68 @@ class ClockRecordViewSet(ListModelMixin, CustomGenericViewSet):
)
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': '*'},
serializer_class=CorrectSerializer)
def correct_enter_or_exit(self, request, pk=None):
serializer_class=serializers.Serializer, logging_methods=[])
def dahua(self, request):
"""
变更一段时间日志刷脸类型
大华刷脸分页带my_info
变更一段时间日志刷脸类型
大华刷脸分页带my_info
"""
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()
request.data.update({
"openType":"61",
})
_, res = dhClient.request(**dhapis['swipe_list'], json=request.data)
ids = []
if res.get('pageData', None):
for i in res['pageData']:
ids.append(i['id'])
crs_info = ClockRecordSimpleSerializer(instance=ClockRecord.objects.filter(detail__id__in=ids), many=True).data
crs_dict = {}
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):
"""