diff --git a/apps/hrm/filters.py b/apps/hrm/filters.py index aaa82ed6..bc004ffc 100755 --- a/apps/hrm/filters.py +++ b/apps/hrm/filters.py @@ -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) diff --git a/apps/hrm/models.py b/apps/hrm/models.py index 4ce8aa0b..37e7219f 100755 --- a/apps/hrm/models.py +++ b/apps/hrm/models.py @@ -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) diff --git a/apps/hrm/serializers.py b/apps/hrm/serializers.py index 99ceb044..1081c940 100755 --- a/apps/hrm/serializers.py +++ b/apps/hrm/serializers.py @@ -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: diff --git a/apps/hrm/tasks.py b/apps/hrm/tasks.py index 036d50d2..db540888 100755 --- a/apps/hrm/tasks.py +++ b/apps/hrm/tasks.py @@ -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 diff --git a/apps/hrm/views.py b/apps/hrm/views.py index aec3c178..30d8d491 100755 --- a/apps/hrm/views.py +++ b/apps/hrm/views.py @@ -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): """