53 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
| 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')
 |