feat: 直接使用大华的门禁权限接口吧

This commit is contained in:
caoqianming 2023-10-10 09:34:47 +08:00
parent 9c0423d0dc
commit 3a07c2b47c
4 changed files with 41 additions and 39 deletions

View File

@ -232,15 +232,6 @@ class HrmService:
# elif is_ok == 'error': # elif is_ok == 'error':
# raise APIException(**DH_REQUEST_ERROR) # raise APIException(**DH_REQUEST_ERROR)
cls.save(ep, data={'dh_dchannels': dh_dchannels}) 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 return dh_dchannels
@classmethod @classmethod
@ -478,39 +469,19 @@ class HrmService:
except Exception as e: except Exception as e:
return None, '人脸数据获取失败请重新上传图片' 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 @classmethod
def clear_bgl_r(cls): def clear_bgl_r(cls):
""" """
清空办公室打卡门禁的相关方权限 清空办公室打卡门禁的相关方权限
""" """
from apps.third.models import DoorAuth _, res = dhClient.request(**dhapis['card_door_authority_list'], json={
qs = DoorAuth.objects.filter( "pageNum": 1, "pageSize": 1000, "channelCode": "1002222$7$0$0"})
employee__type='remployee', dchannel__code='1002222$7$0$0') for i in res['pageData']:
for ins in qs: ep = Employee.objects.get(third_info__dh_face_card=i['cardNumber'])
dh_face_card = ins.employee.third_info['dh_face_card'] dh_face_card = i['cardNumber']
dh_id = ins.employee.third_info['dh_id'] dh_id = ep.third_info['dh_id']
rdict = {"personIdsString": str(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( dhClient.request(
**dhapis['card_door_authority_delete'], json=rdict) **dhapis['card_door_authority_delete'], json=rdict)
ins.delete() print(f'{ep.name}-办公室打卡权限已删除')
print(f'{ins.employee.name}-办公室打卡权限已删除')

View File

@ -70,6 +70,10 @@ dhapis = {
}, },
"card_door_authority_delete": { "card_door_authority_delete": {
"url": "/evo-apigw/evo-accesscontrol/1.0.0/card/accessControl/doorAuthority/removeAuthorizeAllCardNumberByChannelCode", "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" "method": "post"
}, },
"mq_subscribe": { "mq_subscribe": {

View File

@ -2,7 +2,7 @@ from email.mime import base
from django.urls import path, include from django.urls import path, include
from rest_framework import routers from rest_framework import routers
from apps.third.views import DahuaTestView, DhCommonViewSet, SpTestView, SpeakerViewSet, XxCommonViewSet, XxTestView 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/' API_BASE_URL = 'api/third/'
HTML_BASE_URL = 'third/' HTML_BASE_URL = 'third/'
@ -14,7 +14,7 @@ router.register('speaker', SpeakerViewSet, basename='api_speaker')
router.register('tdevice', TDeviceViewSet, basename='tdevice') router.register('tdevice', TDeviceViewSet, basename='tdevice')
router.register('tlog', TlogViewSet, basename='tlog') router.register('tlog', TlogViewSet, basename='tlog')
router.register('tdevice/blt', BltViewSet, basename='blt') router.register('tdevice/blt', BltViewSet, basename='blt')
router.register('doorauth', DoorAuthViewSet, basename='doorauth') # router.register('doorauth', DoorAuthViewSet, basename='doorauth')
urlpatterns = [ urlpatterns = [
path(API_BASE_URL, include(router.urls)), path(API_BASE_URL, include(router.urls)),
path(API_BASE_URL + 'dahua/test/', DahuaTestView.as_view()), path(API_BASE_URL + 'dahua/test/', DahuaTestView.as_view()),

View File

@ -16,6 +16,8 @@ from rest_framework.exceptions import ParseError
from django.db import transaction from django.db import transaction
from rest_framework.mixins import ListModelMixin, CreateModelMixin, DestroyModelMixin, UpdateModelMixin from rest_framework.mixins import ListModelMixin, CreateModelMixin, DestroyModelMixin, UpdateModelMixin
from apps.utils.serializers import PkSerializer from apps.utils.serializers import PkSerializer
from apps.hrm.serializers import EmployeeShortSerializer
from apps.hrm.models import Employee
from django.core.cache import cache from django.core.cache import cache
@ -462,6 +464,31 @@ class TDeviceViewSet(ListModelMixin, UpdateModelMixin, DestroyModelMixin, Custom
i['my_info'] = tds_dict[i['channelCode']] i['my_info'] = tds_dict[i['channelCode']]
return Response(res) 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'}, @action(methods=['post'], detail=True, perms_map={'post': 'tdevice.label_location'},
serializer_class=LabelLocationSerializer) serializer_class=LabelLocationSerializer)
def label_location(self, request, pk=None): def label_location(self, request, pk=None):