@@ -31,31 +31,44 @@ def exist_unfinished(self):
3131 def get_operators (self , todo_type , ticket , operators ):
3232 # 获得提单人,dba,业务协助人. TODO: 后续还会细分主、备、二线DBA,以及明确区分协助人角色
3333 creator = [ticket .creator ]
34- dba = DBAdministrator .get_biz_db_type_admins (ticket .bk_biz_id , ticket .group )
34+ # dba = DBAdministrator.get_biz_db_type_admins(ticket.bk_biz_id, ticket.group)
35+ dba , second_dba , other_dba = DBAdministrator .get_dba_for_db_type (ticket .bk_biz_id , ticket .group )
3536 biz_helpers = BizSettings .get_assistance (ticket .bk_biz_id )
3637
3738 # 构造单据状态与处理人之间的对应关系
3839 # - 审批中:提单人可撤销,dba可处理,
3940 # 考虑某些单据审批人是特定配置(数据导出 -- 运维审批),所以从ItsmBuilder获得审批人
40- # - 待执行:提单人 + 单据协助人
41- # - 待继续:dba + 提单人 + 单据协助人
42- # - 待补货:dba + 提单人 + 单据协助人
43- # - 已失败:dba + 提单人 + 单据协助人
41+ # - 待执行:operators[ 提单人] + helpers[ 单据协助人]
42+ # - 待继续:operators[提单人 + dba] + helpers[ 单据协助人 + second_dba + other_dba]
43+ # - 待补货:operators[提单人 + dba] + helpers[ 单据协助人 + second_dba + other_dba]
44+ # - 已失败:operators[提单人 + dba] + helpers[ 单据协助人 + second_dba + other_dba]
4445 itsm_builder = BuilderFactory .get_builder_cls (ticket .ticket_type ).itsm_flow_builder (ticket )
46+ itsm_operators = itsm_builder .get_approvers ().split ("," )
4547 todo_operators_map = {
46- TodoType .ITSM : itsm_builder .get_approvers ().split ("," ),
47- TodoType .APPROVE : creator + biz_helpers ,
48- TodoType .INNER_APPROVE : dba + creator + biz_helpers ,
49- TodoType .RESOURCE_REPLENISH : dba + creator + biz_helpers ,
50- TodoType .INNER_FAILED : dba + creator + biz_helpers ,
48+ TodoType .ITSM : itsm_operators [:1 ],
49+ TodoType .APPROVE : creator ,
50+ TodoType .INNER_APPROVE : creator + dba ,
51+ TodoType .RESOURCE_REPLENISH : creator + dba ,
52+ TodoType .INNER_FAILED : creator + dba ,
53+ }
54+ todo_helpers_map = {
55+ TodoType .ITSM : itsm_operators [1 :],
56+ TodoType .APPROVE : biz_helpers ,
57+ TodoType .INNER_APPROVE : biz_helpers + second_dba + other_dba ,
58+ TodoType .RESOURCE_REPLENISH : biz_helpers + second_dba + other_dba ,
59+ TodoType .INNER_FAILED : biz_helpers + second_dba + other_dba ,
5160 }
5261 # 按照顺序去重
5362 operators = list (dict .fromkeys (operators + todo_operators_map .get (todo_type , [])))
54- return operators
63+ helpers = [item for item in todo_helpers_map .get (todo_type , []) if item not in operators ]
64+ return creator , biz_helpers , helpers , operators
5565
5666 def create (self , ** kwargs ):
57- operators = self .get_operators (kwargs ["type" ], kwargs ["ticket" ], kwargs .get ("operators" , []))
67+ creator , biz_helpers , helpers , operators = self .get_operators (
68+ kwargs ["type" ], kwargs ["ticket" ], kwargs .get ("operators" , [])
69+ )
5870 kwargs ["operators" ] = operators
71+ kwargs ["helpers" ] = helpers
5972 todo = super ().create (** kwargs )
6073 return todo
6174
@@ -69,6 +82,7 @@ class Todo(AuditedModel):
6982 flow = models .ForeignKey ("Flow" , help_text = _ ("关联流程任务" ), related_name = "todo_of_flow" , on_delete = models .CASCADE )
7083 ticket = models .ForeignKey ("Ticket" , help_text = _ ("关联工单" ), related_name = "todo_of_ticket" , on_delete = models .CASCADE )
7184 operators = models .JSONField (_ ("待办人" ), default = list )
85+ helpers = models .JSONField (_ ("协助人" ), default = list )
7286 type = models .CharField (
7387 _ ("待办类型" ),
7488 choices = TodoType .get_choices (),
0 commit comments