99 "github.com/actiontech/dms/internal/dms/biz"
1010 pkgConst "github.com/actiontech/dms/internal/dms/pkg/constant"
1111 "github.com/actiontech/dms/internal/pkg/locale"
12+ dmsCommonV1 "github.com/actiontech/dms/pkg/dms-common/api/dms/v1"
1213)
1314
1415func (d * DMSService ) AddDataExportWorkflow (ctx context.Context , req * dmsV1.AddDataExportWorkflowReq , currentUserUid string ) (reply * dmsV1.AddDataExportWorkflowReply , err error ) {
@@ -23,6 +24,7 @@ func (d *DMSService) AddDataExportWorkflow(ctx context.Context, req *dmsV1.AddDa
2324 Tasks : tasks ,
2425 ProjectUID : req .ProjectUid ,
2526 WorkflowTemplateId : req .DataExportWorkflow .WorkflowTemplateId ,
27+ OpsTypeUID : req .DataExportWorkflow .OpsTypeUID ,
2628 }
2729 uid , err := d .DataExportWorkflowUsecase .AddDataExportWorkflow (ctx , currentUserUid , args )
2830 if err != nil {
@@ -88,6 +90,14 @@ func (d *DMSService) ListDataExportWorkflow(ctx context.Context, req *dmsV1.List
8890 })
8991 }
9092
93+ if req .FilterByOpsTypeUid != "" {
94+ andConditions = append (andConditions , pkgConst.FilterCondition {
95+ Field : string (biz .WorkflowFieldOpsTypeUID ),
96+ Operator : pkgConst .FilterOperatorEqual ,
97+ Value : req .FilterByOpsTypeUid ,
98+ })
99+ }
100+
91101 if len (andConditions ) > 0 {
92102 filterByOptions .Groups = append (filterByOptions .Groups , pkgConst .NewConditionGroup (pkgConst .FilterLogicAnd , andConditions ... ))
93103 }
@@ -140,6 +150,9 @@ func (d *DMSService) ListDataExportWorkflow(ctx context.Context, req *dmsV1.List
140150 }
141151 }
142152
153+ // 按项目批量解析运维类型名称(D8:禁止逐条请求字典)
154+ opsTypeNameByProject := d .buildOpsTypeNameMapsByProjects (ctx , projectUIDs )
155+
143156 ret := make ([]* dmsV1.ListDataExportWorkflow , len (workflows ))
144157 for i , w := range workflows {
145158 ret [i ] = & dmsV1.ListDataExportWorkflow {
@@ -152,6 +165,7 @@ func (d *DMSService) ListDataExportWorkflow(ctx context.Context, req *dmsV1.List
152165 Status : dmsV1 .DataExportWorkflowStatus (w .WorkflowRecord .Status ),
153166 WorkflowTemplateId : w .WorkflowTemplateId ,
154167 WorkflowTemplateName : w .WorkflowTemplateName ,
168+ OpsType : resolveOpsTypeFromNameMap (w .OpsTypeUID , opsTypeNameByProject [w .ProjectUID ]),
155169 }
156170 creater := convertBizUidWithName (d .UserUsecase .GetBizUserWithNameByUids (ctx , []string {w .CreateUserUID }))
157171 if len (creater ) > 0 {
@@ -183,6 +197,9 @@ func (d *DMSService) GetGlobalWorkflowsList(ctx context.Context, req *dmsV1.Filt
183197 }
184198 }
185199
200+ // 跨项目按所属项目字典批量解析名称(D8:禁止逐条请求)
201+ opsTypeNameByProject := d .buildOpsTypeNameMapsByProjects (ctx , projectUIDs )
202+
186203 ret := make ([]* dmsV1.GlobalDataExportWorkflow , len (workflows ))
187204 for i , w := range workflows {
188205 ret [i ] = & dmsV1.GlobalDataExportWorkflow {
@@ -194,6 +211,7 @@ func (d *DMSService) GetGlobalWorkflowsList(ctx context.Context, req *dmsV1.Filt
194211 UpdatedAt : w .WorkflowRecord .UpdateTime ,
195212 Status : dmsV1 .DataExportWorkflowStatus (w .WorkflowRecord .Status ),
196213 DBServiceInfos : w .DBServiceInfos ,
214+ OpsType : resolveOpsTypeFromNameMap (w .OpsTypeUID , opsTypeNameByProject [w .ProjectUID ]),
197215 }
198216
199217 creater := convertBizUidWithName (d .UserUsecase .GetBizUserIncludeDeletedWithNameByUids (ctx , []string {w .CreateUserUID }))
@@ -223,6 +241,7 @@ func (d *DMSService) GetDataExportWorkflow(ctx context.Context, req *dmsV1.GetDa
223241 CreateTime : & w .CreateTime ,
224242 WorkflowTemplateId : w .WorkflowTemplateId ,
225243 WorkflowTemplateName : w .WorkflowTemplateName ,
244+ OpsType : d .resolveDataExportWorkflowOpsType (ctx , w .ProjectUID , w .OpsTypeUID ),
226245 WorkflowRecord : dmsV1.WorkflowRecord {
227246 CurrentStepNumber : uint (w .WorkflowRecord .CurrentWorkflowStepId ),
228247 Status : dmsV1 .DataExportWorkflowStatus (w .WorkflowRecord .Status ),
@@ -256,6 +275,70 @@ func (d *DMSService) GetDataExportWorkflow(ctx context.Context, req *dmsV1.GetDa
256275 }, nil
257276}
258277
278+ // resolveDataExportWorkflowOpsType 按项目字典解析运维类型展示名;未设置/已删/非本项目 → nil(前端「-」)。
279+ func (d * DMSService ) resolveDataExportWorkflowOpsType (ctx context.Context , projectUID , opsTypeUID string ) * dmsCommonV1.OpsType {
280+ if opsTypeUID == "" || d .OpsTypeUsecase == nil {
281+ return nil
282+ }
283+ opsType , err := d .OpsTypeUsecase .GetOpsTypeByUID (ctx , opsTypeUID )
284+ if err != nil || opsType == nil {
285+ return nil
286+ }
287+ if opsType .ProjectUID != "" && projectUID != "" && opsType .ProjectUID != projectUID {
288+ return nil
289+ }
290+ return & dmsCommonV1.OpsType {
291+ UID : opsType .UID ,
292+ Name : localizeOpsTypeDisplayName (ctx , opsType .Name ),
293+ }
294+ }
295+
296+ const listOpsTypesBatchPageSize = 1000
297+
298+ // buildOpsTypeNameMapsByProjects 按项目一次拉取字典,构建 uid→name(列表批量回填,禁止逐条 Get)。
299+ func (d * DMSService ) buildOpsTypeNameMapsByProjects (ctx context.Context , projectUIDs map [string ]bool ) map [string ]map [string ]string {
300+ out := make (map [string ]map [string ]string , len (projectUIDs ))
301+ if d .OpsTypeUsecase == nil {
302+ return out
303+ }
304+ for projectUID := range projectUIDs {
305+ if projectUID == "" {
306+ continue
307+ }
308+ opsTypes , _ , err := d .OpsTypeUsecase .ListOpsTypes (ctx , & biz.ListOpsTypesOption {
309+ ProjectUID : projectUID ,
310+ Limit : listOpsTypesBatchPageSize ,
311+ Offset : 0 ,
312+ })
313+ if err != nil {
314+ continue
315+ }
316+ nameByUID := make (map [string ]string , len (opsTypes ))
317+ for _ , ot := range opsTypes {
318+ if ot == nil || ot .UID == "" {
319+ continue
320+ }
321+ nameByUID [ot .UID ] = localizeOpsTypeDisplayName (ctx , ot .Name )
322+ }
323+ out [projectUID ] = nameByUID
324+ }
325+ return out
326+ }
327+
328+ func resolveOpsTypeFromNameMap (opsTypeUID string , nameByUID map [string ]string ) * dmsCommonV1.OpsType {
329+ if opsTypeUID == "" || nameByUID == nil {
330+ return nil
331+ }
332+ name , ok := nameByUID [opsTypeUID ]
333+ if ! ok {
334+ return nil
335+ }
336+ return & dmsCommonV1.OpsType {
337+ UID : opsTypeUID ,
338+ Name : name ,
339+ }
340+ }
341+
259342func (d * DMSService ) ExportDataExportWorkflow (ctx context.Context , req * dmsV1.ExportDataExportWorkflowReq , currentUserUid string ) error {
260343 return d .DataExportWorkflowUsecase .ExportDataExportWorkflow (ctx , req .ProjectUid , req .DataExportWorkflowUid , currentUserUid )
261344
0 commit comments