// Package dto 定义通知模块的服务边界对象(入参/出参)。 package dto import "strings" // NoticeChannelVO 渠道出参。 type NoticeChannelVO struct { Id uint64 Code string Name string Enabled int Config string Remark string } // NoticeChannelInput 渠道入参。 type NoticeChannelInput struct { Id uint64 Code string Name string Enabled int Config string Remark string } // NoticeRuleVO 规则出参。 type NoticeRuleVO struct { Id uint64 Name string EventType string ChannelCodes []string UserIds []uint64 TitleTemplate string BodyTemplate string Enabled int } // NoticeRuleInput 规则入参。 type NoticeRuleInput struct { Id uint64 Name string EventType string ChannelCodes []string UserIds []uint64 TitleTemplate string BodyTemplate string Enabled int } // NoticeLogVO 通知历史记录出参。 // 除落库字段外,额外补齐「渠道名称/事件名称/类型/分组/接收人」等派生字段,供表格直接展示。 type NoticeLogVO struct { Id uint64 `json:"id"` // 主键 BatchId string `json:"batchId"` // 批次号(同一次业务触发的多条投递共用) RuleId uint64 `json:"ruleId"` // 规则ID RuleName string `json:"ruleName"` // 规则名称(派生,规则已删除则为空) EventType string `json:"eventType"` // 事件编码 EventName string `json:"eventName"` // 事件名称(派生) NoticeType string `json:"noticeType"` // 类型编码(派生) TypeName string `json:"typeName"` // 类型名称(派生) Group string `json:"group"` // 分组编码(派生) GroupName string `json:"groupName"` // 分组名称(派生) ChannelCode string `json:"channelCode"` // 渠道编码 ChannelName string `json:"channelName"` // 渠道名称(派生) UserId uint64 `json:"userId"` // 接收用户ID UserName string `json:"userName"` // 接收人(昵称/账号,派生) Target string `json:"target"` // 发送目标(设备key/token) Title string `json:"title"` // 标题 Body string `json:"body"` // 内容 Status int `json:"status"` // 0待发送 1成功 2失败 StatusName string `json:"statusName"` // 状态名称(派生) Result int `json:"result"` // 兼容旧字段:1成功 0失败 Error string `json:"error"` // 错误信息 RetryCount int `json:"retryCount"` // 已重试次数 DurationMs int `json:"durationMs"` // 渠道接口耗时(毫秒) Source string `json:"source"` // 触发来源:auto/manual/test Remark string `json:"remark"` // 备注(如测试说明) CreatedAt string `json:"createdAt"` // 通知时间 } // NoticeLogFilter 通知历史记录筛选(分页 + 多维条件)。 type NoticeLogFilter struct { Page int // 页码 Size int // 每页条数 Keyword string // 关键字:标题/内容/目标/错误 模糊 NoticeType string // 类型编码(job/security/...) Group string // 分组编码(auto_job/server/...) EventType string // 事件编码 ChannelCode string // 渠道编码 UserId uint64 // 接收用户ID BatchId string // 批次号 Status int // 0全部 1成功 2失败(兼容旧的 result 字段) Result int // 兼容旧参数:1成功 2失败 DateFrom string // 起始时间(yyyy-MM-dd HH:mm:ss) DateTo string // 结束时间 OrderBy string // createdAt(默认) | durationMs OrderDir string // desc(默认) | asc } // 构造并归一化:Result 为兼容字段,优先级低于 Status。 func (f *NoticeLogFilter) Normalize() { if f.Page <= 0 { f.Page = 1 } if f.Size <= 0 { f.Size = 10 } if f.Size > 100 { f.Size = 100 } if f.Status == 0 && f.Result > 0 { f.Status = f.Result } if f.OrderDir != "asc" { f.OrderDir = "desc" } if f.OrderBy != "durationMs" { f.OrderBy = "createdAt" } } // RenderTemplate 简单模板渲染:将 {{key}} 替换为 vars 中对应值。 func RenderTemplate(tpl string, vars map[string]string) string { out := tpl for k, v := range vars { out = strings.ReplaceAll(out, "{{"+k+"}}", v) } return out }