vm service bug

This commit is contained in:
曹前明 2022-07-14 13:29:50 +08:00
parent 83f6039499
commit 99543ed413
7 changed files with 67 additions and 53 deletions

View File

@ -3,7 +3,7 @@ from apps.hrm.models import Employee
from apps.third.models import TDevice
from apps.third.tapis import dhapis
from apps.third.clients import dhClient
from apps.utils.tools import rannum
from apps.utils.tools import rannum, ranstr
from datetime import datetime
@ -37,7 +37,7 @@ class HrmService:
"service": "ehs",
"id": dh_id,
"name": ep.name,
"code": ep.number,
"code": ep.number if ep.number else ranstr(6),
"paperType": 111,
"paperNumber": ep.id_number,
"paperAddress": "default",
@ -74,7 +74,7 @@ class HrmService:
"service": "ehs",
"id": dh_id,
"name": ep.name,
"code": ep.number,
"code": ep.number if ep.number else ranstr(6),
"paperType": 111,
"paperNumber": ep.id_number,
"paperAddress": "default",
@ -101,7 +101,7 @@ class HrmService:
dh_face_card = cls.open_face_card(
ep=ep, dh_id=dh_id, departmentId=departmentId, start_time=start_time, end_time=end_time)
# 授予门禁权限
dh_dchannels = cls.door_auth(ep=ep, dh_face_card=dh_face_card)
dh_dchannels = cls.door_auth(ep=ep)
return {'dh_id': dh_id, 'dh_photo': dh_photo, 'dh_face_card': dh_face_card, 'dh_dchannels': dh_dchannels}
@classmethod
@ -120,8 +120,9 @@ class HrmService:
"cardNumber": cardNumber,
"startDate": startDate,
"endDate": endDate,
"departmentId": departmentId,
}
_, res = dhClient.request(**dhapis['card_update'])
_, res = dhClient.request(**dhapis['card_update'], json=json_data)
return cardNumber
else:
_, res = dhClient.request(**dhapis['card_gen_id'])
@ -150,27 +151,31 @@ class HrmService:
return cardNumber
@classmethod
def door_auth(cls, ep: Employee, dh_face_card: str):
def door_auth(cls, ep: Employee, dh_dchannels: list = []):
"""授予门禁权限
"""
from apps.third.models import TDevice
# 查找可授予的门禁
dh_dchannels = list(TDevice.objects.filter(type=TDevice.DEVICE_DCHANNEL,
access_list__contains=ep.type).values_list('code', flat=True))
details = []
for i in dh_dchannels:
details.append({
"privilegeType": 1,
"resouceCode": i
})
json_data = {
"cardNumbers": [dh_face_card],
"timeQuantumId": 1,
"cardPrivilegeDetails": details
}
dhClient.request(**dhapis['card_door_authority'], json=json_data)
cls.save(ep, data={'dh_dchannels': dh_dchannels})
dh_face_card = ep.third_info.get('dh_face_card', None)
if dh_dchannels:
pass
else:
# 查找可授予的门禁
dh_dchannels = list(TDevice.objects.filter(type=TDevice.DEVICE_DCHANNEL,
access_list__contains=ep.type).values_list('code', flat=True))
if dh_dchannels:
details = []
for i in dh_dchannels:
details.append({
"privilegeType": 1,
"resouceCode": i
})
json_data = {
"cardNumbers": [dh_face_card],
"timeQuantumId": 1,
"cardPrivilegeDetails": details
}
dhClient.request(**dhapis['card_door_authority'], json=json_data)
cls.save(ep, data={'dh_dchannels': dh_dchannels})
return dh_dchannels
@classmethod

View File

@ -39,10 +39,9 @@ def rpj_audit_end(ticket):
rep.save()
# 同步至大华人员库并下发人脸
Thread(target=HrmService.sync_dahua_employee, args=(ep, '', rpj.come_time, rpj.leave_time)).start()
# 更新入厂项目人员证书库
for i in Rcertificate.objects.filter(rpj=rpj):
Certificate.objects.get_or_create(
# 更新入厂项目人员证书库
for i in Rcertificate.objects.filter(rpj=rpj):
Certificate.objects.get_or_create(
)
# 发送通知?
)
# 发送通知?

View File

@ -47,6 +47,3 @@ def custom_exception_hander(exc, context):
return Response(data, status=status, headers=headers)
args = (request_id, traceback.format_exc())
myLogger.error(f"{args[0]}-{args[1]}")
return Response(data={'err_code': 'server_error',
'err_detail': '',
'err_msg': '服务器错误', 'request_id': request_id}, status=500)

View File

@ -47,4 +47,4 @@ def visit_audit_end(ticket):
visitor.save()
# 同步至大华人员库并下发人脸
Thread(target=HrmService.sync_dahua_employee, args=(ep, '', visit.visit_time, visit.leave_time)).start()
# 发送通知?
# 发送通知?

View File

@ -1,3 +1,14 @@
from django.test import TestCase
from apps.hrm.models import Employee
from apps.hrm.services import HrmService
from apps.vm.models import Visit
# Create your tests here.
class VisitTest(TestCase):
def test_audit_end(self):
v = Visit.objects.get(id='1547401054033940480')
ep = Employee.objects.get(id='1547406632055607296')
HrmService.sync_dahua_employee(ep, '', v.visit_time, v.leave_time)

View File

@ -1,35 +1,36 @@
from apps.system.models import Dept, User
from apps.system.serializers import UserSimpleSerializer
from rest_framework import serializers
from apps.utils.serializers import CustomModelSerializer
from .models import State, Ticket, TicketFlow, Workflow, Transition, CustomField
class WorkflowSerializer(serializers.ModelSerializer):
class WorkflowSerializer(CustomModelSerializer):
class Meta:
model = Workflow
fields = '__all__'
class StateSerializer(serializers.ModelSerializer):
class StateSerializer(CustomModelSerializer):
class Meta:
model = State
fields = '__all__'
class WorkflowSimpleSerializer(serializers.ModelSerializer):
class WorkflowSimpleSerializer(CustomModelSerializer):
class Meta:
model = Workflow
fields = ['id', 'name', 'key']
class StateSimpleSerializer(serializers.ModelSerializer):
class StateSimpleSerializer(CustomModelSerializer):
class Meta:
model = State
fields = ['id', 'name', 'type', 'distribute_type', 'enable_retreat', 'enable_deliver']
class TransitionSerializer(serializers.ModelSerializer):
class TransitionSerializer(CustomModelSerializer):
source_state_ = StateSimpleSerializer(source='source_state', read_only=True)
destination_state_ = StateSimpleSerializer(source='destination_state', read_only=True)
@ -57,13 +58,13 @@ class FieldChoiceSerializer(serializers.Serializer):
name = serializers.CharField(label='名称')
class CustomFieldSerializer(serializers.ModelSerializer):
class CustomFieldSerializer(CustomModelSerializer):
class Meta:
model = CustomField
fields = '__all__'
class CustomFieldCreateUpdateSerializer(serializers.ModelSerializer):
class CustomFieldCreateUpdateSerializer(CustomModelSerializer):
field_choice = FieldChoiceSerializer(label='选项列表', many=True, required=False)
@ -74,13 +75,13 @@ class CustomFieldCreateUpdateSerializer(serializers.ModelSerializer):
'boolean_field_display', 'field_choice', 'label', 'is_hidden']
class TicketSimpleSerializer(serializers.ModelSerializer):
class TicketSimpleSerializer(CustomModelSerializer):
class Meta:
model = Ticket
fields = '__all__'
class TicketCreateSerializer(serializers.ModelSerializer):
class TicketCreateSerializer(CustomModelSerializer):
transition = serializers.PrimaryKeyRelatedField(queryset=Transition.objects.all(), write_only=True)
title = serializers.CharField(allow_blank=True, required=False)
@ -92,7 +93,7 @@ class TicketCreateSerializer(serializers.ModelSerializer):
return super().create(validated_data)
class TicketSerializer(serializers.ModelSerializer):
class TicketSerializer(CustomModelSerializer):
workflow_ = WorkflowSimpleSerializer(source='workflow', read_only=True)
state_ = StateSimpleSerializer(source='state', read_only=True)
@ -106,7 +107,7 @@ class TicketSerializer(serializers.ModelSerializer):
return queryset
class TicketListSerializer(serializers.ModelSerializer):
class TicketListSerializer(CustomModelSerializer):
workflow_ = WorkflowSimpleSerializer(source='workflow', read_only=True)
state_ = StateSimpleSerializer(source='state', read_only=True)
@ -121,7 +122,7 @@ class TicketListSerializer(serializers.ModelSerializer):
return queryset
class TicketDetailSerializer(serializers.ModelSerializer):
class TicketDetailSerializer(CustomModelSerializer):
workflow_ = WorkflowSimpleSerializer(source='workflow', read_only=True)
state_ = StateSimpleSerializer(source='state', read_only=True)
ticket_data_ = serializers.SerializerMethodField()
@ -175,7 +176,7 @@ class TicketDetailSerializer(serializers.ModelSerializer):
return
class TicketFlowSerializer(serializers.ModelSerializer):
class TicketFlowSerializer(CustomModelSerializer):
participant_ = UserSimpleSerializer(source='participant', read_only=True)
state_ = StateSimpleSerializer(source='state', read_only=True)
@ -184,7 +185,7 @@ class TicketFlowSerializer(serializers.ModelSerializer):
fields = '__all__'
class TicketFlowSimpleSerializer(serializers.ModelSerializer):
class TicketFlowSimpleSerializer(CustomModelSerializer):
participant_ = UserSimpleSerializer(source='participant', read_only=True)
state_ = StateSimpleSerializer(source='state', read_only=True)

View File

@ -2,6 +2,7 @@ from django.utils import timezone
from django.db import transaction
from rest_framework.views import APIView
from apps.system.models import User
from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
from apps.wf.filters import TicketFilterSet
from rest_framework.response import Response
from rest_framework.mixins import CreateModelMixin, DestroyModelMixin, ListModelMixin, \
@ -61,7 +62,7 @@ class WorkflowKeyInitView(APIView):
return Response(ret)
class WorkflowViewSet(CreateUpdateModelAMixin, ModelViewSet):
class WorkflowViewSet(CustomModelViewSet):
perms_map = {'get': '*', 'post': 'workflow:create',
'put': 'workflow:update', 'delete': 'workflow:delete'}
queryset = Workflow.objects.all()
@ -125,7 +126,7 @@ class WorkflowViewSet(CreateUpdateModelAMixin, ModelViewSet):
return Response(ret)
class StateViewSet(CreateModelMixin, UpdateModelMixin, RetrieveModelMixin, DestroyModelMixin, GenericViewSet):
class StateViewSet(CreateModelMixin, UpdateModelMixin, RetrieveModelMixin, DestroyModelMixin, CustomGenericViewSet):
perms_map = {'get': '*', 'post': 'workflow:update',
'put': 'workflow:update', 'delete': 'workflow:update'}
queryset = State.objects.all()
@ -135,7 +136,7 @@ class StateViewSet(CreateModelMixin, UpdateModelMixin, RetrieveModelMixin, Destr
ordering = ['sort']
class TransitionViewSet(CreateModelMixin, UpdateModelMixin, RetrieveModelMixin, DestroyModelMixin, GenericViewSet):
class TransitionViewSet(CreateModelMixin, UpdateModelMixin, RetrieveModelMixin, DestroyModelMixin, CustomGenericViewSet):
perms_map = {'get': '*', 'post': 'workflow:update',
'put': 'workflow:update', 'delete': 'workflow:update'}
queryset = Transition.objects.all()
@ -145,7 +146,7 @@ class TransitionViewSet(CreateModelMixin, UpdateModelMixin, RetrieveModelMixin,
ordering = ['id']
class CustomFieldViewSet(CreateModelMixin, UpdateModelMixin, RetrieveModelMixin, DestroyModelMixin, GenericViewSet):
class CustomFieldViewSet(CreateModelMixin, UpdateModelMixin, RetrieveModelMixin, DestroyModelMixin, CustomGenericViewSet):
perms_map = {'get': '*', 'post': 'workflow:update',
'put': 'workflow:update', 'delete': 'workflow:update'}
queryset = CustomField.objects.all()
@ -160,7 +161,7 @@ class CustomFieldViewSet(CreateModelMixin, UpdateModelMixin, RetrieveModelMixin,
return super().get_serializer_class()
class TicketViewSet(CreateUpdateCustomMixin, CreateModelMixin, ListModelMixin, RetrieveModelMixin, GenericViewSet):
class TicketViewSet(CreateUpdateCustomMixin, CreateModelMixin, ListModelMixin, RetrieveModelMixin, CustomGenericViewSet):
perms_map = {'get': '*', 'post': '*'}
queryset = Ticket.objects.all()
serializer_class = TicketSerializer
@ -437,7 +438,7 @@ class TicketViewSet(CreateUpdateCustomMixin, CreateModelMixin, ListModelMixin, R
return Response()
class TicketFlowViewSet(ListModelMixin, RetrieveModelMixin, GenericViewSet):
class TicketFlowViewSet(ListModelMixin, RetrieveModelMixin, CustomGenericViewSet):
"""
工单日志
"""