package dto import "time" // EnqueuePriorityPollingRequest 是人工优先入队请求。 // 一次优先需求覆盖该卡的**全部**纳入轮询任务类型,因此不接受按任务类型入队。 type EnqueuePriorityPollingRequest struct { CardID uint `json:"card_id" validate:"required" description:"卡ID"` Reason string `json:"reason" validate:"required,min=1,max=500" description:"人工加急原因(必填,最长500字符)"` } // EnqueuePriorityPollingResponse 是人工优先入队结果(资产级:一次入队对应多个任务类型的项)。 type EnqueuePriorityPollingResponse struct { CardID uint `json:"card_id" description:"卡ID"` TaskTypes []string `json:"task_types" description:"本次覆盖的轮询任务类型集合:polling:realname-实名检查 polling:carddata-流量检查 polling:package-套餐检查 polling:card_status-卡状态检查"` TaskTypeNames []string `json:"task_type_names" description:"轮询任务类型名称集合,与 task_types 一一对应"` CreatedCount int `json:"created_count" description:"本次新建的优先项数"` MergedCount int `json:"merged_count" description:"本次合并到既有活动项的项数"` Items []EnqueuePriorityPollingItemView `json:"items" description:"逐任务类型的优先项结果"` } // EnqueuePriorityPollingItemView 是单个任务类型的入队结果。 type EnqueuePriorityPollingItemView struct { ItemID uint `json:"item_id" description:"优先轮询项ID"` TaskType string `json:"task_type" description:"轮询任务类型"` TaskTypeName string `json:"task_type_name" description:"轮询任务类型名称"` Status string `json:"status" description:"状态:pending-待执行 processing-执行中 completed-已完成 failed-失败出队"` StatusName string `json:"status_name" description:"状态名称"` TriggerCount int `json:"trigger_count" description:"累计触发次数(同一卡同一任务类型的后续触发合并计数)"` LastTriggeredAt time.Time `json:"last_triggered_at" description:"最近触发时间"` Created bool `json:"created" description:"是否新建活动项:false 表示已合并到既有活动项"` } // PriorityPollingItemListRequest 是优先轮询项列表查询请求。 type PriorityPollingItemListRequest struct { Page int `json:"page" query:"page" validate:"omitempty,min=1" minimum:"1" description:"页码,默认1"` PageSize int `json:"page_size" query:"page_size" validate:"omitempty,min=1,max=100" minimum:"1" maximum:"100" description:"每页条数,默认20,最大100"` CardID *uint `json:"card_id" query:"card_id" validate:"omitempty" description:"按卡ID筛选"` TaskType *string `json:"task_type" query:"task_type" validate:"omitempty,oneof=polling:realname polling:carddata polling:package polling:card_status" enum:"polling:realname,polling:carddata,polling:package,polling:card_status" description:"按轮询任务类型筛选:polling:realname-实名检查 polling:carddata-流量检查 polling:package-套餐检查 polling:card_status-卡状态检查"` Status *string `json:"status" query:"status" validate:"omitempty,oneof=pending processing completed failed" enum:"pending,processing,completed,failed" description:"按状态筛选:pending-待执行 processing-执行中 completed-已完成 failed-失败出队"` TriggerType *string `json:"trigger_type" query:"trigger_type" validate:"omitempty,oneof=purchase_activated renewal_activated queue_activated addon_activated no_valid_package manual_trigger" enum:"purchase_activated,renewal_activated,queue_activated,addon_activated,no_valid_package,manual_trigger" description:"按触发类型筛选:purchase_activated-主套餐购买后立即生效 renewal_activated-续购套餐生效 queue_activated-排队主套餐顺延生效 addon_activated-加油包生效 no_valid_package-资产无有效套餐 manual_trigger-人工入队"` } // PriorityPollingItemResponse 是优先轮询项的读侧投影。 type PriorityPollingItemResponse struct { ID uint `json:"id" description:"优先轮询项ID"` CardID uint `json:"card_id" description:"卡ID"` ICCID string `json:"iccid,omitempty" description:"卡ICCID(卡已不存在时为空)"` TaskType string `json:"task_type" description:"轮询任务类型"` TaskTypeName string `json:"task_type_name" description:"轮询任务类型名称"` Status string `json:"status" description:"状态:pending-待执行 processing-执行中 completed-已完成 failed-失败出队"` StatusName string `json:"status_name" description:"状态名称"` TriggerType string `json:"trigger_type" description:"首次触发类型:purchase_activated renewal_activated queue_activated addon_activated no_valid_package manual_trigger"` TriggerTypeName string `json:"trigger_type_name" description:"首次触发类型名称"` TriggerTypes string `json:"trigger_types" description:"触发来源集合(去重后的全部触发类型,英文逗号分隔)"` TriggerCount int `json:"trigger_count" description:"累计触发次数"` LastTriggeredAt time.Time `json:"last_triggered_at" description:"最近触发时间"` SourceOrderID *uint `json:"source_order_id,omitempty" description:"来源订单ID"` SourcePackageUse *uint `json:"source_package_usage_id,omitempty" description:"来源套餐使用记录ID"` AttemptCount int `json:"attempt_count" description:"真实发起执行的次数(上限3次)"` ClaimedAt *time.Time `json:"claimed_at,omitempty" description:"最近认领时间"` ManualReason string `json:"manual_reason,omitempty" description:"人工入队原因"` ManualOperator uint `json:"manual_operator_id,omitempty" description:"人工入队操作者账号ID"` ManualOperatorNm string `json:"manual_operator_name,omitempty" description:"人工入队操作者名称"` ShopIDSnapshot *uint `json:"shop_id_snapshot,omitempty" description:"触发时冻结的卡所属店铺ID,平台卡为空"` Result string `json:"result" description:"执行结果:success-成功 failed-失败,未出结果时为空"` ResultName string `json:"result_name" description:"执行结果名称"` FailureReason string `json:"failure_reason,omitempty" description:"可安全展示的失败原因"` CreatedAt time.Time `json:"created_at" description:"创建时间"` UpdatedAt time.Time `json:"updated_at" description:"最近更新时间"` } // PriorityPollingItemListResponse 是优先轮询项列表响应。 type PriorityPollingItemListResponse struct { List []*PriorityPollingItemResponse `json:"items" description:"优先轮询项列表"` Total int64 `json:"total" description:"总条数"` Page int `json:"page" description:"页码"` // 与 pkg/response.PaginationData 一致:响应侧字段名为 size,请求侧仍用 page_size。 PageSize int `json:"size" description:"每页条数"` }