package controllers import ( "encoding/json" "fmt" "io" "strconv" "strings" "server/pkg/jwtutil" "server/services" beego "github.com/beego/beego/v2/server/web" ) type PlatformSiteReminderController struct { beego.Controller } func (c *PlatformSiteReminderController) platformClaims() (*jwtutil.Claims, error) { auth := c.Ctx.Request.Header.Get("Authorization") if auth == "" { return nil, fmt.Errorf("未登录") } parts := strings.SplitN(auth, " ", 2) if len(parts) != 2 || parts[0] != "Bearer" { return nil, fmt.Errorf("认证信息格式错误") } claims, err := jwtutil.ParseToken(parts[1]) if err != nil { return nil, fmt.Errorf("无效的token") } if claims.UserType != "platform" { return nil, fmt.Errorf("无权访问") } return claims, nil } func (c *PlatformSiteReminderController) jsonErr(httpStatus, bizCode int, msg string) { c.Ctx.Output.SetStatus(httpStatus) c.Data["json"] = map[string]interface{}{"code": bizCode, "msg": msg} _ = c.ServeJSON() } // GetConfig GET /platform/sitereminder/config func (c *PlatformSiteReminderController) GetConfig() { if _, err := c.platformClaims(); err != nil { c.jsonErr(401, 401, err.Error()) return } cfg, err := services.GetSiteReminderConfig() if err != nil { c.jsonErr(500, 500, "获取配置失败: "+err.Error()) return } c.Data["json"] = map[string]interface{}{"code": 200, "msg": "success", "data": cfg} _ = c.ServeJSON() } // SaveConfig POST /platform/sitereminder/config func (c *PlatformSiteReminderController) SaveConfig() { if _, err := c.platformClaims(); err != nil { c.jsonErr(401, 401, err.Error()) return } raw, err := io.ReadAll(c.Ctx.Request.Body) if err != nil { c.jsonErr(400, 400, "参数错误") return } var p struct { RetentionDays int `json:"retention_days"` AutoRead int8 `json:"auto_read"` } if err := json.Unmarshal(raw, &p); err != nil { c.jsonErr(400, 400, "参数错误") return } if err := services.SaveSiteReminderConfig(p.RetentionDays, p.AutoRead); err != nil { c.jsonErr(500, 500, "保存配置失败: "+err.Error()) return } c.Data["json"] = map[string]interface{}{"code": 200, "msg": "保存成功"} _ = c.ServeJSON() } // Send POST /platform/sitereminder/send func (c *PlatformSiteReminderController) Send() { claims, err := c.platformClaims() if err != nil { c.jsonErr(401, 401, err.Error()) return } raw, err := io.ReadAll(c.Ctx.Request.Body) if err != nil { c.jsonErr(400, 400, "参数错误") return } var p struct { Title string `json:"title"` Content string `json:"content"` TargetType string `json:"target_type"` // platform, tenant_all, role, tenant TargetRoleID uint64 `json:"target_role_id"` TargetTenantID uint64 `json:"target_tenant_id"` } if err := json.Unmarshal(raw, &p); err != nil { c.jsonErr(400, 400, "参数错误") return } p.Title = strings.TrimSpace(p.Title) p.Content = strings.TrimSpace(p.Content) if p.Title == "" || p.Content == "" { c.jsonErr(400, 400, "标题与内容不能为空") return } if p.TargetType == "" { c.jsonErr(400, 400, "发送目标类型不能为空") return } err = services.SendSiteReminder(p.Title, p.Content, uint64(claims.UserID), "platform", p.TargetType, p.TargetRoleID, p.TargetTenantID) if err != nil { c.jsonErr(500, 500, "发送失败: "+err.Error()) return } c.Data["json"] = map[string]interface{}{"code": 200, "msg": "发送成功"} _ = c.ServeJSON() } // GetMyList GET /platform/sitereminder/myList func (c *PlatformSiteReminderController) GetMyList() { claims, err := c.platformClaims() if err != nil { c.jsonErr(401, 401, err.Error()) return } page, _ := c.GetInt("page", 1) pageSize, _ := c.GetInt("pageSize", 10) var isRead *int8 if isReadStr := c.GetString("isRead"); isReadStr != "" { if val, err := strconv.Atoi(isReadStr); err == nil { v := int8(val) isRead = &v } } list, total, err := services.ListReminders(uint64(claims.UserID), "platform", page, pageSize, isRead) if err != nil { c.jsonErr(500, 500, "获取消息列表失败: "+err.Error()) return } c.Data["json"] = map[string]interface{}{ "code": 200, "msg": "success", "data": map[string]interface{}{ "list": list, "total": total, }, } _ = c.ServeJSON() } // MarkRead POST /platform/sitereminder/read func (c *PlatformSiteReminderController) MarkRead() { claims, err := c.platformClaims() if err != nil { c.jsonErr(401, 401, err.Error()) return } raw, err := io.ReadAll(c.Ctx.Request.Body) if err != nil { c.jsonErr(400, 400, "参数错误") return } var p struct { ID uint64 `json:"id"` } if err := json.Unmarshal(raw, &p); err != nil { c.jsonErr(400, 400, "参数错误") return } err = services.MarkReminderRead(p.ID, uint64(claims.UserID), "platform") if err != nil { c.jsonErr(500, 500, "操作失败: "+err.Error()) return } c.Data["json"] = map[string]interface{}{"code": 200, "msg": "success"} _ = c.ServeJSON() } // MarkAllRead POST /platform/sitereminder/readall func (c *PlatformSiteReminderController) MarkAllRead() { claims, err := c.platformClaims() if err != nil { c.jsonErr(401, 401, err.Error()) return } err = services.MarkAllRemindersRead(uint64(claims.UserID), "platform") if err != nil { c.jsonErr(500, 500, "操作失败: "+err.Error()) return } c.Data["json"] = map[string]interface{}{"code": 200, "msg": "success"} _ = c.ServeJSON() } // Delete POST /platform/sitereminder/delete func (c *PlatformSiteReminderController) Delete() { claims, err := c.platformClaims() if err != nil { c.jsonErr(401, 401, err.Error()) return } raw, err := io.ReadAll(c.Ctx.Request.Body) if err != nil { c.jsonErr(400, 400, "参数错误") return } var p struct { ID uint64 `json:"id"` } if err := json.Unmarshal(raw, &p); err != nil { c.jsonErr(400, 400, "参数错误") return } err = services.DeleteReminder(p.ID, uint64(claims.UserID), "platform") if err != nil { c.jsonErr(500, 500, "删除失败: "+err.Error()) return } c.Data["json"] = map[string]interface{}{"code": 200, "msg": "success"} _ = c.ServeJSON() } // GetSentList GET /platform/sitereminder/sentList func (c *PlatformSiteReminderController) GetSentList() { claims, err := c.platformClaims() if err != nil { c.jsonErr(401, 401, err.Error()) return } page, _ := c.GetInt("page", 1) pageSize, _ := c.GetInt("pageSize", 10) list, total, err := services.ListSentReminders(uint64(claims.UserID), page, pageSize) if err != nil { c.jsonErr(500, 500, "获取发送列表失败: "+err.Error()) return } c.Data["json"] = map[string]interface{}{ "code": 200, "msg": "success", "data": map[string]interface{}{ "list": list, "total": total, }, } _ = c.ServeJSON() } // UpdateSent POST /platform/sitereminder/updateSent func (c *PlatformSiteReminderController) UpdateSent() { if _, err := c.platformClaims(); err != nil { c.jsonErr(401, 401, err.Error()) return } raw, err := io.ReadAll(c.Ctx.Request.Body) if err != nil { c.jsonErr(400, 400, "参数错误") return } var p struct { BatchID string `json:"batch_id"` Title string `json:"title"` Content string `json:"content"` TargetType string `json:"target_type"` TargetRoleID uint64 `json:"target_role_id"` TargetTenantID uint64 `json:"target_tenant_id"` } if err := json.Unmarshal(raw, &p); err != nil { c.jsonErr(400, 400, "参数错误") return } p.Title = strings.TrimSpace(p.Title) p.Content = strings.TrimSpace(p.Content) if p.BatchID == "" || p.Title == "" || p.Content == "" { c.jsonErr(400, 400, "批次号、标题与内容不能为空") return } if p.TargetType == "" { c.jsonErr(400, 400, "发送目标类型不能为空") return } err = services.UpdateSentReminder(p.BatchID, p.Title, p.Content, p.TargetType, p.TargetRoleID, p.TargetTenantID) if err != nil { c.jsonErr(500, 500, "修改失败: "+err.Error()) return } c.Data["json"] = map[string]interface{}{"code": 200, "msg": "修改成功"} _ = c.ServeJSON() } // DeleteSentBatch POST /platform/sitereminder/deleteSent func (c *PlatformSiteReminderController) DeleteSentBatch() { if _, err := c.platformClaims(); err != nil { c.jsonErr(401, 401, err.Error()) return } raw, err := io.ReadAll(c.Ctx.Request.Body) if err != nil { c.jsonErr(400, 400, "参数错误") return } var p struct { BatchID string `json:"batch_id"` } if err := json.Unmarshal(raw, &p); err != nil { c.jsonErr(400, 400, "参数错误") return } if p.BatchID == "" { c.jsonErr(400, 400, "批次号不能为空") return } err = services.DeleteSentReminderBatch(p.BatchID) if err != nil { c.jsonErr(500, 500, "删除失败: "+err.Error()) return } c.Data["json"] = map[string]interface{}{"code": 200, "msg": "删除成功"} _ = c.ServeJSON() }