105 lines
3.6 KiB
Go
105 lines
3.6 KiB
Go
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"`
|
||
}
|