脚本重试
This commit is contained in:
parent
9ce68c02df
commit
d02b4c3313
|
@ -17,3 +17,33 @@ def get_receptionist(state, ticket, new_ticket_data, handler):
|
||||||
visit = Visit.objects.filter(ticket=ticket).first()
|
visit = Visit.objects.filter(ticket=ticket).first()
|
||||||
if visit:
|
if visit:
|
||||||
return [visit.receptionist.id]
|
return [visit.receptionist.id]
|
||||||
|
|
||||||
|
|
||||||
|
def visit_audit_end(ticket):
|
||||||
|
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)
|
||||||
|
# 发送通知?
|
||||||
|
|
|
@ -8,41 +8,3 @@ from celery import shared_task
|
||||||
from apps.hrm.services import HrmService
|
from apps.hrm.services import HrmService
|
||||||
from apps.wf.services import WfService
|
from apps.wf.services import WfService
|
||||||
|
|
||||||
|
|
||||||
@shared_task(base=CustomTask)
|
|
||||||
def visit_exec(ticket_id, script_str):
|
|
||||||
ticket = Ticket.objects.get(id=ticket_id)
|
|
||||||
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)
|
|
||||||
|
|
|
@ -7,6 +7,7 @@ from django.utils import timezone
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
import random
|
import random
|
||||||
from apps.utils.queryset import get_parent_queryset
|
from apps.utils.queryset import get_parent_queryset
|
||||||
|
from apps.wf.tasks import run_task
|
||||||
|
|
||||||
|
|
||||||
class WfService(object):
|
class WfService(object):
|
||||||
|
@ -386,21 +387,6 @@ class WfService(object):
|
||||||
|
|
||||||
return ticket
|
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
|
@classmethod
|
||||||
def task_ticket(cls, ticket: Ticket):
|
def task_ticket(cls, ticket: Ticket):
|
||||||
"""
|
"""
|
||||||
|
@ -425,7 +411,4 @@ class WfService(object):
|
||||||
|
|
||||||
# 如果目标状态是脚本则异步执行
|
# 如果目标状态是脚本则异步执行
|
||||||
if state.participant_type == State.PARTICIPANT_TYPE_ROBOT:
|
if state.participant_type == State.PARTICIPANT_TYPE_ROBOT:
|
||||||
module, func = state.participant.rsplit(".", 1)
|
run_task.delay(ticket_id=ticket.id, script_str=state.participant)
|
||||||
m = importlib.import_module(module)
|
|
||||||
f = getattr(m, func)
|
|
||||||
f.delay(ticket_id=ticket.id, script_str=state.participant) # 里面要加入回调才能继续流转
|
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
# Create your tasks here
|
# Create your tasks here
|
||||||
from __future__ import absolute_import, unicode_literals
|
from __future__ import absolute_import, unicode_literals
|
||||||
|
import importlib
|
||||||
|
from sre_parse import State
|
||||||
from apps.utils.task import CustomTask
|
from apps.utils.task import CustomTask
|
||||||
from celery import shared_task
|
from celery import shared_task
|
||||||
|
from apps.wf.models import Ticket, TicketFlow, Transition
|
||||||
from apps.wf.serializers import TicketDetailSerializer
|
|
||||||
|
|
||||||
|
|
||||||
@shared_task(base=CustomTask)
|
@shared_task(base=CustomTask)
|
||||||
|
@ -12,4 +13,34 @@ def send_ticket_notice(ticket_id):
|
||||||
发送通知
|
发送通知
|
||||||
"""
|
"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
@shared_task(base=CustomTask)
|
||||||
|
def run_task(ticket_id: str):
|
||||||
|
ticket = Ticket.objects.get(id=ticket_id)
|
||||||
|
script_result = True
|
||||||
|
script_result_msg = ''
|
||||||
|
script_str = ticket.participant
|
||||||
|
try:
|
||||||
|
module, func = script_str.rsplit(".", 1)
|
||||||
|
m = importlib.import_module(module)
|
||||||
|
f = getattr(m, func)
|
||||||
|
f(ticket)
|
||||||
|
except Exception as e:
|
||||||
|
script_result = False
|
||||||
|
script_result_msg = e.__str__()
|
||||||
|
ticket = Ticket.objects.filter(id=ticket_id).first()
|
||||||
|
if not script_result:
|
||||||
|
ticket.script_run_last_result = False
|
||||||
|
ticket.save()
|
||||||
|
# 记录日志
|
||||||
|
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,
|
||||||
|
suggestion=script_result_msg)
|
||||||
|
# 自动流转
|
||||||
|
from apps.wf.services import WfService
|
||||||
|
WfService.handle_ticket(ticket=ticket, transition=transition_obj,
|
||||||
|
new_ticket_data=ticket.ticket_data, by_task=True)
|
||||||
|
|
|
@ -21,6 +21,9 @@ from apps.wf.services import WfService
|
||||||
from rest_framework.exceptions import ParseError, NotFound
|
from rest_framework.exceptions import ParseError, NotFound
|
||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
from django.db.models import Count
|
from django.db.models import Count
|
||||||
|
from rest_framework.serializers import Serializer
|
||||||
|
|
||||||
|
from apps.wf.tasks import run_task
|
||||||
|
|
||||||
# Create your views here.
|
# Create your views here.
|
||||||
|
|
||||||
|
@ -428,6 +431,19 @@ class TicketViewSet(CreateUpdateCustomMixin, CreateModelMixin, ListModelMixin, R
|
||||||
Ticket.objects.filter(id__in=request.data.get('ids', [])).delete(soft=False)
|
Ticket.objects.filter(id__in=request.data.get('ids', [])).delete(soft=False)
|
||||||
return Response()
|
return Response()
|
||||||
|
|
||||||
|
@action(methods=['post'], detail=True, perms_map={'post': '*'},
|
||||||
|
serializer_class=Serializer)
|
||||||
|
def retry_script(self, request, pk=None):
|
||||||
|
"""重试脚本
|
||||||
|
|
||||||
|
重试脚本
|
||||||
|
"""
|
||||||
|
ticket = self.get_object()
|
||||||
|
if not ticket.script_run_last_result:
|
||||||
|
ticket.script_run_last_result = True
|
||||||
|
run_task(ticket.id)
|
||||||
|
return Response()
|
||||||
|
|
||||||
|
|
||||||
class TicketFlowViewSet(ListModelMixin, RetrieveModelMixin, CustomGenericViewSet):
|
class TicketFlowViewSet(ListModelMixin, RetrieveModelMixin, CustomGenericViewSet):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue