脚本重试
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()
|
||||
if visit:
|
||||
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.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
|
||||
import random
|
||||
from apps.utils.queryset import get_parent_queryset
|
||||
from apps.wf.tasks import run_task
|
||||
|
||||
|
||||
class WfService(object):
|
||||
|
@ -386,21 +387,6 @@ 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):
|
||||
"""
|
||||
|
@ -425,7 +411,4 @@ class WfService(object):
|
|||
|
||||
# 如果目标状态是脚本则异步执行
|
||||
if state.participant_type == State.PARTICIPANT_TYPE_ROBOT:
|
||||
module, func = state.participant.rsplit(".", 1)
|
||||
m = importlib.import_module(module)
|
||||
f = getattr(m, func)
|
||||
f.delay(ticket_id=ticket.id, script_str=state.participant) # 里面要加入回调才能继续流转
|
||||
run_task.delay(ticket_id=ticket.id, script_str=state.participant)
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
# Create your tasks here
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
import importlib
|
||||
from sre_parse import State
|
||||
from apps.utils.task import CustomTask
|
||||
from celery import shared_task
|
||||
|
||||
from apps.wf.serializers import TicketDetailSerializer
|
||||
from apps.wf.models import Ticket, TicketFlow, Transition
|
||||
|
||||
|
||||
@shared_task(base=CustomTask)
|
||||
|
@ -12,4 +13,34 @@ def send_ticket_notice(ticket_id):
|
|||
发送通知
|
||||
"""
|
||||
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 import status
|
||||
from django.db.models import Count
|
||||
from rest_framework.serializers import Serializer
|
||||
|
||||
from apps.wf.tasks import run_task
|
||||
|
||||
# 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)
|
||||
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):
|
||||
"""
|
||||
|
|
Loading…
Reference in New Issue