package commands import ( "fmt" "time" ) // CreateAnnouncementCommand 创建公告命令 type CreateAnnouncementCommand struct { Title string `json:"title" binding:"required" comment:"公告标题"` Content string `json:"content" binding:"required" comment:"公告内容"` } // UpdateAnnouncementCommand 更新公告命令 type UpdateAnnouncementCommand struct { ID string `json:"-" uri:"id" binding:"required" comment:"公告ID"` Title string `json:"title" comment:"公告标题"` Content string `json:"content" comment:"公告内容"` } // DeleteAnnouncementCommand 删除公告命令 type DeleteAnnouncementCommand struct { ID string `json:"-" uri:"id" binding:"required" comment:"公告ID"` } // PublishAnnouncementCommand 发布公告命令 type PublishAnnouncementCommand struct { ID string `json:"-" uri:"id" binding:"required" comment:"公告ID"` } // WithdrawAnnouncementCommand 撤回公告命令 type WithdrawAnnouncementCommand struct { ID string `json:"-" uri:"id" binding:"required" comment:"公告ID"` } // ArchiveAnnouncementCommand 归档公告命令 type ArchiveAnnouncementCommand struct { ID string `json:"-" uri:"id" binding:"required" comment:"公告ID"` } // SchedulePublishAnnouncementCommand 定时发布公告命令 type SchedulePublishAnnouncementCommand struct { ID string `json:"-" uri:"id" binding:"required" comment:"公告ID"` ScheduledTime string `json:"scheduled_time" binding:"required" comment:"定时发布时间"` } // GetScheduledTime 获取解析后的定时发布时间 func (cmd *SchedulePublishAnnouncementCommand) GetScheduledTime() (time.Time, error) { // 定义中国东八区时区 cst := time.FixedZone("CST", 8*3600) // 支持多种时间格式 formats := []string{ "2006-01-02 15:04:05", // "2025-09-02 14:12:01" "2006-01-02T15:04:05", // "2025-09-02T14:12:01" "2006-01-02T15:04:05Z", // "2025-09-02T14:12:01Z" "2006-01-02 15:04", // "2025-09-02 14:12" time.RFC3339, // "2025-09-02T14:12:01+08:00" } for _, format := range formats { if t, err := time.ParseInLocation(format, cmd.ScheduledTime, cst); err == nil { // 确保返回的时间是东八区时区 return t.In(cst), nil } } return time.Time{}, fmt.Errorf("不支持的时间格式: %s,请使用 YYYY-MM-DD HH:mm:ss 格式", cmd.ScheduledTime) } // UpdateSchedulePublishAnnouncementCommand 更新定时发布公告命令 type UpdateSchedulePublishAnnouncementCommand struct { ID string `json:"-" uri:"id" binding:"required" comment:"公告ID"` ScheduledTime string `json:"scheduled_time" binding:"required" comment:"定时发布时间"` } // GetScheduledTime 获取解析后的定时发布时间 func (cmd *UpdateSchedulePublishAnnouncementCommand) GetScheduledTime() (time.Time, error) { // 定义中国东八区时区 cst := time.FixedZone("CST", 8*3600) // 支持多种时间格式 formats := []string{ "2006-01-02 15:04:05", // "2025-09-02 14:12:01" "2006-01-02T15:04:05", // "2025-09-02T14:12:01" "2006-01-02T15:04:05Z", // "2025-09-02T14:12:01Z" "2006-01-02 15:04", // "2025-09-02 14:12" time.RFC3339, // "2025-09-02T14:12:01+08:00" } for _, format := range formats { if t, err := time.ParseInLocation(format, cmd.ScheduledTime, cst); err == nil { // 确保返回的时间是东八区时区 return t.In(cst), nil } } return time.Time{}, fmt.Errorf("不支持的时间格式: %s,请使用 YYYY-MM-DD HH:mm:ss 格式", cmd.ScheduledTime) } // CancelSchedulePublishAnnouncementCommand 取消定时发布公告命令 type CancelSchedulePublishAnnouncementCommand struct { ID string `json:"-" uri:"id" binding:"required" comment:"公告ID"` }