diff --git a/apps/hrm/services.py b/apps/hrm/services.py index 59d0994e..e4d61b1d 100755 --- a/apps/hrm/services.py +++ b/apps/hrm/services.py @@ -232,15 +232,6 @@ class HrmService: # elif is_ok == 'error': # raise APIException(**DH_REQUEST_ERROR) cls.save(ep, data={'dh_dchannels': dh_dchannels}) - from apps.third.models import DoorAuth - from apps.utils.snowflake import idWorker - DoorAuth.objects.filter(employee=ep).delete() - drs = [] - for i in dh_dchannels: - id = idWorker.get_id() - drs.append( - DoorAuth(id=id, employee=ep, dchannel=TDevice.objects.get(code=i))) - DoorAuth.objects.bulk_create(drs) return dh_dchannels @classmethod @@ -478,39 +469,19 @@ class HrmService: except Exception as e: return None, '人脸数据获取失败请重新上传图片' - @classmethod - def init_doorauth(cls): - """ - 根据third_info里的dchannels信息生成表, 后续dchannels可以不用了 - """ - from apps.third.models import DoorAuth - from apps.utils.snowflake import idWorker - DoorAuth.objects.all().delete() - for ind, ep in enumerate(Employee.objects.all().order_by('create_time')): - third_info = ep.third_info - if third_info.get('dh_dchannels', None): - drs = [] - for i in third_info['dh_dchannels']: - id = idWorker.get_id() - drs.append( - DoorAuth(id=id, employee=ep, dchannel=TDevice.objects.get(code=i))) - DoorAuth.objects.bulk_create(drs) - print(f'{ind+1}-{ep.name}-doorauth已创建') - @classmethod def clear_bgl_r(cls): """ 清空办公室打卡门禁的相关方权限 """ - from apps.third.models import DoorAuth - qs = DoorAuth.objects.filter( - employee__type='remployee', dchannel__code='1002222$7$0$0') - for ins in qs: - dh_face_card = ins.employee.third_info['dh_face_card'] - dh_id = ins.employee.third_info['dh_id'] + _, res = dhClient.request(**dhapis['card_door_authority_list'], json={ + "pageNum": 1, "pageSize": 1000, "channelCode": "1002222$7$0$0"}) + for i in res['pageData']: + ep = Employee.objects.get(third_info__dh_face_card=i['cardNumber']) + dh_face_card = i['cardNumber'] + dh_id = ep.third_info['dh_id'] rdict = {"personIdsString": str(dh_id), - "cardNumberString": str(dh_face_card), "channelCode": ins.dchannel.code} + "cardNumberString": str(dh_face_card), "channelCode": "1002222$7$0$0"} dhClient.request( **dhapis['card_door_authority_delete'], json=rdict) - ins.delete() - print(f'{ins.employee.name}-办公室打卡权限已删除') + print(f'{ep.name}-办公室打卡权限已删除') diff --git a/apps/third/tapis.py b/apps/third/tapis.py index e99a983e..3220e108 100755 --- a/apps/third/tapis.py +++ b/apps/third/tapis.py @@ -70,6 +70,10 @@ dhapis = { }, "card_door_authority_delete": { "url": "/evo-apigw/evo-accesscontrol/1.0.0/card/accessControl/doorAuthority/removeAuthorizeAllCardNumberByChannelCode", + "method": "post", + }, + "card_door_authority_list": { + "url": "/evo-apigw/evo-accesscontrol/1.0.0/card/accessControl/doorAuthority/ChannelWithAuthorizeStatus/bycondition/combined", "method": "post" }, "mq_subscribe": { diff --git a/apps/third/urls.py b/apps/third/urls.py index 45d5f641..17163ce6 100755 --- a/apps/third/urls.py +++ b/apps/third/urls.py @@ -2,7 +2,7 @@ from email.mime import base from django.urls import path, include from rest_framework import routers from apps.third.views import DahuaTestView, DhCommonViewSet, SpTestView, SpeakerViewSet, XxCommonViewSet, XxTestView -from apps.third.views_d import BltViewSet, TDeviceViewSet, TlogViewSet, DoorAuthViewSet +from apps.third.views_d import BltViewSet, TDeviceViewSet, TlogViewSet API_BASE_URL = 'api/third/' HTML_BASE_URL = 'third/' @@ -14,7 +14,7 @@ router.register('speaker', SpeakerViewSet, basename='api_speaker') router.register('tdevice', TDeviceViewSet, basename='tdevice') router.register('tlog', TlogViewSet, basename='tlog') router.register('tdevice/blt', BltViewSet, basename='blt') -router.register('doorauth', DoorAuthViewSet, basename='doorauth') +# router.register('doorauth', DoorAuthViewSet, basename='doorauth') urlpatterns = [ path(API_BASE_URL, include(router.urls)), path(API_BASE_URL + 'dahua/test/', DahuaTestView.as_view()), diff --git a/apps/third/views_d.py b/apps/third/views_d.py index dacfb84f..2ec625f5 100644 --- a/apps/third/views_d.py +++ b/apps/third/views_d.py @@ -16,6 +16,8 @@ from rest_framework.exceptions import ParseError from django.db import transaction from rest_framework.mixins import ListModelMixin, CreateModelMixin, DestroyModelMixin, UpdateModelMixin from apps.utils.serializers import PkSerializer +from apps.hrm.serializers import EmployeeShortSerializer +from apps.hrm.models import Employee from django.core.cache import cache @@ -462,6 +464,31 @@ class TDeviceViewSet(ListModelMixin, UpdateModelMixin, DestroyModelMixin, Custom i['my_info'] = tds_dict[i['channelCode']] return Response(res) + @action(methods=['post'], detail=False, perms_map={'post': '*'}, + serializer_class=Serializer, logging_methods=[]) + def dchannel_auth(self, request): + """ + 门禁权限 + + 门禁权限 + """ + _, res = dhClient.request( + **dhapis['card_door_authority_list'], json=request.data) + codes = [] + if res.get('pageData', None): + for i in res['pageData']: + codes.append(i['cardNumber']) + eps_info = EmployeeShortSerializer( + instance=Employee.objects.filter(third_info__dh_face_card__in=codes), many=True).data + eps_dict = {} + for i in eps_info: + eps_dict[i['third_info']['dh_face_card']] = i + for i in res['pageData']: + i['my_info'] = {} + if i['cardNumber'] in eps_dict: + i['my_info'] = eps_dict[i['cardNumber']] + return Response(res) + @action(methods=['post'], detail=True, perms_map={'post': 'tdevice.label_location'}, serializer_class=LabelLocationSerializer) def label_location(self, request, pk=None):