1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
- from apps.ticket.models import TicketFlowHistory
- from service.account.account_user_service import account_user_service_ins
- from service.base_service import BaseService
- from service.workflow.workflow_transition_service import workflow_transition_service_ins
- class TicketFlowHistoryService(BaseService):
- """
- ticket flow history related service
- """
- @classmethod
- def add_ticket_flow_history(cls, tenant_id: int, operator_id: int, ticket_id: int, transition_id: int, comment: str,
- participant_type: str, participant: str, node_id: int, flow_type: str,
- ticket_data: dict) -> int:
- record = TicketFlowHistory(tenant_id=tenant_id, creator_id=operator_id, ticket_id=ticket_id,
- transition_id=transition_id, comment=comment, participant_type=participant_type,
- participant=participant, node_id=node_id, flow_type=flow_type, ticket_data=ticket_data)
- record.save()
- return record.id
- @classmethod
- def get_ticket_flow_history(cls, tenant_id: int, ticket_id: int, per_page: int=10, page: int=1, include_ticket_data: int=0, desc: int=1) -> dict:
- """
- get ticket flow history
- :param tenant_id:
- :param ticket_id:
- :param per_page:
- :param page:
- :param include_ticket_data:
- :param desc:
- :return:
- """
- if desc == 0:
- ticket_flow_history_queryset = TicketFlowHistory.objects.filter(tenant_id=tenant_id, ticket_id=ticket_id).order_by("id")
- else:
- ticket_flow_history_queryset = TicketFlowHistory.objects.filter(tenant_id=tenant_id, ticket_id=ticket_id).order_by("-id")
- paginator = Paginator(ticket_flow_history_queryset, per_page)
- try:
- ticket_history_result_paginator = paginator.page(page)
- except PageNotAnInteger:
- ticket_history_result_paginator = paginator.page(1)
- except EmptyPage:
- # If page is out of range (e.g. 9999), deliver last page of results
- ticket_history_result_paginator = paginator.page(paginator.num_pages)
- ticket_flow_history_object_format_list = []
- for ticket_flow_history in ticket_flow_history_queryset:
- node_info = dict(id=ticket_flow_history.node.id, name=ticket_flow_history.node.name)
- transition_id = ticket_flow_history.transition_id
- transition_info_dict = dict(id=transition_id)
- flow_type = ticket_flow_history.flow_type
- if transition_id == 0:
- transition_name = flow_type
- else:
- transition_obj = workflow_transition_service_ins.get_workflow_transition_by_id(transition_id)
- transition_name = transition_obj.name
- transition_info_dict["name"] = transition_name
- participant_info = dict(participant_type=ticket_flow_history.participant_type,
- participant=ticket_flow_history.participant,
- participant_alias=ticket_flow_history.participant,
- participant_email='', participant_phone=''
- )
- if ticket_flow_history.participant_type == "personal":
- user_info = account_user_service_ins.get_user_by_user_id(ticket_flow_history.participant)
- participant_info.update(participant_alias=user_info.alias, participant_email=user_info.email,
- participant_phone=user_info.phone)
- ticket_flow_history_restful = dict(id=ticket_flow_history.id, ticket_id=ticket_id,
- node_info=node_info, participant_info=participant_info,
- comment=ticket_flow_history.comment,
- create_at=ticket_flow_history.created_at.strftime('%Y-%m-%d %H:%M:%S %z'))
- if include_ticket_data:
- ticket_flow_history_restful.update(ticket_data=ticket_flow_history.ticket_data)
- ticket_flow_history_object_format_list.append(ticket_flow_history_restful)
- return dict(ticket_flow_history_object_format_list=ticket_flow_history_object_format_list,
- paginator_info=dict(per_page=per_page, page=page, total=paginator.count))
- ticket_flow_history_service_ins = TicketFlowHistoryService()
|