feat: 实现 IoT 卡轮询系统(支持千万级卡规模)
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 6m35s
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 6m35s
实现功能: - 实名状态检查轮询(可配置间隔) - 卡流量检查轮询(支持跨月流量追踪) - 套餐检查与超额自动停机 - 分布式并发控制(Redis 信号量) - 手动触发轮询(单卡/批量/条件筛选) - 数据清理配置与执行 - 告警规则与历史记录 - 实时监控统计(队列/性能/并发) 性能优化: - Redis 缓存卡信息,减少 DB 查询 - Pipeline 批量写入 Redis - 异步流量记录写入 - 渐进式初始化(10万卡/批) 压测工具(scripts/benchmark/): - Mock Gateway 模拟上游服务 - 测试卡生成器 - 配置初始化脚本 - 实时监控脚本 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
72
internal/model/dto/polling_manual_trigger_dto.go
Normal file
72
internal/model/dto/polling_manual_trigger_dto.go
Normal file
@@ -0,0 +1,72 @@
|
||||
package dto
|
||||
|
||||
import "time"
|
||||
|
||||
// TriggerSingleReq 单卡手动触发请求
|
||||
type TriggerSingleReq struct {
|
||||
CardID uint `json:"card_id" validate:"required" description:"卡ID"`
|
||||
TaskType string `json:"task_type" validate:"required,oneof=polling:realname polling:carddata polling:package" description:"任务类型"`
|
||||
}
|
||||
|
||||
// TriggerBatchReq 批量手动触发请求
|
||||
type TriggerBatchReq struct {
|
||||
CardIDs []uint `json:"card_ids" validate:"required,min=1,max=1000" description:"卡ID列表,最多1000个"`
|
||||
TaskType string `json:"task_type" validate:"required,oneof=polling:realname polling:carddata polling:package" description:"任务类型"`
|
||||
}
|
||||
|
||||
// TriggerByConditionReq 条件筛选触发请求
|
||||
type TriggerByConditionReq struct {
|
||||
TaskType string `json:"task_type" validate:"required,oneof=polling:realname polling:carddata polling:package" description:"任务类型"`
|
||||
CardStatus string `json:"card_status" validate:"omitempty" description:"卡状态筛选"`
|
||||
CarrierCode string `json:"carrier_code" validate:"omitempty" description:"运营商代码筛选"`
|
||||
CardType string `json:"card_type" validate:"omitempty" description:"卡类型筛选"`
|
||||
ShopID *uint `json:"shop_id" validate:"omitempty" description:"店铺ID筛选"`
|
||||
PackageIDs []uint `json:"package_ids" validate:"omitempty" description:"套餐ID列表筛选"`
|
||||
EnablePolling *bool `json:"enable_polling" validate:"omitempty" description:"是否启用轮询筛选"`
|
||||
Limit int `json:"limit" validate:"omitempty,min=1,max=1000" description:"限制数量,最多1000"`
|
||||
}
|
||||
|
||||
// CancelTriggerReq 取消触发请求
|
||||
type CancelTriggerReq struct {
|
||||
TriggerID uint `json:"trigger_id" validate:"required" description:"触发任务ID"`
|
||||
}
|
||||
|
||||
// ManualTriggerLogResp 手动触发日志响应
|
||||
type ManualTriggerLogResp struct {
|
||||
ID uint `json:"id" description:"日志ID"`
|
||||
TaskType string `json:"task_type" description:"任务类型"`
|
||||
TaskTypeName string `json:"task_type_name" description:"任务类型名称"`
|
||||
TriggerType string `json:"trigger_type" description:"触发类型:single/batch/by_condition"`
|
||||
TriggerTypeName string `json:"trigger_type_name" description:"触发类型名称"`
|
||||
TotalCount int `json:"total_count" description:"总卡数"`
|
||||
ProcessedCount int `json:"processed_count" description:"已处理数"`
|
||||
SuccessCount int `json:"success_count" description:"成功数"`
|
||||
FailedCount int `json:"failed_count" description:"失败数"`
|
||||
Status string `json:"status" description:"状态:pending/processing/completed/cancelled"`
|
||||
StatusName string `json:"status_name" description:"状态名称"`
|
||||
TriggeredBy uint `json:"triggered_by" description:"触发人ID"`
|
||||
TriggeredAt time.Time `json:"triggered_at" description:"触发时间"`
|
||||
CompletedAt *time.Time `json:"completed_at,omitempty" description:"完成时间"`
|
||||
}
|
||||
|
||||
// ManualTriggerLogListResp 手动触发日志列表响应
|
||||
type ManualTriggerLogListResp struct {
|
||||
Items []*ManualTriggerLogResp `json:"items" description:"日志列表"`
|
||||
Total int64 `json:"total" description:"总数"`
|
||||
Page int `json:"page" description:"当前页"`
|
||||
PageSize int `json:"page_size" description:"每页数量"`
|
||||
TotalPages int `json:"total_pages" description:"总页数"`
|
||||
}
|
||||
|
||||
// ListManualTriggerLogReq 查询手动触发日志请求
|
||||
type ListManualTriggerLogReq struct {
|
||||
TaskType string `json:"task_type" query:"task_type" description:"任务类型筛选"`
|
||||
Page int `json:"page" query:"page" validate:"omitempty,min=1" description:"页码"`
|
||||
PageSize int `json:"page_size" query:"page_size" validate:"omitempty,min=1,max=100" description:"每页数量"`
|
||||
}
|
||||
|
||||
// ManualTriggerStatusResp 手动触发状态响应
|
||||
type ManualTriggerStatusResp struct {
|
||||
RunningTasks []*ManualTriggerLogResp `json:"running_tasks" description:"正在运行的任务"`
|
||||
QueueSizes map[string]int64 `json:"queue_sizes" description:"各队列大小"`
|
||||
}
|
||||
Reference in New Issue
Block a user