diff --git a/apps/third/dahua.py b/apps/third/dahua.py index 687f7536..00be94a5 100644 --- a/apps/third/dahua.py +++ b/apps/third/dahua.py @@ -1,3 +1,4 @@ +import json import time from threading import Thread import uuid @@ -93,7 +94,7 @@ class DhClient: if raise_exception: raise ParseError(**err_detail) return 'fail', dict(detail=detail, code='dh_'+str(ret['code'])) - self.handle_log(result='success', response=ret) + # self.handle_log(result='success', response=ret) # 成功的日志就不记录了 return 'success', ret['data'] if 'data' in ret else None self.handle_log(result='error', response=None) @@ -128,9 +129,14 @@ class DhClient: Args: code (str): 视频通道编号 + + 返回完整访问地址 """ json_data = { "deviceCode": "1000038", "operation": "generalJsonTransport", "params": "{\"method\":\"dev.snap\",\"id\":123,\"params\":{\"DevID\":\"1000038\",\"DevChannel\":0,\"PicNum\":1,\"SnapType\":1,\"CmdSrc\":0}}", } + if '$' in code: + d_code = code.split('$')[0] + json_data['deviceCode'] = d_code \ No newline at end of file diff --git a/apps/third/speaker.py b/apps/third/speaker.py index 9ebb250f..c04f8ce1 100644 --- a/apps/third/speaker.py +++ b/apps/third/speaker.py @@ -102,7 +102,7 @@ class SpClient: if raise_exception: raise ParseError(**err_detail) return 'fail', dict(detail=detail, code='sp_'+str(ret['code'])) - self.handle_log(result='success', response=ret) + # self.handle_log(result='success', response=ret) return 'success', ret self.handle_log(result='error', response=None) if raise_exception: diff --git a/apps/third/xunxi.py b/apps/third/xunxi.py index 151d06fd..01e48676 100644 --- a/apps/third/xunxi.py +++ b/apps/third/xunxi.py @@ -96,7 +96,7 @@ class XxClient: if raise_exception: raise ParseError(**err_detail) return 'fail', err_detail - self.handle_log(result='success', response=None) + # self.handle_log(result='success', response=None) return 'success', ret['data'] self.handle_log(result='error', response=None) if raise_exception: diff --git a/apps/vm/services.py b/apps/vm/services.py index 5c49c6ad..4b1822b3 100644 --- a/apps/vm/services.py +++ b/apps/vm/services.py @@ -17,34 +17,3 @@ def get_receptionist(state, ticket, new_ticket_data, handler): visit = Visit.objects.filter(ticket=ticket).first() if visit: return [visit.receptionist.id] - - -def visit_audit_end(ticket): - if ticket.act_state == Ticket.TICKET_ACT_STATE_FINISH: - visit = Visit.objects.get(ticket=ticket) - visit.state = Visit.V_ENTER - visit.save() - # 更新企业访客人员库 - for i in Vpeople.objects.filter(visit=visit): - visitor = i.visitor - if visitor.id_number and visitor.photo: - ep = Employee.objects.filter(id_number=visitor.id_number).first() - else: - ep = Employee.objects.filter(name=visitor.name, id_number=None).first() - if ep: - pass - else: - ep = Employee() - ep.id_number = visitor.id_number - ep.name = visitor.name - ep.phone = visitor.phone - ep.photo = visitor.photo - ep.type = 'visitor' - ep.belong_dept = visit.receptionist.belong_dept - ep.save() - visitor.employee = ep - visitor.visit = visit # 更新当前所属访客项目 - visitor.save() - # 同步至大华人员库并下发人脸 - Thread(target=HrmService.sync_dahua_employee, args=(ep, '', visit.visit_time, visit.leave_time)).start() - # 发送通知? diff --git a/apps/vm/tasks.py b/apps/vm/tasks.py index 57c82cb1..e3190f36 100644 --- a/apps/vm/tasks.py +++ b/apps/vm/tasks.py @@ -3,6 +3,45 @@ from __future__ import absolute_import, unicode_literals from apps.hrm.models import Employee from apps.utils.task import CustomTask from apps.vm.models import Visit, Vpeople +from apps.wf.models import Ticket from celery import shared_task +from apps.hrm.services import HrmService +from apps.wf.services import WfService +@shared_task(base=CustomTask) +def visit_exec(ticket, script_str): + ticket.script_run_last_result = False + ticket.save() + visit = Visit.objects.get(ticket=ticket) + visit.state = Visit.V_ENTER + visit.save() + # 更新企业访客人员库 + for i in Vpeople.objects.filter(visit=visit): + visitor = i.visitor + if visitor.id_number and visitor.photo: + ep = Employee.objects.filter(id_number=visitor.id_number).first() + else: + ep = Employee.objects.filter(name=visitor.name, id_number=None).first() + if ep: + pass + else: + ep = Employee() + ep.id_number = visitor.id_number + ep.name = visitor.name + ep.phone = visitor.phone + ep.photo = visitor.photo + ep.type = 'visitor' + ep.belong_dept = visit.receptionist.belong_dept + ep.save() + visitor.employee = ep + visitor.visit = visit # 更新当前所属访客项目 + visitor.save() + # 同步至大华人员库并下发人脸 + HrmService.sync_dahua_employee(ep, '', visit.visit_time, visit.leave_time) + # 发送通知? + # 务必调用自动流转 + ticket.script_run_last_result = True + ticket.save() + if ticket.script_run_last_result: + WfService.auto_next(ticket, script_str) diff --git a/apps/wf/scripts.py b/apps/wf/scripts.py deleted file mode 100755 index bc48d1b8..00000000 --- a/apps/wf/scripts.py +++ /dev/null @@ -1,52 +0,0 @@ -from apps.system.models import User -from apps.wf.models import State, Ticket, TicketFlow, Transition - - -class GetParticipants: - """ - 获取处理人脚本 - """ - all_funcs = [ - {'func': 'get_create_by', 'name': '获取工单创建人'} - ] - - @classmethod - def get_create_by(cls, state: dict = {}, ticket: dict = {}, new_ticket_data: dict = {}, handler: User = {}): - """工单创建人""" - participant = ticket.create_by.id - return participant - - -class HandleScripts: - """ - 任务处理脚本 - """ - all_funcs = [ - {'func': 'handle_something', 'name': '处理一些工作'} - ] - - @classmethod - def to_next(cls, ticket: Ticket, by_timer: bool = False, - by_task: bool = False, by_hook: bool = False, script_str: str = ''): - # 获取信息 - transition_obj = Transition.objects.filter(source_state=ticket.state, is_deleted=False).first() - - TicketFlow.objects.create(ticket=ticket, state=ticket.state, - participant_type=State.PARTICIPANT_TYPE_ROBOT, - participant_str='func:{}'.format(script_str), - transition=transition_obj) - from .services import WfService - - # 自动执行流转 - WfService.handle_ticket(ticket=ticket, transition=transition_obj, - new_ticket_data=ticket.ticket_data, by_task=True) - - return ticket - - @classmethod - def handle_something(cls, ticket: Ticket): - """处理一些工作""" - # 任务处理代码区 - - # 调用自动流转 - ticket = cls.to_next(ticket=ticket, by_task=True, script_str='handle_something') diff --git a/apps/wf/services.py b/apps/wf/services.py index 3aefdda7..e3596c53 100755 --- a/apps/wf/services.py +++ b/apps/wf/services.py @@ -6,7 +6,6 @@ from rest_framework.exceptions import APIException, PermissionDenied, Validation from django.utils import timezone from datetime import timedelta import random -from .scripts import GetParticipants, HandleScripts from apps.utils.queryset import get_parent_queryset @@ -387,6 +386,21 @@ class WfService(object): return ticket + @classmethod + def auto_next(cls, ticket: Ticket, script_str: str): + # 获取信息 + transition_obj = Transition.objects.filter(source_state=ticket.state, is_deleted=False).first() + + TicketFlow.objects.create(ticket=ticket, state=ticket.state, + participant_type=State.PARTICIPANT_TYPE_ROBOT, + participant_str='func:{}'.format(script_str), + transition=transition_obj) + # 自动执行流转 + cls.handle_ticket(ticket=ticket, transition=transition_obj, + new_ticket_data=ticket.ticket_data, by_task=True) + + return ticket + @classmethod def task_ticket(cls, ticket: Ticket): """ @@ -414,6 +428,4 @@ class WfService(object): module, func = state.participant.rsplit(".", 1) m = importlib.import_module(module) f = getattr(m, func) - ticket.script_run_last_result = False - ticket.save() - f.delay(ticket_id=ticket.id, script_str=state.participant) # 里面要加入回调才能继续流转 + f.delay(ticket=ticket, script_str=state.participant) # 里面要加入回调才能继续流转 diff --git a/apps/wf/urls.py b/apps/wf/urls.py index d4f128b9..bfdacb1e 100755 --- a/apps/wf/urls.py +++ b/apps/wf/urls.py @@ -1,4 +1,4 @@ -from apps.wf.views import CustomFieldViewSet, FromCodeListView, StateViewSet, TicketFlowViewSet, \ +from apps.wf.views import CustomFieldViewSet, StateViewSet, TicketFlowViewSet, \ TicketViewSet, TransitionViewSet, WorkflowKeyInitView, WorkflowViewSet from django.urls import path, include from rest_framework.routers import DefaultRouter @@ -14,7 +14,6 @@ router.register('customfield', CustomFieldViewSet, basename='wf_customfield') router.register('ticket', TicketViewSet, basename='wf_ticket') router.register('ticketflow', TicketFlowViewSet, basename='wf_ticketflow') urlpatterns = [ - path(API_BASE_URL + 'participant_from_code', FromCodeListView.as_view()), path(API_BASE_URL, include(router.urls)), path(API_BASE_URL + 'workflow//init_key/', WorkflowKeyInitView.as_view()) ] diff --git a/apps/wf/views.py b/apps/wf/views.py index 2f73641d..4be732f5 100755 --- a/apps/wf/views.py +++ b/apps/wf/views.py @@ -21,19 +21,10 @@ from apps.wf.services import WfService from rest_framework.exceptions import ParseError, NotFound from rest_framework import status from django.db.models import Count -from .scripts import GetParticipants # Create your views here. -class FromCodeListView(APIView): - def get(self, request, format=None): - """ - 获取处理人代码列表 - """ - return Response(GetParticipants.all_funcs) - - class WorkflowKeyInitView(APIView): perms_map = {'get': '*'}