From c3318d2e2920e2698f050757ea4f706e0051f6ee Mon Sep 17 00:00:00 2001 From: iwanghc Date: Tue, 19 May 2026 17:30:02 +0800 Subject: [PATCH 1/2] chore(workflow): add update time filtering to data export workflows --- api/dms/service/v1/data_export_workflow.go | 7 +++++++ api/swagger.json | 5 +++++ api/swagger.yaml | 4 ++++ internal/dms/biz/data_export_workflow.go | 1 + internal/dms/service/data_export_workflow.go | 1 + internal/dms/storage/workflow.go | 11 ++++++++++- pkg/dms-common/api/dms/v1/workflow.go | 3 +++ pkg/dms-common/dmsobject/data_export_workflow.go | 8 ++++++++ 8 files changed, 39 insertions(+), 1 deletion(-) diff --git a/api/dms/service/v1/data_export_workflow.go b/api/dms/service/v1/data_export_workflow.go index f4d2d6d12..5568c4d31 100644 --- a/api/dms/service/v1/data_export_workflow.go +++ b/api/dms/service/v1/data_export_workflow.go @@ -126,6 +126,12 @@ type FilterGlobalDataExportWorkflowReq struct { // db_service UIDs with view_others_workflow permission for check_user_can_access // in:query ViewableDBServiceUids []string `json:"viewable_db_service_uids" query:"viewable_db_service_uids"` + // filter update time from + // in:query + FilterUpdateTimeFrom string `json:"filter_update_time_from" query:"filter_update_time_from"` + // filter update time to + // in:query + FilterUpdateTimeTo string `json:"filter_update_time_to" query:"filter_update_time_to"` } // swagger:model GetGlobalDataExportWorkflowsReply @@ -142,6 +148,7 @@ type GlobalDataExportWorkflow struct { Description string `json:"desc"` // 数据导出工单的描述 Creater UidWithName `json:"creater"` // 数据导出工单的创建人 CreatedAt time.Time `json:"created_at"` // 数据导出工单的创建时间 + UpdatedAt time.Time `json:"updated_at"` // 数据导出工单的更新时间 Status DataExportWorkflowStatus `json:"status"` // 数据导出工单的状态 CurrentStepAssigneeUsers []UidWithName `json:"current_step_assignee_user_list"` // 工单待操作人 diff --git a/api/swagger.json b/api/swagger.json index 725c05257..d2bd581e3 100644 --- a/api/swagger.json +++ b/api/swagger.json @@ -12433,6 +12433,11 @@ "x-go-enum-desc": "wait_for_approve DataExportWorkflowStatusWaitForApprove\nwait_for_export DataExportWorkflowStatusWaitForExport\nexporting DataExportWorkflowStatusWaitForExporting\nrejected DataExportWorkflowStatusRejected\ncancel DataExportWorkflowStatusCancel\nfailed DataExportWorkflowStatusFailed\nfinish DataExportWorkflowStatusFinish", "x-go-name": "Status" }, + "updated_at": { + "type": "string", + "format": "date-time", + "x-go-name": "UpdatedAt" + }, "workflow_name": { "type": "string", "x-go-name": "WorkflowName" diff --git a/api/swagger.yaml b/api/swagger.yaml index 2444ad1c3..f5a53b320 100644 --- a/api/swagger.yaml +++ b/api/swagger.yaml @@ -3144,6 +3144,10 @@ definitions: failed DataExportWorkflowStatusFailed finish DataExportWorkflowStatusFinish x-go-name: Status + updated_at: + format: date-time + type: string + x-go-name: UpdatedAt workflow_name: type: string x-go-name: WorkflowName diff --git a/internal/dms/biz/data_export_workflow.go b/internal/dms/biz/data_export_workflow.go index 96b19eebe..2b46b2b88 100644 --- a/internal/dms/biz/data_export_workflow.go +++ b/internal/dms/biz/data_export_workflow.go @@ -93,6 +93,7 @@ type WorkflowRecord struct { CurrentWorkflowStepId uint64 CurrentStep *WorkflowStep WorkflowSteps []*WorkflowStep + UpdateTime time.Time } type WorkflowStep struct { diff --git a/internal/dms/service/data_export_workflow.go b/internal/dms/service/data_export_workflow.go index e4992a2aa..c63e0b447 100644 --- a/internal/dms/service/data_export_workflow.go +++ b/internal/dms/service/data_export_workflow.go @@ -180,6 +180,7 @@ func (d *DMSService) GetGlobalWorkflowsList(ctx context.Context, req *dmsV1.Filt WorkflowName: w.Name, Description: w.Desc, CreatedAt: w.CreatedAt, + UpdatedAt: w.WorkflowRecord.UpdateTime, Status: dmsV1.DataExportWorkflowStatus(w.WorkflowRecord.Status), DBServiceInfos: w.DBServiceInfos, } diff --git a/internal/dms/storage/workflow.go b/internal/dms/storage/workflow.go index 84405b06b..b54fde0b8 100644 --- a/internal/dms/storage/workflow.go +++ b/internal/dms/storage/workflow.go @@ -413,7 +413,8 @@ SELECT wr.current_workflow_step_id AS current_workflow_step_id, wr.uid AS workflow_record_uid, t.db_service_uid AS db_service_uid, - ds.name AS db_service_name + ds.name AS db_service_name, + wr.updated_at AS update_time {{- template "body" . -}} ORDER BY wr.updated_at DESC @@ -491,7 +492,13 @@ AND w.project_uid IN (:filter_project_uids) AND (w.name like :fuzzy_keyword or w.uid like :fuzzy_keyword or w.desc like :fuzzy_keyword) {{- end }} +{{- if .filter_update_time_from }} +AND wr.updated_at >= :filter_update_time_from +{{- end }} +{{- if .filter_update_time_to }} +AND wr.updated_at <= :filter_update_time_to +{{- end }} {{ end }} @@ -508,6 +515,7 @@ func (d *WorkflowRepo) GetGlobalWorkflowsByParameterMap(ctx context.Context, dat CreateUserUID string `gorm:"column:create_user_uid"` CreateUserDeletedAt *time.Time `gorm:"column:create_user_deleted_at"` CreateTime time.Time `gorm:"column:create_time"` + UpdateTime time.Time `gorm:"column:update_time"` CurrentStepAssigneeUserIDList model.Strings `gorm:"column:current_step_assignee_user_id_list"` CurrentStepState string `gorm:"column:current_step_state"` Status string `gorm:"column:status"` @@ -584,6 +592,7 @@ func (d *WorkflowRepo) GetGlobalWorkflowsByParameterMap(ctx context.Context, dat Status: biz.DataExportWorkflowStatus(result.Status), CurrentWorkflowStepId: result.CurrentWorkflowStepId, WorkflowSteps: make([]*biz.WorkflowStep, result.CurrentWorkflowStepId), + UpdateTime: result.UpdateTime, } // Fill the WorkflowSteps array with placeholder steps diff --git a/pkg/dms-common/api/dms/v1/workflow.go b/pkg/dms-common/api/dms/v1/workflow.go index e0cf5dbba..4ee6d709a 100644 --- a/pkg/dms-common/api/dms/v1/workflow.go +++ b/pkg/dms-common/api/dms/v1/workflow.go @@ -19,6 +19,8 @@ type FilterGlobalDataExportWorkflowReq struct { FilterCurrentStepAssigneeUserUid string `json:"filter_current_step_assignee_user_uid" query:"filter_current_step_assignee_user_uid"` FilterByDBServiceUid string `json:"filter_by_db_service_uid" query:"filter_by_db_service_uid"` FuzzyKeyword string `json:"fuzzy_keyword" query:"fuzzy_keyword"` + FilterUpdateTimeFrom string `json:"filter_update_time_from" query:"filter_update_time_from"` + FilterUpdateTimeTo string `json:"filter_update_time_to" query:"filter_update_time_to"` // CheckUserCanAccess enables OR-based self-relevant filtering: // (creator OR current assignee OR viewable db_service). When true, @@ -47,6 +49,7 @@ type ListDataExportWorkflow struct { Description string `json:"desc"` // 数据导出工单的描述 Creater UidWithName `json:"creater"` // 数据导出工单的创建人 CreatedAt time.Time `json:"created_at"` // 数据导出工单的创建时间 + UpdatedAt time.Time `json:"updated_at"` // 数据导出工单的更新时间 Status DataExportWorkflowStatus `json:"status"` // 数据导出工单的状态 CurrentStepAssigneeUsers []UidWithName `json:"current_step_assignee_user_list"` // 工单待操作人 DBServiceInfos []*DBServiceUidWithNameInfo `json:"db_service_info,omitempty"` // 所属数据源信息 diff --git a/pkg/dms-common/dmsobject/data_export_workflow.go b/pkg/dms-common/dmsobject/data_export_workflow.go index 2ab8799fa..9691b517f 100644 --- a/pkg/dms-common/dmsobject/data_export_workflow.go +++ b/pkg/dms-common/dmsobject/data_export_workflow.go @@ -78,6 +78,14 @@ func GetGlobalDataExportWorkflowsList(ctx context.Context, dmsAddr string, req d } } + if req.FilterUpdateTimeFrom != "" { + query.Set("filter_update_time_from", req.FilterUpdateTimeFrom) + } + + if req.FilterUpdateTimeTo != "" { + query.Set("filter_update_time_to", req.FilterUpdateTimeTo) + } + // 将查询参数附加到 URL baseURL.RawQuery = query.Encode() From 8f629c291108722de98342a1c3edebfb3ba0e8bd Mon Sep 17 00:00:00 2001 From: iwanghc Date: Wed, 20 May 2026 11:14:22 +0800 Subject: [PATCH 2/2] chore(workflow): add create time filtering to data export workflows --- api/dms/service/v1/data_export_workflow.go | 6 ++++++ internal/dms/storage/workflow.go | 8 ++++++++ pkg/dms-common/api/dms/v1/workflow.go | 2 ++ pkg/dms-common/dmsobject/data_export_workflow.go | 8 ++++++++ 4 files changed, 24 insertions(+) diff --git a/api/dms/service/v1/data_export_workflow.go b/api/dms/service/v1/data_export_workflow.go index 5568c4d31..2c39a3efc 100644 --- a/api/dms/service/v1/data_export_workflow.go +++ b/api/dms/service/v1/data_export_workflow.go @@ -126,6 +126,12 @@ type FilterGlobalDataExportWorkflowReq struct { // db_service UIDs with view_others_workflow permission for check_user_can_access // in:query ViewableDBServiceUids []string `json:"viewable_db_service_uids" query:"viewable_db_service_uids"` + // filter create time from + // in:query + FilterCreateTimeFrom string `json:"filter_create_time_from" query:"filter_create_time_from"` + // filter create time to + // in:query + FilterCreateTimeTo string `json:"filter_create_time_to" query:"filter_create_time_to"` // filter update time from // in:query FilterUpdateTimeFrom string `json:"filter_update_time_from" query:"filter_update_time_from"` diff --git a/internal/dms/storage/workflow.go b/internal/dms/storage/workflow.go index b54fde0b8..8982a58ca 100644 --- a/internal/dms/storage/workflow.go +++ b/internal/dms/storage/workflow.go @@ -492,6 +492,14 @@ AND w.project_uid IN (:filter_project_uids) AND (w.name like :fuzzy_keyword or w.uid like :fuzzy_keyword or w.desc like :fuzzy_keyword) {{- end }} +{{- if .filter_create_time_from }} +AND w.created_at >= :filter_create_time_from +{{- end }} + +{{- if .filter_create_time_to }} +AND w.created_at <= :filter_create_time_to +{{- end }} + {{- if .filter_update_time_from }} AND wr.updated_at >= :filter_update_time_from {{- end }} diff --git a/pkg/dms-common/api/dms/v1/workflow.go b/pkg/dms-common/api/dms/v1/workflow.go index 4ee6d709a..dd20172f1 100644 --- a/pkg/dms-common/api/dms/v1/workflow.go +++ b/pkg/dms-common/api/dms/v1/workflow.go @@ -19,6 +19,8 @@ type FilterGlobalDataExportWorkflowReq struct { FilterCurrentStepAssigneeUserUid string `json:"filter_current_step_assignee_user_uid" query:"filter_current_step_assignee_user_uid"` FilterByDBServiceUid string `json:"filter_by_db_service_uid" query:"filter_by_db_service_uid"` FuzzyKeyword string `json:"fuzzy_keyword" query:"fuzzy_keyword"` + FilterCreateTimeFrom string `json:"filter_create_time_from" query:"filter_create_time_from"` + FilterCreateTimeTo string `json:"filter_create_time_to" query:"filter_create_time_to"` FilterUpdateTimeFrom string `json:"filter_update_time_from" query:"filter_update_time_from"` FilterUpdateTimeTo string `json:"filter_update_time_to" query:"filter_update_time_to"` diff --git a/pkg/dms-common/dmsobject/data_export_workflow.go b/pkg/dms-common/dmsobject/data_export_workflow.go index 9691b517f..c3e32ab6e 100644 --- a/pkg/dms-common/dmsobject/data_export_workflow.go +++ b/pkg/dms-common/dmsobject/data_export_workflow.go @@ -78,6 +78,14 @@ func GetGlobalDataExportWorkflowsList(ctx context.Context, dmsAddr string, req d } } + if req.FilterCreateTimeFrom != "" { + query.Set("filter_create_time_from", req.FilterCreateTimeFrom) + } + + if req.FilterCreateTimeTo != "" { + query.Set("filter_create_time_to", req.FilterCreateTimeTo) + } + if req.FilterUpdateTimeFrom != "" { query.Set("filter_update_time_from", req.FilterUpdateTimeFrom) }