@@ -31,20 +31,34 @@ def __init__(self, flow_obj: Flow):
3131 @property
3232 def ticket_approval_result (self ):
3333 # 优先读取缓存,避免同一个对象内多次请求 ITSM
34- # TODO: ITSM接口请求比较缓慢
3534 if getattr (self , "_ticket_approval_result" , None ):
3635 return self ._ticket_approval_result
3736
3837 # 调用ITSM接口查询审批状态
39- data = ItsmApi .ticket_approval_result ({"sn" : [self .flow_obj .flow_obj_id ]}, use_admin = True )
4038 try :
39+ data = ItsmApi .ticket_approval_result ({"sn" : [self .flow_obj .flow_obj_id ]}, use_admin = True )
4140 itsm_ticket_result = data [0 ]
42- except IndexError :
41+ except ( IndexError , ApiResultError ) :
4342 itsm_ticket_result = None
4443
4544 setattr (self , "_ticket_approval_result" , itsm_ticket_result )
4645 return itsm_ticket_result
4746
47+ @property
48+ def ticket_logs (self ):
49+ # 同ticket_approval_result,优先读取缓存
50+ if getattr (self , "_ticket_logs" , None ):
51+ return self ._ticket_logs
52+
53+ try :
54+ itsm_logs = ItsmApi .get_ticket_logs ({"sn" : [self .flow_obj .flow_obj_id ]}, use_admin = True )
55+ ticket_logs = itsm_logs ["logs" ]
56+ except (KeyError , ApiResultError ):
57+ ticket_logs = []
58+
59+ setattr (self , "_ticket_logs" , ticket_logs )
60+ return ticket_logs
61+
4862 @property
4963 def _start_time (self ) -> str :
5064 return datetime2str (self .flow_obj .create_at )
@@ -58,23 +72,18 @@ def _end_time(self) -> Union[datetime, Any]:
5872
5973 @property
6074 def _summary (self ) -> dict :
61- try :
62- logs = ItsmApi .get_ticket_logs ({"sn" : [self .flow_obj .flow_obj_id ]})
63- except ApiResultError :
64- return _ ("未知单据" )
65-
6675 # 获取单据审批状态
6776 current_status = self .ticket_approval_result ["current_status" ]
6877 approve_result = self .ticket_approval_result ["approve_result" ]
6978 summary = {"status" : current_status , "approve_result" : approve_result }
7079
7180 # 目前审批流程是固定的,取流程中第三个节点的日志作为概览即可
7281 try :
73- summary .update (operator = logs [ "logs" ][ 2 ]["operator" ], message = logs [ "logs" ] [2 ]["message" ])
82+ summary .update (operator = self . ticket_logs [ 2 ]["operator" ], message = self . ticket_logs [2 ]["message" ])
7483 except (IndexError , KeyError ):
7584 # 异常时根据状态取默认的概览
7685 msg = TicketStatus .get_choice_label (self .status )
77- summary .update (operator = logs [ "logs" ] [- 1 ]["operator" ], status = self .status , message = msg )
86+ summary .update (operator = self . ticket_logs [- 1 ]["operator" ], status = self .status , message = msg )
7887 return summary
7988
8089 @property
@@ -88,8 +97,8 @@ def _status(self) -> str:
8897 return self .flow_obj .update_status (TicketFlowStatus .RUNNING )
8998
9099 todo = self .flow_obj .todo_of_flow .first ()
91- updater = self . ticket_approval_result [ "updated_by" ]
92-
100+ # 非进行中的单据,肯定已经来到了第三个节点,否则也无法处理todo
101+ updater = self . ticket_logs [ 2 ][ "operator" ]
93102 # 撤单
94103 if current_status == ItsmTicketStatus .REVOKED :
95104 todo .set_status (username = updater , status = TodoStatus .DONE_FAILED )
0 commit comments